지식 증류(knowledge distillation)는 큰 모델(teacher)의 지식을 작은 모델(student)로 전달하여, 작은 모델도 높은 성능을 내도록 만드는 모델 압축 기법입니다. 성능과 효율성 사이의 균형을 맞출 때 자주 사용됩니다.
Teacher Model (교사 모델)
Student Model (학생 모델)
지식 전이 방식
Soft output은 신경망이 마지막에 출력하는 확률 분포를 말합니다.
쉽게 말해, 모델이 어떤 클래스일 가능성이 얼마나 되는지를 나타내는 "부드러운" 예측 결과입니다.
사람의 이미지를 보고 모델이 "고양이냐 강아지냐"를 예측한다고 해봅시다.
모델의 마지막 출력 (softmax 전):
[2.5, 0.3] ← raw logits (고양이, 강아지)
softmax를 적용하면 확률 분포가 나옵니다:
[0.92, 0.08] ← soft output
모델의 hard output은 가장 높은 확률을 가진 클래스 (여기선 "고양이")입니다.
구분 | 설명 | 예시 |
---|---|---|
Soft Output | 각 클래스에 대한 확률 | [0.92, 0.08] |
Hard Output | 가장 높은 확률을 갖는 클래스만 선택 | "고양이" |
Teacher 모델의 soft output은 다음과 같은 추가 정보를 담고 있습니다:
이렇게 soft output을 참고해서 학습하면, student 모델도 teacher처럼 뉘앙스 있는 예측을 할 수 있게 됩니다.
학습 시 두 종류의 loss를 동시에 사용합니다:
정답 라벨에 대한 loss (cross-entropy):
teacher output에 대한 loss (distillation loss):
이때, softmax 출력에 "temperature T"를 적용하여 분포를 더 부드럽게 만듭니다. 이로 인해 student는 단순히 정답만 맞추는 게 아니라, 각 클래스 간의 미묘한 차이도 학습할 수 있습니다.
KL-divergence(Kullback–Leibler divergence, 쿨백-라이블러 발산)는 두 확률 분포 간의 차이를 측정하는 지표입니다.
지식 증류(knowledge distillation)에서도 teacher와 student 모델의 출력 확률 분포를 맞추는 데 사용됩니다.
"두 확률 분포가 얼마나 다른지를 측정하는 수치"
즉, teacher가 예측한 분포 ( P )와 student가 예측한 분포 ( Q )가 있을 때,
student의 분포 ( Q )가 teacher의 분포 ( P )를 얼마나 잘 흉내내고 있는지**를 KL-divergence로 계산합니다.
Teacher의 soft output (P):
Student의 soft output (Q):
이 두 분포 간의 차이를 KL-divergence로 계산해서 loss로 사용하면, student가 teacher처럼 "부드러운 확률 분포"를 예측하도록 유도할 수 있습니다.
Soft label distillation:
teacher의 출력 확률 분포를 학습 (가장 일반적인 방식)
Feature-based distillation:
중간 layer의 feature map을 맞춤
Attention-based distillation:
teacher의 attention map(어디를 집중해서 보는지)을 모방
Relational knowledge:
여러 샘플 간의 상호 관계(거리 등)를 student가 따라 하도록 학습
예를 들어 Human Pose Estimation Task에서 대형 HRNet이 사람의 자세를 매우 정확히 예측할 수 있다면, 그 예측을 참고해 작은 SimpleBaseline 모델도 비슷한 결과를 내도록 학습시키는 방식입니다. 이렇게 하면 작은 모델도 정확도는 최대한 유지하면서도 연산량은 훨씬 줄어듭니다.