COMRAD404 / GLOSSARY

Дистилляция модели (Model Distillation)

Model Distillation

Дистилляция модели — это обучение компактной student-модели по выходам teacher-модели. Разбираем teacher-student схему, logits distillation, примеры Keras и Hugging Face, отличия и ограничения.

TL;DR

Метод сжатия модели, при котором компактная student-модель обучается по выходам teacher-модели, часто с использованием soft logits, истинных меток и дополнительных loss-компонентов.

Дистилляция модели (model distillation, также knowledge distillation) — это метод сжатия, в котором меньшая student-модель обучается по выходам teacher-модели. На практике student часто учится по «мягким» logits или распределениям teacher, а в ряде схем — ещё и по истинным меткам и дополнительным loss-компонентам.

Английский термин: model distillation, knowledge distillation. Также встречается: teacher-student distillation, дистилляция знаний. В этой статье «дистилляция модели» — это обобщающее название семейства методов, а не один-единственный loss.

Простыми словами

Грубо говоря, у вас уже есть сильный «наставник» — teacher-модель. Вместо того чтобы учить новую компактную модель только по правильным ответам, вы показываете ей ещё и то, как думает teacher: какие варианты считает более вероятными, какие классы путает между собой, где уверен сильнее, а где слабее.

Это похоже не на проверку по готовому ключу, а на разбор решения с преподавателем. Student получает не только «правильно/неправильно», но и более богатый сигнал обучения.

Как это работает

Широко цитируемый исходный источник метода — работа Hinton, Vinyals и Dean 2015 года Distilling the Knowledge in a Neural Network. В современной практике базовая схема хорошо формализована в документации Keras: teacher фиксируется, а student обучается на предсказаниях teacher и на ground-truth метках.

Схема teacher-student distillation

1) Берём уже обученную teacher-модель
2) Замораживаем teacher
3) Подаём одни и те же данные в teacher и student
4) Считаем loss для student:
   - по выходам teacher (часто soft logits / распределение)
   - иногда по истинным меткам
   - иногда по дополнительным feature losses
5) Обновляем только student
6) После обучения используем student для inference

В Keras для этого есть отдельный API Distiller(teacher, student, distillation_losses, distillation_loss_weights=None, student_loss_weight=0.5, ...). Для частного случая дистилляции по logits Keras также предоставляет LogitsDistillation(temperature=3.0, loss="kl_divergence"). Температура нужна для температурного масштабирования: она делает распределение teacher более «мягким», чтобы student видел не только самый вероятный ответ, но и структуру вероятностей.

Важно не путать общий метод и конкретную реализацию. «Дистилляция модели» — это семейство подходов; logits distillation — только один из них. В source pack прямо отмечено, что на практике встречаются схемы с logits, feature losses, self-distillation, multi-teacher и on-policy вариантами, поэтому точная механика зависит от задачи и фреймворка.

Где применяется

  • Классификация изображений. В официальном гайде Hugging Face Transformers показан сценарий ViT teacher -> MobileNet student через Trainer API, с temperature=5, lambda=0.5 и проверкой результата через trainer.evaluate(processed_datasets["test"]).
  • Готовые компактные чекпойнты для NLP. В исследовательском репозитории Hugging Face перечислены семейства DistilBERT, DistilRoBERTa, DistilGPT2 и DistilmBERT.
  • Текстовые энкодеры и практический inference. Документация DistilBERT описывает конкретный результат для distilled-версии BERT: модель уменьшает размер BERT на 40%, работает примерно на 60% быстрее и сохраняет около 97% возможностей, используя тройную loss-схему. Это полезный ориентир, но только для данного checkpoint, а не универсальная гарантия для любой дистилляции.
  • LLM и TRL workflows. Документация TRL описывает DistillationTrainer как средство для on-policy distillation. Одновременно там же отмечены ограничения по PEFT и некоторым multimodal/VLM сценариям, поэтому совместимость нужно проверять по официальной странице.

Практический пример

Если вам нужен не академический разбор, а рабочая схема, удобнее всего смотреть на два официальных сценария: Keras для классической teacher-student дистилляции и Hugging Face для готового пайплайна image classification.

Сценарий из официального гайда Hugging Face

  1. Берёте уже обученную teacher-модель ViT.
  2. Выбираете student-модель MobileNet.
  3. Обучаете student через Trainer API, используя teacher как источник мягких целей.
  4. В примере заданы temperature=5 и lambda=0.5.
  5. После обучения проверяете student на тестовом наборе вызовом trainer.evaluate(processed_datasets["test"]).

Этот сценарий полезен тем, что показывает не только идею, но и минимальную проверку результата: student надо оценивать отдельно, а не считать улучшение очевидным по определению.

Иллюстративный фрагмент API Keras

Ниже — не полный runnable-скрипт, а компактная схема по именам API из официальной документации Keras:

distiller = Distiller(
    teacher=teacher,
    student=student,
    distillation_losses=[
        LogitsDistillation(
            temperature=3.0,
            loss="kl_divergence"
        )
    ],
    student_loss_weight=0.5,
)

Практический смысл такого фрагмента простой: teacher передаёт signal для обучения, student оптимизируется, а выбор конкретных loss-компонентов зависит от вашей задачи.

Чем отличается от…

Термин Что это Чем отличается от дистилляции модели
Обычное обучение student по истинным меткам Student оптимизируется только по ground-truth В дистилляции student учится ещё и по выходам teacher. В документации Keras это прямо описано как обучение по предсказаниям teacher и истинным меткам.
Дистилляция по logits Частный вариант distillation по soft logits / распределению Это не синоним общего термина, а один конкретный механизм loss. В Keras для него есть отдельный объект LogitsDistillation.
On-policy distillation Специализированный вариант, описанный в TRL Это частный режим для TRL/LLM workflows, а не всё семейство методов. Документация отдельно предупреждает об ограничениях по PEFT и некоторым multimodal/VLM случаям.
DistilBERT Конкретный distilled checkpoint Дистилляция модели — это метод обучения, а DistilBERT — один из результатов применения этой идеи к семейству BERT.

Ограничения и заблуждения

  • Заблуждение: «дистилляция = только logits». Нет. В source pack прямо указано, что student может учиться по мягким logits/распределениям, вместе с истинными метками и/или через feature losses.
  • Заблуждение: teacher тоже дообучается. В описании Keras teacher фиксируется, а обучается student.
  • Заблуждение: distilled-модель всегда почти равна teacher по качеству. В проверенных источниках нет универсального обещания. Есть только отдельные задокументированные примеры, например DistilBERT с его собственными заявленными метриками.
  • Ограничение метода: дистилляция — широкое семейство техник. То, что работает в image classification, не обязано в том же виде переноситься на LLM, multimodal или PEFT-сценарии.
  • Ограничение инструментов: документация TRL прямо указывает на ограничения по некоторым PEFT и multimodal/VLM комбинациям. На странице релизов также видно, что DistillationTrainer появился в версии v1.1.0, а latest release на момент проверки — v1.6.0, то есть компонент активно развивается.
  • Ограничение источников: в предоставленном пакете нет единых сравнительных бенчмарков, цен или облачных условий для всех вариантов дистилляции. Если вам нужны именно такие данные, их придётся проверять отдельно на официальных страницах конкретного инструмента или модели.

Практический вердикт редакции: дистилляция модели — полезный способ перенести поведение сильной teacher-модели в более компактный student, но это не кнопка «уменьшить без потерь». Для первого внедрения безопаснее брать официальный сценарий Keras или версионированный гайд Hugging Face и отдельно валидировать качество student на своей задаче.

Связанные термины и материалы

Чтобы оценивать разницу между teacher и student, полезно отдельно понимать, что такое параметры модели. Если вы выбираете между готовыми checkpoint и закрытыми API, пригодится разбор open-source vs closed модели. Для задач, где важна сложная цепочка рассуждений, полезен контекст о том, что называют reasoning-моделями. А после сжатия и переноса поведения модель стоит перепроверить на рискованных сценариях: см. red teaming ИИ и практический гид как провести red teaming для вашей модели.

Источники

Вопросы и ответы

Дистилляция модели и knowledge distillation — это одно и то же?

Обычно да: в источниках оба названия используются для teacher-student подхода, где student учится по выходам teacher. Но внутри этого зонтичного термина бывают разные схемы: по logits, по features, on-policy и другие.

Обязательно ли использовать только soft logits?

Нет. В source pack указано, что student может обучаться по мягким logits или распределениям, а также вместе с истинными метками и/или feature losses. Поэтому «дистилляция = только logits» — слишком узкое понимание.

Teacher обучается во время дистилляции?

В официальном описании Keras teacher фиксируется, а обновляется student. Для конкретных нестандартных схем всегда проверяйте документацию используемого фреймворка.

DistilBERT — это метод или уже готовая модель?

Это готовый distilled checkpoint, а не название метода в целом. Документация DistilBERT полезна как пример того, какой результат может дать дистилляция на практике.

Есть ли официальный инструмент для дистилляции в LLM-пайплайнах?

Да, в документации TRL описан DistillationTrainer для on-policy distillation. Но сам источник предупреждает, что компонент быстро развивается и что совместимость с PEFT и некоторыми multimodal/VLM сценариями надо проверять отдельно.

Источники

SOURCES

Вопросы и ответы

FAQ
Дистилляция модели и knowledge distillation — это одно и то же?

Обычно да: в источниках оба названия используются для teacher-student подхода, где student учится по выходам teacher. Но внутри этого зонтичного термина бывают разные схемы: по logits, по features, on-policy и другие.

Обязательно ли использовать только soft logits?

Нет. В source pack указано, что student может обучаться по мягким logits или распределениям, а также вместе с истинными метками и/или feature losses. Поэтому «дистилляция = только logits» — слишком узкое понимание.

Teacher обучается во время дистилляции?

В официальном описании Keras teacher фиксируется, а обновляется student. Для конкретных нестандартных схем всегда проверяйте документацию используемого фреймворка.

DistilBERT — это метод или уже готовая модель?

Это готовый distilled checkpoint, а не название метода в целом. Документация DistilBERT полезна как пример того, какой результат может дать дистилляция на практике.

Есть ли официальный инструмент для дистилляции в LLM-пайплайнах?

Да, в документации TRL описан DistillationTrainer для on-policy distillation. Но сам источник предупреждает, что компонент быстро развивается и что совместимость с PEFT и некоторыми multimodal/VLM сценариями надо проверять отдельно.

Читайте также

LINKS