Fine-tuning: дообучение языковых моделей

· Павел Кияткин · Продвинутый

Кратко. Fine-tuning — дообучение готовой языковой модели на своих примерах: нужное поведение закрепляется прямо в весах. Он меняет стиль, формат и доменные привычки модели, но не добавляет свежих фактов — это работа RAG. К нему переходят, когда промптинг и контекст не дают стабильного результата.

Запрос «как дообучить модель под свою задачу» звучит всё чаще, и за ним почти всегда стоит конкретная боль: промпт разрастается до тысяч токенов, а ответы всё равно гуляют по стилю и формату. Fine-tuning решает именно эту задачу — переносит повторяющееся поведение из промпта в веса модели. Эта страница объясняет, как он устроен, чем отличается от промптинга и RAG и когда за него стоит браться. Общий обзор раздела — в хабе разработка с ИИ.

Что такое fine-tuning

Fine-tuning — это процесс, в котором уже обученную языковую модель дополнительно тренируют на небольшом наборе своих примеров, чтобы адаптировать её к конкретной задаче или домену. Базовая модель приходит с общими знаниями языка, а дообучение поверх них закрепляет нужное поведение: формат ответа, тон, терминологию, разметку. Веса при этом сдвигаются, и модель начинает выдавать целевой стиль по умолчанию, без длинных инструкций в каждом запросе.

Ключевое отличие от промптинга в том, что fine-tuning меняет саму модель, а не сопроводительный текст к ней. По определению из Wikidata, это «процесс, при котором предобученную модель дообучают на меньшем специализированном наборе данных». Поэтому дообучение работает там, где поведение нужно зафиксировать жёстко и надолго: оно встроено в веса, а не зависит от того, что вы напишете в промпте на этот раз.

Fine-tuning, промптинг и RAG

Выбор между тремя подходами решается по тому, что именно вы хотите изменить в ответах. Промптинг меняет инструкцию к модели, RAG подставляет в неё свежие факты, fine-tuning меняет саму модель. Это не лестница «от слабого к сильному», а три рычага под разные задачи: стиль и формат — зона дообучения, актуальные данные — зона RAG, быстрая правка поведения — зона промпта. Их часто комбинируют в одной системе.

КритерийПромптингRAGFine-tuning
Что меняетИнструкциюКонтекст (факты)Веса модели
Свежие данныеВручную в промптеМинуты (обновить базу)Переобучение
Стиль и форматНестабильноНе меняетЗакрепляет жёстко
Стоимость стартаНизкаяСредняяВысокая (обучение)
Время на правкуСекундыМинутыЧасы и дороже

Практическое правило: начинайте с промпт-инженеринга, затем добавляйте RAG поверх эмбеддингов, когда нужны свои данные, и переходите к fine-tuning, только если стабильного поведения не удаётся добиться ни промптом, ни контекстом. Свежие факты в веса не зашивают — это работа RAG. Дообучение берёт на себя то, что должно повторяться одинаково сотни раз: разметку, тон, доменный жаргон.

Как устроено дообучение

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

Маршрут раскладывается на три стадии:

  1. Данные — набор пар «запрос-ответ» в нужном стиле и формате; для supervised fine-tuning это размеченные примеры эталонного поведения. Единообразие здесь важнее объёма: противоречивые примеры модель усваивает так же охотно, как правильные.
  2. Обучение — модель проходит по примерам, сравнивает свой ответ с эталоном и сдвигает веса в сторону уменьшения ошибки. Управляют процессом гиперпараметры: learning rate, число эпох, размер батча.
  3. Веса — на выходе либо полностью обновлённая модель, либо компактный адаптер (как в 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 на время обучения. Самой дорогой и долгой частью почти всегда оказывается не вычисление, а сбор и вычистка качественных примеров.

Минимальный комплект для старта различается по сценарию:

Отдельная статья — поддержка. Дообученную модель придётся переобучать при изменении задачи и проверять при каждом обновлении базовой модели. Поэтому fine-tuning окупается там, где задача стабильна и объём запросов большой: экономия на коротких промптах и предсказуемость ответов перекрывают разовые затраты на обучение.

Когда дообучать не стоит

Дообучение не нужно в большинстве задач, и это нормальный исход анализа, а не отступление. Если поведения можно добиться промптом или примерами в контексте, fine-tuning только добавит затрат на обучение и поддержку без выигрыша в качестве. Особенно бесполезно дообучение там, где проблема в фактах: модель после тренировки звучит увереннее, но новых знаний из пары тысяч примеров не извлекает и продолжает ошибаться.

Откажитесь от fine-tuning, когда подходит более дешёвый рычаг:

Разумный порядок такой: сначала промпт и few-shot, затем RAG для своих данных, и лишь потом — fine-tuning под стабильное поведение, которое нужно повторять в большом объёме. Этот порядок экономит и деньги, и время на сопровождение.

AI-экспертный комментарий

Fine-tuning я рассматриваю как последний рычаг, а не первый: в большинстве задач, что проходят через мою практику с контентом и базами знаний, его удаётся обойти промптом и RAG. Дообучение требует расходов на обучение и постоянной поддержки весов, поэтому к нему имеет смысл идти осознанно. Ниже — рамка, по которой я решаю, когда оно действительно окупается, а когда оказывается лишней статьёй расходов.

На своих контентных и knowledge-задачах я почти всегда останавливаюсь на промптинге и RAG: они дают нужное качество без обучения и поддержки весов. К fine-tuning имеет смысл идти при двух условиях сразу — поведение должно быть стабильным (стиль, формат, разметка не меняются от запроса к запросу) и объём запросов большим, чтобы экономия на коротких промптах перекрыла разовое обучение. Для приватного контура я смотрю в сторону LoRA на open-source модели: лёгкий адаптер дешевле и контролируемее, чем дообучение через API с отдачей данных наружу. Главный практический вывод: качество дообучения определяют данные, а не число эпох — десяток противоречивых примеров портит результат сильнее, чем помогает их количество. — Павел Кияткин, архитектор ИИ-систем

Источники

  1. Hu E. et al. «LoRA: Low-Rank Adaptation of Large Language Models». 2021 — метод экономного дообучения и измеренная экономия параметров и памяти. arxiv.org/abs/2106.09685
  2. «PEFT». Документация Hugging Face — библиотека parameter-efficient fine-tuning, обзор методов и реализаций. huggingface.co/docs/peft/index
  3. «Supervised fine-tuning». Документация OpenAI — формат данных и рабочий процесс дообучения через API. developers.openai.com/api/docs/guides/supervised-fine-tuning

Связанные концепты

Частые вопросы

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 раза, не теряя в качестве. Результат — небольшой файл-адаптер, который подключается к базовой модели.