Своя модель

Гиперпараметры дообучения: скорость эпохи и ранг

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

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

Эта статья — про порядок. Стартовые значения в ней тоже есть, но они менее важны.

#Зачем это нужно и когда не нужно

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

#Что понадобится

  • Почищенный датасет и отложенная выборка, отделённая после чистки.
  • Записанный результат первого прогона: конкретные вопросы и ответы, а не «стало хуже».
  • Готовность делать по одному изменению за прогон. Два одновременно — и вы не узнаете, что сработало.

#Стартовые значения

С них имеет смысл начинать первый прогон на компактной базе и датасете в несколько сотен примеров.

Параметр Старт Что он делает
Число эпох 1 сколько раз модель увидит каждый пример
Скорость обучения 2e-4 насколько сильно смещаются адаптеры за шаг
Ранг адаптера 16 ёмкость: сколько поведения он вмещает
alpha 32 (то есть 2×ранг) сила вклада адаптера
Размер батча 1 сколько примеров за шаг; на домашней карте почти всегда 1
Накопление градиента 16 эффективный батч = 1 × 16
Длина последовательности 1024 главный рычаг расхода памяти
Прогрев 3% шагов плавный вход в обучение
Расписание косинусное плавное затухание скорости к концу

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

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

#Порядок настройки при плохом результате

Главный раздел статьи. Сначала определите симптом, потом меняйте один параметр.

Симптом Что менять первым Куда
Модель повторяет строки датасета дословно Число эпох вниз, до 1
Модель поглупела на посторонних темах Число эпох, затем ранг вниз
Стиль не изменился вовсе Датасет, затем ранг больше эталонов, потом ранг вверх
Ответы стали бессвязными Скорость обучения вниз, в 2–5 раз
Обучение падает по памяти Длина последовательности вниз
Обучение идёт, потери не снижаются Формат данных проверить рендеринг, не параметры
Модель не останавливается вовремя Шаблон чата проверить, не параметры

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

#Разбор параметров по одному

Число эпох. Самый опасный параметр и самый первый в порядке настройки. На датасете в несколько сотен примеров три эпохи означают, что модель увидела каждую строку трижды, — и она начинает их заучивать. Начинайте с одной. Повышайте только если стиль не сдвинулся, а датасет уже достаточный.

Скорость обучения. Для LoRA типичный диапазон — от 1e-4 до 3e-4. Слишком высокая даёт бессвязность и «разваливание» ответов; слишком низкая — отсутствие изменений. Меняйте кратно, а не на проценты: разница между 2e-4 и 2.2e-4 неразличима.

Ранг. Ёмкость адаптера: он задаёт размер обучаемых матриц, а значит, сколько разного поведения адаптер способен вместить. Низкий ранг физически не может вместить сложное поведение; высокий на маленьком наборе заучивает набор. Для переноса стиля 8–16 достаточно.

alpha. Держите пропорционально рангу (обычно вдвое больше), иначе при изменении ранга вы незаметно меняете ещё и силу воздействия — и не поймёте, что именно повлияло.

Накопление градиента. Заменяет большой батч, которого нет на домашней карте. Эффективный батч = размер батча × число накоплений. Слишком маленький эффективный батч даёт шумные шаги; слишком большой — вялое обучение.

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

#Проверка результата

После каждого изменения — одна и та же проверка, иначе сравнивать нечего:

  1. Десять вопросов на стиль, ответы на которые вы знаете наизусть.
  2. Пять вопросов из тем, которых в датасете не было — контроль деградации.
  3. Три вопроса, где модель должна честно отказаться отвечать или сказать «не знаю».
  4. Сравнение с базой вслепую: ответы обеих моделей в перемешанном порядке, без подписей.

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

#Что может пойти не так

  • Меняете два параметра за прогон. Классика. Результат изменился, причина неизвестна, следующий шаг непонятен.
  • Крутите ранг, когда проблема в датасете. Стиль не сдвигается чаще из-за недостатка эталонов вашего тона, чем из-за низкой ёмкости адаптера.
  • Повышаете эпохи, чтобы «лучше выучило». Это прямая дорога к заучиванию — признаки в статье про переобучение и его лечение.
  • Не фиксируете зерно случайности. Два прогона с одинаковой конфигурацией дают разные адаптеры, и вы принимаете шум за эффект настройки.
  • Сравниваете не вслепую. Автор дообучения систематически видит улучшение там, где его нет.
  • Забываете, что QLoRA и LoRA настраиваются одинаково. Метод сжатия базы на выбор гиперпараметров не влияет — разбор в статье про LoRA и QLoRA.

Как эти параметры задаются на практике в конкретных инструментах — в гайде по Unsloth и в разборе конфигурационного подхода Axolotl.

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

#Сколько эпох брать для датасета в триста примеров?

Одну. Если после неё стиль не сдвинулся, добирайте примеры, а не эпохи: вторая и третья эпоха на трёхстах примерах дают заучивание раньше, чем перенос манеры. Повышать число эпох осмысленно на наборе в тысячи разнообразных примеров.

#Какая скорость обучения правильная?

Универсально правильной нет, есть рабочий диапазон около 1e-4 — 3e-4 для LoRA. Начинайте с середины и меняйте кратно при явных симптомах: бессвязность — вниз, полное отсутствие изменений при достаточном датасете — вверх.

#Ранг 64 лучше ранга 16?

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

#Нужно ли менять параметры при смене базовой модели?

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

#Что делать, если ни одно изменение не помогает?

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

#Вывод

Стартовые значения важны меньше, чем порядок изменений. Начинайте с одной эпохи, ранга 16 и скорости 2e-4, меняйте по одному параметру за прогон и всегда по симптому, а не наугад.

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

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

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

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