Дистилляция моделей

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''Gemini 3.1 Pro''' и проверена участником М. Мишин...)
 
(4 промежуточные версии не показаны)
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Gemini 3.1 Pro''' и проверена участником [[Участник:Mihail Mishin|М. Мишин]] 16:53, 16 июня 2026 (MSD)
+
{{well|Статья написана с использованием LLM '''DeepSeek-V3''' и проверена участником [[Участник:Mihail Mishin|М. Мишин]] 14:17, 17 июня 2026 (MSD)
Промпт приводится полностью в [[Обсуждение:Дистилляция моделей]]
Промпт приводится полностью в [[Обсуждение:Дистилляция моделей]]
}}
}}
{{TOCright}}
{{TOCright}}
-
'''Дистилля́ция моде́лей''' (дистилляция знаний, англ. knowledge distillation) — метод сжатия [[Машинное обучение|моделей машинного обучения]], при котором компактная модель (''студент'') обучается воспроизводить поведение более сложной и тяжелой модели или ансамбля моделей (''учителя''). Основная цель дистилляции — перенести обобщающую способность и внутренние репрезентации большой модели в меньшую по размеру, чтобы существенно ускорить [[Инференс|инференс]] и снизить потребление памяти без значительной потери качества предсказаний.
 
-
В современной практике глубокого обучения, особенно в сфере [[Обработка естественного языка|NLP]] и [[Большая языковая модель|больших языковых моделей (LLM)]], дистилляция является ключевым инструментом для создания эффективных локальных моделей (размером 1–8 млрд параметров), способных решать сложные аналитические и логические задачи на уровне флагманских архитектур.
+
== Определение и основная идея ==
 +
'''Дистилляция моделей''' (англ. ''knowledge distillation'') — метод обучения компактной модели ([[Student model|ученика]]), при котором целевыми значениями выступают не только истинные метки, но и выходы более мощной, предварительно обученной модели ([[Teacher model|учителя]]). В основе подхода лежит аналогия с педагогической передачей опыта: учитель, обладающий обширными знаниями о предметной области, снабжает ученика не просто верными ответами, а подробными объяснениями относительного правдоподобия всех альтернатив. В машинном обучении таким объяснениям соответствуют [[Soft labels|мягкие метки]] — векторы вероятностей классов, полученные применением сигмоиды или [[Softmax|softmax]] к выходам модели-учителя.
-
== Мотивация и основные идеи ==
+
Ключевым понятием дистилляции является '''[[Dark knowledge|тёмное знание]]''' — информация о сходстве классов, закодированная в вероятностях, которые учитель назначает ошибочным классам. Например, если для изображения рукописной цифры «3» учитель отводит заметную вероятность классу «8», а для «8» — классу «3», это отражает геометрическую близость форм. Жёсткая метка (one-hot вектор) полностью уничтожает эти сведения, тогда как мягкие метки сохраняют структуру многообразия данных, позволяя ученику быстрее обобщать и избегать переобучения.
-
Традиционно для достижения высокой точности на сложных задачах применяются огромные глубокие нейронные сети или композиции (ансамбли) множества моделей. Однако их развертывание в продуктивной среде (например, на мобильных устройствах, edge-устройствах или высоконагруженных серверах) часто невозможно. Главными барьерами выступают строгие ограничения на пропускную способность памяти (memory bandwidth), объем доступной видеопамяти (VRAM) и максимально допустимую задержку ответа (latency).
+
-
Центральная идея дистилляции заключается в следующем: ''вместо того чтобы обучать маленькую модель исключительно на жестких метках классов (hard labels) из оригинального набора данных, мы заставляем её предсказывать непрерывные распределения вероятностей (soft labels), выдаваемые предварительно обученной моделью-учителем''.
+
Чтобы сделать тёмное знание более доступным, распределение вероятностей «сглаживают» с помощью параметра '''[[Softmax temperature|температуры]]''' <tex>T</tex> в функции softmax:
 +
<tex>p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)},</tex>
 +
где <tex>z_i</tex> — [[Logit|логит]] для <tex>i</tex>-го класса. При <tex>T = 1</tex> получается стандартное распределение; при <tex>T \rightarrow \infty</tex> распределение стремится к равномерному; при <tex>T > 1</tex> вероятности нецелевых классов возрастают, и модель-ученик получает более «мягкую» цель. На этапе предсказания ученик всегда использует <tex>T = 1</tex>.
-
Эти «мягкие» метки содержат огромное количество скрытой информации (dark knowledge). Например, в задаче классификации изображений учитель может предсказать, что объект на картинке с вероятностью 80% — собака, с вероятностью 19% — кошка, и с вероятностью 1% — автомобиль. Относительные вероятности ошибочных классов (то, что «кошка» в 19 раз вероятнее «автомобиля») описывают внутреннюю структуру данных и скрытые сходства объектов. Модель-студент, обучаясь на таких распределениях, получает богатый градиентный сигнал и сходится быстрее, достигая метрик, недостижимых при обычном обучении «с нуля».
+
Формально дистилляция определяется как процесс обучения ученика путём совместной минимизации двух потерь: одной, основанной на истинных метках, и второй, измеряющей расхождение между выходами учителя и ученика при повышенной температуре.
-
== Историческая справка ==
+
== Математическая формализация ==
-
Идейные предпосылки метода были заложены в работе Кристиана Бусилы и соавторов (Bucila et al., 2006)<ref>{{статья |автор=Bucila C., Caruana R., Niculescu-Mizil A. |заглавие=Model compression |издание=Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining |год=2006 |страницы=535–541 |doi=10.1145/1150402.1150464}}</ref>. В своем исследовании по сжатию моделей они успешно обучили одну быструю нейронную сеть имитировать предсказания громоздкого ансамбля деревьев решений, сохранив при этом высокое качество классификации.
+
Пусть <tex>\mathbf{z}_t</tex> и <tex>\mathbf{z}_s</tex> — векторы логитов учителя и ученика соответственно; <tex>\mathbf{y}</tex> — истинная жёсткая метка (one-hot); <tex>\sigma(\mathbf{z})</tex> — стандартный softmax (<tex>T = 1</tex>); <tex>\sigma_T(\mathbf{z})</tex> — softmax с температурой <tex>T</tex>. Функция потерь ученика записывается как взвешенная сумма двух слагаемых:
-
Сам термин «дистилляция знаний» (knowledge distillation) и его современная строгая математическая формулировка с использованием механизма температурного скейлирования (temperature scaling) были введены в прорывной статье [[Хинтон, Джеффри|Джеффри Хинтона]], Ориола Виньялса и Джеффа Дина (Hinton et al., 2015)<ref name="hinton2015">{{статья |автор=Hinton G., Vinyals O., Dean J. |заглавие=Distilling the knowledge in a neural network |издание=arXiv preprint arXiv:1503.02531 |год=2015 |ссылка=https://arxiv.org/abs/1503.02531}}</ref>. Хинтон метафорично описал этот процесс как «дистилляцию» чистых знаний из сложной, перепараметризованной функции в компактную форму.
+
<tex>\mathcal{L} = (1 - \lambda) \, \mathcal{L}_{\text{CE}}(\mathbf{y}, \sigma(\mathbf{z}_s)) \;+\; \lambda \, T^2 \, \mathcal{L}_{\text{KD}}(\sigma_T(\mathbf{z}_t), \sigma_T(\mathbf{z}_s)),</tex>
-
== Математическая формулировка базовой дистилляции ==
+
где <tex>\lambda \in [0,1]</tex> — коэффициент дистилляции, а <tex>\mathcal{L}_{\text{KD}}</tex> обычно выбирается как [[Дивергенция Кульбака-Лейблера|дивергенция Кульбака–Лейблера]]:
-
В классической задаче классификации нейронная сеть на последнем слое предсказывает логиты (logits) <tex>z_i</tex>, которые затем преобразуются в итоговые вероятности <tex>q_i</tex> с помощью стандартной функции [[Softmax|софтмакс]]:
+
<tex>\mathcal{L}_{\text{KD}} = D_{\text{KL}}\!\left( \sigma_T(\mathbf{z}_t) \,\|\, \sigma_T(\mathbf{z}_s) \right) = \sum_i \sigma_T(z_t)_i \log \frac{\sigma_T(z_t)_i}{\sigma_T(z_s)_i}.</tex>
-
: <tex>q_i = \frac{\exp(z_i)}{\sum_{j} \exp(z_j)}</tex>
+
Множитель <tex>T^2</tex> компенсирует масштабирование градиентов: при больших <tex>T</tex> градиенты <tex>\partial \mathcal{L}_{\text{KD}} / \partial \mathbf{z}_s</tex> убывают пропорционально <tex>1/T^2</tex>, поэтому умножение на <tex>T^2</tex> сохраняет относительный вклад дистилляционной потери неизменным при изменении температуры. На практике иногда используют упрощённый вариант без <tex>T^2</tex>, подбирая <tex>\lambda</tex> эмпирически.
-
В методе Хинтона в эту формулу искусственно вводится гиперпараметр '''температуры''' <tex>T</tex>. При <tex>T=1</tex> мы получаем стандартный софтмакс. Однако при увеличении температуры (<tex>T > 1</tex>) итоговое распределение вероятностей становится более «мягким» и сглаженным. Это делает вероятности маловероятных (ошибочных) классов более выраженными и отличными от нуля:
+
Выбор <tex>\lambda</tex> регулирует баланс между подражанием учителю и следованию истинным меткам. Часто полагают <tex>\lambda = 1</tex>, полностью полагаясь на мягкие метки, если учитель достаточно точен. Температуру обычно выбирают в диапазоне от 2 до 20, адаптируя её к количеству классов и уверенности учителя.
-
: <tex>q_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}</tex>
+
== Классификация методов ==
 +
=== Офлайн-дистилляция ===
 +
Наиболее распространённый сценарий: большая модель-учитель предварительно обучена на полном наборе данных и зафиксирована. Ученик обучается на выходах учителя, не влияя на него. Процесс однонаправлен и прост в организации, однако качество ученика ограничено качеством учителя, а вычислительные затраты на обучение учителя не амортизируются. Офлайн-дистилляция лежит в основе таких широко известных моделей, как [[DistilBERT]].
-
Процесс обучения студента сводится к минимизации комбинированной функции потерь (<tex>\mathcal{L}</tex>), которая состоит из двух независимых компонентов:
+
=== Онлайн-дистилляция ===
-
# '''Потеря дистилляции''' (<tex>L_{KD}</tex>): Вычисляется как [[Расстояние Кульбака — Лейблера|дивергенция Кульбака-Лейблера]] (KL-divergence) между сглаженными предсказаниями студента и учителя при одинаково высокой температуре <tex>T</tex>.
+
Учитель и ученик обучаются одновременно, обычно в рамках одного цикла. Знания могут передаваться от ансамбля моделей к каждому участнику (ансамблевая дистилляция) или циркулировать между несколькими равноправными моделями (взаимное обучение, ''deep mutual learning''). Такой подход позволяет ученику влиять на учителя и часто приводит к взаимному улучшению, но требует больших вычислительных ресурсов во время обучения. Онлайн-дистилляция особенно полезна, когда заранее готового учителя нет, или требуется обучить несколько компактных моделей одновременно.
-
# '''Потеря студента на реальных данных''' (<tex>L_{CE}</tex>): Вычисляется как стандартная [[Перекрестная энтропия|кросс-энтропия]] между предсказаниями студента (при <tex>T=1</tex>) и истинными метками из датасета (hard labels).
+
-
Итоговая функция потерь взвешивается параметром <tex>\alpha \in [0, 1]</tex>:
+
=== Самодистилляция ===
 +
Ученик использует собственные предсказания или внутренние представления в качестве учительских сигналов. Распространённые приёмы:
 +
* глубокая часть сети выступает учителем для мелкой («self-distillation from deeper layers»);
 +
* модель на поздних эпохах обучения служит учителем для своих ранних состояний (''born-again networks'');
 +
* агрегация предсказаний нескольких ветвей внутри одной модели.
 +
Самодистилляция не требует отдельной модели-учителя и может улучшать качество без дополнительных данных, однако прирост часто скромнее, чем от внешней дистилляции, и требует тщательного подбора архитектурных решений.
-
: <tex>\mathcal{L} = \alpha \cdot T^2 \cdot \text{KL}\left(P_{teacher}^{(T)} \parallel P_{student}^{(T)}\right) + (1 - \alpha) \cdot \text{CE}\left(y_{true}, P_{student}^{(1)}\right)</tex>
+
== Связь с другими методами сжатия ==
 +
Дистилляция направлена на уменьшение вычислительной сложности модели и занимает место в ряду техник [[Сжатие моделей|сжатия]] наряду с [[Pruning|прунингом]] и [[Quantization|квантизацией]], однако принципиально отличается от них по механизму и областям применения.
-
Умножение дивергенции на квадрат температуры (<tex>T^2</tex>) является критически важным математическим шагом. Поскольку градиенты KL-дивергенции, вычисленные по логитам, масштабируются пропорционально <tex>1/T^2</tex>, это умножение необходимо для сохранения относительного веса двух компонентов функции потерь при варьировании температуры.
+
* '''Сравнение с прунингом.''' [[Pruning|Прунинг]] удаляет избыточные веса или нейроны в уже обученной модели, не меняя её архитектурного типа. Дистилляция переносит знания в модель произвольной, потенциально совершенно иной архитектуры, возможно, более эффективной для целевого оборудования. Прунинг часто не требует дорогостоящего переобучения с нуля, тогда как дистилляция — это полноценный процесс обучения ученика. Взаимодополнение: прунинг может применяться к ученику после дистилляции для дополнительного сжатия.
 +
* '''Сравнение с квантизацией.''' [[Quantization|Квантизация]] уменьшает разрядность весов и активаций, сокращая объём памяти и ускоряя инференс на аппаратуре с поддержкой низкой точности, но сохраняет топологию сети и количество операций. Дистилляция уменьшает именно количество операций за счёт меньшего числа параметров и слоёв. Квантизация практически не требует данных, тогда как дистилляция нуждается в обучающей выборке или синтезированных примерах. На практике дистилляцию часто комбинируют с последующей квантизацией ученика.
-
== Основные архитектуры дистилляции ==
+
Дистилляция выигрывает в сценариях, где допустимо изменить архитектуру и важно сократить как память, так и вычислительную сложность, а также когда хотят использовать сильные стороны разных типов моделей (например, перенести знания из ансамбля в одиночную сеть). Прунинг и квантизация предпочтительнее, когда требуется сохранить исходную структуру модели или обучение ученика невозможно из-за ограничений на данные и вычислительные ресурсы.
-
Помимо классической дистилляции по логитам (Logits-based distillation), описанной Хинтоном, существуют и более продвинутые архитектуры переноса знаний:
+
-
 
+
-
=== Дистилляция скрытых признаков (Feature-based distillation) ===
+
-
Предложена в концепции FitNets (Romero et al., 2014)<ref>{{статья |автор=Romero A. et al. |заглавие=Fitnets: Hints for thin deep nets |издание=arXiv preprint arXiv:1412.6550 |год=2014}}</ref>. В этом подходе модель-студент обучается воспроизводить не только финальные вероятности, но и промежуточные активации (карты признаков) внутренних слоев учителя. Функция потерь в таком случае включает среднеквадратичное отклонение (MSE) между тензорами признаков:
+
-
 
+
-
: <tex>L_{feat} = \text{MSE}\left(\phi(F_{student}), F_{teacher}\right)</tex>
+
-
 
+
-
где <tex>F</tex> — активации скрытого слоя, а <tex>\phi</tex> — обучаемая проекционная матрица (адаптер), которая выравнивает размерность узкого слоя студента с широким слоем учителя.
+
-
 
+
-
=== Дистилляция отношений (Relation-based distillation) ===
+
-
Вместо того чтобы передавать информацию о каждом отдельном объекте изолированно, этот метод передает знания о взаимосвязях между объектами в батче. Например, студент учится сохранять ту же матрицу попарных косинусных расстояний между эмбеддингами изображений, которую формирует учитель.
+
-
 
+
-
== Дистилляция больших языковых моделей (LLM) ==
+
-
С переходом индустрии к генеративному ИИ, фокус дистилляции сместился с вероятностных распределений классов на генерацию связных текстовых последовательностей. Современные подходы включают:
+
-
 
+
-
* '''Дистилляция на уровне токенов (Token-level KD).''' Выравнивание распределений вероятностей для каждого следующего сгенерированного токена между открытой моделью-учителем (например, архитектурой уровня Llama 3 70B) и локальным студентом.
+
-
* '''Дистилляция цепочек рассуждений (Chain-of-Thought Distillation).''' Одним из наиболее перспективных направлений является дистилляция математических и логических способностей. Процесс часто строится вокруг генерации массивов синтетических цепочек рассуждений (synthetic Chain-of-Thought, CoT) мощной моделью-учителем. Для повышения качества датасета на этапе генерации применяется сэмплирование Best-of-N (генерация множества ответов и выбор лучшего на основе Reward-модели). Отфильтрованные данные используются для дообучения компактной модели-студента (например, архитектуры с 1 млрд параметров). Для ускорения тонкой настройки (fine-tuning) и снижения требований к видеопамяти на этом этапе применяется [[Адаптация низкого ранга (LoRA)]]. Практика показывает, что такой многоступенчатый пайплайн способен кардинально улучшить метрики — известны случаи семикратного роста точности (7x accuracy) небольших моделей на математических бенчмарках без изменения базового количества параметров.
+
-
 
+
-
== Связь с другими методами сжатия ==
+
-
Дистилляция часто применяется не изолированно, а в синергии с другими методами оптимизации нейросетей:
+
-
* '''[[Квантование нейронных сетей|Квантование (Quantization)]]''': Снижение разрядности весов модели (например, с 16-битных чисел с плавающей точкой до 8-битных или 4-битных целых чисел). Дистилляция часто используется для восстановления точности модели после агрессивного квантования (Quantization-Aware Knowledge Distillation).
+
-
* '''Прунинг (Pruning)''': Физическое удаление наименее значимых весов или целых слоев из архитектуры. Отрезанная (прореженная) модель может использовать исходную плотную сеть в качестве учителя для тонкой донастройки.
+
-
== Практическая реализация на PyTorch ==
+
== Современные направления и прикладное значение ==
-
Внедрение базовой дистилляции по логитам не требует изменения архитектуры самой сети, достаточно лишь модифицировать функцию потерь на этапе обучения (training loop). Ниже представлен классический пример реализации «с нуля» без использования тяжелых сторонних фреймворков:
+
Дистилляция стала стандартным инструментом при развёртывании нейросетевых моделей в промышленности. В обработке естественного языка эталонным примером служит '''[[DistilBERT]]''' — версия [[BERT (модель)|BERT]], обученная с использованием трёх сигналов: дистилляция на логитах (<tex>T</tex>), косинусное расстояние между эмбеддингами и расстояние между скрытыми состояниями. При 40%-м сокращении числа параметров DistilBERT сохраняет до 97% качества на задачах классификации и ответа на вопросы. Модели семейства [[TinyBERT]] развивают идею, применяя двухстадийную дистилляцию (общая и предметно-специфичная) и перенося знания не только на уровне выходов, но и на уровне матриц внимания и скрытых представлений.
-
<source lang="python">
+
В компьютерном зрении активно применяются дистилляция признаков (''FitNets''), перенос внимания (''attention transfer'') и дистилляция отношений между объектами (''relational knowledge distillation''). Эти методы позволяют обучать компактные архитектуры типа [[MobileNet]] или [[EfficientNet]] от больших учителей, сохраняя точность в задачах классификации, детекции и сегментации.
-
import torch
+
-
import torch.nn as nn
+
-
import torch.nn.functional as F
+
-
def distillation_loss(student_logits, teacher_logits, true_labels, T=2.0, alpha=0.5):
+
Дистилляция больших языковых моделей ([[LLM]]) сталкивается с особыми трудностями, вызванными авторегрессионным характером генерации текста. Стандартная дистилляция на уровне next-token prediction с teacher forcing возможна, но требует осторожного подбора температуры и часто приводит к накоплению ошибок. В последние годы распространение получила дистилляция инструктивных моделей: учитель генерирует пары «инструкция — ответ», а ученик обучается на этих синтетических данных, имитируя стиль и фактические знания учителя (''Alpaca'', ''Orca''). Активно исследуются методы дистилляции цепочек рассуждений (''chain-of-thought distillation''), направленные на перенос способности к многошаговым рассуждениям. Среди открытых проблем — сохранение фактической точности и предотвращение переноса галлюцинаций учителя, а также высокая стоимость инференса учителя при генерации больших датасетов.
-
"""
+
-
Вычисляет комбинированную функцию потерь для дистилляции знаний.
+
-
+
-
Параметры:
+
-
student_logits (Tensor): Сырые предсказания модели-студента.
+
-
teacher_logits (Tensor): Сырые предсказания модели-учителя.
+
-
true_labels (Tensor): Истинные метки классов (hard labels).
+
-
T (float): Температура для сглаживания распределений (T > 1).
+
-
alpha (float): Вес для балансировки двух функций потерь (от 0 до 1).
+
-
"""
+
-
# 1. Стандартная потеря (hard loss) на истинных метках при T=1
+
-
hard_loss = F.cross_entropy(student_logits, true_labels)
+
-
+
-
# 2. Дистилляционная потеря (soft loss) с повышенной температурой T
+
-
# Вычисляем логарифм вероятностей для студента (требование KLDivLoss в PyTorch)
+
-
student_soft = F.log_softmax(student_logits / T, dim=-1)
+
-
+
-
# Вычисляем вероятности для учителя
+
-
teacher_soft = F.softmax(teacher_logits / T, dim=-1)
+
-
+
-
# Вычисляем KL-дивергенцию и масштабируем градиенты умножением на T^2
+
-
kl_div = F.kl_div(student_soft, teacher_soft, reduction='batchmean')
+
-
soft_loss = kl_div * (T ** 2)
+
-
+
-
# 3. Итоговая функция: взвешенная сумма двух компонентов
+
-
return alpha * soft_loss + (1 - alpha) * hard_loss
+
-
</source>
+
-
== Распространённые ошибки (Антипаттерны) ==
+
Другие перспективные направления включают бесданную дистилляцию (''data-free knowledge distillation''), синтезирующую обучающие примеры без доступа к оригинальной выборке, кросс-модальную дистилляцию (перенос знаний между модальностями, например из изображений в текст) и дистилляцию задач (''task distillation''), где мягкие метки формируются ансамблем специализированных моделей для обучения многозадачного ученика.
-
* '''Неправильный подбор температуры (<tex>T</tex>).''' Если установить температуру слишком большой (например, <tex>T > 10</tex> для простых задач), распределение вероятностей приблизится к полностью равномерному, и студент потеряет полезные сигналы о структуре классов. Обычно оптимальное значение <tex>T</tex> находится в диапазоне от 2 до 5.
+
-
* '''Несоответствие мощностей (Capacity Gap).''' Попытка дистиллировать знания из гигантского ансамбля в нейронную сеть из пары слоев (underparameterized student) приведет к тому, что студент просто не сможет аппроксимировать настолько сложную функцию. Если разница в размерах слишком велика, применяют промежуточных «ассистентов» (Teacher Assistant Knowledge Distillation).
+
-
* '''Отключение Hard Loss на реальных данных.''' В некоторых задачах полное отключение кросс-энтропии на истинных метках (<tex>\alpha = 1</tex>) приводит к нестабильности обучения и снижению финальных метрик на валидационной выборке. Студент всегда должен иметь доступ к «наземной правде» (ground truth).
+
== См. также ==
== См. также ==
-
* [[Большая языковая модель]]
+
* [[Logit]]
-
* [[Квантование нейронных сетей]]
+
* [[Дивергенция Кульбака-Лейблера]]
-
* [[Адаптация низкого ранга (LoRA)]]
+
* [[Transfer learning]]
-
* [[Softmax]]
+
* [[Сжатие моделей]]
 +
* [[Pruning]]
 +
* [[Quantization]]
 +
* [[DistilBERT]]
 +
* [[Трансформер (архитектура)]]
 +
* [[Teacher model]]
 +
* [[Student model]]
 +
* [[Soft labels]]
 +
* [[Dark knowledge]]
 +
* [[Softmax температура]]
== Литература ==
== Литература ==
-
* {{статья |автор=Bucila C., Caruana R., Niculescu-Mizil A. |заглавие=Model compression |издание=Proceedings of the 12th ACM SIGKDD |год=2006 |страницы=535–541}}
+
* Hinton G., Vinyals O., Dean J. Distilling the Knowledge in a Neural Network // NIPS Deep Learning and Representation Learning Workshop, 2015. [https://arxiv.org/abs/1503.02531 arXiv:1503.02531] — основополагающая работа, вводящая понятия дистилляции знаний, тёмного знания и температурного сглаживания softmax.
-
* {{статья |автор=Hinton G., Vinyals O., Dean J. |заглавие=Distilling the knowledge in a neural network |издание=arXiv preprint arXiv:1503.02531 |год=2015}}
+
* Romero A., Ballas N., Kahou S. E., Chassang A., Gatta C., Bengio Y. FitNets: Hints for Thin Deep Nets // ICLR, 2015. [https://arxiv.org/abs/1412.6550 arXiv:1412.6550] — первая работа по дистилляции через промежуточные представления (hints), положившая начало дистилляции признаков.
-
* {{статья |автор=Gou J., Yu B., Maybank S. J., Tao D. |заглавие=Knowledge distillation: A survey |издание=International Journal of Computer Vision |год=2021 |том=129 |номер=6 |страницы=1789-1819}}
+
* Zagoruyko S., Komodakis N. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer // ICLR, 2017. [https://arxiv.org/abs/1612.03928 arXiv:1612.03928] — метод переноса карт внимания, ставший стандартным подходом в дистилляции для компьютерного зрения.
-
* {{статья |автор=Romero A., Ballas N., Kahou S. E., Chassang A., Gatta C., Bengio Y. |заглавие=Fitnets: Hints for thin deep nets |издание=arXiv preprint arXiv:1412.6550 |год=2014}}
+
* Zhang Y., Xiang T., Hospedales T. M., Lu H. Deep Mutual Learning // CVPR, 2018. [https://arxiv.org/abs/1706.00384 arXiv:1706.00384] — формализация онлайн-дистилляции, где равноправные модели обучаются одновременно, обмениваясь мягкими метками.
 +
* Furlanello T., Lipton Z. C., Tschannen M., Itti L., Anandkumar A. Born-Again Neural Networks // ICML, 2018. [https://arxiv.org/abs/1805.04770 arXiv:1805.04770] — строгая постановка самодистилляции, при которой модель последовательно переобучается, используя собственные предсказания как целевые.
 +
* Chen H., Wang Y., Xu C., Yang Z., Liu C., Shi B., Xu C., Xu C., Tian Q. Data-Free Learning of Student Networks // ICCV, 2019. [https://arxiv.org/abs/1904.01186 arXiv:1904.01186] — первая эффективная техника бесданной дистилляции, породившая целое семейство методов генерации синтетических обучающих примеров.
-
[[Категория:Машинное обучение]]
+
== Категории ==
 +
[[Категория:Методы машинного обучения]]
[[Категория:Оптимизация нейронных сетей]]
[[Категория:Оптимизация нейронных сетей]]
-
[[Категория:Большие языковые модели]]
 

Текущая версия

Статья написана с использованием LLM DeepSeek-V3 и проверена участником М. Мишин 14:17, 17 июня 2026 (MSD)

Промпт приводится полностью в Обсуждение:Дистилляция моделей


Содержание


Определение и основная идея

Дистилляция моделей (англ. knowledge distillation) — метод обучения компактной модели (ученика), при котором целевыми значениями выступают не только истинные метки, но и выходы более мощной, предварительно обученной модели (учителя). В основе подхода лежит аналогия с педагогической передачей опыта: учитель, обладающий обширными знаниями о предметной области, снабжает ученика не просто верными ответами, а подробными объяснениями относительного правдоподобия всех альтернатив. В машинном обучении таким объяснениям соответствуют мягкие метки — векторы вероятностей классов, полученные применением сигмоиды или softmax к выходам модели-учителя.

Ключевым понятием дистилляции является тёмное знание — информация о сходстве классов, закодированная в вероятностях, которые учитель назначает ошибочным классам. Например, если для изображения рукописной цифры «3» учитель отводит заметную вероятность классу «8», а для «8» — классу «3», это отражает геометрическую близость форм. Жёсткая метка (one-hot вектор) полностью уничтожает эти сведения, тогда как мягкие метки сохраняют структуру многообразия данных, позволяя ученику быстрее обобщать и избегать переобучения.

Чтобы сделать тёмное знание более доступным, распределение вероятностей «сглаживают» с помощью параметра температуры T в функции softmax: p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}, где z_iлогит для i-го класса. При T = 1 получается стандартное распределение; при T \rightarrow \infty распределение стремится к равномерному; при T > 1 вероятности нецелевых классов возрастают, и модель-ученик получает более «мягкую» цель. На этапе предсказания ученик всегда использует T = 1.

Формально дистилляция определяется как процесс обучения ученика путём совместной минимизации двух потерь: одной, основанной на истинных метках, и второй, измеряющей расхождение между выходами учителя и ученика при повышенной температуре.

Математическая формализация

Пусть \mathbf{z}_t и \mathbf{z}_s — векторы логитов учителя и ученика соответственно; \mathbf{y} — истинная жёсткая метка (one-hot); \sigma(\mathbf{z}) — стандартный softmax (T = 1); \sigma_T(\mathbf{z}) — softmax с температурой T. Функция потерь ученика записывается как взвешенная сумма двух слагаемых:

\mathcal{L} = (1 - \lambda) \, \mathcal{L}_{\text{CE}}(\mathbf{y}, \sigma(\mathbf{z}_s)) \;+\; \lambda \, T^2 \, \mathcal{L}_{\text{KD}}(\sigma_T(\mathbf{z}_t), \sigma_T(\mathbf{z}_s)),

где \lambda \in [0,1] — коэффициент дистилляции, а \mathcal{L}_{\text{KD}} обычно выбирается как дивергенция Кульбака–Лейблера: \mathcal{L}_{\text{KD}} = D_{\text{KL}}\!\left( \sigma_T(\mathbf{z}_t) \,\|\, \sigma_T(\mathbf{z}_s) \right) = \sum_i \sigma_T(z_t)_i \log \frac{\sigma_T(z_t)_i}{\sigma_T(z_s)_i}.

Множитель T^2 компенсирует масштабирование градиентов: при больших T градиенты \partial \mathcal{L}_{\text{KD}} / \partial \mathbf{z}_s убывают пропорционально 1/T^2, поэтому умножение на T^2 сохраняет относительный вклад дистилляционной потери неизменным при изменении температуры. На практике иногда используют упрощённый вариант без T^2, подбирая \lambda эмпирически.

Выбор \lambda регулирует баланс между подражанием учителю и следованию истинным меткам. Часто полагают \lambda = 1, полностью полагаясь на мягкие метки, если учитель достаточно точен. Температуру обычно выбирают в диапазоне от 2 до 20, адаптируя её к количеству классов и уверенности учителя.

Классификация методов

Офлайн-дистилляция

Наиболее распространённый сценарий: большая модель-учитель предварительно обучена на полном наборе данных и зафиксирована. Ученик обучается на выходах учителя, не влияя на него. Процесс однонаправлен и прост в организации, однако качество ученика ограничено качеством учителя, а вычислительные затраты на обучение учителя не амортизируются. Офлайн-дистилляция лежит в основе таких широко известных моделей, как DistilBERT.

Онлайн-дистилляция

Учитель и ученик обучаются одновременно, обычно в рамках одного цикла. Знания могут передаваться от ансамбля моделей к каждому участнику (ансамблевая дистилляция) или циркулировать между несколькими равноправными моделями (взаимное обучение, deep mutual learning). Такой подход позволяет ученику влиять на учителя и часто приводит к взаимному улучшению, но требует больших вычислительных ресурсов во время обучения. Онлайн-дистилляция особенно полезна, когда заранее готового учителя нет, или требуется обучить несколько компактных моделей одновременно.

