Глубокое обучение

Transfer Learning и Fine-Tuning

OpenAI потратила сотни миллионов долларов на обучение GPT-4. Любая компания может взять эту модель и за несколько часов на одном GPU адаптировать её под свою задачу - с качеством близким к full fine-tuning. Технология называется LoRA, и в 2024 году она изменила то, как весь мир строит AI-продукты.

  • **Stable Diffusion** сообщество создало тысячи LoRA адаптеров для разных художественных стилей - каждый весит 50-150 MB против 4 GB базовой модели, и их можно комбинировать при инференсе.
  • **Meta** использует LoRA для fine-tuning Llama моделей под конкретные продукты: один базовый checkpoint, несколько сотен легких адаптеров для разных задач.
  • **Hugging Face PEFT** библиотека имеет более 5000 опубликованных адаптеров - любой может скачать готовый LoRA для своей задачи или опубликовать свой.

Rich Caruana, multitask learning и эра ImageNet-предобучения

Работа Rich Caruana 1997 года о multitask learning показала, что знания, выученные для одной задачи, помогают связанным задачам - концептуальное зерно transfer learning. Идея стала доминирующей практикой после 2012 года, когда глубокие сети, обученные на ImageNet (1.2 миллиона размеченных изображений), давали признаки, переносимые почти на любую задачу зрения. Fine-tuning предобученного backbone на маленьком целевом датасете стал рецептом по умолчанию, а тот же паттерн pretrain-then-fine-tune позже привёл к BERT и GPT в NLP.

Предварительные знания

  • Свёрточные сети и их иерархии признаков
  • Трансформеры и предобученные языковые модели
  • Как признаки выучиваются слой за слоем
  • CNN: свёрточные сети
  • Transformers

Предобученные модели: почему не обучать с нуля

GPT-4 обучался несколько месяцев на тысячах GPU при стоимости около 100 млн USD. Обучать модель с нуля для своей задачи - как строить автозавод ради одной машины. Transfer Learning решает эту проблему: берется модель, уже знающая мир, и переориентируется на конкретную задачу за часы вместо месяцев.

**Почему transfer learning работает:** нейронная сеть, обученная на ImageNet, в первых слоях обнаруживает края, текстуры, простые формы - универсальные паттерны, полезные для любой vision задачи. BERT, обученный на Википедии, знает синтаксис, семантику, факты - полезно для любой NLP задачи. Предобученные слои кодируют знания о мире, нужно лишь адаптировать выходной слой.

Почему transfer learning эффективен для задачи классификации медицинских снимков, хотя ImageNet не содержит медицинских изображений?

Feature Extraction vs Fine-Tuning

Существуют два режима использования предобученной модели с принципиально разными компромиссами. Feature extraction - backbone заморожен, обучается только голова; быстро, дешево, работает при малом объеме данных. Fine-tuning - backbone тоже обновляется (полностью или частично); дольше, дороже, но дает лучшее качество при достаточном объеме данных.

**Когда что выбирать:** Feature extraction - мало данных (<1000 примеров), данные похожи на pretrain domain, ограниченные вычисления. Full fine-tuning - много данных, домен сильно отличается от pretrain. **Частичный fine-tuning:** разморозить только последние N слоев backbone - компромисс. Правило: чем дальше домен от pretrain - тем больше слоев размораживать. **Catastrophic forgetting:** при полном fine-tuning модель может забыть pretrain знания - помогают low learning rate (1e-5 vs 1e-3) и weight decay.

Датасет - 500 медицинских снимков МРТ. Предобученная модель - ResNet50 на ImageNet. Лучшая стратегия?

LoRA: Low-Rank Adaptation

Fine-tuning LLM c 7 миллиардами параметров требует 28+ GB GPU памяти только для хранения градиентов. LoRA решает это элегантно: вместо обновления матриц весов W напрямую, добавляются две малые матрицы A и B такие, что delta_W = A * B, где rank r << d. При r=8 и d=4096 количество обучаемых параметров падает в 500 раз.

