Своя модель

Модель переобучилась: как это заметить и что делать

Переобучение видно без метрик: модель начинает дословно воспроизводить примеры из датасета и теряет способность к обычному разговору. Симптомы, быстрая проверка и таблица «что менять».

«Я дообучил модель, и она стала хуже базовой» — самая частая жалоба после первого прогона. Формулируется она обычно так: на вопросах из моей области отвечает как будто заученно, а на всём остальном поглупела и отвечает односложно.

Это описание переобучения. Диагностируется оно без графиков и метрик — по поведению, которое видно за пять минут.

#Быстрая проверка

Два теста, которые отсекают половину случаев.

Тест первый: дословность. Возьмите вопрос из обучающего датасета, слегка перефразируйте его — поменяйте пару слов, не меняя смысла, — и задайте модели. Если она выдаёт эталонный ответ дословно, включая обороты, которые к перефразированному вопросу не подходят, — модель заучила датасет, а не выучила манеру.

Тест второй: посторонняя тема. Задайте пять вопросов из областей, которых в датасете не было вовсе. Сравните с базовой моделью на тех же вопросах. Если дообученная отвечает заметно короче, беднее или начинает тянуть ответ в тему вашего датасета — общие способности просели.

Первый тест ловит заучивание, второй — деградацию. Часто присутствуют оба сразу, но лечатся они одним и тем же.

#Причина 1. Слишком много эпох

Признак. Дословное воспроизведение обучающих примеров. Модель отвечает «правильно» на знакомые вопросы и рассыпается на незнакомых.

Проверка. Посмотрите конфигурацию прогона: сколько эпох на скольких примерах. Три эпохи на трёхстах примерах — это девятьсот показов, и модель успевает запомнить конкретные строки.

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

#Причина 2. Слишком высокий ранг адаптера

Признак. Заучивание при одной эпохе. Модель ведёт себя как в первой причине, хотя проходов было немного.

Проверка. Соотнесите ранг с размером датасета. Ранг 64 на трёхстах примерах — это адаптер, ёмкости которого хватает, чтобы запомнить весь набор целиком.

Решение. Понижайте до 8–16. Ранг — параметр ёмкости, а не качества: больше не значит лучше.

#Причина 3. Слишком узкий датасет

Признак. Модель тянет любой разговор в тему обучающих данных. Спросили про погоду — отвечает в терминах вашей предметной области.

Проверка. Разложите примеры по темам и посмотрите распределение. Если одна тема занимает больше половины, модель выучила тему, а не манеру.

Решение. Разнообразить набор, а не увеличивать. Триста примеров на тридцать тем работают лучше тысячи на одну. Как проверить и выровнять баланс — в статье про очистку датасета.

#Причина 4. Слишком высокая скорость обучения

Признак. Не заучивание, а разваливание: ответы становятся бессвязными, модель путается в грамматике, начинает повторять слова.

Проверка. Посмотрите на значение скорости обучения. Для LoRA рабочий диапазон около 1e-4 — 3e-4; значения существенно выше ломают модель быстрее, чем обучают.

Решение. Снизить кратно, в два-пять раз, и переобучить с базы. Чинить испорченный адаптер дообучением поверх бесполезно.

#Причина 5. Отложенной выборки не было вовсе

Признак. Вы не можете сказать, переобучилась модель или нет, потому что проверяли её на тех же вопросах, на которых обучали.

Проверка. Была ли отделена случайная доля примеров до обучения и не попала ли она в обучающий набор.

Решение. Отложить 10–15% и переобучить. Без отложенных данных диагностика переобучения превращается в угадывание. Сколько примеров должно остаться в обучающей части — в статье сколько примеров нужно для дообучения.

#Причина 6. Затёртые рассуждения

Отдельный случай, характерный для баз с режимом мышления.

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

Проверка. Посмотрите обучающие ответы: содержат ли они цепочки рассуждений целиком.

Решение. Вернуть рассуждения в обучающие ответы и переобучить с базы. Блок мыслей у таких моделей — часть ответа, а не служебная информация; обучение на «голых» ответах эту способность стирает. Именно поэтому в Colab-ноутбуке нашей «второй копии» датасет намеренно смешивается из открытых наборов с рассуждениями и небольшой доли примеров характера, а число эпох выставлено в одну.

#Таблица: симптом и параметр

Симптом Что менять Куда
Дословно повторяет примеры Число эпох вниз, до 1
Заучивает при одной эпохе Ранг адаптера вниз, до 8–16
Тянет любую тему в свою Датасет разнообразить темы
Ответы бессвязные Скорость обучения вниз в 2–5 раз
Поглупела на посторонних темах Эпохи, затем ранг вниз
Пропали рассуждения Датасет вернуть цепочки мыслей
Непонятно, переобучилась ли Отложенная выборка отделить и переобучить

Читать таблицу надо сверху вниз: первые две строки покрывают большинство случаев, и начинать перебор стоит с них.

#Если ничего не помогло

Три честных варианта, когда снижение эпох и ранга не дало результата.

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

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

Задача не для дообучения. Если вы пытались вложить в модель знания, а не манеру, то любой результат будет выглядеть как деградация: модель уверенно путает факты и теряет общие способности. Это не переобучение, а неверно выбранный инструмент — признаки в статье когда дообучение не нужно.

И общее правило: испорченный адаптер не чинят дообучением поверх. Возвращайтесь к базовой модели и обучайте заново с исправленной конфигурацией. Как убедиться, что новая версия действительно лучше предыдущей, — в статье про честную оценку дообученной модели; общая рамка маршрута — в пилларе про свою модель и дообучение под себя.

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

#Можно ли заметить переобучение по потерям на валидации?

Можно: классический признак — потери на обучающей выборке падают, а на отложенной растут. Но на маленьком наборе этот сигнал шумный, и поведенческие тесты из начала статьи надёжнее. Смотрите на оба, доверяйте поведению.

#Модель стала лучше в моей теме и хуже во всём остальном. Это переобучение?

Это компромисс, который дообучение делает всегда: смещая поведение в одну сторону, оно немного отбирает в других. Вопрос в масштабе. Небольшая просадка на посторонних темах — нормальная цена; заметное поглупение — уже переобучение, снижайте эпохи и ранг.

#Сколько эпох безопасно?

На датасете в несколько сотен примеров — одна. На нескольких тысячах разнообразных примеров — можно пробовать две. Три и больше на своих данных почти всегда означают заучивание, а не обучение.

#Помогает ли увеличение датасета против переобучения?

Помогает, если новые примеры разнообразны. Удвоение набора за счёт похожих примеров на ту же тему не помогает вовсе: модель получает те же сигналы, только чаще. Разнообразие тем работает, объём сам по себе — нет.

#Можно ли откатить переобученную модель?

Нельзя откатить сам адаптер, но откатывать и нечего: базовые веса не менялись. Просто отключите адаптер или удалите его и обучите новый с исправленной конфигурацией. Именно в этом практическая ценность адаптерного подхода — испорченный результат ничего не стоит выбросить.

#Вывод

Переобучение диагностируется поведением, а не метриками: перефразированный вопрос из датасета и пять вопросов из посторонних тем дают ответ за пять минут.

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт