C.W.K.
Stream
Lesson 05 of 07 · published

Knowledge distillation

~8 min · advanced

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

큰 model 이 아는 걸 작은 model 에 가르치기

knowledge distillation 은 작은 student 가 큰 teacher 를 모방하게 학습해 — 최종 답만이 아니라 클래스 전체에 대한 확률 분포까지. hard label 은 '이건 7' 이라고만 해. teacher 의 softmax 는 '95% 7, 4% 1, 1% 나머지' 라고 하는데, 그 *4% 가 1 쪽* 인 게 정보야 — 어떤 클래스끼리 닮았는지 알려주거든. Hinton 이 dark knowledge 라 부른 이 추가 신호가, distilled student 가 같은 크기를 hard label 만으로 from-scratch 학습한 모델을 자주 이기는 이유야.

loss 가 구성되는 방식

keras.Model 을 subclass 하고 train_step 을 override 해. 매 step 같은 input 으로 (얼린) teacher 랑 student 를 돌리고, loss 두 개를 합쳐 — true label 에 대한 hard loss, 그리고 두 확률 분포 사이의 soft loss (KL divergence). alpha weight 가 둘의 균형을 잡아.

temperature 다이얼

temperature 가 그 분포를 얼마나 부드럽게 할지 정해. softmax 전에 logit 을 temperature > 1 로 나누면 peak 가 평평해지고, student 가 배워야 할 작은 클래스 간 확률이 드러나. temperature=1 이면 teacher 의 거의 one-hot 출력이 student 에 추가로 알려줄 게 거의 없어. hyperparameter 야 — 보통 3-5 부터 시작해.

Code

Distiller — custom train_step 가진 keras.Model·python
class Distiller(keras.Model):
    def __init__(self, student, teacher, temperature=3.0, alpha=0.1):
        super().__init__()
        self.student = student
        self.teacher = teacher
        self.temperature = temperature
        self.alpha = alpha

    def train_step(self, data):
        x, y = data
        # Teacher predictions (soft labels)
        teacher_pred = self.teacher(x, training=False)

        # Student predictions
        student_pred = self.student(x, training=True)

        # Distillation loss (soft) + student loss (hard)
        loss = (
            self.alpha * hard_loss(y, student_pred) +
            (1 - self.alpha) * soft_loss(teacher_pred, student_pred)
        )
        ...

External links

Exercise

CIFAR-10 의 'teacher' ResNet50 학습. 'student' MobileNet 을 두 방식으로 학습 — (a) hard label 만, (b) hard + teacher soft label (KL div). student accuracy 비교.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.