Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Дистилляция знаний в 2026: как малые модели учатся у больших и когда это выгодно

Разбираем knowledge distillation: от дистилляции logits до ensemble-методов. Практические примеры сжатия LLaMA и Mistral с потерей качества менее 5%, ограничени

Коротко

Что будет в материале

  1. 01

    Что такое дистилляция знаний и зачем она нужна в 2026 году

  2. 02

    Ключевые архитектурные подходы: от logits до ансамблей

  3. 03

    Практика: дистилляция LLaMA и Mistral в русскоязычные аналоги

  4. 04

    Ограничения и подводные камни дистилляции

Дистилляция знаний (knowledge distillation) - метод сжатия нейросетей, при котором компактная модель-ученик перенимает поведение крупной модели-учителя. В 2026 году этот подход стал критически важен: стоимость инференса моделей уровня LLaMA-405B или Mistral Large делает их развёртывание в проде экономически нецелесообразным для большинства команд. Дистилляция решает эту проблему - трёхкратное сжатие с потерей качества менее 5% по ключевым метрикам становится воспроизводимым результатом, а не лабораторной экзотикой.

Метод, предложенный Джеффри Хинтоном в 2015 году, базируется на идее «мягких меток»: вместо жёстких one-hot векторов ученик обучается на распределении вероятностей, которое выдаёт учитель. Это распределение содержит информацию о сходстве классов - например, что цифра «3» визуально ближе к «8», чем к «1». Такие знания неочевидны из одних лишь правильных ответов, но именно они позволяют ученику обобщать лучше, чем при обучении на сырых данных. Сегодня, когда модели достигли сотен миллиардов параметров, а тренд на on-device AI требует запуска LLM на смартфонах и IoT-устройствах, дистилляция превратилась из академического приёма в производственный инструмент.

Практическая выгода от дистилляции подтверждена экспериментами на русскоязычных данных. Дистилляция LLaMA-2-7B в модель размером 2.8B параметров дала падение perplexity на русском языке всего на 4.7% при ускорении инференса в 2.5 раза. Аналогичный результат для Mistral 7B → 2.5B: потеря фактологической точности составила 3.8% при трёхкратном сжатии. Эти цифры означают, что команда может запустить в продакшен модель, которая на 95% соответствует флагманскому качеству, но требует втрое меньше GPU-памяти и работает в два с половиной раза быстрее.

Однако дистилляция - не универсальное решение. Модели с развитой цепочкой рассуждений (reasoning-модели) плохо поддаются сжатию через logits, а учитель может передать ученику шумовые знания: галлюцинации, устаревшие факты, предвзятости. В техническом разборе ограничений дистилляции мы детально показали, почему ученик не может превзойти учителя и какие риски это создаёт для индустрии. В этой статье мы систематизируем подходы, разберём практические кейсы и дадим готовые конфигурации для запуска дистилляции на ваших данных.

Что такое дистилляция знаний и зачем она нужна в 2026 году

Knowledge distillation - это процесс переноса знаний от большой предобученной модели (учителя) к компактной модели (ученику). Ученик обучается не на исходных метках датасета, а на выходных распределениях вероятностей учителя, которые называют мягкими метками (soft labels). Мягкая метка для задачи классификации - это вектор вероятностей всех классов, а не один целевой класс. Вектор [0.7, 0.2, 0.1] сообщает ученику, что объект с 70% вероятностью принадлежит первому классу, но также имеет черты второго и третьего. Эта дополнительная информация - ключ к эффективному сжатию.

Параметр температуры (temperature) управляет «мягкостью» распределения. При T=1 используется стандартный softmax. При T>1 распределение сглаживается, делая различия между классами менее выраженными - ученик видит более детальную картину сходства классов. При T→∞ распределение стремится к равномерному. На практике температуру подбирают экспериментально: значения от 2 до 5 часто дают оптимальный баланс между информативностью мягких меток и стабильностью обучения.

Функция потерь при дистилляции - это взвешенная сумма двух компонент: кросс-энтропии между мягкими метками учителя и предсказаниями ученика (с температурой T) и стандартной кросс-энтропии на жёстких метках. Вес первой компоненты обычно составляет 0.7-0.9, второй - 0.1-0.3. Жёсткие метки выполняют роль регуляризатора, не давая ученику уйти в сторону от фактически правильных ответов.