Самодистилляция

Ученик использует собственные предсказания или внутренние представления в качестве учительских сигналов. Распространённые приёмы:

  • глубокая часть сети выступает учителем для мелкой («self-distillation from deeper layers»);
  • модель на поздних эпохах обучения служит учителем для своих ранних состояний (born-again networks);
  • агрегация предсказаний нескольких ветвей внутри одной модели.

Самодистилляция не требует отдельной модели-учителя и может улучшать качество без дополнительных данных, однако прирост часто скромнее, чем от внешней дистилляции, и требует тщательного подбора архитектурных решений.

Связь с другими методами сжатия

Дистилляция направлена на уменьшение вычислительной сложности модели и занимает место в ряду техник сжатия наряду с прунингом и квантизацией, однако принципиально отличается от них по механизму и областям применения.

  • Сравнение с прунингом. Прунинг удаляет избыточные веса или нейроны в уже обученной модели, не меняя её архитектурного типа. Дистилляция переносит знания в модель произвольной, потенциально совершенно иной архитектуры, возможно, более эффективной для целевого оборудования. Прунинг часто не требует дорогостоящего переобучения с нуля, тогда как дистилляция — это полноценный процесс обучения ученика. Взаимодополнение: прунинг может применяться к ученику после дистилляции для дополнительного сжатия.
  • Сравнение с квантизацией. Квантизация уменьшает разрядность весов и активаций, сокращая объём памяти и ускоряя инференс на аппаратуре с поддержкой низкой точности, но сохраняет топологию сети и количество операций. Дистилляция уменьшает именно количество операций за счёт меньшего числа параметров и слоёв. Квантизация практически не требует данных, тогда как дистилляция нуждается в обучающей выборке или синтезированных примерах. На практике дистилляцию часто комбинируют с последующей квантизацией ученика.

