Как дистиллировать одну модель в другую?
Что проверяют
Знаете ли вы механику дистилляции: мягкие метки, температуру, составную функцию потерь, а не только формулу «маленькая модель учится у большой». Следом спрашивают, почему мягкие метки несут больше информации, чем жёсткие, и как дистиллируют языковые модели.
Как отвечать
Опишите классическую схему Хинтона:
- учитель: уже обучен и заморожен (режим
eval(), без градиентов). Его логиты считают на лету на тех же входах, что видит студент; - температура: softmax от логитов, делённых на
T > 1(обычно от 2 до 5), сглаживает распределение. Становится видно «тёмное знание»: кошка для учителя больше похожа на собаку, чем на грузовик; - функция потерь:
alpha * T**2 * KL(p_teacher || p_student) + (1 - alpha) * CE(y, p_student), где обе вероятности в KL посчитаны при одной температуре. МножительT**2возвращает градиентам мягкой части нормальный масштаб. В PyTorchnn.KLDivLoss(reduction="batchmean")ждёт на входеlog_softmaxстудента и вероятности учителя; - студент: меньше по глубине или ширине, часто инициализируется частью слоёв учителя. Так устроен DistilBERT: вдвое меньше слоёв, чем у BERT, а к функции потерь добавлено косинусное сближение скрытых состояний;
- варианты: дистилляция признаков (сопоставление промежуточных представлений через проекцию), а для LLM дистилляция по логитам на уровне токенов или обучение на ответах, сгенерированных учителем, когда логиты недоступны.
Оценивать студента нужно в сравнении с двумя базами: с учителем и с той же маленькой архитектурой, обученной без учителя на тех же данных. Иначе непонятно, дала ли дистилляция хоть что-то. Плюс латентность и память на целевом железе.
Где спотыкаются
Путают дистилляцию с квантованием и прунингом. Те сжимают ту же самую модель, а дистилляция обучает другую.
Не используют температуру или применяют её только у учителя. Тогда мягкие метки почти совпадают с one-hot, и выигрыш пропадает.
Подают выходы учителя студенту как входные признаки, а не как цель, так устроен код во многих разошедшихся по сети примерах. Студент при этом учится на чужих признаках и на реальных входах не работает.