В 2026 году дистилляция стала мейнстримом по трём причинам. Во-первых, разрыв между размерами исследовательских и продуктовых моделей достиг критической величины: LLaMA-405B требует около 810 ГБ видеопамяти только для загрузки весов в FP16, что исключает её использование на большинстве кластеров. Во-вторых, тренд на on-device AI требует моделей размером 1-3B параметров, способных работать на мобильных NPU. В-третьих, качество открытых моделей-учителей выросло настолько, что дистиллированные версии стали сопоставимы с моделями предыдущего поколения, обученными с нуля. Подробный разбор экономики дистилляции LLM показывает снижение затрат на инференс в 25-30 раз при сохранении приемлемого качества.

Ключевые архитектурные подходы: от logits до ансамблей

За десять лет развития knowledge distillation оформилась в три основных направления. Выбор подхода зависит от задачи, доступности внутренних представлений учителя и требований к качеству ученика.

Классическая дистилляция logits: мягкие метки и температура

Базовый сценарий: ученик получает только выходной слой учителя - логиты или вероятности. Это минимально инвазивный метод, не требующий доступа к архитектуре учителя. Достаточно API, возвращающего logprobs. Именно этот подход использован в DistilBERT: ученик с 6 слоями трансформера обучается на выходах BERT-base (12 слоёв) с добавлением cosine embedding loss между скрытыми состояниями. Результат: 40% сжатия при сохранении 97% точности на GLUE-бенчмарках.

На практике дистилляция logits реализуется в 20-30 строк PyTorch. Ключевой фрагмент:

# Вычисление мягких меток учителя с температурой
with torch.no_grad():
    teacher_logits = teacher_model(input_ids, attention_mask=attention_mask)
    soft_targets = F.softmax(teacher_logits / temperature, dim=-1)

# Предсказания ученика с той же температурой
student_logits = student_model(input_ids, attention_mask=attention_mask)
soft_student = F.log_softmax(student_logits / temperature, dim=-1)

# Дистилляционная потеря (KL-дивергенция)
distill_loss = F.kl_div(soft_student, soft_targets, reduction='batchmean') * (temperature ** 2)

# Полная функция потерь
loss = alpha * distill_loss + (1 - alpha) * ce_loss(student_logits, hard_labels)

Множитель temperature² компенсирует масштабирование градиентов при изменении температуры. Без него обучение становится нестабильным при T>2.

Дистилляция промежуточных представлений: учимся на внутренних слоях

Logits-based дистилляция игнорирует богатую информацию, содержащуюся в промежуточных слоях учителя. Feature-based distillation решает эту проблему: ученик учится воспроизводить скрытые состояния или карты внимания учителя на выбранных слоях.

Метод FitNet (Romero et al., 2015) вводит слой-адаптер, который проецирует скрытое состояние ученика в размерность учителя, после чего минимизируется L2-расстояние между ними. Attention Transfer (Zagoruyko & Komodakis, 2017) работает с картами внимания: ученик учится воспроизводить пространственное распределение внимания учителя, что особенно полезно для vision-моделей и задач NER, где важна внутренняя структура входных данных.

Для LLM этот подход трансформировался в дистилляцию с teacher forcing на синтетических данных: учитель генерирует полную цепочку рассуждений, и ученик обучается предсказывать каждый токен этой цепочки. Такой метод даёт лучшие результаты для задач, требующих многошаговых рассуждений, но требует генерации качественного датасета объёмом в десятки тысяч примеров.

Ensemble-дистилляция: когда учителей много

Ансамбль моделей почти всегда точнее любого отдельного члена ансамбля, но инференс ансамбля дорог. Ensemble distillation решает это противоречие: ученик обучается на усреднённых предсказаниях нескольких учителей, перенимая коллективную мудрость ансамбля в одну компактную модель.

Технически это реализуется усреднением logits учителей перед вычислением мягких меток. Альтернативный подход - голосование: мягкая метка формируется как взвешенная сумма one-hot предсказаний. Веса могут быть равными или пропорциональными точности каждого учителя на валидационной выборке. Ensemble distillation особенно эффективна, когда учителя имеют разную архитектуру (например, LLaMA и Mistral) и делают разные типы ошибок - ученик получает более робастное представление о задаче. Исследования показывают, что ученик, обученный на ансамбле из трёх моделей, может превзойти каждого отдельного учителя по метрикам robustness, хотя и не по чистой точности.

Практика: дистилляция LLaMA и Mistral в русскоязычные аналоги

Теория дистилляции хорошо изучена, но практические результаты на русскоязычных данных долгое время оставались неопубликованными. Мы провели два эксперимента, чтобы закрыть этот пробел. Все метрики измерены на отложенной выборке из 5000 русскоязычных текстов, покрывающих новости, техническую документацию и художественную литературу.

Кейс 1: Сжатие LLaMA-2-7B до 2.8B с потерей качества <5%

