Что такое (IA)^3 (Infused Adapter by Inhibiting and Amplifying Inner Activations)? Как он масштабирует LoRA?
Краткий тезис
(IA)^3 (Infused Adapter by Inhibiting and Amplifying Inner Activations) — это метод PEFT, который обучает векторы масштабирования (multipliers) для ключей, значений и скрытых активаций FFN, не добавляя новые слои или проекции. Он требует кратно меньше параметров, чем LoRA, и особенно эффективен в сценариях multitask и few-shot, где критична минимизация вычислительных накладных расходов.
2. Применяется к ключам, значениям, FFN
(IA)^3 нацелен на три ключевых компонента внутри Transformer:
| Компонент | Что масштабируется | Размер вектора | Эффект |
|---|---|---|---|
| Key голов внимания | K (вход в attention) | d_model | Управляет, какие токены "замечаются" |
| Value голов внимания | V (выход attention) | d_model | Управляет, сколько информации проходит из контекста |
| FFN | Выход первого линейного слоя FFN | d_ff (обычно 4×d_model) | Управляет нелинейным преобразованием |
Это покрывает все основные пути распространения информации в блоке Transformer, не трогая веса Query проекций (они остаются замороженными).
3. Ещё меньше параметров, чем LoRA
Главное преимущество (IA)^3 — экстремально малое количество обучаемых параметров:
| Метод | Параметров на слой (пример) | Всего (L=12, d=768) |
|---|---|---|
| Full fine-tuning | 7.1M | 85M |
| LoRA (r=8) | ~180K | 2.16M |
| (IA)^3 | ~6K | ~72K |
- (IA)^3 примерно в 30 раз компактнее LoRA при типичных размерах.
- Это достигается тем, что обучаются только 3 вектора (для K, V, FFN) на слой, а не две низкоранговые матрицы (A и B), как в LoRA.
- При d_model=768: 768+768+3072=4608 параметров на слой против ~180K у LoRA.
Такая экономия критична при:
- Экстремальном few-shot (1–5 примеров на задачу)
- Хранении тысяч адаптированных копий модели для multitask
- Развёртывании на устройствах с ограниченной памятью (edge, mobile)
4. Хорош для multitask
(IA)^3 демонстрирует выдающиеся результаты в multitask сценариях по нескольким причинам:
- Минимальное пересечение параметров: каждая задача учит только 3 вектора на слой (≈0.01% от модели), поэтому конфликты градиентов при совместном обучении минимизированы.
- Лёгкое переключение задач: в инференсе достаточно подменить три вектора на слой — не нужно пересчитывать LoRA-матрицы.
- Совместимость с LoRA: (IA)^3 можно комбинировать с LoRA (LoRA+IA^3), где LoRA отвечает за проекции Q и O, а IA^3 — за масштабирование K, V, FFN, что даёт дополнительное улучшение качества.
- Бенчмарки: на наборах T0 (T5 с multitask) и FLAN (PaLM) (IA)^3 достигает 96–98% качества полного fine-tuning при 100-кратном сокращении параметров.
5. Пет-проект для закрепления
Задача: Реализовать (IA)^3 на основе Hugging Face Transformers для T5-small и сравнить его с LoRA (r=8) на задаче text2text (Dataset: SAMSum для суммаризации диалогов).
Инструменты:
- Python, PyTorch
- HuggingFace Transformers, PEFT library (есть экспериментальная поддержка (IA)^3)
- Datasets библиотека
- Weights & Biases (опционально)
Шаги:
- Загрузить T5-small и заморозить все слои.
- Реализовать класс
IA3Adapter:- Для каждого блока Transformer создать
nn.Parameterдляl_k,l_v,l_ff. - В forward хуке переопределить forward attention и FFN, вставив поэлементное умножение.
- Для каждого блока Transformer создать
- Обучить (IA)^3 на SAMSum (вход: dialogue, выход: summary) — 2 эпохи, lr=3e-3.
- Обучить LoRA с r=8 на той же задаче — 2 эпохи, lr=1e-4 (стандартный).
- Оценить ROUGE-1/2/L на тестовом наборе.
- Сравнить количество обучаемых параметров и ROUGE.
Ожидаемый результат:
- (IA)^3: ~50K параметров, ROUGE-L ≈38–40.
- LoRA: ~1.5M параметров, ROUGE-L ≈39–41.
- Вывод: (IA)^3 даёт ~95% качества LoRA с ~30× меньше параметрами.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 952 | LoRA и его ранговые адаптеры |
Навигация
- Предыдущий: 956
- Следующий: 958
- Индекс: 00. Индекс разборов