Дистилляция моделей — это способ перенести поведение большой, медленной или дорогой модели в более компактную модель-«студента», обучая её не только на правильных ответах, но и на выходах сильной модели-«учителя». На практике метод нужен, когда важны задержка, память, энергопотребление или стоимость вывода. Он подходит не всегда: если учитель сам ошибается, если студент слишком мал для задачи, если данные в продакшене заметно отличаются от данных обучения или если требуется сохранить точную калибровку вероятностей, дистилляция может дать слабый результат.
Простыми словами
Представьте опытного специалиста и новичка. Новичок учится не только по инструкции, но и по тому, как именно специалист рассуждает в похожих случаях. В машинном обучении это выглядит так: большая модель уже умеет решать задачу хорошо, а маленькую модель обучают повторять её ответы.
Ключевая идея в том, что обычная разметка даёт «жёсткий» ответ: например, для изображения правильный класс только один. Учитель же выдаёт распределение вероятностей: не просто «это кошка», а «кошка — 0.82, лиса — 0.11, собака — 0.05». Эти дополнительные сигналы показывают, какие классы похожи и где границы неопределённости. Для студента это часто полезнее, чем одна бинарная метка.
Поэтому дистилляция — не просто сжатие весов. Это перенос структуры знаний из одной модели в другую. Студент может иметь другую архитектуру, меньше параметров и работать на другом оборудовании, но при этом сохранять значимую часть качества учителя.
Как это работает
Базовая схема
- Обучают или берут готовую сильную модель-учителя.
- Пропускают через неё обучающие данные и получают выходы: логиты, вероятности или промежуточные представления.
- Обучают модель-студента по смешанной функции потерь: на истинных метках и на сигналах учителя.
- Проверяют компромисс между качеством, скоростью и размером модели.
Что именно передают от учителя
- Мягкие вероятности — самый классический вариант. Студент повторяет распределение классов учителя.
- Логиты — значения до softmax. Иногда с ними удобнее работать, чем с вероятностями.
- Промежуточные признаки — скрытые представления, карты внимания, эмбеддинги.
- Поведение на неразмеченных данных — полезно, если размеченных данных мало, а сырых много.
Температура и смешанная потеря
В классической дистилляции используют параметр temperature. Он делает распределение учителя более «мягким»: различия между классами становятся менее резкими. Это помогает студенту увидеть, какие варианты учитель считает близкими, а не только победивший класс.
Обычно функция потерь состоит из двух частей:
- потеря по истинным меткам;
- потеря по выходам учителя.
Вес этих частей подбирают экспериментально. Если слишком доверять учителю, студент унаследует его систематические ошибки. Если почти игнорировать учителя, эффект дистилляции будет слабым.
Типовые варианты
| Вариант | Что передаётся | Когда полезен |
|---|---|---|
| Response-based | Вероятности или логиты | Классификация, базовый сценарий |
| Feature-based | Промежуточные признаки | Когда важна структура представлений |
| Relation-based | Отношения между объектами или токенами | Сложные архитектуры, метрическое обучение |
| Self-distillation | Сигнал от более сильной версии той же модели | Когда отдельного учителя нет |
Для языковых моделей дистилляция может включать повторение распределений по токенам, attention-паттернов, скрытых состояний и поведения на специально собранных промптах. Но в LLM это дороже и сложнее, чем в обычной классификации: объём выходов велик, а деградация качества на редких навыках заметнее.
Зачем нужно
Главная цель — получить более дешёвую и быструю модель без полного переобучения большой архитектуры под продакшен-ограничения.
- Снижение задержки. Маленькая модель отвечает быстрее.
- Меньше памяти. Это важно для мобильных устройств, edge-среды и плотного размещения сервисов.
- Снижение стоимости вывода. Меньше вычислений — ниже эксплуатационные затраты.
- Упрощение деплоя. Компактную модель легче масштабировать и обновлять.
- Передача знаний с неразмеченных данных. Учитель может разметить большой массив данных своими предсказаниями.
На практике дистилляцию часто комбинируют с другими методами: pruning, quantization, архитектурной оптимизацией, кешированием или изменением длины контекста. Сама по себе дистилляция не гарантирует лучшую скорость: если студент выбран неудачно, он может оказаться компактнее по параметрам, но плохо оптимизироваться на конкретном железе.
Пример
Допустим, у команды есть BERT-подобная модель для классификации обращений в поддержку по 40 категориям. Учитель даёт высокое качество, но слишком дорог в онлайне: на пике сервис не укладывается в целевую задержку. Задача — упростить модель, не потеряв критично качество на редких классах.
- Команда берёт сильную модель-учителя и фиксирует её версию.
- На обучающем и дополнительном неразмеченном корпусе прогоняет учителя и сохраняет логиты по 40 классам.
- Выбирает студента: более компактный трансформер или даже CNN/MLP над эмбеддингами, если требования к качеству умеренные.
- Обучает студента по смеси двух потерь: кросс-энтропия по истинным меткам и KL-дивергенция по логитам учителя с температурой.
- Отдельно проверяет качество на редких категориях, калибровку вероятностей и скорость на целевом сервере.
Что здесь важно practically:
- Если учитель путает две похожие категории, студент почти наверняка унаследует эту ошибку.
- Если не включить неразмеченные данные, студент увидит слишком мало вариантов формулировок и эффект будет слабее.
- Если измерять только среднюю accuracy, можно пропустить деградацию на редких, но бизнес-критичных классах.
- Если сравнивать модели не на целевом железе, выигрыш по скорости может оказаться иллюзией.
В хорошем сценарии команда получает модель с заметно меньшей задержкой и умеренной потерей качества. В плохом — студент становится быстрее, но теряет устойчивость на длинных текстах, редких категориях и нестандартных формулировках. Поэтому дистилляцию всегда оценивают не только по среднему метрику, но и по продакшен-срезам.
Заблуждения и ограничения
Частые заблуждения
- «Дистилляция всегда улучшает маленькую модель». Нет. Если студент слишком слабый или данные плохие, выигрыша может не быть.
- «Это просто сжатие модели». Не совсем. Сжатие может быть чисто техническим, а дистилляция — это обучение по сигналам учителя.
- «Если учитель очень большой, студент обязательно будет хорошим». Размер учителя не компенсирует ошибки данных, плохую постановку задачи и неподходящую архитектуру студента.
- «Можно дистиллировать один раз и забыть». При смене домена, данных или продуктовых требований студента часто приходится переучивать.
Ограничения метода
- Передача ошибок учителя. Студент копирует не только силу, но и смещения учителя.
- Потеря редких навыков. Особенно заметно в больших языковых моделях и мультимодальных системах.
- Требовательность к подбору гиперпараметров. Температура, веса потерь, выбор слоёв для согласования — всё это влияет на итог.
- Неочевидный выигрыш на железе. Меньше параметров не всегда означает меньше реальную задержку.
- Проблемы с калибровкой. Студент может стать увереннее или менее уверен в ответах, чем нужно.
Когда метод не подходит
Дистилляция плохо подходит, если у вас нет сильного учителя, если домен быстро меняется, если задача требует максимального качества без компромиссов или если студент должен уметь то, чего учитель сам не умеет. Для safety-критичных сценариев одной дистилляции недостаточно: после неё нужны отдельные проверки на устойчивость, калибровку и граничные случаи.
Частые вопросы
Всегда ли студент меньше учителя?
Обычно да, но не обязательно. Главное — чтобы студент был дешевле или удобнее в эксплуатации. Иногда архитектура меняется не только ради размера, но и ради совместимости с конкретной платформой.
Можно ли дистиллировать без разметки?
Частично да. Учитель может генерировать мягкие метки для неразмеченных данных. Но без набора с реальной разметкой трудно проверить, не накапливает ли студент ошибки учителя.
Чем дистилляция отличается от pruning и quantization?
Pruning удаляет параметры или связи, quantization снижает точность представления весов, а дистилляция обучает отдельную модель по сигналам учителя. Их часто комбинируют.
Подходит ли дистилляция для LLM?
Да, но с оговорками. Метод работает, однако становится дороже в обучении и чаще теряет редкие способности, длинный контекст и качество инструкционного поведения. Нужна тщательная оценка на реальных сценариях использования.
Что важнее всего при внедрении?
Не средний offline-метрик, а проверка на целевом железе, на продакшен-данных и на критичных срезах: редкие классы, длинные запросы, калибровка, задержка и стабильность после обновлений.
Связанные понятия
- Teacher model / student model — роли в процессе передачи знаний.
- Logits — выходы модели до нормализации softmax.
- Temperature scaling — параметр смягчения распределения.
- KL-divergence — частая мера различия между распределениями учителя и студента.
- Model compression — более широкая область, куда входят pruning, quantization и distillation.
- Self-distillation — вариант, где модель учится у собственной более сильной версии или у своих промежуточных слоёв.
- Pseudo-labeling — использование предсказаний модели как разметки; похоже по механике, но не тождественно дистилляции.