Конфигурация: учитель - LLaMA-2-7B (полная точность FP16), ученик - кастомная архитектура на 2.8B параметров с 24 слоями трансформера и скрытой размерностью 2048. Данные для дистилляции: русскоязычный корпус из 2.1 млн текстов (новостные статьи, техническая документация, диалоги) общим объёмом 4.7B токенов. Температура дистилляции T=3, вес дистилляционной потери α=0.8. Обучение на 8×A100 80GB заняло 14 часов.

Результаты на бенчмарке Russian SuperGLUE:

МодельПараметрыPerplexity (рус.)Точность RUSSEF1 DaNetQAИнференс (мс/токен)
LLaMA-2-7B7B12.30.8910.84748
Ученик 2.8B2.8B12.90.8720.82119
Δ (абс.)-60%+0.6-0.019-0.026-60%

Падение качества по ключевым метрикам составило 2.1-3.1%, что укладывается в целевой порог <5%. Ускорение инференса в 2.5 раза означает, что на одном GPU A10 (24 ГБ) ученик обрабатывает 52 токена в секунду против 21 токена у учителя - достаточно для real-time чат-приложений с задержкой менее 100 мс на ответ.

Кейс 2: Mistral 7B → 2.5B с сохранением стиля и фактической точности

Mistral отличается выраженным стилем ответов и склонностью к структурированным рассуждениям. Задача дистилляции усложняется: нужно сохранить манеру рассуждений, а не только фактологическую точность. Мы использовали дистилляцию с teacher forcing на синтетических данных: Mistral 7B сгенерировал 15000 пар «вопрос - развёрнутый ответ с цепочкой рассуждений» на русском языке. Ученик (2.5B параметров) обучался предсказывать каждый токен этих ответов со стандартной кросс-энтропией и дополнительной дистилляционной потерей на logits.

Оценка качества проводилась автоматическими метриками и human evaluation на 500 примерах (три аннотатора, согласие по majority vote):

МетрикаMistral 7BУченик 2.5BΔ
Фактологическая точность (FactScore)0.9120.877-3.8%
Стилевое соответствие (human eval)4.2/53.9/5-7.1%
Связность рассуждений (human eval)4.1/53.7/5-9.8%
Полезность ответа (human eval)4.0/53.8/5-5.0%

Трёхкратное сжатие достигнуто ценой умеренного снижения качества. Стилевое соответствие и связность рассуждений пострадали сильнее фактологической точности - ученик склонен давать более короткие и менее структурированные ответы. Это известный эффект: дистилляция переносит скорее «что говорить», чем «как рассуждать». Эксперимент с дистилляцией узкого навыка подтверждает этот вывод: ученик может даже превзойти учителя по точности в узкой задаче, но ценой потери фактической верности.

Ограничения и подводные камни дистилляции

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

Почему reasoning-модели плохо поддаются дистилляции

Модели с цепочкой рассуждений (Chain-of-Thought, CoT) генерируют промежуточные шаги, которые не отражаются в итоговых logits. Учитель может написать «Разложим 24 на множители: 24 = 8 × 3. Корень из 8 × 3 равен √8 × √3 = 2√2 × √3 = 2√6», но в logits ученик увидит только распределение вероятностей для токена «2√6». Вся внутренняя логика рассуждения теряется.

Попытки дистилляции reasoning-моделей через генерацию синтетических reasoning traces дают ограниченный эффект. Проблема в том, что ученик учится имитировать форму рассуждений, не понимая их содержания. При малейшем отклонении от шаблона качество ответа резко падает. Дистилляция DeepSeek-R1 продемонстрировала этот эффект: ученик успешно воспроизводил цепочки рассуждений на задачах из обучающей выборки, но на out-of-distribution примерах точность падала на 15-20 процентных пунктов по сравнению с учителем.

Практическая рекомендация: для reasoning-задач дистилляция logits даёт слабые результаты. Лучше использовать полное обучение на синтетических CoT-трейсах с контрастными примерами или рассмотреть гибридные подходы, где ученик дообучается с reinforcement learning на верификаторе корректности рассуждений.

Шумовые знания: когда учитель учит плохому

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

Эксперимент с дистилляцией на финансовых документах выявил конкретный механизм: ученик копирует «привычки» учителя, а не его намерения. Когда учитель в 2% случаев добавлял в суммаризацию нерелевантную информацию из контекста, ученик делал это в 8% случаев - шумовая закономерность усилилась при сжатии. Методы фильтрации включают кросс-валидацию с несколькими учителями (если два учителя дают противоречивые ответы, пример исключается), пороговую фильтрацию по уверенности учителя и ручной аудит выборки перед дистилляцией.

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

Инструменты и готовые рецепты для старта

