Fine-tuning: дообучение языковых моделей
Кратко. Fine-tuning — дообучение готовой языковой модели на своих примерах: нужное поведение закрепляется прямо в весах. Он меняет стиль, формат и доменные привычки модели, но не добавляет свежих фактов — это работа RAG. К нему переходят, когда промптинг и контекст не дают стабильного результата.
Запрос «как дообучить модель под свою задачу» звучит всё чаще, и за ним почти всегда стоит конкретная боль: промпт разрастается до тысяч токенов, а ответы всё равно гуляют по стилю и формату. Fine-tuning решает именно эту задачу — переносит повторяющееся поведение из промпта в веса модели. Эта страница объясняет, как он устроен, чем отличается от промптинга и RAG и когда за него стоит браться. Общий обзор раздела — в хабе разработка с ИИ.
Что такое fine-tuning
Fine-tuning — это процесс, в котором уже обученную языковую модель дополнительно тренируют на небольшом наборе своих примеров, чтобы адаптировать её к конкретной задаче или домену. Базовая модель приходит с общими знаниями языка, а дообучение поверх них закрепляет нужное поведение: формат ответа, тон, терминологию, разметку. Веса при этом сдвигаются, и модель начинает выдавать целевой стиль по умолчанию, без длинных инструкций в каждом запросе.
Ключевое отличие от промптинга в том, что fine-tuning меняет саму модель, а не сопроводительный текст к ней. По определению из Wikidata, это «процесс, при котором предобученную модель дообучают на меньшем специализированном наборе данных». Поэтому дообучение работает там, где поведение нужно зафиксировать жёстко и надолго: оно встроено в веса, а не зависит от того, что вы напишете в промпте на этот раз.
Fine-tuning, промптинг и RAG
Выбор между тремя подходами решается по тому, что именно вы хотите изменить в ответах. Промптинг меняет инструкцию к модели, RAG подставляет в неё свежие факты, fine-tuning меняет саму модель. Это не лестница «от слабого к сильному», а три рычага под разные задачи: стиль и формат — зона дообучения, актуальные данные — зона RAG, быстрая правка поведения — зона промпта. Их часто комбинируют в одной системе.
| Критерий | Промптинг | RAG | Fine-tuning |
|---|---|---|---|
| Что меняет | Инструкцию | Контекст (факты) | Веса модели |
| Свежие данные | Вручную в промпте | Минуты (обновить базу) | Переобучение |
| Стиль и формат | Нестабильно | Не меняет | Закрепляет жёстко |
| Стоимость старта | Низкая | Средняя | Высокая (обучение) |
| Время на правку | Секунды | Минуты | Часы и дороже |
Практическое правило: начинайте с промпт-инженеринга, затем добавляйте RAG поверх эмбеддингов, когда нужны свои данные, и переходите к fine-tuning, только если стабильного поведения не удаётся добиться ни промптом, ни контекстом. Свежие факты в веса не зашивают — это работа RAG. Дообучение берёт на себя то, что должно повторяться одинаково сотни раз: разметку, тон, доменный жаргон.
Как устроено дообучение
Дообучение проходит по одному и тому же маршруту независимо от провайдера: данные, обучение, новые веса. Сначала собирают набор примеров в формате «вход — желаемый выход», затем модель прогоняют по ним и корректируют веса так, чтобы её ответы приближались к эталонным, а на выходе получают изменённую версию модели или отдельный адаптер к ней. Качество результата определяется в первую очередь данными, а не числом эпох обучения.
Маршрут раскладывается на три стадии:
- Данные — набор пар «запрос-ответ» в нужном стиле и формате; для supervised fine-tuning это размеченные примеры эталонного поведения. Единообразие здесь важнее объёма: противоречивые примеры модель усваивает так же охотно, как правильные.
- Обучение — модель проходит по примерам, сравнивает свой ответ с эталоном и сдвигает веса в сторону уменьшения ошибки. Управляют процессом гиперпараметры: learning rate, число эпох, размер батча.
- Веса — на выходе либо полностью обновлённая модель, либо компактный адаптер (как в LoRA), который подключается к базовой модели при запуске.
Главный риск стадии обучения — переобучение: если эпох слишком много или данных мало, модель запоминает примеры дословно и теряет гибкость на новых запросах. Поэтому часть данных откладывают на валидацию и следят, чтобы качество на ней не падало.
LoRA и экономные методы
LoRA и родственные методы решают одну проблему: полное дообучение крупной модели переписывает все её веса и требует много памяти GPU. Семейство PEFT (parameter-efficient fine-tuning) идёт другим путём — замораживает исходные веса и обучает лишь малую добавку к ним. Это резко удешевляет обучение и хранение: вместо копии всей модели на каждую задачу получается лёгкий адаптер в десятки мегабайт, который подключается к общей базе.
LoRA (Low-Rank Adaptation) — самый распространённый из этих методов. Вместо изменения большой матрицы весов она обучает две маленькие, чьё произведение и есть поправка. В статье 2021 года авторы показали, что для GPT-3 175B LoRA сокращает число обучаемых параметров примерно в 10 000 раз и требования к памяти GPU — в 3 раза, не уступая полному дообучению по качеству. На практике это значит, что дообучить open-source модель под задачу реально на одной арендованной GPU, а не на кластере.
Поверх LoRA работает QLoRA: базовую модель квантуют до 4 бит, а адаптер обучают в обычной точности. Так модель на десятки миллиардов параметров умещается на одной потребительской карте. Готовые реализации этих методов собраны в библиотеке PEFT от Hugging Face — она избавляет от ручной возни с матрицами адаптеров и поддерживает несколько семейств экономных методов сразу.
Сколько это стоит и что нужно
Стоимость fine-tuning складывается из трёх частей: подготовка данных, само обучение и последующий inference дообученной модели. Через API провайдера обучение тарифицируется по числу токенов в наборе и обычно стоит десятки долларов на компактной задаче; на своей инфраструктуре главная статья — аренда GPU на время обучения. Самой дорогой и долгой частью почти всегда оказывается не вычисление, а сбор и вычистка качественных примеров.
Минимальный комплект для старта различается по сценарию:
- API-путь (OpenAI, облачные провайдеры) — нужен только набор примеров в формате JSONL; обучение и хостинг берёт на себя провайдер. Заметный эффект на узкой задаче дают уже 50–100 примеров, рабочий диапазон — 500–5000 пар. Порог входа низкий, но модель и веса остаются у провайдера.
- Self-hosted LoRA/QLoRA — open-source модель, размеченный датасет от нескольких тысяч примеров, одна GPU и библиотека вроде PEFT. Больше контроля и приватности, но на вас обучение, валидация и эксплуатация.
Отдельная статья — поддержка. Дообученную модель придётся переобучать при изменении задачи и проверять при каждом обновлении базовой модели. Поэтому fine-tuning окупается там, где задача стабильна и объём запросов большой: экономия на коротких промптах и предсказуемость ответов перекрывают разовые затраты на обучение.
Когда дообучать не стоит
Дообучение не нужно в большинстве задач, и это нормальный исход анализа, а не отступление. Если поведения можно добиться промптом или примерами в контексте, fine-tuning только добавит затрат на обучение и поддержку без выигрыша в качестве. Особенно бесполезно дообучение там, где проблема в фактах: модель после тренировки звучит увереннее, но новых знаний из пары тысяч примеров не извлекает и продолжает ошибаться.
Откажитесь от fine-tuning, когда подходит более дешёвый рычаг:
- Нужны свежие или точные факты — это зона RAG: данные обновляются за минуты, а ответ сопровождается ссылкой на источник.
- Задача меняется часто — переобучать веса под каждую правку дороже, чем поправить промпт за секунды.
- Данных меньше нескольких десятков чистых примеров — обучать почти не на чем, риск переобучения выше пользы.
- Хватает промпта с примерами — few-shot в контексте закрывает многие случаи без обучения вообще.
Разумный порядок такой: сначала промпт и few-shot, затем RAG для своих данных, и лишь потом — fine-tuning под стабильное поведение, которое нужно повторять в большом объёме. Этот порядок экономит и деньги, и время на сопровождение.
AI-экспертный комментарий
Fine-tuning я рассматриваю как последний рычаг, а не первый: в большинстве задач, что проходят через мою практику с контентом и базами знаний, его удаётся обойти промптом и RAG. Дообучение требует расходов на обучение и постоянной поддержки весов, поэтому к нему имеет смысл идти осознанно. Ниже — рамка, по которой я решаю, когда оно действительно окупается, а когда оказывается лишней статьёй расходов.
На своих контентных и knowledge-задачах я почти всегда останавливаюсь на промптинге и RAG: они дают нужное качество без обучения и поддержки весов. К fine-tuning имеет смысл идти при двух условиях сразу — поведение должно быть стабильным (стиль, формат, разметка не меняются от запроса к запросу) и объём запросов большим, чтобы экономия на коротких промптах перекрыла разовое обучение. Для приватного контура я смотрю в сторону LoRA на open-source модели: лёгкий адаптер дешевле и контролируемее, чем дообучение через API с отдачей данных наружу. Главный практический вывод: качество дообучения определяют данные, а не число эпох — десяток противоречивых примеров портит результат сильнее, чем помогает их количество. — Павел Кияткин, архитектор ИИ-систем
Источники
- Hu E. et al. «LoRA: Low-Rank Adaptation of Large Language Models». 2021 — метод экономного дообучения и измеренная экономия параметров и памяти. arxiv.org/abs/2106.09685
- «PEFT». Документация Hugging Face — библиотека parameter-efficient fine-tuning, обзор методов и реализаций. huggingface.co/docs/peft/index
- «Supervised fine-tuning». Документация OpenAI — формат данных и рабочий процесс дообучения через API. developers.openai.com/api/docs/guides/supervised-fine-tuning
Связанные концепты
- RAG — подстановка свежих фактов в ответ модели; дополняет fine-tuning, а не заменяет
- Промпт-инженеринг — первый рычаг перед дообучением, меняет инструкцию к модели
- Embeddings — векторные представления текста, основа поиска в RAG
Частые вопросы
Fine-tuning или RAG — что выбрать?
RAG — когда нужны свежие факты: документация, тикеты, база знаний обновляются, и модель должна отвечать по ним со ссылкой на источник. Fine-tuning — когда нужно закрепить поведение: стиль, формат ответа, доменный жаргон, тон бренда. Это не конкуренты: на практике система часто берёт стиль из дообучения, а факты — из RAG. Начинают с промптинга и RAG; к fine-tuning переходят, когда промптом стабильного поведения добиться не удаётся.
Сколько примеров нужно для дообучения?
Для supervised fine-tuning через API провайдера заметный эффект на узкой задаче дают уже 50–100 качественных примеров, рабочий диапазон — 500–5000 пар «запрос-ответ». Качество и единообразие данных важнее объёма: десяток противоречивых примеров портят результат сильнее, чем помогает их количество. Для обучения LoRA на open-source модели берут от нескольких тысяч примеров и выше, в зависимости от сложности задачи.
Что такое LoRA и зачем она нужна?
LoRA (Low-Rank Adaptation) — метод экономного дообучения: вместо изменения всех весов модели обучаются маленькие добавочные матрицы, а исходные веса замораживаются. Авторы метода показали, что для GPT-3 175B LoRA сокращает число обучаемых параметров примерно в 10 000 раз и требования к памяти GPU — в 3 раза, не теряя в качестве. Результат — небольшой файл-адаптер, который подключается к базовой модели.