Файнтюн и алайнмент моделей
Файнтюн и алайнмент - вопрос «что с этим делать в проде»: дообучать, вешать LoRA или строить RAG. Провальный ответ - «зафайнтюним на нашей базе знаний»: он выдаёт непонимание, что куда кладут.
// Правило темы: факты - в retrieval, поведение - в веса.
SFT, RLHF и DPO: лестница алаймента
SFT (supervised fine-tuning) (instruction tuning) - дообучение на парах «инструкция → ответ»: превращает продолжатель текста в ассистента, задаёт формат и стиль ответов.
RLHF (reinforcement learning from human feedback): на человеческих сравнениях ответов учится reward-модель, затем политика оптимизируется против неё (PPO - proximal policy optimization) с KL-штрафом (Kullback-Leibler) - без него начинается reward hacking: политика ломает reward-модель бессмысленными паттернами.
// DPO (direct preference optimization) срезает угол: прямая оптимизация на парах «лучше/хуже» без отдельной reward-модели и RL-петли (reinforcement learning). Проще, стабильнее - стал массовой заменой RLHF.
- reward model
- модель человеческих предпочтений - цель оптимизации RLHF
- DPO
- прямая оптимизация на парах предпочтений, без RL
LoRA против полного дообучения
LoRA - низкоранговые адаптеры вместо обновления всех весов: обучаются доли процента параметров, база заморожена. Дёшево, обратимо, адаптеры можно менять как «личности» модели. QLoRA - то же поверх квантованной базы: файнтюн на одной GPU.
Полный файнтюн - максимум качества при сильном доменном сдвиге (другой язык, специфичный код), но дорого и рискует catastrophic forgetting.
// Переобучение на инструкциях видно как заученные шаблоны и потерю разнообразия; лечится качеством и разнообразием SFT-данных, а не числом эпох.
- LoRA
- низкоранговые адаптеры: доли процента обучаемых весов
Дообучение или RAG
Дообучение меняет поведение: стиль, формат, жаргон, следование внутренним гайдам. Retrieval даёт знания: свежие и точные факты, которые должны обновляться без переобучения.
Вшивать факты компании в веса - дорого и недолговечно: база знаний обновилась - модель устарела. RAG (retrieval-augmented generation) обновляется переиндексацией за минуты.
// Смешивать можно и нужно: LoRA под тон и формат + RAG под факты - типовая прод-связка.
Как отвечать: «Дообучить модель на нашей документации или сделать RAG?»
Смотря что нужно от модели. Если проблема в фактах - что где лежит, какие тарифы, что написано в регламенте это RAG: факты живут в индексе, обновляются переиндексацией, ответы можно снабжать цитатами. Вшивать факты в веса - дорого и устареет к следующему релизу документации. Если проблема в поведении - тон поддержки, формат ответов, внутренний жаргон это дообучение, обычно хватает LoRA. В зрелых системах живут оба: LoRA задаёт поведение, RAG подаёт факты. И для любого дообучения - отложенный сет инструкций: оценивать на своих же обучающих промптах нельзя.
Критерий «факты против поведения» + практичная связка + дисциплина оценки - ответ архитектора, а не энтузиаста файнтюна.
На чём валят
- −Файнтюнить факты компании в веса вместо RAG - устареет к следующему релизу базы знаний.
- −RLHF без KL-штрафа - reward hacking: политика ломает reward-модель.
- −LoRA на всё подряд - сильный доменный сдвиг может требовать полного дообучения.
- −Оценивать дообучение на обучающих промптах - нужен отложенный сет.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 10, остальные разбираются в тренажёре.
- Зачем предобученную LLM дополнительно выравнивают через RLHF?A)Чтобы модель следовала инструкциям и человеческим предпочтениям, а не просто продолжала текстB)Чтобы уменьшить число параметров моделиC)Чтобы ускорить инференс на GPUD)Чтобы модель выучила принципиально новые фактические знания о мире, которых не было в предобучении
показать ответ и разбор
+A)Чтобы модель следовала инструкциям и человеческим предпочтениям, а не просто продолжала текст// разбор: Предобученная (base) модель лишь продолжает текст по вероятности, она не «помощник». RLHF/выравнивание учит её отвечать полезно, безопасно и в нужном формате: собирают человеческие сравнения ответов, обучают reward-модель, затем оптимизируют политику (PPO и т.п.) под эти предпочтения. Это про поведение и предпочтения, а не про новые факты (их даёт предобучение/RAG) и не про размер/скорость.
- Чем DPO привлекателен как альтернатива классическому RLHF с PPO?A)DPO обучает модель вообще без каких-либо данных о человеческих предпочтениях и сравненияхB)DPO увеличивает контекстное окно моделиC)DPO оптимизирует предпочтения напрямую, без отдельной reward-модели и нестабильного RLD)DPO убирает необходимость в размеченных людьми парах предпочтений
показать ответ и разбор
+C)DPO оптимизирует предпочтения напрямую, без отдельной reward-модели и нестабильного RL// разбор: RLHF с PPO требует обучить отдельную reward-модель, а затем гонять нестабильный RL с KL-штрафом — дорого и капризно по гиперпараметрам. DPO (Direct Preference Optimization) переписывает задачу так, что предпочтения оптимизируются прямым лоссом на парах (winner, loser) без reward-модели и без RL. Данные предпочтений (человеческие сравнения) DPO по-прежнему нужны — он лишь убирает RL-обвязку.
- Бот должен отвечать по постоянно меняющейся базе внутренних документов. Файнтюн или RAG?A)Файнтюн: зашить все документы прямо в веса модели — это надёжный и точный способ и не требует внешнего поиска по документам во время ответаB)RAG: свежие/меняющиеся факты держат во внешней базе; файнтюн на них дорог и устареваетC)Few-shot: вставить все документы в промпт при каждом запросеD)Обязательно и то, и другое сразу, иначе вообще не работает
показать ответ и разбор
+B)RAG: свежие/меняющиеся факты держат во внешней базе; файнтюн на них дорог и устаревает// разбор: Меняющиеся факты — вотчина RAG: обновил базу — ответы свежие, без переобучения. Файнтюн на фактах дорог, вшивает знание в веса намертво и устаревает с каждой правкой документа, плюс рискует галлюцинациями поверх забытого. Файнтюн берут для устойчивого поведения/формата/стиля/домена. Эмпирика: prompt → RAG → fine-tune, по возрастанию стоимости и специфичности.
- После файнтюна на узком наборе модель просела в общих задачах. Как это называется и почему?A)Катастрофическое забывание: узкий файнтюн сдвигает веса и портит ранее выученные общие уменияB)Переобучение по числу эпох, лечится увеличением размера батчаC)Утечка данных из теста в трейн на этапе подготовкиD)Это просто случайность начальной инициализации весов — достаточно перезапустить обучение с другого сида
показать ответ и разбор
+A)Катастрофическое забывание: узкий файнтюн сдвигает веса и портит ранее выученные общие умения// разбор: Catastrophic forgetting: дообучение под узкую задачу тянет веса к новой цели, и представления, отвечавшие за общие умения, деградируют — модель специализируется ценой широты. Смягчают: PEFT/LoRA (базовые веса заморожены — забывать нечему), подмешивание общих данных, меньший learning rate и меньше эпох, регуляризация к исходным весам. Это не про сид и не про размер батча.
- Что критичнее для качества instruction-файнтюна (SFT) при прочих равных?A)Максимально возможное число обучающих примеров, включая шумные и противоречивыеB)Как можно больший learning rate ради скорости обученияC)Чем длиннее каждый отдельный обучающий пример, тем стабильно лучше результатD)Качество и разнообразие примеров: немного чистых репрезентативных инструкций бьют гору шумных
показать ответ и разбор
+D)Качество и разнообразие примеров: немного чистых репрезентативных инструкций бьют гору шумных// разбор: Для SFT решает не объём, а качество и покрытие: несколько тысяч чистых, разнообразных, репрезентативных пар инструкция→ответ обычно дают больше, чем сотни тысяч шумных (эффект LIMA и практика). Шум и противоречия в разметке модель послушно впитает. Разнообразие задач важнее длины примера; завышенный lr сорвёт дообучение в забывание. Отсюда упор на курирование данных.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.