Как вы подбираете гиперпараметры для LoRA (learning rate, batch size, rank, alpha)?
Краткий тезис
Подбор гиперпараметров для LoRA (Low-Rank Adaptation) — это компромисс между качеством адаптации, стабильностью обучения и вычислительными затратами. Ключевые параметры: learning rate (обычно выше, чем при полном fine-tune, ~1e-4), rank (r) и alpha (scaling factor, часто alpha = 2×r), batch size (стандартный 8–32). Эффективная стратегия — фиксация batch size и LR, затем grid search по r и alpha на валидационном наборе.
2. Alpha (scaling factor): обычно alpha = 2 × r
Alpha — это коэффициент масштабирования, который умножает выход адаптера перед сложением с исходными весами. Формально:
h = W₀x + (alpha / r) * BA x, где B и A — обучаемые матрицы ранга r.
Правило большого пальца:
alpha = 2 × r— наиболее распространённая эвристика, дающая хороший баланс между величиной обновления и стабильностью.- Если alpha слишком мала (например, alpha = r), эффект адаптации может быть недостаточным.
- Если alpha слишком велика (alpha > 4×r), обновление доминирует над исходными весами, что может привести к переобучению или забыванию (catastrophic forgetting).
Когда отклоняться:
- Для задач, требующих сильного изменения поведения (например, смена стиля генерации), можно увеличить alpha до 4×r.
- Для тонкой настройки на маленьком датасете (сотни примеров) лучше уменьшить alpha до 1×r, чтобы избежать переобучения.
3. Batch size: стандартный (8–32)
Batch size для LoRA обычно выбирается таким же, как и для полного fine-tune той же модели, с учётом доступной памяти GPU. Рекомендуемый диапазон: 8–32 (для моделей 7B–13B).
Влияние на обучение:
- Большой batch size (64+) может снизить качество из-за усреднения градиентов по большому числу примеров, что особенно критично для низкоранговых адаптеров.
- Маленький batch size (1–4) увеличивает шум градиентов и требует большего числа шагов для сходимости, но может помочь при сильной регуляризации (dropout в LoRA не применяется, но шум градиентов играет аналогичную роль).
Практика:
- Начните с batch size = 16.
- Если loss колеблется, увеличьте до 32 или используйте gradient accumulation (например, effective batch size = 32 при физическом batch size = 8 и accumulation steps = 4).
- Для больших моделей (70B) часто используют batch size = 8 из-за ограничений памяти.
4. Grid search по r и alpha на валидации
Наиболее системный подход — фиксировать LR и batch size (например, 1e-4 и 16) и провести grid search по паре (r, alpha). Рекомендуемая сетка:
Процедура:
- Разбейте датасет на train/val (например, 90/10).
- Для каждой комбинации (r, alpha) обучите LoRA-адаптер на фиксированное число шагов (например, 500–1000).
- Оцените метрику на валидации (perplexity, accuracy, F1 — в зависимости от задачи).
- Выберите комбинацию с лучшей метрикой.
- При необходимости уточните LR для выбранной пары (например, попробуйте 5e-5, 1e-4, 2e-4).
Автоматизация:
- Используйте Hugging Face Trainer с
hyperparameter_search(поддерживает Optuna или Ray Tune). - Для LoRA можно также применить Bayesian optimization по всем четырём параметрам сразу, но grid search по r и alpha часто даёт достаточное качество при меньших вычислительных затратах.
5. Пет-проект для закрепления
Задача: Обучить LoRA-адаптер для задачи классификации тональности (например, SST-2) на модели Llama 2 7B и подобрать гиперпараметры.
Инструменты:
- Python, PyTorch, Transformers, PEFT (библиотека для LoRA).
- Датасет:
glue(sst2) из Datasets. - Метрика: accuracy на валидации.
Шаги:
- Загрузите модель и токенизатор.
- Настройте LoRA через
LoraConfigс параметрами:r=8, alpha=16, target_modules=["q_proj","v_proj"]. - Зафиксируйте LR=1e-4, batch size=16, обучите 3 эпохи.
- Проведите grid search по
r ∈ [2,4,8,16]иalpha ∈ [r, 2r, 4r]. - Для каждой комбинации обучите 1 эпоху (для скорости) и запишите accuracy.
- Выберите лучшую пару и дообучите с ней 3 эпохи.
- Сравните результат с baseline (без LoRA — полный fine-tune невозможен на одном GPU, но можно сравнить с замороженной моделью).
Ожидаемый результат:
- Таблица с accuracy для всех комбинаций.
- Вывод: оптимальная пара (r=8, alpha=16) даёт accuracy ~93–94% (на SST-2), что близко к полному fine-tune (95%).
- Понимание, что увеличение r выше 16 даёт незначительный прирост, но увеличивает число параметров.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 23 | Механизм низкоранговой адаптации, математика LoRA |
| 959 | Сравнение LoRA, Adapter, Prefix Tuning, IA³ |
| 961 | Выбор слоёв для вставки адаптеров |
Навигация
- Предыдущий: 959
- Следующий: 961
- Индекс: 00. Индекс разборов