Дистилляция выигрывает в сценариях, где допустимо изменить архитектуру и важно сократить как память, так и вычислительную сложность, а также когда хотят использовать сильные стороны разных типов моделей (например, перенести знания из ансамбля в одиночную сеть). Прунинг и квантизация предпочтительнее, когда требуется сохранить исходную структуру модели или обучение ученика невозможно из-за ограничений на данные и вычислительные ресурсы.

Современные направления и прикладное значение

Дистилляция стала стандартным инструментом при развёртывании нейросетевых моделей в промышленности. В обработке естественного языка эталонным примером служит DistilBERT — версия BERT, обученная с использованием трёх сигналов: дистилляция на логитах (T), косинусное расстояние между эмбеддингами и расстояние между скрытыми состояниями. При 40%-м сокращении числа параметров DistilBERT сохраняет до 97% качества на задачах классификации и ответа на вопросы. Модели семейства TinyBERT развивают идею, применяя двухстадийную дистилляцию (общая и предметно-специфичная) и перенося знания не только на уровне выходов, но и на уровне матриц внимания и скрытых представлений.

В компьютерном зрении активно применяются дистилляция признаков (FitNets), перенос внимания (attention transfer) и дистилляция отношений между объектами (relational knowledge distillation). Эти методы позволяют обучать компактные архитектуры типа MobileNet или EfficientNet от больших учителей, сохраняя точность в задачах классификации, детекции и сегментации.