**Математика LoRA:** исходный вес W имеет размер (d_in x d_out). Вместо обновления W добавляется delta_W = B * A, где A: (r x d_in), B: (d_out x r), r << min(d_in, d_out). Forward pass: h = W*x + (B*A)*x * (alpha/r). W заморожен, обучаются только A и B. **QLoRA** - LoRA поверх 4-битной квантизации: 7B модель умещается в 6 GB GPU. **Применение:** LoRA применяют к attention матрицам Q, K, V и/или к FFN слоям. После обучения A и B можно слить с W: W' = W + B*A - без оверхеда при инференсе.

LoRA с rank=8 применяется к матрицам Q и V размером 4096x4096. Сколько обучаемых параметров добавляется для одного слоя attention?

Adapter Layers и PEFT-экосистема

LoRA - не единственный метод параметрически-эффективного fine-tuning. Adapter layers, prefix tuning, prompt tuning - каждый с разным компромиссом между числом параметров, качеством и оверхедом при инференсе. Hugging Face PEFT библиотека унифицирует все эти подходы под одним API.

**Сравнение PEFT методов:** LoRA - добавляет матрицы параллельно к attention, нет оверхеда после merge. Adapter - добавляет маленький bottleneck-модуль последовательно (добавляет latency при инференсе). Prefix Tuning - добавляет обучаемые токены к входу каждого слоя (нет изменений в весах). Prompt Tuning - обучает только soft prompt (несколько токенов), самый легкий, работает только для больших моделей. **Выбор:** LoRA - лучший баланс quality/efficiency для большинства задач.

LoRA качественно хуже full fine-tuning потому что обновляет меньше параметров

На большинстве downstream задач LoRA достигает 95-99% качества full fine-tuning при 0.1-1% обучаемых параметров.

Матрица весов обновлений при fine-tuning имеет низкий intrinsic rank - модели не нужно кардинально менять веса для адаптации, достаточно малого подпространства изменений. LoRA именно это и использует.

Нужно развернуть одну базовую LLM для 50 разных клиентов с персонализацией. Лучший подход?

Ключевые идеи

  • **Transfer Learning** переносит знания из большого датасета на специфическую задачу - ранние слои обнаруживают универсальные паттерны, поздние специализируются.
  • **Feature extraction** (заморозить backbone) - при малом датасете; **fine-tuning** (обновлять backbone) - при большом датасете и значительном расхождении доменов.
  • **LoRA** добавляет матрицы малого ранга delta_W = B*A вместо обновления полных весов - 0.1% параметров дают 95-99% качества full fine-tuning при 100x экономии памяти.

Связанные темы

Transfer Learning строится на архитектурах и механизмах из предыдущих уроков:

  • Обучение нейронных сетей — Backprop и оптимизаторы - основа fine-tuning; catastrophic forgetting - следствие их работы
  • Распределенное обучение — Fine-tuning больших моделей требует распределенной тренировки даже при LoRA

Вопросы для размышления

  • При каком объеме обучающих данных переход от feature extraction к partial fine-tuning начинает давать ощутимый прирост качества?
  • Почему LoRA применяют к матрицам attention, а не к FFN слоям (или наоборот)?
  • Как выбрать оптимальный rank r для LoRA - какие метрики и эксперименты помогают?

Связанные уроки

  • dl-02 — Backprop и оптимизаторы выполняют обновления при fine-tuning
  • dl-06 — Предобученные трансформеры BERT и GPT дообучаются
  • dl-04 — Предобученные CNN служат замороженными экстракторами признаков
  • ml-41-transfer-learning — Те же идеи transfer learning в курсе ML
  • aie-36-fine-tuning — Дообучение базовых моделей в продакшен-системах
  • ml-19-pca — Переиспользование выученных представлений вместо сырых признаков
Transfer Learning и Fine-Tuning

0

1

Войти