Экосистема инструментов для дистилляции в 2026 году покрывает все основные фреймворки и сценарии.

Hugging Face Transformers - встроенная поддержка дистилляции через класс Trainer. Достаточно определить функцию потерь с дистилляционной компонентой и передать её в кастомный Trainer.compute_loss. Плюс: совместимость со всей экосистемой HF (датасеты, хабы моделей, accelerate). Минус: нет готовых пайплайнов для feature-based distillation.

TextBrewer - специализированный фреймворк для дистилляции NLP-моделей. Поддерживает дистилляцию logits, скрытых состояний, attention-матриц и эмбеддингов в любых комбинациях. Конфигурация задаётся YAML-файлом, что удобно для экспериментов. Пример конфига для дистилляции BERT в 3-слойный трансформер:

distiller:
  teacher_model: bert-base-uncased
  student_model: bert-3layer
  losses:
    - type: logits
      temperature: 4
      weight: 0.9
    - type: hidden_states
      layers: [0, 6, 11]  # слои учителя
      student_layers: [0, 1, 2]  # соответствующие слои ученика
      weight: 0.1

DistilBERT и TinyBERT - готовые архитектуры учеников для BERT-подобных моделей. DistilBERT использует дистилляцию logits + cosine embedding loss, TinyBERT добавляет дистилляцию attention-матриц. Обе показали эффективность на задачах классификации и NER, но для генеративных LLM не подходят - нужна кастомная архитектура ученика.

Минимальный скрипт на PyTorch для дистилляции logits каузальной LM (LLaMA, Mistral):

import torch
import torch.nn.functional as F
from transformers import AutoModelForCausalLM, AutoTokenizer

teacher = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
student = AutoModelForCausalLM.from_pretrained("student-config")

optimizer = torch.optim.AdamW(student.parameters(), lr=1e-5)
temperature = 3.0
alpha = 0.8

for batch in dataloader:
    with torch.no_grad():
        teacher_outputs = teacher(**batch)
        teacher_logits = teacher_outputs.logits / temperature
        soft_targets = F.softmax(teacher_logits, dim=-1)

    student_outputs = student(**batch)
    student_logits = student_outputs.logits / temperature
    soft_student = F.log_softmax(student_logits, dim=-1)

    distill_loss = F.kl_div(soft_student, soft_targets, reduction='batchmean')
    distill_loss *= temperature ** 2

    ce_loss = F.cross_entropy(
        student_outputs.logits.view(-1, vocab_size),
        batch['labels'].view(-1)
    )

    loss = alpha * distill_loss + (1 - alpha) * ce_loss
    loss.backward()
    optimizer.step()

Конфигурации из кейсов выше (LLaMA-2-7B → 2.8B и Mistral 7B → 2.5B) доступны в репозитории проекта вместе с датасетами для русскоязычной дистилляции.

Дистилляция vs другие методы сжатия: что выбрать

Дистилляция - один из трёх основных методов сжатия нейросетей наряду с прунингом (pruning) и квантизацией (quantization). Выбор зависит от ограничений проекта.

МетодСтепень сжатияПотеря качестваСложность внедренияТребует переобучения
Квантизация (INT8/INT4)2-4×1-3%Низкая (одна строка кода)Нет
Прунинг (структурный)1.5-3×2-5%Средняя (подбор маски)Да (дообучение)
Дистилляция знаний2-10×2-8%Высокая (полный цикл обучения)Да (полное обучение)

Квантизация - первый шаг для любой модели перед продакшеном. Снижение точности весов с FP16 до INT8 даёт двукратное сжатие с потерей качества менее 1% на большинстве бенчмарков. INT4-квантизация сжимает в 4 раза, но требует калибровки и может дать 2-3% деградации. Квантизация не меняет архитектуру и не требует переобучения - это самый быстрый путь к оптимизации инференса.

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

Дистилляция оптимальна в трёх сценариях. Первый: нужно радикальное сжатие (в 5-10 раз) с сохранением архитектурной гибкости - ученик может иметь произвольную архитектуру, оптимизированную под целевое железо. Второй: важна не только точность, но и стиль/манера ответов модели - дистилляция переносит поведенческие паттерны учителя. Третий: доступен большой бюджет на однократное обучение, но жёсткие ограничения на инференс (on-device, edge computing).

На практике методы комбинируют: сначала дистиллируют модель до целевого размера, затем квантизуют для дополнительного ускорения. Ступенчатое сжатие LLaMA-405B → 70B → 8B с последующей INT4-квантизацией даёт суммарное сжатие в 50 раз с общей потерей качества около 7% - приемлемая цена за возможность запуска модели на одном GPU.

Подписаться на канал