Дистилляция больших языковых моделей (LLM) сталкивается с особыми трудностями, вызванными авторегрессионным характером генерации текста. Стандартная дистилляция на уровне next-token prediction с teacher forcing возможна, но требует осторожного подбора температуры и часто приводит к накоплению ошибок. В последние годы распространение получила дистилляция инструктивных моделей: учитель генерирует пары «инструкция — ответ», а ученик обучается на этих синтетических данных, имитируя стиль и фактические знания учителя (Alpaca, Orca). Активно исследуются методы дистилляции цепочек рассуждений (chain-of-thought distillation), направленные на перенос способности к многошаговым рассуждениям. Среди открытых проблем — сохранение фактической точности и предотвращение переноса галлюцинаций учителя, а также высокая стоимость инференса учителя при генерации больших датасетов.

Другие перспективные направления включают бесданную дистилляцию (data-free knowledge distillation), синтезирующую обучающие примеры без доступа к оригинальной выборке, кросс-модальную дистилляцию (перенос знаний между модальностями, например из изображений в текст) и дистилляцию задач (task distillation), где мягкие метки формируются ансамблем специализированных моделей для обучения многозадачного ученика.

См. также

Литература

  • Hinton G., Vinyals O., Dean J. Distilling the Knowledge in a Neural Network // NIPS Deep Learning and Representation Learning Workshop, 2015. arXiv:1503.02531 — основополагающая работа, вводящая понятия дистилляции знаний, тёмного знания и температурного сглаживания softmax.
  • Romero A., Ballas N., Kahou S. E., Chassang A., Gatta C., Bengio Y. FitNets: Hints for Thin Deep Nets // ICLR, 2015. arXiv:1412.6550 — первая работа по дистилляции через промежуточные представления (hints), положившая начало дистилляции признаков.
  • Zagoruyko S., Komodakis N. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer // ICLR, 2017. arXiv:1612.03928 — метод переноса карт внимания, ставший стандартным подходом в дистилляции для компьютерного зрения.
  • Zhang Y., Xiang T., Hospedales T. M., Lu H. Deep Mutual Learning // CVPR, 2018. arXiv:1706.00384 — формализация онлайн-дистилляции, где равноправные модели обучаются одновременно, обмениваясь мягкими метками.
  • Furlanello T., Lipton Z. C., Tschannen M., Itti L., Anandkumar A. Born-Again Neural Networks // ICML, 2018. arXiv:1805.04770 — строгая постановка самодистилляции, при которой модель последовательно переобучается, используя собственные предсказания как целевые.
  • Chen H., Wang Y., Xu C., Yang Z., Liu C., Shi B., Xu C., Xu C., Tian Q. Data-Free Learning of Student Networks // ICCV, 2019. arXiv:1904.01186 — первая эффективная техника бесданной дистилляции, породившая целое семейство методов генерации синтетических обучающих примеров.

Категории

Личные инструменты