Обсуждение участника:Imil Baltaniazov

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 16:49, 10 июля 2026 (MSD)}}
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 16:49, 10 июля 2026 (MSD)}}
-
'''Аугментация данных''' (''data augmentation'') — совокупность методов искусственного расширения обучающей выборки путём применения к имеющимся объектам преобразований, сохраняющих или контролируемо изменяющих их метку. Аугментация используется при обучении моделей [[машинное обучение|машинного обучения]] для борьбы с [[переобучение|переобучением]], повышения устойчивости моделей к вариативности реальных данных и увеличения эффективного объёма обучающей выборки без затрат на разметку новых примеров.
+
'''Дообучение нейронных сетей''' (''fine-tuning'') — способ обучения модели, при котором в качестве начального приближения параметров берётся не случайная инициализация, а веса модели, уже [[предобучение|предобученной]] на некоторой большой вспомогательной задаче, после чего эти веса дополнительно настраиваются (дообучаются) на данных целевой задачи. Дообучение — центральный приём [[трансферное обучение|трансферного обучения]] и на сегодняшний день стандартный способ адаптации крупных предобученных моделей — как в компьютерном зрении, так и в обработке естественного языка — к конкретным прикладным задачам.
== Введение ==
== Введение ==
-
Пусть задана обучающая выборка <tex>X = \{(x_i, y_i)\}_{i=1}^n</tex>, где <tex>x_i</tex> — объект, <tex>y_i</tex> его метка (ответ). ''Аугментацией'' называется применение к объекту <tex>x_i</tex> некоторого преобразования <tex>t</tex> из заданного семейства <tex>\mathcal{T}</tex>, порождающего новый объект <tex>t(x_i)</tex>, который либо сохраняет исходную метку <tex>y_i</tex> (label-preserving augmentation), либо порождает вместе с ней новую, скорректированную метку как в методах [[#MixUp|MixUp]] и [[#CutMix|CutMix]].
+
Идею дообучения проще всего пояснить на бытовом уровне: человек, уже умеющий играть на фортепиано, осваивает орган значительно быстрее, чем человек, никогда не сидевший за клавишным инструментом общие навыки (координация рук, чтение нот, чувство ритма) переносятся, доучить нужно лишь специфику нового инструмента (педали, регистры). Ровно так же нейронная сеть, обученная на большом и разнообразном датасете, приобретает общие представления о структуре данных предметной области (в изображениях границы, текстуры, части объектов; в текстах — синтаксис, семантика слов, мировые знания), которые затем достаточно лишь адаптировать под конкретную задачу, а не выучивать заново.
-
Формально расширенная выборка имеет вид:
+
Формально дообучение задаётся так. Пусть <tex>\theta_0</tex> — параметры модели, полученные в результате предобучения на вспомогательной задаче с большим датасетом <tex>D_{pre}</tex>. Дообучение находит
-
:: <tex> X_{aug} = \{(t(x_i), y_i) \mid (x_i, y_i) \in X,\ t \in \mathcal{T}\} </tex>
+
:: <tex> \theta^* = \arg\min_{\theta} \frac{1}{n}\sum_{i=1}^n L(f_\theta(x_i), y_i), \qquad \text{инициализация: } \theta = \theta_0 </tex>
-
Аугментация решает три взаимосвязанные задачи.
+
на датасете целевой задачи <tex>D_{target} = \{(x_i,y_i)\}_{i=1}^n</tex>, который, как правило, на порядки меньше <tex>D_{pre}</tex>.
-
# '''Борьба с переобучением.''' Современные модели, особенно глубокие [[нейронная сеть|нейронные сети]], обладают числом параметров, зачастую превышающим число обучающих примеров. Без ограничения сложности такая модель способна запомнить обучающую выборку, потеряв [[обобщающая способность|обобщающую способность]]. Аугментация уменьшает разрыв между эмпирическим и ожидаемым риском, действуя как форма [[регуляризация|регуляризации]].
+
Дообучение стало стандартом по трём причинам. Во-первых, обучение крупной модели «с нуля» на каждую новую задачу требует огромных вычислительных ресурсов и датасетов сопоставимого объёма, которых для большинства прикладных задач просто нет. Во-вторых, эмпирически показано, что признаки, извлекаемые нижними и средними слоями предобученной сети, во многом универсальны и слабо зависят от конкретной целевой задачи (см. классическую работу Йосински и соавторов). В-третьих, появление больших моделей ([[большая языковая модель|больших языковых моделей]], крупных сверточных сетей и [[трансформер|трансформеров]] зрения), предобученных на веб-масштабных корпусах, сделало дообучение практически безальтернативным способом получить качественную модель под задачу с ограниченным бюджетом на данные и вычисления.
-
# '''Повышение робастности.''' Модель, обученная на аугментированных данных, лучше переносит вариативность реальных условий эксплуатации — изменение освещения, ракурса, шум в канале связи, опечатки в тексте, — поскольку встречала аналогичные искажения при обучении.
+
-
# '''Увеличение эффективного размера выборки.''' Сбор и разметка новых данных часто дороги или невозможны (редкие заболевания, аварийные ситуации, малоресурсные языки). Аугментация позволяет получить дополнительные обучающие примеры почти бесплатно, хотя и не привносит принципиально новой информации об истинном распределении данных.
+
-
Аугментацию данных следует отличать от смежных понятий. В отличие от синтеза данных (data synthesis), где новые объекты порождаются генеративной моделью без опоры на конкретный исходный пример, аугментация всегда отталкивается от реального объекта выборки. В отличие от простого передискретизации (resampling, например дублирования примеров редкого класса), аугментация создаёт новые, отличающиеся от исходных объекты.
+
== Постановка задачи ==
-
== Мотивация ==
+
Типичный сценарий дообучения выглядит следующим образом.
-
С теоретической точки зрения аугментацию удобно рассматривать в рамках концепции ''минимизации риска в окрестности'' (Vicinal Risk Minimization, VRM), предложенной Шапелем и соавторами. Классическая минимизация эмпирического риска ищет функцию <tex>f</tex>, минимизирующую
+
# Берётся модель, предобученная на большом, обычно слабо- или самообучаемом датасете общего назначения: ImageNet (14 млн размеченных изображений) для моделей компьютерного зрения, Wikipedia и Common Crawl (сотни миллиардов токенов) для языковых моделей, пары «изображение — подпись» из веба для мультимодальных моделей.
 +
# Задача предобучения (классификация на 1000 классов ImageNet, предсказание замаскированного токена, контрастное сопоставление изображения и текста) как правило не совпадает с целевой задачей практика, но заставляет модель выучить содержательные внутренние представления данных.
 +
# У модели заменяется «голова» (последний слой или несколько слоёв), специфичная для предобучения, на новую голову, соответствующую целевой задаче (например, классификатор на нужное число классов, слой для регрессии, декодер для генерации).
 +
# Модель дообучается на датасете целевой задачи, который может состоять из нескольких сотен — нескольких десятков тысяч примеров, что на порядки меньше объёма датасета предобучения.
-
:: <tex> R_{emp}(f) = \frac{1}{n}\sum_{i=1}^n L(f(x_i), y_i) </tex>
+
Ключевое допущение, оправдывающее этот сценарий, — гипотеза о переносимости представлений: признаковое пространство, выученное при решении задачи предобучения, достаточно богато, чтобы линейный или неглубокий классификатор поверх него уже неплохо решал целевую задачу, а дообучение лишь «дошлифовывает» это пространство под её специфику.
-
Однако эмпирическое распределение, сосредоточенное в точках выборки, — крайне грубое приближение истинного распределения данных. Идея VRM состоит в замене этого распределения на распределение, «размазанное» по окрестности (vicinity) каждой точки:
+
== Стратегии дообучения ==
-
:: <tex> R_{vic}(f) = \frac{1}{n}\sum_{i=1}^n \mathbb{E}_{(\tilde{x}, \tilde{y}) \sim v(x_i, y_i)} \left[ L(f(\tilde{x}), \tilde{y}) \right] </tex>
+
По степени вовлечённости параметров предобученной модели в обновление принято выделять три стратегии.
-
где <tex>v(x_i, y_i)</tex> — распределение вероятностей на объектах, «похожих» на <tex>(x_i, y_i)</tex>. Аугментация — это практический способ построения выборки из <tex>v(x_i, y_i)</tex>: каждое случайное преобразование <tex>t \sim \mathcal{T}</tex> задаёт один сэмпл из окрестности исходной точки.
+
=== Полное дообучение ===
-
Такая интерпретация напрямую связывает аугментацию с [[регуляризация|регуляризацией]]:
+
При полном дообучении (full fine-tuning) обновляются все параметры модели, включая предобученные слои. Это даёт максимальную гибкость адаптации и, как правило, наилучшее итоговое качество при достаточном объёме данных целевой задачи, но сопряжено с наибольшим риском [[переобучение|переобучения]] на малых датасетах и наибольшими вычислительными затратами — по памяти и по времени приходится хранить и обновлять градиенты по всем параметрам, а для по-настоящему больших моделей (десятки и сотни миллиардов параметров) это становится попросту недоступно на рядовом оборудовании.
-
* Как и <tex>L_1</tex>/<tex>L_2</tex>-регуляризация, аугментация ограничивает эффективную сложность модели — но не через штраф на веса, а через расширение множества примеров, на которых модель обязана давать согласованный ответ.
+
<source lang="python">
-
* Аугментация вносит в обучение априорное знание о том, какие преобразования объекта не должны менять его метку (инвариантности). Поворот фотографии кошки на 10° не должен превращать её в собаку — это знание нельзя вывести из самих пикселей, оно привносится извне, подобно тому, как архитектурные ограничения (например, свёрточные слои) кодируют априорное знание о трансляционной инвариантности.
+
import torch
-
* Эмпирически модели, обученные с аугментацией, демонстрируют меньший разрыв между качеством на обучающей и тестовой выборках при сопоставимом или лучшем качестве на тесте — то есть меньшее переобучение.
+
from transformers import AutoModelForSequenceClassification
-
Выигрыш от аугментации максимален, когда используемые преобразования действительно сохраняют семантику задачи и отражают вариативность, ожидаемую в реальных данных. Преобразования, не соответствующие этому условию, способны не регуляризировать, а вносить шум — см. раздел [[#Ограничения и риски|«Ограничения и риски»]].
+
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
 +
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
 +
# все параметры модели, включая предобученные слои трансформера, обновляются
 +
</source>
-
== Аугментация изображений ==
+
=== Дообучение только последних слоёв (feature extraction) ===
-
Изображения исторически первая и наиболее развитая область применения аугментации, начиная с классической работы Крижевского, Суцкевера и Хинтона по сети AlexNet (2012), где применялись случайные сдвиги, отражения и изменение интенсивности каналов RGB.
+
Противоположный по духу подход заморозить все предобученные слои (использовать их как неизменный экстрактор признаков) и обучать только новую голову модели. Такой режим требует минимума вычислений и хорошо работает, когда целевая задача близка по природе данных к задаче предобучения, а датасет очень мал.
-
 
+
-
=== Геометрические преобразования ===
+
-
 
+
-
* '''Повороты''' (rotation) — поворот изображения на случайный угол <tex>\theta</tex>:
+
-
 
+
-
:: <tex> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </tex>
+
-
 
+
-
Небольшие углы (обычно ±10–30°) сохраняют метку класса; углы, кратные 90°, применимы почти всегда, за исключением задач, где ориентация значима (распознавание дорожных знаков, текста).
+
-
 
+
-
* '''Отражения''' (flip) — горизонтальное отражение почти универсально применимо; вертикальное — только если ориентация объекта не несёт смысла.
+
-
* '''Сдвиги''' (translation) — перенос изображения по осям с заполнением освободившейся области (padding, reflection, constant fill).
+
-
* '''Масштабирование и обрезка''' (scale, random crop) — изменение масштаба объекта и вырезание случайного фрагмента, эмулирующее вариативность расстояния до камеры.
+
-
* '''Аффинные и перспективные искажения''' — сдвиг (shear), изменение перспективы, эластичные деформации (elastic distortions), впервые систематически использованные Симаром и соавторами для распознавания рукописных цифр.
+
-
 
+
-
=== Цветовые (фотометрические) преобразования ===
+
-
 
+
-
* Изменение '''яркости''' (brightness), '''контраста''' (contrast), '''насыщенности''' (saturation) и '''оттенка''' (hue) — как правило, реализуется случайным изменением соответствующих каналов в цветовом пространстве HSV.
+
-
* '''PCA color augmentation''' («fancy PCA») — добавление шума вдоль главных компонент распределения цветов по каналам RGB, впервые предложенное в работе по AlexNet.
+
-
* Перевод в оттенки серого, постеризация, инверсия цвета — используются реже, в задачах, устойчивых к потере цветовой информации.
+
-
 
+
-
=== Добавление шума ===
+
-
 
+
-
Наложение гауссовского шума, шума типа «соль и перец» (salt-and-pepper), размытия (Gaussian blur, motion blur) эмулирует артефакты реальных камер и каналов передачи и повышает устойчивость модели к низкому качеству входных изображений.
+
-
 
+
-
Пример на псевдокоде (библиотека Albumentations):
+
<source lang="python">
<source lang="python">
-
import albumentations as A
+
for param in model.base_model.parameters():
 +
param.requires_grad = False
-
transform = A.Compose([
+
for param in model.classifier.parameters():
-
A.Rotate(limit=25, p=0.5),
+
param.requires_grad = True
-
A.HorizontalFlip(p=0.5),
+
-
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
+
-
A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
+
-
])
+
-
augmented = transform(image=image)["image"]
+
optimizer = torch.optim.AdamW(
 +
filter(lambda p: p.requires_grad, model.parameters()), lr=1e-3
 +
)
</source>
</source>
-
== Продвинутые методы для изображений ==
+
=== Дообучение с заморозкой части слоёв ===
-
=== MixUp ===
+
Промежуточный вариант — заморозить нижние слои (кодирующие наиболее общие, задаче-независимые признаки) и дообучать верхние слои вместе с новой головой. Часто применяется постепенная разморозка (gradual unfreezing, предложенная в ULMFiT): обучение начинается с замороженными всеми предобученными слоями, затем слои размораживаются постепенно, от верхних к нижним, на протяжении нескольких эпох, что снижает риск разрушения полезных предобученных представлений на ранних, наименее стабильных шагах обучения.
-
Метод MixUp (Чжан и соавторы, 2018) отходит от идеи преобразования одного объекта и вместо этого строит новый объект как линейную комбинацию двух случайно выбранных примеров обучающей выборки вместе с их метками:
+
== Выбор скорости обучения ==
-
:: <tex> \tilde{x} = \lambda x_i + (1-\lambda) x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j </tex>
+
Скорость обучения ([[скорость обучения|learning rate]]) при дообучении, как правило, выбирается существенно меньше, чем при обучении с нуля — типичные значения лежат в диапазоне <tex>10^{-5}</tex>–<tex>10^{-4}</tex> против <tex>10^{-3}</tex>–<tex>10^{-2}</tex> для обучения с нуля. Причина в том, что предобученные веса уже находятся в содержательной области пространства параметров, и большой шаг градиентного спуска рискует «разрушить» выученные представления раньше, чем модель успеет их полезно адаптировать под новую задачу.
-
где коэффициент смешивания <tex>\lambda \sim \mathrm{Beta}(\alpha, \alpha)</tex>, а параметр <tex>\alpha</tex> обычно берётся в диапазоне 0.1–0.4. MixUp — прямая практическая реализация VRM: окрестность точки задаётся не локальным искажением, а отрезком, соединяющим её с другими точками выборки. Метод сглаживает решающую поверхность классификатора и снижает его чувствительность к состязательным возмущениям.
+
Для новой, случайно инициализированной головы модели, напротив, оправдана более высокая скорость обучения — её веса ещё не несут полезной информации, и их можно (и нужно) обучать быстрее. Этот принцип формализуется в виде ''дифференциальных скоростей обучения'' (discriminative learning rates, введены в работе Ховарда и Рудера, ULMFiT): каждому слою <tex>l</tex> назначается собственная скорость обучения, убывающая от верхних слоёв к нижним:
-
=== CutMix ===
+
:: <tex> \eta_l = \eta_L \cdot \xi^{\,L-l} </tex>
-
CutMix (Юн и соавторы, 2019) комбинирует идею MixUp с идеей вырезания области (см. Random Erasing ниже): прямоугольная область одного изображения заменяется соответствующей областью другого, а метка смешивается пропорционально площади вставленного фрагмента:
+
где <tex>L</tex> — номер последнего слоя, <tex>\eta_L</tex> — скорость обучения для последнего (нового) слоя, <tex>\xi < 1</tex> — коэффициент затухания (в оригинальной работе <tex>\xi \approx 1/2.6</tex>).
-
 
+
-
:: <tex> \tilde{x} = M \odot x_i + (1-M) \odot x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j </tex>
+
-
 
+
-
где <tex>M</tex> — бинарная маска, вырезающая прямоугольную область, <tex>\lambda</tex> — доля площади, приходящаяся на <tex>x_i</tex>. По сравнению с MixUp, CutMix не создаёт визуально неестественных «полупрозрачных» изображений и, по данным авторов, даёт дополнительный выигрыш в задачах локализации объектов, поскольку заставляет модель использовать всю информативную область изображения, а не только наиболее заметный фрагмент.
+
-
 
+
-
=== Random Erasing и Cutout ===
+
-
 
+
-
Методы Random Erasing (Чжун и соавторы) и близкий к нему Cutout (Де Врис и Тейлор) случайным образом закрашивают прямоугольную область изображения однородным цветом или шумом, метка при этом не меняется. Эффект аналогичен dropout, но применяется на уровне входных данных: модель вынуждена не полагаться на какой-то один локальный признак и распределять внимание по всему объекту.
+
-
 
+
-
=== AutoAugment ===
+
-
 
+
-
AutoAugment (Кубук и соавторы, 2019) переформулирует выбор политики аугментации как задачу обучения с подкреплением: контроллер (рекуррентная сеть) ищет оптимальную последовательность операций (тип преобразования, вероятность применения и магнитуда), максимизирующую качество модели-«ребёнка» на отложенной выборке. Найденные политики для CIFAR-10, SVHN и ImageNet оказались переносимыми между задачами, но сам поиск чрезвычайно затратен вычислительно (тысячи GPU-часов).
+
-
 
+
-
=== RandAugment ===
+
-
 
+
-
RandAugment (Кубук и соавторы, 2020) — упрощение AutoAugment, устраняющее необходимость дорогостоящего поиска политики. Вместо обучаемого контроллера RandAugment случайным образом выбирает <tex>N</tex> операций из фиксированного набора и применяет их с единой глобальной магнитудой <tex>M</tex>, которые подбираются простым перебором по сетке на небольшом числе значений. При сопоставимом качестве RandAugment требует на порядки меньше вычислений, чем AutoAugment, что сделало его стандартом де-факто в современных конвейерах обучения свёрточных сетей и трансформеров зрения.
+
<source lang="python">
<source lang="python">
-
import torchvision.transforms as T
+
optimizer = torch.optim.AdamW([
-
 
+
{"params": model.encoder.layer[:6].parameters(), "lr": 1e-5},
-
transform = T.Compose([
+
{"params": model.encoder.layer[6:].parameters(), "lr": 3e-5},
-
T.RandAugment(num_ops=2, magnitude=9),
+
{"params": model.classifier.parameters(), "lr": 1e-3},
-
T.ToTensor(),
+
])
])
</source>
</source>
-
== Аугментация текстов ==
+
Дополнительно на первых шагах дообучения часто применяется ''разогрев'' (warm-up) скорости обучения — плавный линейный рост от нуля до целевого значения на протяжении первых 5–10 % шагов, — что снижает риск дестабилизации предобученных весов в самом начале обучения, когда статистика градиентов ещё нестабильна.
-
В отличие от изображений, текст дискретен, что делает многие геометрические аналогии неприменимыми: небольшое «искажение» символа может полностью разрушить смысл слова. Поэтому текстовая аугментация опирается на лингвистически осмысленные преобразования.
+
== Регуляризация при дообучении ==
-
=== EDA (Easy Data Augmentation) ===
+
Так как датасет целевой задачи обычно значительно меньше датасета предобучения, риск переобучения при дообучении выше, а привычные для обучения с нуля значения гиперпараметров регуляризации, как правило, требуют пересмотра.
-
Вэй и Цзоу (2019) предложили набор из четырёх простых операций, применяемых к случайно выбранным словам предложения:
+
* '''Ранняя остановка''' ([[ранняя остановка|early stopping]]) — обучение прерывается по достижении минимума ошибки на отложенной выборке; при дообучении переобучение может наступать уже после одной-двух эпох, поэтому контроль по валидации особенно важен.
 +
* '''Меньший вес регуляризации.''' Так как модель стартует из уже хорошо регуляризованной, содержательной точки пространства параметров, а не из случайной инициализации, типичные веса <tex>L_2</tex>-регуляризации (weight decay) при дообучении берут меньше, чем при обучении с нуля, чтобы не «стягивать» полезные предобученные веса к нулю.
 +
* '''Меньший размер батча.''' Малый датасет целевой задачи ограничивает разумный размер батча снизу и сверху одновременно: слишком большой батч на малом датасете даёт мало шагов оптимизации за эпоху и грубую оценку градиента по немногочисленным примерам; на практике для дообучения часто используют батчи меньшего размера, чем при предобучении, компенсируя это большим числом эпох или накоплением градиента (gradient accumulation).
 +
* '''Dropout и слой-specific регуляризация''' обычно сохраняются на уровне значений, использованных при предобучении, либо слегка увеличиваются, если целевой датасет заметно меньше.
 +
* '''Аугментация данных''' — дополнительный источник эффективной регуляризации при малом объёме целевых данных, подробно описанный в статье [[Аугментация данных]].
-
# '''Синонимичная замена''' (synonym replacement) — замена слова на синоним из тезауруса (например, WordNet).
+
== Связь с объёмом данных ==
-
# '''Случайная вставка''' (random insertion) — вставка синонима случайного слова предложения в случайную позицию.
+
-
# '''Случайное удаление''' (random deletion) — удаление слова с заданной вероятностью.
+
-
# '''Случайная перестановка''' (random swap) — обмен местами двух случайно выбранных слов.
+
-
Несмотря на простоту, EDA даёт заметный прирост качества классификации текста на малых выборках при незначительных вычислительных затратах.
+
Выбор между дообучением и обучением с нуля, а также выбор конкретной стратегии дообучения (полное, частичное, feature extraction) существенно зависит от соотношения объёма целевого датасета и степени сходства целевой задачи с задачей предобучения.
-
=== Обратный перевод (back-translation) ===
+
* '''Малый датасет, задача близка к предобучению''' (например, классификация нового набора классов естественных изображений). Оправдано дообучение только последних слоёв или дообучение с заморозкой большей части сети — риск переобучения при полном дообучении на малом датасете высок, а признаки нижних слоёв уже достаточно универсальны.
 +
* '''Малый датасет, задача далека от предобучения''' (например, дообучение модели, предобученной на естественных фотографиях, для задачи на рентгеновских снимках). Это наиболее сложный случай: заморозка нижних слоёв может помешать адаптации к специфике новых данных, но полное дообучение на малом датасете рискует переобучиться. На практике здесь часто выигрывают частичная заморозка с постепенной разморозкой, сильная аугментация и параметро-эффективные методы (см. ниже).
 +
* '''Большой датасет, задача близка к предобучению.''' Полное дообучение обычно даёт наилучший результат — данных достаточно, чтобы аккуратно адаптировать все параметры без переобучения.
 +
* '''Большой датасет, задача далека от предобучения.''' При достаточно большом объёме целевых данных выигрыш от предобучения снижается, а иногда обучение с нуля даёт сопоставимое или лучшее качество (см. обсуждение в работе Корнблита и соавторов о переносимости моделей ImageNet), хотя предобучение обычно всё равно ускоряет сходимость.
-
Метод, предложенный Зеннрихом и соавторами (2016) первоначально для машинного перевода, заключается в переводе текста на промежуточный язык и обратно (например, русский → английский → русский). Результат сохраняет смысл исходного текста, но может отличаться лексически и синтаксически, что даёт естественную и разнообразную аугментацию:
+
Общее эмпирическое правило: чем меньше целевой датасет и чем ближе он по природе данных к датасету предобучения, тем осторожнее (меньше обучаемых параметров, меньшая скорость обучения, сильнее регуляризация) должно быть дообучение.
-
<source lang="python">
+
== Параметро-эффективные методы дообучения ==
-
text_en = translate(text_ru, src="ru", tgt="en")
+
-
text_ru_aug = translate(text_en, src="en", tgt="ru")
+
-
</source>
+
-
Back-translation особенно ценен тем, что не требует внешнего тезауруса и хорошо работает даже для сложных, многозначных конструкций, где простая замена слов ведёт к потере смысла.
+
Полное дообучение крупных моделей (сотни миллионов — сотни миллиардов параметров) требует хранения градиентов и состояний оптимизатора для каждого параметра, что для по-настоящему больших моделей становится вычислительно неподъёмным, а при необходимости хранить отдельную копию весов под каждую задачу — ещё и неподъёмным по памяти на диске. Параметро-эффективные методы дообучения (parameter-efficient fine-tuning, PEFT) решают эту проблему, замораживая почти все веса предобученной модели и добавляя небольшое число новых, обучаемых параметров.
-
=== Другие методы ===
+
=== Адаптеры (Adapters) ===
-
* '''Контекстные замены на основе языковых моделей''' — маскирование слова и его восстановление предобученной языковой моделью (например, BERT), что даёт более естественные, согласованные с контекстом замены по сравнению со словарными синонимами.
+
Метод, предложенный Хоулсби и соавторами, вставляет в каждый блок трансформера небольшие полносвязные модули-«бутылочные горлышки» (adapter modules), которые обучаются, тогда как исходные веса модели остаются замороженными:
-
* '''Перефразирование''' (paraphrasing) генеративными моделями.
+
-
* '''Добавление шума на уровне символов''' — опечатки, замена раскладки клавиатуры, случайные вставки/удаления символов — полезно для повышения устойчивости моделей к «грязному» пользовательскому вводу.
+
-
== Аугментация табличных данных ==
+
:: <tex> h \leftarrow h + f\bigl(h\, W_{down}\bigr) W_{up} </tex>
-
Табличные данные хуже поддаются интуитивным преобразованиям: у признаков часто нет естественной топологии (в отличие от соседних пикселей изображения), поэтому произвольный шум может нарушить статистические зависимости между признаками.
+
где <tex>W_{down} \in \mathbb{R}^{d \times r}</tex>, <tex>W_{up} \in \mathbb{R}^{r \times d}</tex>, <tex>r \ll d</tex>, <tex>f</tex> — нелинейность. Число обучаемых параметров пропорционально <tex>r</tex> и составляет обычно единицы процентов от размера исходной модели, при почти сопоставимом с полным дообучением качестве.
-
=== Добавление шума ===
+
=== Префиксное обучение (Prefix-Tuning) ===
-
Простейший приём — добавление небольшого гауссовского шума к числовым признакам, джиттеринг:
+
Ли и Лян предложили не изменять веса модели вовсе, а добавлять к последовательности небольшое число обучаемых «виртуальных токенов» (префикс), которые подаются на вход каждого слоя внимания трансформера в качестве дополнительных ключей и значений. Модель как таковая остаётся полностью замороженной, а под задачу обучается лишь сам префикс — это даёт наибольшую экономию памяти на хранение весов (одна копия базовой модели обслуживает множество задач с разными префиксами), но обычно уступает адаптерам и LoRA в качестве на сложных генеративных задачах.
-
:: <tex> \tilde{x}^{(k)} = x^{(k)} + \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, \sigma^2) </tex>
+
=== LoRA (Low-Rank Adaptation) ===
-
Величина <tex>\sigma</tex> подбирается пропорционально дисперсии признака, чтобы не разрушить полезный сигнал.
+
LoRA (Ху и соавторы) исходит из наблюдения, что эффективное изменение весов при дообучении обладает низким рангом: вместо явного обновления матрицы весов <tex>W_0</tex> целиком, LoRA представляет добавку в виде произведения двух малоранговых матриц:
-
=== SMOTE для дисбаланса классов ===
+
:: <tex> W = W_0 + \Delta W = W_0 + BA, \qquad B \in \mathbb{R}^{d\times r},\ A \in \mathbb{R}^{r\times k},\ r \ll \min(d,k) </tex>
-
SMOTE (Synthetic Minority Over-sampling Technique, Чавла и соавторы, 2002) — стандартный метод борьбы с [[дисбаланс классов|дисбалансом классов]]. Для объекта <tex>x_i</tex> миноритарного класса находятся его <tex>k</tex> ближайших соседей того же класса, один из них <tex>x_{zi}</tex> выбирается случайно, и новый синтетический объект строится как точка на отрезке между ними:
+
Матрица <tex>W_0</tex> остаётся замороженной, обучаются только <tex>A</tex> и <tex>B</tex>, число параметров которых на порядки меньше числа параметров <tex>W_0</tex>. После обучения матрицы <tex>A</tex> и <tex>B</tex> можно слить с <tex>W_0</tex> (<tex>W_0 + BA</tex>), что не добавляет дополнительной задержки на этапе применения модели — в отличие от адаптеров, которые вносят небольшой, но ненулевой оверхед на инференсе. Это свойство сделало LoRA одним из самых распространённых способов дообучения больших языковых моделей на потребительском оборудовании.
-
 
+
-
:: <tex> x_{new} = x_i + \delta \cdot (x_{zi} - x_i), \qquad \delta \sim U(0, 1) </tex>
+
-
 
+
-
В отличие от простого дублирования объектов миноритарного класса, SMOTE порождает разнообразные, но правдоподобные точки внутри его области в признаковом пространстве, снижая риск переобучения на буквально повторяющихся примерах.
+
<source lang="python">
<source lang="python">
-
from imblearn.over_sampling import SMOTE
+
from peft import LoraConfig, get_peft_model
-
smote = SMOTE(k_neighbors=5, random_state=42)
+
config = LoraConfig(
-
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
+
r=8,
-
</source>
+
lora_alpha=16,
-
 
+
target_modules=["q_proj", "v_proj"],
-
Существует ряд модификаций: Borderline-SMOTE (генерация только вблизи границы классов), ADASYN (адаптивное распределение количества синтетических примеров в зависимости от локальной сложности классификации), SMOTE-NC (для смешанных категориальных и числовых признаков).
+
lora_dropout=0.05,
-
 
+
bias="none",
-
=== Генеративные подходы ===
+
task_type="CAUSAL_LM",
-
 
+
)
-
Для более сложных зависимостей между признаками применяют генеративные модели — вариационные автокодировщики и генеративно-состязательные сети, обученные аппроксимировать совместное распределение признаков и способные генерировать новые правдоподобные строки таблицы (например, CTGAN в библиотеке SDV). Такие методы дороже в применении и требуют отдельного этапа обучения генератора, но лучше сохраняют многомерные зависимости между признаками, чем покомпонентный шум.
+
-
 
+
-
== Аугментация аудио и временных рядов ==
+
-
 
+
-
* '''Растяжение по времени''' (time stretching) — изменение длительности сигнала без изменения высоты тона.
+
-
* '''Сдвиг по высоте тона''' (pitch shifting) — изменение высоты тона без изменения темпа.
+
-
* '''Добавление фонового шума''' — наложение записанного шума окружения (уличный шум, шум толпы) с заданным отношением сигнал/шум.
+
-
* '''Временной сдвиг''' (time shift) — циклический сдвиг сигнала во времени.
+
-
* '''SpecAugment''' (Парк и соавторы, 2019) — вместо преобразования исходного сигнала во временной области метод оперирует спектрограммой: случайно маскируются полосы по оси времени (time masking) и по оси частот (frequency masking), а также применяется деформация оси времени (time warping). SpecAugment стал стандартом в задачах распознавания речи, обходясь без необходимости отдельно моделировать акустический шум.
+
-
* Для '''временных рядов общего вида''' применяются: window warping (локальное растяжение/сжатие отдельных участков ряда), перестановка сегментов, magnitude warping (плавное изменение амплитуды).
+
-
 
+
-
<source lang="python">
+
-
from audiomentations import Compose, AddGaussianNoise, TimeStretch, PitchShift
+
-
 
+
-
augment = Compose([
+
-
AddGaussianNoise(min_amplitude=0.001, max_amplitude=0.015, p=0.5),
+
-
TimeStretch(min_rate=0.8, max_rate=1.25, p=0.5),
+
-
PitchShift(min_semitones=-4, max_semitones=4, p=0.5),
+
-
])
+
-
augmented_samples = augment(samples=samples, sample_rate=16000)
+
model = get_peft_model(base_model, config)
 +
model.print_trainable_parameters()
</source>
</source>
-
== Сравнение методов по типам данных ==
+
== Сравнение стратегий дообучения ==
{| class="wikitable"
{| class="wikitable"
-
|+ Аугментация данных: сводная таблица по типам данных
+
|+ Сравнение стратегий дообучения нейронных сетей
-
! Тип данных !! Базовые методы !! Продвинутые методы !! Основные библиотеки !! Типичные задачи
+
! Стратегия !! Что обучается !! Доля обучаемых параметров !! Требования к данным !! Риск переобучения !! Типичное применение
|-
|-
-
| Изображения || Повороты, отражения, сдвиги, масштабирование, изменение яркости/контраста, шум || MixUp, CutMix, Random Erasing, AutoAugment, RandAugment || Albumentations, imgaug, torchvision.transforms || Классификация, детекция, сегментация
+
| Полное дообучение || Все веса модели || 100 % || Умеренный — большой датасет || Высокий на малых датасетах || Достаточно большой целевой датасет, задача существенно отличается от предобучения
|-
|-
-
| Текст || Синонимичные замены, случайные вставка/удаление/перестановка слов (EDA) || Обратный перевод, контекстные замены на основе языковых моделей || nlpaug, TextAttack || Классификация текста, NER, машинный перевод
+
| Дообучение последних слоёв (feature extraction) || Только новая голова || Доли процента || Малый датасет достаточен || Низкий || Малый датасет, задача близка к предобучению
|-
|-
-
| Табличные данные || Гауссовский шум, джиттеринг числовых признаков || SMOTE и его модификации, генерация через GAN/VAE || imbalanced-learn, SDV || Кредитный скоринг, медицинская диагностика, детекция мошенничества
+
| Дообучение с частичной заморозкой || Верхние слои и голова || От единиц до десятков процентов || Небольшой — умеренный датасет || Средний || Промежуточный случай, постепенная адаптация
|-
|-
-
| Аудио и временные ряды || Растяжение времени, сдвиг высоты тона, фоновый шум || SpecAugment, window warping, magnitude warping || audiomentations, librosa, torchaudio.transforms || Распознавание речи, анализ сенсорных сигналов
+
| Параметро-эффективные методы (LoRA, адаптеры, prefix-tuning) || Небольшой набор добавленных параметров || Обычно менее 1 % || Малый — умеренный датасет || Низкий || Дообучение очень крупных моделей при ограниченных вычислительных ресурсах, многозадачное обслуживание одной базовой модели
|}
|}
-
== Динамическая vs статическая аугментация ==
+
== Примеры из практики ==
-
По моменту применения различают два режима.
+
=== Дообучение BERT для задач NLP ===
-
* '''Статическая аугментация''' (offline augmentation) — новые объекты генерируются заранее и сохраняются на диск вместе с исходной выборкой. Преимущество — предсказуемая и воспроизводимая скорость обучения, отсутствие накладных расходов на преобразование во время обучения. Недостаток — конечное, фиксированное число вариаций каждого примера и повышенный расход дискового пространства.
+
Модель BERT, предобученная на задачах предсказания замаскированного токена и предсказания следующего предложения на текстах Wikipedia и BookCorpus, дообучается под конкретную задачу добавлением небольшой головы поверх векторного представления специального токена (классификация текста, определение сходства пары предложений) либо поверх представлений отдельных токенов (извлечение именованных сущностей, ответы на вопросы). Типичное дообучение BERT занимает 2–4 эпохи со скоростью обучения порядка <tex>2\cdot 10^{-5}</tex>–<tex>5\cdot 10^{-5}</tex>; более длительное обучение на небольших датасетах, как правило, приводит к переобучению.
-
* '''Динамическая аугментация''' (online / on-the-fly augmentation) — преобразование применяется к каждому примеру заново на каждой эпохе обучения, обычно в процессе загрузки батча. Модель практически никогда не видит два эпохи подряд один и тот же объект в неизменном виде, что даёт эффективно неограниченное число вариаций и лучше действует как регуляризатор. Плата — дополнительная вычислительная нагрузка на CPU/GPU во время обучения, которая при плохой организации конвейера данных может стать узким местом, особенно для затратных преобразований (back-translation, генеративные модели).
+
-
На практике для изображений и аудио почти всегда используется динамическая аугментация (стандартный загрузчик данных в PyTorch или tf.data в TensorFlow применяют преобразования «на лету» в параллельных потоках), тогда как дорогостоящие методы — back-translation, генерация синтетических табличных строк GAN-моделью — чаще выполняются статически, один раз, поскольку их вычислительная стоимость несопоставима со стоимостью одного шага обучения.
+
=== Дообучение ResNet для классификации медицинских изображений ===
-
== Ограничения и риски ==
+
Сети семейства ResNet, предобученные на ImageNet, широко используются как основа для классификации медицинских изображений (рентгеновские снимки, гистологические срезы), несмотря на существенное различие статистики естественных фотографий и медицинских изображений. Типичная практика — заморозить нижние сверточные блоки (кодирующие универсальные примитивы вроде границ и текстур) и дообучать верхние блоки вместе с новой головой классификации, дополнительно применяя специфичную для медицинских изображений аугментацию и усиленный контроль по валидационной выборке ввиду типично небольшого объёма размеченных медицинских данных.
-
Аугментация — не универсально полезный приём, и её бездумное применение способно ухудшить качество модели.
+
=== Дообучение CLIP для мультимодальных задач ===
-
* '''Нарушение семантики задачи.''' Преобразование, кажущееся безобидным для одной задачи, может разрушать критичную информацию для другой. Вертикальное отражение допустимо для классификации пейзажей, но недопустимо для распознавания рукописных цифр (перевёрнутая «6» становится похожей на «9»). Изменение цвета недопустимо в задачах, где цвет — диагностический признак.
+
CLIP, предобученный контрастным сопоставлением изображений и текстовых описаний на масштабном веб-корпусе пар «изображение — подпись», дообучается под специфические мультимодальные задачи (поиск изображений по тексту в узкой предметной области, классификация с нестандартным набором классов через текстовые запросы). Из-за масштаба модели и общей природы контрастной задачи предобучения для CLIP особенно часто применяют параметро-эффективные методы дообучения или дообучение исключительно линейного классификатора (linear probing) поверх замороженного визуального энкодера, что зачастую даёт качество, близкое к полному дообучению, при кратно меньших вычислительных затратах.
-
* '''«Нереалистичные» примеры.''' Чрезмерно сильная или неудачно подобранная магнитуда преобразования порождает объекты, не встречающиеся в реальном распределении данных. Обучение на таких примерах не улучшает, а искажает представление модели о задаче, тратя ёмкость модели на нерелевантные вариации.
+
 
-
* '''Смещение статистики распределения.''' Некоторые методы (например, агрессивный MixUp) смещают эффективное распределение обучающей выборки относительно тестового распределения, что может ухудшить калибровку итоговых вероятностей модели.
+
== RLHF: дообучение с подкреплением из обратной связи человека ==
-
* '''Ложное чувство защищённости от переобучения.''' Аугментация снижает, но не устраняет переобучение полностью и не заменяет собой недостаток данных для принципиально новых классов или редких сценариев, отсутствующих в обучающей выборке ни в каком виде.
+
 
-
* '''Вычислительная стоимость.''' Продвинутые методы (AutoAugment, back-translation, генеративные модели для табличных данных) требуют значительных дополнительных вычислительных ресурсов, что не всегда оправдано выигрышем в качестве.
+
Особый случай дообучения — обучение с подкреплением из обратной связи человека (Reinforcement Learning from Human Feedback, RLHF), применяемое для приведения поведения [[большая языковая модель|больших языковых моделей]] в соответствие с предпочтениями людей после этапа предобучения и обычного дообучения с учителем (supervised fine-tuning, SFT). Метод, восходящий к работе Кристиано и соавторов и получивший широкую известность благодаря InstructGPT (Оуян и соавторы), состоит из трёх этапов.
-
* '''Разрушение зависимостей между признаками.''' Для табличных данных особенно легко случайно нарушить содержательные зависимости между признаками, если шум добавляется к каждому признаку независимо, — стоит проверять, что аугментированные объекты остаются правдоподобными с точки зрения предметной области.
+
 
 +
# '''Supervised fine-tuning''' — обычное дообучение предобученной модели на датасете примеров «запрос — качественный ответ», размеченных людьми.
 +
# '''Обучение модели вознаграждения''' (reward model) — на датасете пар ответов, ранжированных людьми по предпочтению, обучается отдельная модель, предсказывающая скалярную оценку качества ответа.
 +
# '''Дообучение политики методом обучения с подкреплением''' (обычно PPO) — языковая модель дообучается так, чтобы максимизировать предсказанное моделью вознаграждения качество ответов, с дополнительным штрафом за отклонение от SFT-модели (обычно в виде KL-дивергенции), предотвращающим слишком резкий уход политики от исходного, лингвистически естественного распределения ответов.
 +
 
 +
RLHF отличается от рассмотренных выше стратегий не техникой обновления весов (это может быть как полное, так и параметро-эффективное дообучение), а природой обучающего сигнала: вместо фиксированной размеченной обучающей выборки используется сигнал, получаемый через обучаемую модель вознаграждения, что относит задачу к области обучения с подкреплением, а не классического обучения с учителем.
 +
 
 +
== Ограничения и риски ==
-
Практическая рекомендация подбирать набор и магнитуду преобразований на отложенной (валидационной) выборке, а не полагаться на «стандартный» набор, скопированный из другой предметной области.
+
* '''Катастрофическое забывание''' (catastrophic forgetting) при дообучении модель может утратить часть навыков, приобретённых на этапе предобучения или на предыдущих задачах, если новые данные существенно смещают распределение весов. Явление известно с конца 1980-х годов (Маккласки и Коэн) и остаётся актуальным для современных крупных моделей; частичные решения включают заморозку части слоёв, малую скорость обучения, регуляризацию весов относительно исходной точки (например, Elastic Weight Consolidation) и ограничение числа шагов дообучения.
-
== Библиотеки и инструменты ==
+
:: <tex> L(\theta) = L_{new}(\theta) + \frac{\lambda}{2}\sum_i F_i\,(\theta_i - \theta_{0,i})^2 </tex>
-
* '''[https://albumentations.ai Albumentations]''' — библиотека для аугментации изображений, оптимизированная по скорости (реализация на OpenCV), поддерживает согласованное преобразование изображений вместе с масками сегментации, ограничивающими рамками и ключевыми точками, что важно для задач детекции и сегментации.
+
* '''Переобучение на малом датасете.''' Чем меньше целевой датасет, тем выше риск, что модель «запомнит» его специфические особенности вместо того, чтобы обобщить их; см. раздел [[#Регуляризация при дообучении|«Регуляризация при дообучении»]].
-
* '''[https://github.com/aleju/imgaug imgaug]''' — одна из первых широко используемых библиотек аугментации изображений в Python, гибкий API для построения сложных цепочек преобразований.
+
* '''Несоответствие распределений''' (distribution shift) между данными предобучения и целевой задачи снижает пользу от предобучения и в крайних случаях делает его бесполезным или даже вредным (отрицательный перенос, negative transfer).
-
* '''[https://pytorch.org/vision/stable/transforms.html torchvision.transforms]''' — модуль аугментации изображений, встроенный в PyTorch, включает готовые реализации RandAugment, AutoAugment, MixUp и CutMix.
+
* '''Вычислительные и инфраструктурные затраты.''' Полное дообучение крупных моделей требует значительных объёмов видеопамяти для хранения градиентов и состояний оптимизатора; хранение отдельной полной копии весов под каждую дообученную задачу дорого масштабируется при большом числе задач — именно эта проблема мотивирует параметро-эффективные методы.
-
* '''[https://github.com/makcedward/nlpaug nlpaug]''' — библиотека текстовой аугментации на уровне символов, слов и предложений, включая контекстные замены на основе языковых моделей и интеграцию с сервисами перевода для back-translation.
+
* '''Чувствительность к выбору гиперпараметров.''' Качество дообученной модели существенно зависит от скорости обучения, числа эпох и стратегии заморозки слоёв; в отличие от обучения с нуля, здесь неудачный выбор гиперпараметров может не просто замедлить сходимость, а необратимо испортить полезные предобученные представления.
-
* '''[https://github.com/iver56/audiomentations audiomentations]''' — аналог Albumentations для аудиосигналов, реализует растяжение времени, сдвиг тона, добавление шума и другие преобразования.
+
-
* '''[https://imbalanced-learn.org imbalanced-learn]''' — реализация SMOTE и его модификаций (Borderline-SMOTE, ADASYN, SMOTE-NC) для табличных данных, совместима с API scikit-learn.
+
== См. также ==
== См. также ==
-
* [[Регуляризация]]
+
* [[Трансферное обучение]]
-
* [[Переобучение]]
+
* [[Предобучение]]
-
* [[Дисбаланс классов]]
+
* [[Большая языковая модель]]
-
* [[Компьютерное зрение]]
+
* [[Трансформер]]
-
* [[Обработка естественного языка]]
+
* [[Дистилляция моделей]]
 +
* [[Адаптация низкого ранга]]
== Литература ==
== Литература ==
-
# ''Krizhevsky A., Sutskever I., Hinton G. E.'' ImageNet Classification with Deep Convolutional Neural Networks // Advances in Neural Information Processing Systems (NIPS). — 2012. — Vol. 25.
+
# ''Yosinski J., Clune J., Bengio Y., Lipson H.'' How Transferable Are Features in Deep Neural Networks? // Advances in Neural Information Processing Systems (NeurIPS). — 2014.
-
# ''Simard P. Y., Steinkraus D., Platt J. C.'' Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis // Proceedings of ICDAR. — 2003.
+
# ''Howard J., Ruder S.'' Universal Language Model Fine-tuning for Text Classification // Proceedings of ACL. — 2018.
-
# ''Chawla N. V., Bowyer K. W., Hall L. O., Kegelmeyer W. P.'' SMOTE: Synthetic Minority Over-sampling Technique // Journal of Artificial Intelligence Research. — 2002. — Vol. 16. — P. 321–357.
+
# ''Devlin J., Chang M.-W., Lee K., Toutanova K.'' BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding // Proceedings of NAACL-HLT. — 2019.
-
# ''Chapelle O., Weston J., Bottou L., Vapnik V.'' Vicinal Risk Minimization // Advances in Neural Information Processing Systems (NeurIPS). — 2000.
+
# ''Radford A., Kim J. W., Hallacy C. et al.'' Learning Transferable Visual Models From Natural Language Supervision // Proceedings of ICML. — 2021.
-
# ''Zhang H., Cisse M., Dauphin Y. N., Lopez-Paz D.'' mixup: Beyond Empirical Risk Minimization // International Conference on Learning Representations (ICLR). — 2018.
+
# ''Houlsby N., Giurgiu A., Jastrzebski S. et al.'' Parameter-Efficient Transfer Learning for NLP // Proceedings of ICML. — 2019.
-
# ''Yun S., Han D., Oh S. J., Chun S., Choe J., Yoo Y.'' CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features // Proceedings of ICCV. — 2019.
+
# ''Li X. L., Liang P.'' Prefix-Tuning: Optimizing Continuous Prompts for Generation // Proceedings of ACL-IJCNLP. — 2021.
-
# ''DeVries T., Taylor G. W.'' Improved Regularization of Convolutional Neural Networks with Cutout // arXiv preprint. — 2017.
+
# ''Hu E. J., Shen Y., Wallis P. et al.'' LoRA: Low-Rank Adaptation of Large Language Models // International Conference on Learning Representations (ICLR). — 2022.
-
# ''Zhong Z., Zheng L., Kang G., Li S., Yang Y.'' Random Erasing Data Augmentation // Proceedings of the AAAI Conference on Artificial Intelligence. — 2020.
+
# ''Christiano P., Leike J., Brown T. et al.'' Deep Reinforcement Learning from Human Preferences // Advances in Neural Information Processing Systems (NeurIPS). — 2017.
-
# ''Cubuk E. D., Zoph B., Mane D., Vasudevan V., Le Q. V.'' AutoAugment: Learning Augmentation Policies from Data // Proceedings of CVPR. — 2019.
+
# ''Ouyang L., Wu J., Jiang X. et al.'' Training Language Models to Follow Instructions with Human Feedback // Advances in Neural Information Processing Systems (NeurIPS). — 2022.
-
# ''Cubuk E. D., Zoph B., Shlens J., Le Q. V.'' RandAugment: Practical Automated Data Augmentation with a Reduced Search Space // Advances in Neural Information Processing Systems (NeurIPS). — 2020.
+
# ''McCloskey M., Cohen N. J.'' Catastrophic Interference in Connectionist Networks: The Sequential Learning Problem // Psychology of Learning and Motivation. — 1989. — Vol. 24.
-
# ''Wei J., Zou K.'' EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks // Proceedings of EMNLP-IJCNLP. — 2019.
+
# ''Kirkpatrick J., Pascanu R., Rabinowitz N. et al.'' Overcoming Catastrophic Forgetting in Neural Networks // Proceedings of the National Academy of Sciences (PNAS). — 2017.
-
# ''Sennrich R., Haddow B., Birch A.'' Improving Neural Machine Translation Models with Monolingual Data // Proceedings of the 54th Annual Meeting of the ACL. — 2016.
+
# ''Kornblith S., Shlens J., Le Q. V.'' Do Better ImageNet Models Transfer Better? // Proceedings of CVPR. — 2019.
-
# ''Park D. S., Chan W., Zhang Y., Chiu C.-C., Zoph B., Cubuk E. D., Le Q. V.'' SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition // Proceedings of Interspeech. — 2019.
+
# ''Raffel C., Shazeer N., Roberts A. et al.'' Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer // Journal of Machine Learning Research (JMLR). — 2020.
-
# ''Shorten C., Khoshgoftaar T. M.'' A Survey on Image Data Augmentation for Deep Learning // Journal of Big Data. — 2019. — Vol. 6, No. 60.
+
# ''Goodfellow I., Bengio Y., Courville A.'' Deep Learning. — MIT Press, 2016.
# ''Goodfellow I., Bengio Y., Courville A.'' Deep Learning. — MIT Press, 2016.

Версия 12:41, 11 июля 2026

Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 16:49, 10 июля 2026 (MSD)


Дообучение нейронных сетей (fine-tuning) — способ обучения модели, при котором в качестве начального приближения параметров берётся не случайная инициализация, а веса модели, уже предобученной на некоторой большой вспомогательной задаче, после чего эти веса дополнительно настраиваются (дообучаются) на данных целевой задачи. Дообучение — центральный приём трансферного обучения и на сегодняшний день стандартный способ адаптации крупных предобученных моделей — как в компьютерном зрении, так и в обработке естественного языка — к конкретным прикладным задачам.

Содержание

Введение

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

Формально дообучение задаётся так. Пусть \theta_0 — параметры модели, полученные в результате предобучения на вспомогательной задаче с большим датасетом D_{pre}. Дообучение находит

 \theta^* = \arg\min_{\theta} \frac{1}{n}\sum_{i=1}^n L(f_\theta(x_i), y_i), \qquad \text{инициализация: } \theta = \theta_0

на датасете целевой задачи D_{target} = \{(x_i,y_i)\}_{i=1}^n, который, как правило, на порядки меньше D_{pre}.

Дообучение стало стандартом по трём причинам. Во-первых, обучение крупной модели «с нуля» на каждую новую задачу требует огромных вычислительных ресурсов и датасетов сопоставимого объёма, которых для большинства прикладных задач просто нет. Во-вторых, эмпирически показано, что признаки, извлекаемые нижними и средними слоями предобученной сети, во многом универсальны и слабо зависят от конкретной целевой задачи (см. классическую работу Йосински и соавторов). В-третьих, появление больших моделей (больших языковых моделей, крупных сверточных сетей и трансформеров зрения), предобученных на веб-масштабных корпусах, сделало дообучение практически безальтернативным способом получить качественную модель под задачу с ограниченным бюджетом на данные и вычисления.

Постановка задачи

Типичный сценарий дообучения выглядит следующим образом.

  1. Берётся модель, предобученная на большом, обычно слабо- или самообучаемом датасете общего назначения: ImageNet (14 млн размеченных изображений) для моделей компьютерного зрения, Wikipedia и Common Crawl (сотни миллиардов токенов) для языковых моделей, пары «изображение — подпись» из веба для мультимодальных моделей.
  2. Задача предобучения (классификация на 1000 классов ImageNet, предсказание замаскированного токена, контрастное сопоставление изображения и текста) как правило не совпадает с целевой задачей практика, но заставляет модель выучить содержательные внутренние представления данных.
  3. У модели заменяется «голова» (последний слой или несколько слоёв), специфичная для предобучения, на новую голову, соответствующую целевой задаче (например, классификатор на нужное число классов, слой для регрессии, декодер для генерации).
  4. Модель дообучается на датасете целевой задачи, который может состоять из нескольких сотен — нескольких десятков тысяч примеров, что на порядки меньше объёма датасета предобучения.

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

Стратегии дообучения

По степени вовлечённости параметров предобученной модели в обновление принято выделять три стратегии.

Полное дообучение

При полном дообучении (full fine-tuning) обновляются все параметры модели, включая предобученные слои. Это даёт максимальную гибкость адаптации и, как правило, наилучшее итоговое качество при достаточном объёме данных целевой задачи, но сопряжено с наибольшим риском переобучения на малых датасетах и наибольшими вычислительными затратами — по памяти и по времени приходится хранить и обновлять градиенты по всем параметрам, а для по-настоящему больших моделей (десятки и сотни миллиардов параметров) это становится попросту недоступно на рядовом оборудовании.

import torch
from transformers import AutoModelForSequenceClassification
 
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
# все параметры модели, включая предобученные слои трансформера, обновляются

Дообучение только последних слоёв (feature extraction)

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

for param in model.base_model.parameters():
    param.requires_grad = False
 
for param in model.classifier.parameters():
    param.requires_grad = True
 
optimizer = torch.optim.AdamW(
    filter(lambda p: p.requires_grad, model.parameters()), lr=1e-3
)

Дообучение с заморозкой части слоёв

Промежуточный вариант — заморозить нижние слои (кодирующие наиболее общие, задаче-независимые признаки) и дообучать верхние слои вместе с новой головой. Часто применяется постепенная разморозка (gradual unfreezing, предложенная в ULMFiT): обучение начинается с замороженными всеми предобученными слоями, затем слои размораживаются постепенно, от верхних к нижним, на протяжении нескольких эпох, что снижает риск разрушения полезных предобученных представлений на ранних, наименее стабильных шагах обучения.

Выбор скорости обучения

Скорость обучения (learning rate) при дообучении, как правило, выбирается существенно меньше, чем при обучении с нуля — типичные значения лежат в диапазоне 10^{-5}10^{-4} против 10^{-3}10^{-2} для обучения с нуля. Причина в том, что предобученные веса уже находятся в содержательной области пространства параметров, и большой шаг градиентного спуска рискует «разрушить» выученные представления раньше, чем модель успеет их полезно адаптировать под новую задачу.

Для новой, случайно инициализированной головы модели, напротив, оправдана более высокая скорость обучения — её веса ещё не несут полезной информации, и их можно (и нужно) обучать быстрее. Этот принцип формализуется в виде дифференциальных скоростей обучения (discriminative learning rates, введены в работе Ховарда и Рудера, ULMFiT): каждому слою l назначается собственная скорость обучения, убывающая от верхних слоёв к нижним:

 \eta_l = \eta_L \cdot \xi^{\,L-l}

где L — номер последнего слоя, \eta_L — скорость обучения для последнего (нового) слоя, \xi < 1 — коэффициент затухания (в оригинальной работе \xi \approx 1/2.6).

optimizer = torch.optim.AdamW([
    {"params": model.encoder.layer[:6].parameters(),  "lr": 1e-5},
    {"params": model.encoder.layer[6:].parameters(),  "lr": 3e-5},
    {"params": model.classifier.parameters(),          "lr": 1e-3},
])

Дополнительно на первых шагах дообучения часто применяется разогрев (warm-up) скорости обучения — плавный линейный рост от нуля до целевого значения на протяжении первых 5–10 % шагов, — что снижает риск дестабилизации предобученных весов в самом начале обучения, когда статистика градиентов ещё нестабильна.

Регуляризация при дообучении

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

  • Ранняя остановка (early stopping) — обучение прерывается по достижении минимума ошибки на отложенной выборке; при дообучении переобучение может наступать уже после одной-двух эпох, поэтому контроль по валидации особенно важен.
  • Меньший вес регуляризации. Так как модель стартует из уже хорошо регуляризованной, содержательной точки пространства параметров, а не из случайной инициализации, типичные веса L_2-регуляризации (weight decay) при дообучении берут меньше, чем при обучении с нуля, чтобы не «стягивать» полезные предобученные веса к нулю.
  • Меньший размер батча. Малый датасет целевой задачи ограничивает разумный размер батча снизу и сверху одновременно: слишком большой батч на малом датасете даёт мало шагов оптимизации за эпоху и грубую оценку градиента по немногочисленным примерам; на практике для дообучения часто используют батчи меньшего размера, чем при предобучении, компенсируя это большим числом эпох или накоплением градиента (gradient accumulation).
  • Dropout и слой-specific регуляризация обычно сохраняются на уровне значений, использованных при предобучении, либо слегка увеличиваются, если целевой датасет заметно меньше.
  • Аугментация данных — дополнительный источник эффективной регуляризации при малом объёме целевых данных, подробно описанный в статье Аугментация данных.

Связь с объёмом данных

Выбор между дообучением и обучением с нуля, а также выбор конкретной стратегии дообучения (полное, частичное, feature extraction) существенно зависит от соотношения объёма целевого датасета и степени сходства целевой задачи с задачей предобучения.

  • Малый датасет, задача близка к предобучению (например, классификация нового набора классов естественных изображений). Оправдано дообучение только последних слоёв или дообучение с заморозкой большей части сети — риск переобучения при полном дообучении на малом датасете высок, а признаки нижних слоёв уже достаточно универсальны.
  • Малый датасет, задача далека от предобучения (например, дообучение модели, предобученной на естественных фотографиях, для задачи на рентгеновских снимках). Это наиболее сложный случай: заморозка нижних слоёв может помешать адаптации к специфике новых данных, но полное дообучение на малом датасете рискует переобучиться. На практике здесь часто выигрывают частичная заморозка с постепенной разморозкой, сильная аугментация и параметро-эффективные методы (см. ниже).
  • Большой датасет, задача близка к предобучению. Полное дообучение обычно даёт наилучший результат — данных достаточно, чтобы аккуратно адаптировать все параметры без переобучения.
  • Большой датасет, задача далека от предобучения. При достаточно большом объёме целевых данных выигрыш от предобучения снижается, а иногда обучение с нуля даёт сопоставимое или лучшее качество (см. обсуждение в работе Корнблита и соавторов о переносимости моделей ImageNet), хотя предобучение обычно всё равно ускоряет сходимость.

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

Параметро-эффективные методы дообучения

Полное дообучение крупных моделей (сотни миллионов — сотни миллиардов параметров) требует хранения градиентов и состояний оптимизатора для каждого параметра, что для по-настоящему больших моделей становится вычислительно неподъёмным, а при необходимости хранить отдельную копию весов под каждую задачу — ещё и неподъёмным по памяти на диске. Параметро-эффективные методы дообучения (parameter-efficient fine-tuning, PEFT) решают эту проблему, замораживая почти все веса предобученной модели и добавляя небольшое число новых, обучаемых параметров.

Адаптеры (Adapters)

Метод, предложенный Хоулсби и соавторами, вставляет в каждый блок трансформера небольшие полносвязные модули-«бутылочные горлышки» (adapter modules), которые обучаются, тогда как исходные веса модели остаются замороженными:

 h \leftarrow h + f\bigl(h\, W_{down}\bigr) W_{up}

где W_{down} \in \mathbb{R}^{d \times r}, W_{up} \in \mathbb{R}^{r \times d}, r \ll d, f — нелинейность. Число обучаемых параметров пропорционально r и составляет обычно единицы процентов от размера исходной модели, при почти сопоставимом с полным дообучением качестве.

Префиксное обучение (Prefix-Tuning)

Ли и Лян предложили не изменять веса модели вовсе, а добавлять к последовательности небольшое число обучаемых «виртуальных токенов» (префикс), которые подаются на вход каждого слоя внимания трансформера в качестве дополнительных ключей и значений. Модель как таковая остаётся полностью замороженной, а под задачу обучается лишь сам префикс — это даёт наибольшую экономию памяти на хранение весов (одна копия базовой модели обслуживает множество задач с разными префиксами), но обычно уступает адаптерам и LoRA в качестве на сложных генеративных задачах.

LoRA (Low-Rank Adaptation)

LoRA (Ху и соавторы) исходит из наблюдения, что эффективное изменение весов при дообучении обладает низким рангом: вместо явного обновления матрицы весов W_0 целиком, LoRA представляет добавку в виде произведения двух малоранговых матриц:

 W = W_0 + \Delta W = W_0 + BA, \qquad B \in \mathbb{R}^{d\times r},\ A \in \mathbb{R}^{r\times k},\ r \ll \min(d,k)

Матрица W_0 остаётся замороженной, обучаются только A и B, число параметров которых на порядки меньше числа параметров W_0. После обучения матрицы A и B можно слить с W_0 (W_0 + BA), что не добавляет дополнительной задержки на этапе применения модели — в отличие от адаптеров, которые вносят небольшой, но ненулевой оверхед на инференсе. Это свойство сделало LoRA одним из самых распространённых способов дообучения больших языковых моделей на потребительском оборудовании.

from peft import LoraConfig, get_peft_model
 
config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
)
 
model = get_peft_model(base_model, config)
model.print_trainable_parameters()

Сравнение стратегий дообучения

Сравнение стратегий дообучения нейронных сетей
Стратегия Что обучается Доля обучаемых параметров Требования к данным Риск переобучения Типичное применение
Полное дообучение Все веса модели 100 % Умеренный — большой датасет Высокий на малых датасетах Достаточно большой целевой датасет, задача существенно отличается от предобучения
Дообучение последних слоёв (feature extraction) Только новая голова Доли процента Малый датасет достаточен Низкий Малый датасет, задача близка к предобучению
Дообучение с частичной заморозкой Верхние слои и голова От единиц до десятков процентов Небольшой — умеренный датасет Средний Промежуточный случай, постепенная адаптация
Параметро-эффективные методы (LoRA, адаптеры, prefix-tuning) Небольшой набор добавленных параметров Обычно менее 1 % Малый — умеренный датасет Низкий Дообучение очень крупных моделей при ограниченных вычислительных ресурсах, многозадачное обслуживание одной базовой модели

Примеры из практики

Дообучение BERT для задач NLP

Модель BERT, предобученная на задачах предсказания замаскированного токена и предсказания следующего предложения на текстах Wikipedia и BookCorpus, дообучается под конкретную задачу добавлением небольшой головы поверх векторного представления специального токена (классификация текста, определение сходства пары предложений) либо поверх представлений отдельных токенов (извлечение именованных сущностей, ответы на вопросы). Типичное дообучение BERT занимает 2–4 эпохи со скоростью обучения порядка 2\cdot 10^{-5}5\cdot 10^{-5}; более длительное обучение на небольших датасетах, как правило, приводит к переобучению.

Дообучение ResNet для классификации медицинских изображений

Сети семейства ResNet, предобученные на ImageNet, широко используются как основа для классификации медицинских изображений (рентгеновские снимки, гистологические срезы), несмотря на существенное различие статистики естественных фотографий и медицинских изображений. Типичная практика — заморозить нижние сверточные блоки (кодирующие универсальные примитивы вроде границ и текстур) и дообучать верхние блоки вместе с новой головой классификации, дополнительно применяя специфичную для медицинских изображений аугментацию и усиленный контроль по валидационной выборке ввиду типично небольшого объёма размеченных медицинских данных.

Дообучение CLIP для мультимодальных задач

CLIP, предобученный контрастным сопоставлением изображений и текстовых описаний на масштабном веб-корпусе пар «изображение — подпись», дообучается под специфические мультимодальные задачи (поиск изображений по тексту в узкой предметной области, классификация с нестандартным набором классов через текстовые запросы). Из-за масштаба модели и общей природы контрастной задачи предобучения для CLIP особенно часто применяют параметро-эффективные методы дообучения или дообучение исключительно линейного классификатора (linear probing) поверх замороженного визуального энкодера, что зачастую даёт качество, близкое к полному дообучению, при кратно меньших вычислительных затратах.

RLHF: дообучение с подкреплением из обратной связи человека

Особый случай дообучения — обучение с подкреплением из обратной связи человека (Reinforcement Learning from Human Feedback, RLHF), применяемое для приведения поведения больших языковых моделей в соответствие с предпочтениями людей после этапа предобучения и обычного дообучения с учителем (supervised fine-tuning, SFT). Метод, восходящий к работе Кристиано и соавторов и получивший широкую известность благодаря InstructGPT (Оуян и соавторы), состоит из трёх этапов.

  1. Supervised fine-tuning — обычное дообучение предобученной модели на датасете примеров «запрос — качественный ответ», размеченных людьми.
  2. Обучение модели вознаграждения (reward model) — на датасете пар ответов, ранжированных людьми по предпочтению, обучается отдельная модель, предсказывающая скалярную оценку качества ответа.
  3. Дообучение политики методом обучения с подкреплением (обычно PPO) — языковая модель дообучается так, чтобы максимизировать предсказанное моделью вознаграждения качество ответов, с дополнительным штрафом за отклонение от SFT-модели (обычно в виде KL-дивергенции), предотвращающим слишком резкий уход политики от исходного, лингвистически естественного распределения ответов.

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

Ограничения и риски

  • Катастрофическое забывание (catastrophic forgetting) — при дообучении модель может утратить часть навыков, приобретённых на этапе предобучения или на предыдущих задачах, если новые данные существенно смещают распределение весов. Явление известно с конца 1980-х годов (Маккласки и Коэн) и остаётся актуальным для современных крупных моделей; частичные решения включают заморозку части слоёв, малую скорость обучения, регуляризацию весов относительно исходной точки (например, Elastic Weight Consolidation) и ограничение числа шагов дообучения.
 L(\theta) = L_{new}(\theta) + \frac{\lambda}{2}\sum_i F_i\,(\theta_i - \theta_{0,i})^2
  • Переобучение на малом датасете. Чем меньше целевой датасет, тем выше риск, что модель «запомнит» его специфические особенности вместо того, чтобы обобщить их; см. раздел «Регуляризация при дообучении».
  • Несоответствие распределений (distribution shift) между данными предобучения и целевой задачи снижает пользу от предобучения и в крайних случаях делает его бесполезным или даже вредным (отрицательный перенос, negative transfer).
  • Вычислительные и инфраструктурные затраты. Полное дообучение крупных моделей требует значительных объёмов видеопамяти для хранения градиентов и состояний оптимизатора; хранение отдельной полной копии весов под каждую дообученную задачу дорого масштабируется при большом числе задач — именно эта проблема мотивирует параметро-эффективные методы.
  • Чувствительность к выбору гиперпараметров. Качество дообученной модели существенно зависит от скорости обучения, числа эпох и стратегии заморозки слоёв; в отличие от обучения с нуля, здесь неудачный выбор гиперпараметров может не просто замедлить сходимость, а необратимо испортить полезные предобученные представления.

См. также

Литература

  1. Yosinski J., Clune J., Bengio Y., Lipson H. How Transferable Are Features in Deep Neural Networks? // Advances in Neural Information Processing Systems (NeurIPS). — 2014.
  2. Howard J., Ruder S. Universal Language Model Fine-tuning for Text Classification // Proceedings of ACL. — 2018.
  3. Devlin J., Chang M.-W., Lee K., Toutanova K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding // Proceedings of NAACL-HLT. — 2019.
  4. Radford A., Kim J. W., Hallacy C. et al. Learning Transferable Visual Models From Natural Language Supervision // Proceedings of ICML. — 2021.
  5. Houlsby N., Giurgiu A., Jastrzebski S. et al. Parameter-Efficient Transfer Learning for NLP // Proceedings of ICML. — 2019.
  6. Li X. L., Liang P. Prefix-Tuning: Optimizing Continuous Prompts for Generation // Proceedings of ACL-IJCNLP. — 2021.
  7. Hu E. J., Shen Y., Wallis P. et al. LoRA: Low-Rank Adaptation of Large Language Models // International Conference on Learning Representations (ICLR). — 2022.
  8. Christiano P., Leike J., Brown T. et al. Deep Reinforcement Learning from Human Preferences // Advances in Neural Information Processing Systems (NeurIPS). — 2017.
  9. Ouyang L., Wu J., Jiang X. et al. Training Language Models to Follow Instructions with Human Feedback // Advances in Neural Information Processing Systems (NeurIPS). — 2022.
  10. McCloskey M., Cohen N. J. Catastrophic Interference in Connectionist Networks: The Sequential Learning Problem // Psychology of Learning and Motivation. — 1989. — Vol. 24.
  11. Kirkpatrick J., Pascanu R., Rabinowitz N. et al. Overcoming Catastrophic Forgetting in Neural Networks // Proceedings of the National Academy of Sciences (PNAS). — 2017.
  12. Kornblith S., Shlens J., Le Q. V. Do Better ImageNet Models Transfer Better? // Proceedings of CVPR. — 2019.
  13. Raffel C., Shazeer N., Roberts A. et al. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer // Journal of Machine Learning Research (JMLR). — 2020.
  14. Goodfellow I., Bengio Y., Courville A. Deep Learning. — MIT Press, 2016.