Дистилляция моделей: как уменьшить ИИ без скрытой потери качества
Дистилляция переносит полезное поведение большой модели в более компактную. Учитель создаёт ответы, оценки или распределения вероятностей, а ученик учится приближать их на выбранной задаче. Это может уменьшить память и задержку, но не копирует «всю модель»: редкие знания, длинный контекст и способность отказывать часто теряются первыми. Поэтому дистилляция — проект с измеримым компромиссом, а не кнопка сжатия.
Сузьте поведение для переноса
Опишите один результат: классифицировать обращение по шести меткам, вернуть JSON из четырёх полей или переписать заметку в нейтральном тоне. Не пытайтесь перенести общий интеллект и все стили одновременно. Чем уже цель, тем легче проверить датасет и понять, за что вы платите.
Сначала сравните базовую модель с хорошим промптом и шаблоном. Если ошибка исчезает инструкцией, отдельный ученик не нужен. Дистилляция оправдана, когда вызов учителя слишком дорог, задержка критична или модель должна работать на ограниченном устройстве.
Что получает ученик
При жёсткой дистилляции ученик видит итоговый ответ или метку. Такой вариант прост для фиксированного JSON и классификации, но скрывает степень неуверенности учителя. При мягкой цели передаётся распределение вероятностей: близкие классы получают разные веса, и ученик учится не только правильной метке, но и относительной похожести вариантов.
Мягкая цель требует совместимого формата и дополнительных вычислений. Не копируйте внутреннюю цепочку рассуждений; для аудита достаточно проверяемого ответа, ключевых признаков и корректного отказа. Сохраняйте параметры температуры учителя и дату генерации, иначе повторить набор невозможно.
Подготовьте датасет
Соберите обычные, неполные, конфликтующие и отрицательные примеры. Если правильный результат — «данных недостаточно», такой отказ должен присутствовать в эталоне. Учитель не должен автоматически одобрять собственные ответы: контрольную часть проверяет человек.
Удалите персональные данные, секреты и внутренние идентификаторы. Для каждой записи храните версию учителя, промпт, входной хэш, итог, статус приёмки и факт ручной правки. Почти одинаковые запросы не размещайте одновременно в обучении и тесте.
Разделите выборки
Обучение, валидация и закрытый тест должны быть независимыми. В тест добавьте новые слова, другой порядок полей, более длинный вход и случаи вне области. Отдельно оставьте редкие ошибки, которые не показывали учителю в привычной форме. Иначе ученик запомнит шаблон, а не правило.
Сравнивайте три версии на одном тесте: базовую модель, ученика и простое правило. Компактная модель должна оправдать дистилляцию хотя бы по одному критерию — скорости, памяти, цене или доступности — без критического ухудшения отказов.
Эксперимент до и после
Подготовьте 30 задач: 18 обычных, шесть пограничных и шесть отрицательных. Для каждой запишите ожидаемый формат, допустимое допущение и источник факта. Прогоните учителя и ученика дважды, сохранив необработанные ответы.
| Критерий | Что сравнить | Сигнал потери |
|---|---|---|
| Формат | валидность JSON и обязательные поля | добавлен лишний текст |
| Факты | числа, даты и термины | выдуманная деталь |
| Отказ | доля корректных остановок | уверенный ответ вне области |
| Редкие случаи | отрицания и длинные входы | резкое падение на хвосте |
| Ресурсы | память и задержка | экономия исчезает после прогрева |
Средняя оценка не скрывает опасные провалы. Один неправильный платёжный статус важнее десяти удачных коротких классификаций. Для кода запускайте тесты, для извлечения сверяйте каждое поле с источником.
Найдите переобучение и забывание
Переобученный ученик повторяет знакомые формулировки и плохо работает с перефразированным входом. Попросите изменить порядок слов, названия и длину запроса. Сравните качество на обучении и закрытом тесте. Проверьте и обратную проблему — забывание базовых навыков: после обучения модель не должна перестать понимать обычный вопрос или корректно отказывать.
Если редкий класс проваливается, добавьте разнообразные реальные примеры, а не тысячу копий одного шаблона. При слабом результате сузьте цель или остановите обучение раньше.
Скорость и стоимость
Измерьте размер файлов, время до первого токена, скорость после прогрева, пиковую память и параллельную нагрузку. На локальном устройстве учитывайте подкачку; в API — цену входных и выходных токенов и повторные вызовы. Полная стоимость включает генерацию учителем, ручную разметку, обучение, тестирование и поддержку ученика.
Если учитель нужен для исправления каждого ответа ученика, экономия исчезает. Считайте стоимость принятого результата, а не одной быстрой генерации.
Дистилляция, fine-tuning и RAG
Fine-tuning закрепляет поведение внутри выбранной модели, а дистилляция переносит его в другую, обычно меньшую архитектуру. Их можно сочетать: учитель создаёт проверенные примеры, ученик дообучается на узкой задаче. Ни один метод не заменяет RAG для часто меняющихся фактов; обновляемые регламенты должны приходить из актуального источника. Сравнение ролей подробно разобрано в материале о RAG и fine-tuning.
Лицензии и приватность
Проверьте, разрешает ли лицензия учителя использовать сгенерированные ответы для обучения другой модели. Не переносите в датасет секреты и персональные записи, даже если учитель работал в закрытом режиме. Зафиксируйте источник, версию и дату создания набора. Выход ученика проверяйте на воспроизведение редких фраз и узнаваемых деталей.
Теневой запуск и откат
Сохраните базовую модель, предыдущий адаптер, датасет и конфигурацию. Сначала включите ученика в тени: сравнивайте ответы, но не отправляйте их пользователю. Укажите условия отката — рост критических ошибок, падение корректных отказов или отсутствие экономии — и вернитесь к прежней версии одной настройкой маршрута.
Как понять, что сжатие действительно окупилось
Посчитайте не только размер весов. Для рабочего процесса важнее полная стоимость принятого ответа: генерация примеров учителем, ручная проверка, запуск ученика, исправления оператора и повторные запросы после отказа. Иногда компактная модель отвечает быстрее, но чаще просит уточнение — и экономия исчезает на последнем шаге.
Сделайте небольшой отчёт для владельца процесса. В первой строке покажите базовую версию, во второй — ученика, в третьей — простое правило или шаблон. Для каждой укажите качество на обычных и отрицательных примерах, среднюю задержку, пик памяти и долю случаев, когда ответ пришлось перепроверять. Такой формат защищает от решения по одному красивому демо.
Перед переключением установите срок наблюдения, например две рабочие недели, и заранее назначьте владельца отката. В течение этого срока не меняйте одновременно промпт, датасет и маршрутизацию: иначе будет невозможно понять, что именно повлияло на результат. Если требования к задаче расширились, честнее остановить пилот и пересобрать цель, чем заставлять маленькую модель имитировать универсальную.
Честный вердикт
Дистилляция оправдана, когда узкий повторяющийся сценарий нужно выполнять дешевле или на меньшем устройстве, а качество измеряется на новых данных. Она не делает компактную модель универсальной и не переносит автоматически свежие знания. Надёжный результат требует чистых примеров, независимого теста, проверки редких ошибок и заранее подготовленного отката.