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

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

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
-
```
+
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 16:49, 10 июля 2026 (MSD)}}
-
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15:56, 10 июля 2026 (MSD)}}
+
-
'''Нормализация признаков''' и '''стандартизация признаков''' (обобщённо — ''масштабирование признаков'', англ. ''feature scaling'') — методы [[Предобработка данных|предварительной обработки данных]], приводящие числовые [[Признак|признаки]] к сопоставимому диапазону значений или к сопоставимой статистической форме распределения. Масштабирование не меняет информативность признака в статистическом смысле (взаимную связь с целевой переменной), но существенно влияет на поведение многих алгоритмов [[Машинное обучение|машинного обучения]] — от скорости сходимости [[Градиентный спуск|градиентных методов]] до корректности работы [[Регуляризация|регуляризации]] и методов, основанных на расстояниях между объектами.
+
'''Аугментация данных''' (''data augmentation'') — совокупность методов искусственного расширения обучающей выборки путём применения к имеющимся объектам преобразований, сохраняющих или контролируемо изменяющих их метку. Аугментация используется при обучении моделей [[машинное обучение|машинного обучения]] для борьбы с [[переобучение|переобучением]], повышения устойчивости моделей к вариативности реальных данных и увеличения эффективного объёма обучающей выборки без затрат на разметку новых примеров.
-
В литературе термины употребляются не вполне единообразно. В узком смысле ''нормализацией'' называют приведение признака к фиксированному диапазону, чаще всего <tex>[0,1]</tex> (min-max scaling), а ''стандартизацией'' — приведение к нулевому среднему и единичной дисперсии (z-score). В широком смысле оба термина нередко используются как синонимы для обозначения любого масштабирования признаков; в данной статье эти понятия разграничиваются в узком, более строгом смысле. Наряду с ними рассматривается робастное масштабирование и ряд специализированных преобразований (MaxAbsScaler, PowerTransformer, QuantileTransformer), реализованных, в частности, в модуле <tt>sklearn.preprocessing</tt> библиотеки [[Scikit-learn|scikit-learn]].
+
== Введение ==
-
== Постановка задачи ==
+
Пусть задана обучающая выборка <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]].
-
Признаки, описывающие объекты реального мира, как правило, измерены в разных единицах и имеют разные диапазоны значений. Рассмотрим задачу [[Классификация|классификации]] клиентов банка, где каждый объект описывается двумя признаками — возрастом (в годах) и месячным доходом (в рублях):
+
Формально расширенная выборка имеет вид:
-
{| class="wikitable"
+
:: <tex> X_{aug} = \{(t(x_i), y_i) \mid (x_i, y_i) \in X,\ t \in \mathcal{T}\} </tex>
-
! Клиент !! Возраст, лет !! Доход, руб./мес.
+
-
|-
+
-
| Иванов || 25 || 45 000
+
-
|-
+
-
| Петров || 45 || 47 000
+
-
|}
+
-
Возраст изменяется в диапазоне единиц-десятков, доход — в диапазоне десятков тысяч. Если вычислить евклидово расстояние между объектами без предварительного масштабирования:
+
Аугментация решает три взаимосвязанные задачи.
-
:: <tex>d = \sqrt{(45-25)^2 + (47000-45000)^2} = \sqrt{400 + 4\,000\,000} \approx 2000{,}1</tex>
+
# '''Борьба с переобучением.''' Современные модели, особенно глубокие [[нейронная сеть|нейронные сети]], обладают числом параметров, зачастую превышающим число обучающих примеров. Без ограничения сложности такая модель способна запомнить обучающую выборку, потеряв [[обобщающая способность|обобщающую способность]]. Аугментация уменьшает разрыв между эмпирическим и ожидаемым риском, действуя как форма [[регуляризация|регуляризации]].
 +
# '''Повышение робастности.''' Модель, обученная на аугментированных данных, лучше переносит вариативность реальных условий эксплуатации — изменение освещения, ракурса, шум в канале связи, опечатки в тексте, — поскольку встречала аналогичные искажения при обучении.
 +
# '''Увеличение эффективного размера выборки.''' Сбор и разметка новых данных часто дороги или невозможны (редкие заболевания, аварийные ситуации, малоресурсные языки). Аугментация позволяет получить дополнительные обучающие примеры почти бесплатно, хотя и не привносит принципиально новой информации об истинном распределении данных.
-
признак «возраст» практически не вносит вклада в итоговое расстояние: его слагаемое (400) на четыре порядка меньше слагаемого дохода (4 000 000). Для любого метода, опирающегося на расстояния между объектами — [[Метод ближайших соседей|метода ближайших соседей]], [[Метод опорных векторов|метода опорных векторов]], кластеризации методом k-средних, [[Метод главных компонент|метода главных компонент]] — это означает, что признак с большим численным диапазоном будет доминировать в решении независимо от его действительной значимости для задачи.
+
Аугментацию данных следует отличать от смежных понятий. В отличие от синтеза данных (data synthesis), где новые объекты порождаются генеративной моделью без опоры на конкретный исходный пример, аугментация всегда отталкивается от реального объекта выборки. В отличие от простого передискретизации (resampling, например дублирования примеров редкого класса), аугментация создаёт новые, отличающиеся от исходных объекты.
-
Аналогичная проблема возникает при обучении моделей [[Градиентный спуск|градиентными методами]]. Функция потерь как функция параметров модели образует в пространстве весов некоторую поверхность; при сильно различающихся масштабах признаков линии уровня этой поверхности превращаются в вытянутые эллипсы с большим числом обусловленности гессиана. Градиентный спуск на такой поверхности движется зигзагообразно, и для достижения минимума требуется существенно больше итераций либо очень малый шаг обучения. После масштабирования признаков линии уровня приближаются по форме к окружностям, направление антиградиента указывает более точно на минимум, и сходимость ускоряется — этот эффект хорошо задокументирован для [[Линейная регрессия|линейной]] и [[Логистическая регрессия|логистической регрессии]], а также для [[Нейронная сеть|нейронных сетей]].
+
== Мотивация ==
-
== Нормализация (min-max scaling) ==
+
С теоретической точки зрения аугментацию удобно рассматривать в рамках концепции ''минимизации риска в окрестности'' (Vicinal Risk Minimization, VRM), предложенной Шапелем и соавторами. Классическая минимизация эмпирического риска ищет функцию <tex>f</tex>, минимизирующую
-
'''Min-max scaling''' линейно преобразует признак так, чтобы его значения попали в заданный диапазон, чаще всего <tex>[0,1]</tex>:
+
:: <tex> R_{emp}(f) = \frac{1}{n}\sum_{i=1}^n L(f(x_i), y_i) </tex>
-
:: <tex>x' = \frac{x - x_{min}}{x_{max} - x_{min}}</tex>
+
Однако эмпирическое распределение, сосредоточенное в точках выборки, — крайне грубое приближение истинного распределения данных. Идея VRM состоит в замене этого распределения на распределение, «размазанное» по окрестности (vicinity) каждой точки:
-
где <tex>x_{min}</tex> и <tex>x_{max}</tex> — минимальное и максимальное значен
+
:: <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>[a,b]</tex> формула обобщается:
+
-
:: <tex>x' = a + \frac{(x - x_{min})(b-a)}{x_{max} - x_{min}}</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> задаёт один сэмпл из окрестности исходной точки.
-
Метод сохраняет форму исходного распределения (все относительные расстояния между значениями пропорционально сжимаются или растягиваются), что удобно, когда диапазон признака имеет содержательный смысл — например, для признаков, ограниченных по своей природе (доля, вероятность, пиксельная интенсивность 0–255), а также при подготовке входов для нейронных сетей с сигмоидными или иными ограниченными функциями активации.
+
Такая интерпретация напрямую связывает аугментацию с [[регуляризация|регуляризацией]]:
-
Существенный недостаток — высокая чувствительность к выбросам, поскольку <tex>x_{min}</tex> и <tex>x_{max}</tex> определяются единственными экстремальными наблюдениями. Продемонстрируем это на выборке значений дохода (тыс. руб.): 30, 45, 50, 55, 60, 65, 400, где последнее значение аномально высокий доход.
+
* Как и <tex>L_1</tex>/<tex>L_2</tex>-регуляризация, аугментация ограничивает эффективную сложность модели — но не через штраф на веса, а через расширение множества примеров, на которых модель обязана давать согласованный ответ.
 +
* Аугментация вносит в обучение априорное знание о том, какие преобразования объекта не должны менять его метку (инвариантности). Поворот фотографии кошки на 10° не должен превращать её в собаку — это знание нельзя вывести из самих пикселей, оно привносится извне, подобно тому, как архитектурные ограничения (например, свёрточные слои) кодируют априорное знание о трансляционной инвариантности.
 +
* Эмпирически модели, обученные с аугментацией, демонстрируют меньший разрыв между качеством на обучающей и тестовой выборках при сопоставимом или лучшем качестве на тесте то есть меньшее переобучение.
-
Здесь <tex>x_{min}=30</tex>, <tex>x_{max}=400</tex>, диапазон равен 370. После min-max масштабирования:
+
Выигрыш от аугментации максимален, когда используемые преобразования действительно сохраняют семантику задачи и отражают вариативность, ожидаемую в реальных данных. Преобразования, не соответствующие этому условию, способны не регуляризировать, а вносить шум — см. раздел [[#Ограничения и риски|«Ограничения и риски»]].
-
{| class="wikitable"
+
== Аугментация изображений ==
-
! Исходное значение !! После Min-Max
+
-
|-
+
-
| 30 || 0,000
+
-
|-
+
-
| 45 || 0,041
+
-
|-
+
-
| 50 || 0,054
+
-
|-
+
-
| 55 || 0,068
+
-
|-
+
-
| 60 || 0,081
+
-
|-
+
-
| 65 || 0,095
+
-
|-
+
-
| 400 (выброс) || 1,000
+
-
|}
+
-
Единственный выброс растянул диапазон настолько, что все «типичные» значения оказались сжаты в узкий интервал <tex>[0;\,0{,}095]</tex> и стали практически неразличимы для алгоритма. Это ключевое ограничение метода: перед его применением рекомендуется отдельно проверить данные на наличие выбросов (см. [[Выброс|выбросы]]).
+
Изображения — исторически первая и наиболее развитая область применения аугментации, начиная с классической работы Крижевского, Суцкевера и Хинтона по сети AlexNet (2012), где применялись случайные сдвиги, отражения и изменение интенсивности каналов RGB.
-
В scikit-learn метод реализован классом <tt>MinMaxScaler</tt>:
+
=== Геометрические преобразования ===
-
<syntaxhighlight lang="python">
+
* '''Повороты''' (rotation) — поворот изображения на случайный угол <tex>\theta</tex>:
-
from sklearn.preprocessing import MinMaxScaler
+
-
scaler = MinMaxScaler(feature_range=(0, 1))
+
:: <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>
-
X_scaled = scaler.fit_transform(X)
+
-
</syntaxhighlight>
+
-
== Стандартизация (z-score) ==
+
Небольшие углы (обычно ±10–30°) сохраняют метку класса; углы, кратные 90°, применимы почти всегда, за исключением задач, где ориентация значима (распознавание дорожных знаков, текста).
-
'''Стандартизация''' (z-score normalization) центрирует признак относительно среднего и масштабирует его по стандартному отклонению:
+
* '''Отражения''' (flip) — горизонтальное отражение почти универсально применимо; вертикальное — только если ориентация объекта не несёт смысла.
 +
* '''Сдвиги''' (translation) — перенос изображения по осям с заполнением освободившейся области (padding, reflection, constant fill).
 +
* '''Масштабирование и обрезка''' (scale, random crop) — изменение масштаба объекта и вырезание случайного фрагмента, эмулирующее вариативность расстояния до камеры.
 +
* '''Аффинные и перспективные искажения''' — сдвиг (shear), изменение перспективы, эластичные деформации (elastic distortions), впервые систематически использованные Симаром и соавторами для распознавания рукописных цифр.
-
:: <tex>x' = \frac{x - \mu}{\sigma}</tex>
+
=== Цветовые (фотометрические) преобразования ===
-
где
+
* Изменение '''яркости''' (brightness), '''контраста''' (contrast), '''насыщенности''' (saturation) и '''оттенка''' (hue) — как правило, реализуется случайным изменением соответствующих каналов в цветовом пространстве HSV.
 +
* '''PCA color augmentation''' («fancy PCA») — добавление шума вдоль главных компонент распределения цветов по каналам RGB, впервые предложенное в работе по AlexNet.
 +
* Перевод в оттенки серого, постеризация, инверсия цвета — используются реже, в задачах, устойчивых к потере цветовой информации.
-
:: <tex>\mu = \frac{1}{n}\sum_{i=1}^{n} x_i, \qquad \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2}</tex>
+
=== Добавление шума ===
-
После преобразования признак имеет нулевое среднее и единичную дисперсию: <tex>\mathbb{E}[x']=0</tex>, <tex>\mathrm{Var}[x']=1</tex>. Величина <tex>x'</tex> показывает, на сколько стандартных отклонений исходное значение отстоит от среднего, что делает интерпретацию наглядной при приближённо [[Нормальное распределение|нормальном распределении]] признака: согласно правилу «трёх сигм» около 68 % значений попадают в интервал <tex>[-1,1]</tex>, около 95 % — в <tex>[-2,2]</tex>. При этом сама по себе стандартизация не делает распределение нормальным — она лишь центрирует и масштабирует его, сохраняя исходную форму (асимметрию, эксцесс).
+
Наложение гауссовского шума, шума типа «соль и перец» (salt-and-pepper), размытия (Gaussian blur, motion blur) эмулирует артефакты реальных камер и каналов передачи и повышает устойчивость модели к низкому качеству входных изображений.
-
Продолжим пример с доходом. Для выборки {30, 45, 50, 55, 60, 65, 400} среднее <tex>\mu \approx 100{,}71</tex>, стандартное отклонение <tex>\sigma \approx 122{,}63</tex>. После стандартизации:
+
Пример на псевдокоде (библиотека Albumentations):
-
{| class="wikitable"
+
<source lang="python">
-
! Исходное значение !! После Z-score
+
import albumentations as A
-
|-
+
-
| 30 || −0,577
+
-
|-
+
-
| 45 || −0,454
+
-
|-
+
-
| 50 || −0,414
+
-
|-
+
-
| 55 || −0,373
+
-
|-
+
-
| 60 || −0,332
+
-
|-
+
-
| 65 || −0,291
+
-
|-
+
-
| 400 (выброс) || 2,441
+
-
|}
+
-
По сравнению с min-max масштабированием типичные значения распределены несколько шире (интервал <tex>[-0{,}58;\,-0{,}29]</tex> против <tex>[0;\,0{,}095]</tex>), однако среднее и стандартное отклонение по-прежнему вычисляются с учётом выброса, а значит, остаются им искажены.
+
transform = A.Compose([
 +
A.Rotate(limit=25, p=0.5),
 +
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),
 +
])
-
Стандартизация — метод по умолчанию для линейных и логистических моделей с регуляризацией, [[Метод опорных векторов|метода опорных векторов]], [[Метод главных компонент|метода главных компонент]] и линейного дискриминантного анализа, а также для большинства архитектур нейронных сетей. В отличие от min-max scaling, результат не ограничен фиксированным диапазоном, что не создаёт проблем при появлении на этапе применения модели значений, выходящих за пределы диапазона обучающей выборки.
+
augmented = transform(image=image)["image"]
 +
</source>
-
<syntaxhighlight lang="python">
+
== Продвинутые методы для изображений ==
-
from sklearn.preprocessing import StandardScaler
+
-
scaler = StandardSca
+
=== MixUp ===
-
ler()
+
-
X_scaled = scaler.fit_transform(X)
+
-
</syntaxhighlight>
+
-
Стоит отметить, что <tt>StandardScaler</tt> в scikit-learn по умолчанию вычисляет смещённую (population) дисперсию, то есть делит сумму квадратов отклонений на <tex>n</tex>, а не на <tex>n-1</tex>.
+
Метод MixUp (Чжан и соавторы, 2018) отходит от идеи преобразования одного объекта и вместо этого строит новый объект как линейную комбинацию двух случайно выбранных примеров обучающей выборки вместе с их метками:
-
== Робастное масштабирование ==
+
:: <tex> \tilde{x} = \lambda x_i + (1-\lambda) x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j </tex>
-
'''Робастное масштабирование''' (robust scaling) использует вместо среднего и стандартного отклонения статистики, устойчивые к выбросам, — [[Медиана|медиану]] и [[Квартиль|межквартильный размах]] (IQR):
+
где коэффициент смешивания <tex>\lambda \sim \mathrm{Beta}(\alpha, \alpha)</tex>, а параметр <tex>\alpha</tex> обычно берётся в диапазоне 0.1–0.4. MixUp — прямая практическая реализация VRM: окрестность точки задаётся не локальным искажением, а отрезком, соединяющим её с другими точками выборки. Метод сглаживает решающую поверхность классификатора и снижает его чувствительность к состязательным возмущениям.
-
:: <tex>x' = \frac{x - Q_2}{Q_3 - Q_1}</tex>
+
=== CutMix ===
-
где <tex>Q_2</tex> — медиана (второй квартиль), <tex>Q_1</tex> и <tex>Q_3</tex> — первый и третий квартили, а разность <tex>Q_3-Q_1</tex> — межквартильный размах (IQR), охватывающий центральные 50 % наблюдений.
+
CutMix (Юн и соавторы, 2019) комбинирует идею MixUp с идеей вырезания области (см. Random Erasing ниже): прямоугольная область одного изображения заменяется соответствующей областью другого, а метка смешивается пропорционально площади вставленного фрагмента:
-
Медиана и квартили — порядковые статистики, устойчивые к экстремальным значениям: смещение одного выброса в область бесконечности практически не меняет положение медианы или границ IQR, поскольку эти величины определяются не самими значениями, а их рангом в отсортированной выборке.
+
:: <tex> \tilde{x} = M \odot x_i + (1-M) \odot x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j </tex>
-
Завершим сквозной пример с доходом. Для выборки {30, 45, 50, 55, 60, 65, 400}: медиана <tex>Q_2=55</tex>, <tex>Q_1=45</tex>, <tex>Q_3=65</tex>, IQR <tex>=20</tex>. Сведём все три метода в одну таблицу:
+
где <tex>M</tex> — бинарная маска, вырезающая прямоугольную область, <tex>\lambda</tex> — доля площади, приходящаяся на <tex>x_i</tex>. По сравнению с MixUp, CutMix не создаёт визуально неестественных «полупрозрачных» изображений и, по данным авторов, даёт дополнительный выигрыш в задачах локализации объектов, поскольку заставляет модель использовать всю информативную область изображения, а не только наиболее заметный фрагмент.
-
{| class="wikitable"
+
=== Random Erasing и Cutout ===
-
! Исходное значение !! Min-Max !! Z-score !! Robust
+
-
|-
+
-
| 30 || 0,000 || −0,577 || −1,25
+
-
|-
+
-
| 45 || 0,041 || −0,454 || −0,50
+
-
|-
+
-
| 50 || 0,054 || −0,414 || −0,25
+
-
|-
+
-
| 55 || 0,068 || −0,373 || 0,00
+
-
|-
+
-
| 60 || 0,081 || −0,332 || 0,25
+
-
|-
+
-
| 65 || 0,095 || −0,291 || 0,50
+
-
|-
+
-
| 400 (выброс) || 1,000 || 2,441 || 17,25
+
-
|}
+
-
Различие хорошо видно: под min-max и z-score основная масса «нормальных» значений сжата в узкий интервал из-за влияния выброса на <tex>x_{max}</tex>, <tex>\mu</tex> и <tex>\sigma</tex>. Робастное масштабирование, напротив, не изменило относительное расположение типичных значений (интервал <tex>[-1{,}25;\,0{,}5]</tex> пропорционален исходным различиям), а выброс получил большое по модулю, но не искажающее остальные данные значение — 17,25, что само по себе может служить сигналом об аномалии. Ценой этой устойчивости является то, что робастное масштабирование не гарантирует единичной дисперсии преобразованного признака и хуже подходит там, где важна именно эта статистическая интерпретация.
+
Методы Random Erasing (Чжун и соавторы) и близкий к нему Cutout (Де Врис и Тейлор) случайным образом закрашивают прямоугольную область изображения однородным цветом или шумом, метка при этом не меняется. Эффект аналогичен dropout, но применяется на уровне входных данных: модель вынуждена не полагаться на какой-то один локальный признак и распределять внимание по всему объекту.
-
<syntaxhighlight lang="python">
+
=== AutoAugment ===
-
from sklearn.preprocessing import RobustScaler
+
-
scaler = RobustScaler(quantile_range=(25.0, 75.0))
+
AutoAugment (Кубук и соавторы, 2019) переформулирует выбор политики аугментации как задачу обучения с подкреплением: контроллер (рекуррентная сеть) ищет оптимальную последовательность операций (тип преобразования, вероятность применения и магнитуда), максимизирующую качество модели-«ребёнка» на отложенной выборке. Найденные политики для CIFAR-10, SVHN и ImageNet оказались переносимыми между задачами, но сам поиск чрезвычайно затратен вычислительно (тысячи GPU-часов).
-
X_scaled = scaler.fit_transform(X)
+
-
</syntaxhighlight>
+
-
== Другие методы ==
+
=== RandAugment ===
-
Помимо трёх базовых подходов, в scikit-learn реализован ряд специализированных преобразований.
+
RandAugment (Кубук и соавторы, 2020) — упрощение AutoAugment, устраняющее необходимость дорогостоящего поиска политики. Вместо обучаемого контроллера RandAugment случайным образом выбирает <tex>N</tex> операций из фиксированного набора и применяет их с единой глобальной магнитудой <tex>M</tex>, которые подбираются простым перебором по сетке на небольшом числе значений. При сопоставимом качестве RandAugment требует на порядки меньше вычислений, чем AutoAugment, что сделало его стандартом де-факто в современных конвейерах обучения свёрточных сетей и трансформеров зрения.
-
'''MaxAbsScaler''' делит значения признака на максимальный модуль:
+
<source lang="python">
 +
import torchvision.transforms as T
-
:: <tex>x' = \frac{x}{|x_{max}|}</tex>
+
transform = T.Compose([
 +
T.RandAugment(num_ops=2, magnitude=9),
 +
T.ToTensor(),
 +
])
 +
</source>
-
Результат попадает в диапазон <tex>[-1,1]</tex>. Важное свойство — преобразование не сдвигает данные (не вычитает среднее или минимум), поэтому нулевые значения остаются нулевыми. Это делает MaxAbsScaler предпочтительным для разреженных матриц (например, TF-IDF представлений текста), где сохранение разреженности критично для памяти и скорости вычислений.
+
== Аугментация текстов ==
-
'''PowerTransformer''' — семейство нелинейных степенных преобразований, приближающих распределение признака к нормальному и стабилизирующих дисперсию. Преобразование Бокса — Кокса (Box-Cox) определено только для строго положительных значений:
+
В отличие от изображений, текст дискретен, что делает многие геометрические аналогии неприменимыми: небольшое «искажение» символа может полностью разрушить смысл слова. Поэтому текстовая аугментация опирается на лингвистически осмысленные преобразования.
-
:: <tex>x^{(\lambda)} = \begin{cases} \dfrac{x^{\lambda} - 1}{\lambda}, & \lambda \neq 0 \\[4pt] \ln x, & \lambda = 0 \end{cases}</tex>
+
=== EDA (Easy Data Augmentation) ===
-
Параметр <tex>\lambda</tex> подбирается по данным (обычно методом максимального правдоподобия). Преобразование Йео — Джонсона (Yeo-Johnson) — обобщение, допускающее нулевые и отрицательные значения:
+
Вэй и Цзоу (2019) предложили набор из четырёх простых операций, применяемых к случайно выбранным словам предложения:
-
:: <tex>x^{(\lambda)} = \begin{cases} \dfrac{(x+1)^{\lambda} - 1}{\lambda}, & \lambda \neq 0,\ x \geq 0 \\[4pt] \ln(x+1), & \lambda = 0,\ x \geq 0 \\[4pt] -\dfrac{(-x+1)^{2-\lambda} - 1}{2-\lambda}, & \lambda \neq 2,\ x < 0 \\[4pt] -\ln(-x+1), & \lambda = 2,\ x < 0 \end{cases}</tex>
+
# '''Синонимичная замена''' (synonym replacement) — замена слова на синоним из тезауруса (например, WordNet).
 +
# '''Случайная вставка''' (random insertion) — вставка синонима случайного слова предложения в случайную позицию.
 +
# '''Случайное удаление''' (random deletion) — удаление слова с заданной вероятностью.
 +
# '''Случайная перестановка''' (random swap) — обмен местами двух случайно выбранных слов.
-
Оба преобразования полезны для сильно асимметричных признаков (доход, число визитов, время
+
Несмотря на простоту, EDA даёт заметный прирост качества классификации текста на малых выборках при незначительных вычислительных затратах.
-
ожидания), особенно для моделей, чувствительных к форме распределения.
+
-
'''QuantileTransformer''' строит нелинейное отображение на основе эмпирической функции распределения признака, приводя его к равномерному либо нормальному распределению. Метод наиболее агрессивно устраняет влияние выбросов и асимметрии, поскольку опирается только на ранги наблюдений, но может исказить взаимосвязи между признаками (нелинейное преобразование не сохраняет корреляции) и чувствителен к объёму обучающей выборки.
+
=== Обратный перевод (back-translation) ===
-
<syntaxhighlight lang="python">
+
Метод, предложенный Зеннрихом и соавторами (2016) первоначально для машинного перевода, заключается в переводе текста на промежуточный язык и обратно (например, русский → английский → русский). Результат сохраняет смысл исходного текста, но может отличаться лексически и синтаксически, что даёт естественную и разнообразную аугментацию:
-
from sklearn.preprocessing import MaxAbsScaler, PowerTransformer, QuantileTransformer
+
-
pt = PowerTransformer(method="yeo-johnson")
+
<source lang="python">
-
X_pt = pt.fit_transform(X)
+
text_en = translate(text_ru, src="ru", tgt="en")
 +
text_ru_aug = translate(text_en, src="en", tgt="ru")
 +
</source>
-
qt = QuantileTransformer(output_distribution="normal")
+
Back-translation особенно ценен тем, что не требует внешнего тезауруса и хорошо работает даже для сложных, многозначных конструкций, где простая замена слов ведёт к потере смысла.
-
X_qt = qt.fit_transform(X)
+
-
</syntaxhighlight>
+
-
== Влияние на алгоритмы ==
+
=== Другие методы ===
-
Чувствительность к масштабу признаков существенно различается между семействами алгоритмов.
+
* '''Контекстные замены на основе языковых моделей''' — маскирование слова и его восстановление предобученной языковой моделью (например, BERT), что даёт более естественные, согласованные с контекстом замены по сравнению со словарными синонимами.
 +
* '''Перефразирование''' (paraphrasing) генеративными моделями.
 +
* '''Добавление шума на уровне символов''' — опечатки, замена раскладки клавиатуры, случайные вставки/удаления символов — полезно для повышения устойчивости моделей к «грязному» пользовательскому вводу.
-
{| class="wikitable"
+
== Аугментация табличных данных ==
-
|+ Чувствительность алгоритмов машинного обучения к масштабу признаков
+
-
! Алгоритм !! Чувствительность !! Обоснование
+
-
|-
+
-
| [[Линейная регрессия|Линейная]] / [[Логистическая регрессия|логистическая регрессия]] с регуляризацией || Высокая || [[Регуляризация|Регуляризационный]] штраф зависит от масштаба коэффициентов, который, в свою очередь, зависит от масштаба признаков
+
-
|-
+
-
| [[Метод опорных векторов|Метод опорных векторов]] (SVM) || Высокая || Построение разделяющей гиперплоскости и ядровые функции опираются на евклидово расстояние между объектами
+
-
|-
+
-
| [[Метод ближайших соседей|Метод ближайших соседей]] (KNN) || Высокая || Классификация непосредственно основана на расстояниях между объектами в признаковом пространстве
+
-
|-
+
-
| [[Метод главных компонент|Метод главных компонент]] (PCA) || Высокая || Направления максимальной дисперсии определяются абсолютным масштабом признаков, а не их относительной значимостью
+
-
|-
+
-
| Кластеризация методом k-средних || Высокая || Формирование кластеров основано на расстояниях до центроидов
+
-
|-
+
-
| [[Нейронная сеть|Нейронные сети]] (градиентное обучение) || Высокая (влияет на скорость и устойчивость сходимости) || Разномасштабные входы приводят к вытянутому рельефу функции потерь и неравномерным градиентам по слоям
+
-
|-
+
-
| [[Дерево решений|Деревья решений]] || Низкая || Разбиения строятся по пороговым значениям одного признака независимо от масштаба остальных
+
-
|-
+
-
| [[Случайный лес|Случайный лес]] || Низкая || Ансамбль деревьев решений, наследует их инвариантность к монотонным преобразованиям признаков
+
-
|-
+
-
| [[Градиентный бустинг|Градиентный бустинг]] (XGBoost, LightGBM, CatBoost) || Низкая || Также опирается на пороговые разбиения по отдельным признакам
+
-
|-
+
-
| Наивный байесовский классификатор || Низкая / умеренная || Оценивает распределение каждого признака отдельно; масштаб не влияет на итоговую разделяющую способность
+
-
|}
+
-
Общая закономерность: методы, основанные на пороговых разбиениях одного признака (деревья и их ансамбли), инвариантны к любому монотонному преобразованию масштаба, тогда как методы, использующие расстояния, скалярные произведения или градиентную оптимизацию, чувствительны к нему напрямую.
+
Табличные данные хуже поддаются интуитивным преобразованиям: у признаков часто нет естественной топологии (в отличие от соседних пикселей изображения), поэтому произвольный шум может нарушить статистические зависимости между признаками.
-
== Влияние на регуляризацию ==
+
=== Добавление шума ===
-
[[Регуляризация|L1- и L2-регуляризация]] штрафуют величину коэффициентов модели. Для линейной регрессии с L2-штрафом (гребневая регрессия) функционал имеет вид:
+
Простейший приём — добавление небольшого гауссовского шума к числовым признакам, джиттеринг:
-
:: <tex>L(\beta) = \sum_{i=1}^{n}\left(y_i - \beta_0 - \sum_{j=1}^{p}\beta_j x_{ij}\right)^2 + \lambda \sum_{j=1}^{p}\beta_j^2</tex>
+
:: <tex> \tilde{x}^{(k)} = x^{(k)} + \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, \sigma^2) </tex>
-
а для L1-регуляризации (лассо) — соответственно с штрафом <tex>\lambda\sum_{j}|\beta_j|</tex>. В обоих случаях величина штрафа зависит исключительно от численного значения коэффициента <tex>\beta_j</tex>, а не от того, насколько признак <tex>x_j</tex> в действительности значим для предсказания.
+
Величина <tex>\sigma</tex> подбирается пропорционально дисперсии признака, чтобы не разрушить полезный сигнал.
-
Проблема в том, что масштаб коэффициента обратно пропорционален масштабу признака: если признак измерен в рублях с диапазоном значений порядка <tex>10^5</tex>–<tex>10^6</tex>, соответствующий ему коэффициент естественным образом окажется очень малым (порядка <tex>10^{-5}</tex>–<
+
=== SMOTE для дисбаланса классов ===
-
tex>10^{-6}</tex>) просто для того, чтобы вклад <tex>\beta_j x_j</tex> в предсказание оставался разумной величины. Признак же, измеренный в единицах (например, число визитов в месяц), потребует коэффициента на несколько порядков больше. Регуляризация в этом случае штрафует признаки неравномерно — не пропорционально их реальной значимости, а обратно пропорционально их естественному масштабу: крупномасштабные признаки получают заниженный (и потому слабо штрафуемый) коэффициент, тогда как мелкомасштабные — завышенный и, соответственно, сильнее подавляемый. Особенно чувствительно к этому L1-регуляризация: поскольку она способна обнулять коэффициенты полностью, отбор признаков при несогласованных масштабах оказывается смещённым в пользу признаков с большим численным диапазоном, а не в пользу признаков с наибольшей предсказательной силой.
+
-
Именно поэтому стандартизация признаков перед обучением регуляризованных линейных моделей считается стандартной практикой: приведение всех признаков к единичной дисперсии уравнивает условия, при которых регуляризационный штраф применяется к каждому из них, и делает итоговые коэффициенты сопоставимыми как меры относительной значимости признаков.
+
SMOTE (Synthetic Minority Over-sampling Technique, Чавла и соавторы, 2002) — стандартный метод борьбы с [[дисбаланс классов|дисбалансом классов]]. Для объекта <tex>x_i</tex> миноритарного класса находятся его <tex>k</tex> ближайших соседей того же класса, один из них <tex>x_{zi}</tex> выбирается случайно, и новый синтетический объект строится как точка на отрезке между ними:
-
== Сравнение методов ==
+
:: <tex> x_{new} = x_i + \delta \cdot (x_{zi} - x_i), \qquad \delta \sim U(0, 1) </tex>
-
{| class="wikitable"
+
В отличие от простого дублирования объектов миноритарного класса, SMOTE порождает разнообразные, но правдоподобные точки внутри его области в признаковом пространстве, снижая риск переобучения на буквально повторяющихся примерах.
-
! Метод !! Формула !! Диапазон результата !! Устойчивость к выбросам !! Основные плюсы !! Основные минусы
+
-
|-
+
-
| Min-Max || <tex>x'=\frac{x-x_{min}}{x_{max}-x_{min}}</tex> || <tex>[0,1]</tex> (настраиваемый) || Низкая || Фиксированный, интерпретируемый диапазон; сохраняет форму распределения || Сильно искажается единичными выбросами; новые данные вне обучающего диапазона выходят за границы
+
-
|-
+
-
| Z-score || <tex>x'=\frac{x-\mu}{\sigma}</tex> || Теоретически не ограничен (практически [-3,3]) || Умеренная || Стандарт для линейных моделей, SVM, PCA, нейросетей; интерпретация в единицах стандартного отклонения || Среднее и дисперсия чувствительны к выбросам
+
-
|-
+
-
| Robust || <tex>x'=\frac{x-Q_2}{Q_3-Q_1}</tex> || Не ограничен || Высокая || Устойчив к выбросам и асимметрии распределения || Не даёт единичной дисперсии; менее привычная интерпретация
+
-
|-
+
-
| MaxAbs || <tex>x'=\frac{x}{|x_{max}|}</tex> || <tex>[-1,1]</tex> || Низкая || Сохраняет разреженность данных (нули остаются нулями) || Чувствителен к выбросам, как и Min-Max
+
-
|-
+
-
| PowerTransformer || нелинейное степенное преобразование || Приближается к нормальному распределению || Умеренная || Снижает асимметрию, стабилизирует дисперсию || Box-Cox требует строго положительных значений; интерпретация затруднена
+
-
|-
+
-
| QuantileTransformer || преобразование по эмпирической функции распределения || <tex>[0,1]</tex> либо нормальное || Высокая || Полностью устраняет влияние выбросов и асимметрии || Нелинейно; может исказить взаимосвязи между признаками, риск переобучения на малых выборках
+
-
|}
+
-
== Пример: подготовка данных для логистической регрессии в задаче прогнозирования оттока клиентов ==
+
<source lang="python">
 +
from imblearn.over_sampling import SMOTE
-
Рассмотрим упрощённый набор данных телекоммуникационной компании для задачи прогнозирования оттока (churn) с двумя признаками — стажем обслуживания (в месяцах) и ежемесячным платежом (в рублях):
+
smote = SMOTE(k_neighbors=5, random_state=42)
 +
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
 +
</source>
-
{| class="wikitable"
+
Существует ряд модификаций: Borderline-SMOTE (генерация только вблизи границы классов), ADASYN (адаптивное распределение количества синтетических примеров в зависимости от локальной сложности классификации), SMOTE-NC (для смешанных категориальных и числовых признаков).
-
! Клиент !! Стаж, мес. !! Платёж, руб./мес. !! Отток
+
 
-
|-
+
=== Генеративные подходы ===
-
| 1 || 2 || 3 500 || 1
+
 
-
|-
+
Для более сложных зависимостей между признаками применяют генеративные модели — вариационные автокодировщики и генеративно-состязательные сети, обученные аппроксимировать совместное распределение признаков и способные генерировать новые правдоподобные строки таблицы (например, CTGAN в библиотеке SDV). Такие методы дороже в применении и требуют отдельного этапа обучения генератора, но лучше сохраняют многомерные зависимости между признаками, чем покомпонентный шум.
-
| 2 || 34 || 1 200 || 0
+
 
-
|-
+
== Аугментация аудио и временных рядов ==
-
| 3 || 58 || 4 200 || 0
+
 
-
|-
+
* '''Растяжение по времени''' (time stretching) — изменение длительности сигнала без изменения высоты тона.
-
| 4 || 4 || 900 || 1
+
* '''Сдвиг по высоте тона''' (pitch shifting) — изменение высоты тона без изменения темпа.
-
|-
+
* '''Добавление фонового шума''' — наложение записанного шума окружения (уличный шум, шум толпы) с заданным отношением сигнал/шум.
-
| 5 || 45 || 5 600 || 0
+
* '''Временной сдвиг''' (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)
 +
</source>
-
Стаж имеет среднее <tex>\mu \approx 28{,}6</tex> и стандартное отклонение <tex>\sigma \approx 22{,}25</tex>; платёж — среднее <tex>\mu \approx 3080</tex> и стандартное отклонение <tex>\sigma \approx 1792{,}65</tex>. После стандартизации по формуле <tex>x' = (x-\mu)/\sigma</tex>:
+
== Сравнение методов по типам данных ==
{| class="wikitable"
{| class="wikitable"
-
! Клиент !! Стаж (станд.) !! Платёж (станд.) !! Отток
+
|+ Аугментация данных: сводная таблица по типам данных
 +
! Тип данных !! Базовые методы !! Продвинутые методы !! Основные библиотеки !! Типичные задачи
|-
|-
-
| 1 || −1,196 || 0,234 || 1
+
| Изображения || Повороты, отражения, сдвиги, масштабирование, изменение яркости/контраста, шум || MixUp, CutMix, Random Erasing, AutoAugment, RandAugment || Albumentations, imgaug, torchvision.transforms || Классификация, детекция, сегментация
|-
|-
-
| 2 || 0,243 || −1,049 || 0
+
| Текст || Синонимичные замены, случайные вставка/удаление/перестановка слов (EDA) || Обратный перевод, контекстные замены на основе языковых моделей || nlpaug, TextAttack || Классификация текста, NER, машинный перевод
|-
|-
-
| 3 || 1,321 || 0,625 || 0
+
| Табличные данные || Гауссовский шум, джиттеринг числовых признаков || SMOTE и его модификации, генерация через GAN/VAE || imbalanced-learn, SDV || Кредитный скоринг, медицинская диагностика, детекция мошенничества
|-
|-
-
| 4 || −1,106 || −1,216 || 1
+
| Аудио и временные ряды || Растяжение времени, сдвиг высоты тона, фоновый шум || SpecAugment, window warping, magnitude warping || audiomentations, librosa, torchaudio.transforms || Распознавание речи, анализ сенсорных сигналов
-
|-
+
-
| 5 || 0,737 || 1,406 || 0
+
|}
|}
-
До масштабирования диапазон платежа (900–5600) на два порядка превышает диапазон стажа (2–58). При обучении [[Логистическая регрессия|логистической регрессии]] градиентными методами это означа
+
== Динамическая vs статическая аугментация ==
-
ет, что частная производная функции потерь по коэффициенту при платеже на несколько порядков отличается по величине от производной по коэффициенту при стаже, и без индивидуальной настройки шага обучения для каждого признака сходимость существенно замедляется. Кроме того, при использовании L2- или L1-регуляризации коэффициент при платеже, обученный на исходных данных, будет иметь порядок <tex>10^{-4}</tex>, а коэффициент при стаже — порядок <tex>10^{-2}</tex>–<tex>10^{-1}</tex>; сравнение таких коэффициентов напрямую ничего не говорит об относительной значимости признаков. После стандартизации оба признака приведены к общему масштабу (нулевое среднее, единичная дисперсия), их вклад в предсказание и в регуляризационный штраф сопоставим, а абсолютные значения обученных коэффициентов допустимо интерпретировать как меру относительной важности признака при фиксированной силе регуляризации.
+
-
<syntaxhighlight lang="python">
+
По моменту применения различают два режима.
-
from sklearn.preprocessing import StandardScaler
+
-
from sklearn.linear_model import LogisticRegression
+
-
from sklearn.pipeline import Pipeline
+
-
pipeline = Pipeline([
+
* '''Статическая аугментация''' (offline augmentation) — новые объекты генерируются заранее и сохраняются на диск вместе с исходной выборкой. Преимущество — предсказуемая и воспроизводимая скорость обучения, отсутствие накладных расходов на преобразование во время обучения. Недостаток — конечное, фиксированное число вариаций каждого примера и повышенный расход дискового пространства.
-
("scaler", StandardScaler()),
+
* '''Динамическая аугментация''' (online / on-the-fly augmentation) — преобразование применяется к каждому примеру заново на каждой эпохе обучения, обычно в процессе загрузки батча. Модель практически никогда не видит два эпохи подряд один и тот же объект в неизменном виде, что даёт эффективно неограниченное число вариаций и лучше действует как регуляризатор. Плата — дополнительная вычислительная нагрузка на CPU/GPU во время обучения, которая при плохой организации конвейера данных может стать узким местом, особенно для затратных преобразований (back-translation, генеративные модели).
-
("model", LogisticRegression(penalty="l2", C=1.0))
+
 
-
])
+
На практике для изображений и аудио почти всегда используется динамическая аугментация (стандартный загрузчик данных в PyTorch или tf.data в TensorFlow применяют преобразования «на лету» в параллельных потоках), тогда как дорогостоящие методы — back-translation, генерация синтетических табличных строк GAN-моделью — чаще выполняются статически, один раз, поскольку их вычислительная стоимость несопоставима со стоимостью одного шага обучения.
-
pipeline.fit(X_train, y_train)
+
 
-
</syntaxhighlight>
+
== Ограничения и риски ==
 +
 
 +
Аугментация — не универсально полезный приём, и её бездумное применение способно ухудшить качество модели.
 +
 
 +
* '''Нарушение семантики задачи.''' Преобразование, кажущееся безобидным для одной задачи, может разрушать критичную информацию для другой. Вертикальное отражение допустимо для классификации пейзажей, но недопустимо для распознавания рукописных цифр (перевёрнутая «6» становится похожей на «9»). Изменение цвета недопустимо в задачах, где цвет — диагностический признак.
 +
* '''«Нереалистичные» примеры.''' Чрезмерно сильная или неудачно подобранная магнитуда преобразования порождает объекты, не встречающиеся в реальном распределении данных. Обучение на таких примерах не улучшает, а искажает представление модели о задаче, тратя ёмкость модели на нерелевантные вариации.
 +
* '''Смещение статистики распределения.''' Некоторые методы (например, агрессивный MixUp) смещают эффективное распределение обучающей выборки относительно тестового распределения, что может ухудшить калибровку итоговых вероятностей модели.
 +
* '''Ложное чувство защищённости от переобучения.''' Аугментация снижает, но не устраняет переобучение полностью и не заменяет собой недостаток данных для принципиально новых классов или редких сценариев, отсутствующих в обучающей выборке ни в каком виде.
 +
* '''Вычислительная стоимость.''' Продвинутые методы (AutoAugment, back-translation, генеративные модели для табличных данных) требуют значительных дополнительных вычислительных ресурсов, что не всегда оправдано выигрышем в качестве.
 +
* '''Разрушение зависимостей между признаками.''' Для табличных данных особенно легко случайно нарушить содержательные зависимости между признаками, если шум добавляется к каждому признаку независимо, — стоит проверять, что аугментированные объекты остаются правдоподобными с точки зрения предметной области.
-
Существен методический момент: параметры масштабирования (<tex>\mu</tex>, <tex>\sigma</tex>, <tex>x_{min}</tex>, <tex>x_{max}</tex>, <tex>Q_1</tex>, <tex>Q_2</tex>, <tex>Q_3</tex>) должны вычисляться исключительно на обучающей выборке методом <tt>fit</tt> и затем применяться к валидационной и тестовой выборкам методом <tt>transform</tt>, без повторного вычисления статистик на них. Нарушение этого правила приводит к утечке информации из тестовой выборки в процесс обучения (data leakage) и завышенной оценке качества модели.
+
Практическая рекомендация — подбирать набор и магнитуду преобразований на отложенной (валидационной) выборке, а не полагаться на «стандартный» набор, скопированный из другой предметной области.
-
== Практические рекомендации ==
+
== Библиотеки и инструменты ==
-
* Для '''линейных и логистических моделей с регуляризацией''' — стандартизация (z-score); при наличии выраженных выбросов — робастное масштабирование.
+
* '''[https://albumentations.ai Albumentations]''' — библиотека для аугментации изображений, оптимизированная по скорости (реализация на OpenCV), поддерживает согласованное преобразование изображений вместе с масками сегментации, ограничивающими рамками и ключевыми точками, что важно для задач детекции и сегментации.
-
* Для '''метода опорных векторов, метода ближайших соседей, k-средних и метода главных компонент''' — стандартизация практически обязательна, поскольку эти методы напрямую оперируют расстояниями или дисперсией.
+
* '''[https://github.com/aleju/imgaug imgaug]''' — одна из первых широко используемых библиотек аугментации изображений в Python, гибкий API для построения сложных цепочек преобразований.
-
* Для '''деревьев решений, случайного леса и градиентного бустинга''' — масштабирование, как правило, не требуется, поскольку эти алгоритмы инвариантны к монотонным преобразованиям отдельных признаков.
+
* '''[https://pytorch.org/vision/stable/transforms.html torchvision.transforms]''' — модуль аугментации изображений, встроенный в PyTorch, включает готовые реализации RandAugment, AutoAugment, MixUp и CutMix.
-
* Для '''нейронных сетей''' — стандартизация или min-max scaling к диапазону <tex>[0,1]</tex> либо <tex>[-1,1]</tex>, в зависимости от функций активации; для сверточных сетей, работающих с изображениями, min-max к <tex>[0,1]</tex> — стандартная практика.
+
* '''[https://github.com/makcedward/nlpaug nlpaug]''' — библиотека текстовой аугментации на уровне символов, слов и предложений, включая контекстные замены на основе языковых моделей и интеграцию с сервисами перевода для back-translation.
-
* При '''наличии выбросов''', которые не являются ошибками измерения и должны быть сохранены в выборке, — робастное масштабирование или QuantileTransformer вместо min-max и z-score.
+
* '''[https://github.com/iver56/audiomentations audiomentations]''' — аналог Albumentations для аудиосигналов, реализует растяжение времени, сдвиг тона, добавление шума и другие преобразования.
-
* Для '''разреженных данных''' (например, TF-IDF, one-hot представления с большим числом признаков) MaxAbsScaler, не разрушающий разреженность, в отличие от методов, включающих центрирование.
+
* '''[https://imbalanced-learn.org imbalanced-learn]''' — реализация SMOTE и его модификаций (Borderline-SMOTE, ADASYN, SMOTE-NC) для табличных данных, совместима с API scikit-learn.
-
* При '''сильной асимметрии распределения''' признака (доход, время ожидания, количество событий) — PowerTransformer перед стандартизацией.
+
-
* Параметры масштабирования всегда вычисляются на обучающей выборке и фиксируются для последующего применения к новым данным; включение шага масштабирования в единый [[Конвейер обработки данных|конвейер]] (<tt>sklearn.pipeline.Pipeline</tt>) снижает риск утечки данных при кросс-валидации.
+
== См. также ==
== См. также ==
-
* [[Ослабление и усиление шкал признаков]]
 
-
* [[Предобработка данных]]
 
* [[Регуляризация]]
* [[Регуляризация]]
-
* [[Логистическая регрессия]]
+
* [[Переобучение]]
-
* [[Метод главных компонент]]
+
* [[Дисбаланс классов]]
 +
* [[Компьютерное зрение]]
 +
* [[Обработка естественного языка]]
== Литература ==
== Литература ==
-
* Hastie T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. — 2nd ed. — Springer, 2009.
+
# ''Krizhevsky A., Sutskever I., Hinton G. E.'' ImageNet Classification with Deep Convolutional Neural Networks // Advances in Neural Information Processing Systems (NIPS). — 2012. — Vol. 25.
-
* Bishop C. M. Pattern Recognition and Machine Learning. — Springer, 2006.
+
# ''Simard P. Y., Steinkraus D., Platt J. C.'' Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis // Proceedings of ICDAR. — 2003.
-
* Géron A. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. — 3rd ed. — O'Reilly, 2022.
+
# ''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.
-
* Zheng A., Casari A. Feature Engineering for Machine Learning.
+
# ''Chapelle O., Weston J., Bottou L., Vapnik V.'' Vicinal Risk Minimization // Advances in Neural Information Processing Systems (NeurIPS). — 2000.
-
Microsoft Azure Web App - Error 404
+
# ''Zhang H., Cisse M., Dauphin Y. N., Lopez-Paz D.'' mixup: Beyond Empirical Risk Minimization // International Conference on Learning Representations (ICLR). — 2018.
-
pipeline.fit
+
# ''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.
-
— O'Reilly, 2018.
+
# ''DeVries T., Taylor G. W.'' Improved Regularization of Convolutional Neural Networks with Cutout // arXiv preprint. — 2017.
-
* Box G. E. P., Cox D. R. An Analysis of Transformations // Journal of the Royal Statistical Society, Series B. — 1964. — Vol. 26, No. 2.
+
# ''Zhong Z., Zheng L., Kang G., Li S., Yang Y.'' Random Erasing Data Augmentation // Proceedings of the AAAI Conference on Artificial Intelligence. — 2020.
-
* Yeo I.-K., Johnson R. A. A New Family of Power Transformations to Improve Normality or Symmetry // Biometrika. — 2000. — Vol. 87, No. 4.
+
# ''Cubuk E. D., Zoph B., Mane D., Vasudevan V., Le Q. V.'' AutoAugment: Learning Augmentation Policies from Data // Proceedings of CVPR. — 2019.
-
* Ioffe S., Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift // Proceedings of the 32nd International Conference on Machine Learning (ICML). — 2015.
+
# ''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.
-
* Scikit-learn developers. Preprocessing data // Scikit-learn User Guide. — [https://scikit-learn.org/stable/modules/preprocessing.html scikit-learn.org/stable/modules/preprocessing.html]
+
# ''Wei J., Zou K.'' EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks // Proceedings of EMNLP-IJCNLP. — 2019.
 +
# ''Sennrich R., Haddow B., Birch A.'' Improving Neural Machine Translation Models with Monolingual Data // Proceedings of the 54th Annual Meeting of the ACL. — 2016.
 +
# ''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.
 +
# ''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.
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
-
[[Категория:Предобработка данных]]
+
[[Категория:Нейронные сети]]
-
```
+
[[Категория:Энциклопедия анализа данных]]
 +
[[Категория:Популярные и обзорные статьи]]

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

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


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

Содержание

Введение

Пусть задана обучающая выборка X = \{(x_i, y_i)\}_{i=1}^n, где x_i — объект, y_i — его метка (ответ). Аугментацией называется применение к объекту x_i некоторого преобразования t из заданного семейства \mathcal{T}, порождающего новый объект t(x_i), который либо сохраняет исходную метку y_i (label-preserving augmentation), либо порождает вместе с ней новую, скорректированную метку — как в методах MixUp и CutMix.

Формально расширенная выборка имеет вид:

 X_{aug} = \{(t(x_i), y_i) \mid (x_i, y_i) \in X,\ t \in \mathcal{T}\}

Аугментация решает три взаимосвязанные задачи.

  1. Борьба с переобучением. Современные модели, особенно глубокие нейронные сети, обладают числом параметров, зачастую превышающим число обучающих примеров. Без ограничения сложности такая модель способна запомнить обучающую выборку, потеряв обобщающую способность. Аугментация уменьшает разрыв между эмпирическим и ожидаемым риском, действуя как форма регуляризации.
  2. Повышение робастности. Модель, обученная на аугментированных данных, лучше переносит вариативность реальных условий эксплуатации — изменение освещения, ракурса, шум в канале связи, опечатки в тексте, — поскольку встречала аналогичные искажения при обучении.
  3. Увеличение эффективного размера выборки. Сбор и разметка новых данных часто дороги или невозможны (редкие заболевания, аварийные ситуации, малоресурсные языки). Аугментация позволяет получить дополнительные обучающие примеры почти бесплатно, хотя и не привносит принципиально новой информации об истинном распределении данных.

Аугментацию данных следует отличать от смежных понятий. В отличие от синтеза данных (data synthesis), где новые объекты порождаются генеративной моделью без опоры на конкретный исходный пример, аугментация всегда отталкивается от реального объекта выборки. В отличие от простого передискретизации (resampling, например дублирования примеров редкого класса), аугментация создаёт новые, отличающиеся от исходных объекты.

Мотивация

С теоретической точки зрения аугментацию удобно рассматривать в рамках концепции минимизации риска в окрестности (Vicinal Risk Minimization, VRM), предложенной Шапелем и соавторами. Классическая минимизация эмпирического риска ищет функцию f, минимизирующую

 R_{emp}(f) = \frac{1}{n}\sum_{i=1}^n L(f(x_i), y_i)

Однако эмпирическое распределение, сосредоточенное в точках выборки, — крайне грубое приближение истинного распределения данных. Идея VRM состоит в замене этого распределения на распределение, «размазанное» по окрестности (vicinity) каждой точки:

 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]

где v(x_i, y_i) — распределение вероятностей на объектах, «похожих» на (x_i, y_i). Аугментация — это практический способ построения выборки из v(x_i, y_i): каждое случайное преобразование t \sim \mathcal{T} задаёт один сэмпл из окрестности исходной точки.

Такая интерпретация напрямую связывает аугментацию с регуляризацией:

  • Как и L_1/L_2-регуляризация, аугментация ограничивает эффективную сложность модели — но не через штраф на веса, а через расширение множества примеров, на которых модель обязана давать согласованный ответ.
  • Аугментация вносит в обучение априорное знание о том, какие преобразования объекта не должны менять его метку (инвариантности). Поворот фотографии кошки на 10° не должен превращать её в собаку — это знание нельзя вывести из самих пикселей, оно привносится извне, подобно тому, как архитектурные ограничения (например, свёрточные слои) кодируют априорное знание о трансляционной инвариантности.
  • Эмпирически модели, обученные с аугментацией, демонстрируют меньший разрыв между качеством на обучающей и тестовой выборках при сопоставимом или лучшем качестве на тесте — то есть меньшее переобучение.

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

Аугментация изображений

Изображения — исторически первая и наиболее развитая область применения аугментации, начиная с классической работы Крижевского, Суцкевера и Хинтона по сети AlexNet (2012), где применялись случайные сдвиги, отражения и изменение интенсивности каналов RGB.

Геометрические преобразования

  • Повороты (rotation) — поворот изображения на случайный угол \theta:
 \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}

Небольшие углы (обычно ±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):

import albumentations as A
 
transform = A.Compose([
    A.Rotate(limit=25, p=0.5),
    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"]

Продвинутые методы для изображений

MixUp

Метод MixUp (Чжан и соавторы, 2018) отходит от идеи преобразования одного объекта и вместо этого строит новый объект как линейную комбинацию двух случайно выбранных примеров обучающей выборки вместе с их метками:

 \tilde{x} = \lambda x_i + (1-\lambda) x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j

где коэффициент смешивания \lambda \sim \mathrm{Beta}(\alpha, \alpha), а параметр \alpha обычно берётся в диапазоне 0.1–0.4. MixUp — прямая практическая реализация VRM: окрестность точки задаётся не локальным искажением, а отрезком, соединяющим её с другими точками выборки. Метод сглаживает решающую поверхность классификатора и снижает его чувствительность к состязательным возмущениям.

CutMix

CutMix (Юн и соавторы, 2019) комбинирует идею MixUp с идеей вырезания области (см. Random Erasing ниже): прямоугольная область одного изображения заменяется соответствующей областью другого, а метка смешивается пропорционально площади вставленного фрагмента:

 \tilde{x} = M \odot x_i + (1-M) \odot x_j, \qquad \tilde{y} = \lambda y_i + (1-\lambda) y_j

где M — бинарная маска, вырезающая прямоугольную область, \lambda — доля площади, приходящаяся на x_i. По сравнению с MixUp, CutMix не создаёт визуально неестественных «полупрозрачных» изображений и, по данным авторов, даёт дополнительный выигрыш в задачах локализации объектов, поскольку заставляет модель использовать всю информативную область изображения, а не только наиболее заметный фрагмент.

Random Erasing и Cutout

Методы Random Erasing (Чжун и соавторы) и близкий к нему Cutout (Де Врис и Тейлор) случайным образом закрашивают прямоугольную область изображения однородным цветом или шумом, метка при этом не меняется. Эффект аналогичен dropout, но применяется на уровне входных данных: модель вынуждена не полагаться на какой-то один локальный признак и распределять внимание по всему объекту.

AutoAugment

AutoAugment (Кубук и соавторы, 2019) переформулирует выбор политики аугментации как задачу обучения с подкреплением: контроллер (рекуррентная сеть) ищет оптимальную последовательность операций (тип преобразования, вероятность применения и магнитуда), максимизирующую качество модели-«ребёнка» на отложенной выборке. Найденные политики для CIFAR-10, SVHN и ImageNet оказались переносимыми между задачами, но сам поиск чрезвычайно затратен вычислительно (тысячи GPU-часов).

RandAugment

RandAugment (Кубук и соавторы, 2020) — упрощение AutoAugment, устраняющее необходимость дорогостоящего поиска политики. Вместо обучаемого контроллера RandAugment случайным образом выбирает N операций из фиксированного набора и применяет их с единой глобальной магнитудой M, которые подбираются простым перебором по сетке на небольшом числе значений. При сопоставимом качестве RandAugment требует на порядки меньше вычислений, чем AutoAugment, что сделало его стандартом де-факто в современных конвейерах обучения свёрточных сетей и трансформеров зрения.

import torchvision.transforms as T
 
transform = T.Compose([
    T.RandAugment(num_ops=2, magnitude=9),
    T.ToTensor(),
])

Аугментация текстов

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

EDA (Easy Data Augmentation)

Вэй и Цзоу (2019) предложили набор из четырёх простых операций, применяемых к случайно выбранным словам предложения:

  1. Синонимичная замена (synonym replacement) — замена слова на синоним из тезауруса (например, WordNet).
  2. Случайная вставка (random insertion) — вставка синонима случайного слова предложения в случайную позицию.
  3. Случайное удаление (random deletion) — удаление слова с заданной вероятностью.
  4. Случайная перестановка (random swap) — обмен местами двух случайно выбранных слов.

Несмотря на простоту, EDA даёт заметный прирост качества классификации текста на малых выборках при незначительных вычислительных затратах.

Обратный перевод (back-translation)

Метод, предложенный Зеннрихом и соавторами (2016) первоначально для машинного перевода, заключается в переводе текста на промежуточный язык и обратно (например, русский → английский → русский). Результат сохраняет смысл исходного текста, но может отличаться лексически и синтаксически, что даёт естественную и разнообразную аугментацию:

text_en = translate(text_ru, src="ru", tgt="en")
text_ru_aug = translate(text_en, src="en", tgt="ru")

Back-translation особенно ценен тем, что не требует внешнего тезауруса и хорошо работает даже для сложных, многозначных конструкций, где простая замена слов ведёт к потере смысла.

Другие методы

  • Контекстные замены на основе языковых моделей — маскирование слова и его восстановление предобученной языковой моделью (например, BERT), что даёт более естественные, согласованные с контекстом замены по сравнению со словарными синонимами.
  • Перефразирование (paraphrasing) генеративными моделями.
  • Добавление шума на уровне символов — опечатки, замена раскладки клавиатуры, случайные вставки/удаления символов — полезно для повышения устойчивости моделей к «грязному» пользовательскому вводу.

Аугментация табличных данных

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

Добавление шума

Простейший приём — добавление небольшого гауссовского шума к числовым признакам, джиттеринг:

 \tilde{x}^{(k)} = x^{(k)} + \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, \sigma^2)

Величина \sigma подбирается пропорционально дисперсии признака, чтобы не разрушить полезный сигнал.

SMOTE для дисбаланса классов

SMOTE (Synthetic Minority Over-sampling Technique, Чавла и соавторы, 2002) — стандартный метод борьбы с дисбалансом классов. Для объекта x_i миноритарного класса находятся его k ближайших соседей того же класса, один из них x_{zi} выбирается случайно, и новый синтетический объект строится как точка на отрезке между ними:

 x_{new} = x_i + \delta \cdot (x_{zi} - x_i), \qquad \delta \sim U(0, 1)

В отличие от простого дублирования объектов миноритарного класса, SMOTE порождает разнообразные, но правдоподобные точки внутри его области в признаковом пространстве, снижая риск переобучения на буквально повторяющихся примерах.

from imblearn.over_sampling import SMOTE
 
smote = SMOTE(k_neighbors=5, random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

Существует ряд модификаций: Borderline-SMOTE (генерация только вблизи границы классов), ADASYN (адаптивное распределение количества синтетических примеров в зависимости от локальной сложности классификации), SMOTE-NC (для смешанных категориальных и числовых признаков).

Генеративные подходы

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

Аугментация аудио и временных рядов

  • Растяжение по времени (time stretching) — изменение длительности сигнала без изменения высоты тона.
  • Сдвиг по высоте тона (pitch shifting) — изменение высоты тона без изменения темпа.
  • Добавление фонового шума — наложение записанного шума окружения (уличный шум, шум толпы) с заданным отношением сигнал/шум.
  • Временной сдвиг (time shift) — циклический сдвиг сигнала во времени.
  • SpecAugment (Парк и соавторы, 2019) — вместо преобразования исходного сигнала во временной области метод оперирует спектрограммой: случайно маскируются полосы по оси времени (time masking) и по оси частот (frequency masking), а также применяется деформация оси времени (time warping). SpecAugment стал стандартом в задачах распознавания речи, обходясь без необходимости отдельно моделировать акустический шум.
  • Для временных рядов общего вида применяются: window warping (локальное растяжение/сжатие отдельных участков ряда), перестановка сегментов, magnitude warping (плавное изменение амплитуды).
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)

Сравнение методов по типам данных

Аугментация данных: сводная таблица по типам данных
Тип данных Базовые методы Продвинутые методы Основные библиотеки Типичные задачи
Изображения Повороты, отражения, сдвиги, масштабирование, изменение яркости/контраста, шум MixUp, CutMix, Random Erasing, AutoAugment, RandAugment Albumentations, imgaug, torchvision.transforms Классификация, детекция, сегментация
Текст Синонимичные замены, случайные вставка/удаление/перестановка слов (EDA) Обратный перевод, контекстные замены на основе языковых моделей nlpaug, TextAttack Классификация текста, NER, машинный перевод
Табличные данные Гауссовский шум, джиттеринг числовых признаков SMOTE и его модификации, генерация через GAN/VAE imbalanced-learn, SDV Кредитный скоринг, медицинская диагностика, детекция мошенничества
Аудио и временные ряды Растяжение времени, сдвиг высоты тона, фоновый шум SpecAugment, window warping, magnitude warping audiomentations, librosa, torchaudio.transforms Распознавание речи, анализ сенсорных сигналов

Динамическая vs статическая аугментация

По моменту применения различают два режима.

  • Статическая аугментация (offline augmentation) — новые объекты генерируются заранее и сохраняются на диск вместе с исходной выборкой. Преимущество — предсказуемая и воспроизводимая скорость обучения, отсутствие накладных расходов на преобразование во время обучения. Недостаток — конечное, фиксированное число вариаций каждого примера и повышенный расход дискового пространства.
  • Динамическая аугментация (online / on-the-fly augmentation) — преобразование применяется к каждому примеру заново на каждой эпохе обучения, обычно в процессе загрузки батча. Модель практически никогда не видит два эпохи подряд один и тот же объект в неизменном виде, что даёт эффективно неограниченное число вариаций и лучше действует как регуляризатор. Плата — дополнительная вычислительная нагрузка на CPU/GPU во время обучения, которая при плохой организации конвейера данных может стать узким местом, особенно для затратных преобразований (back-translation, генеративные модели).

На практике для изображений и аудио почти всегда используется динамическая аугментация (стандартный загрузчик данных в PyTorch или tf.data в TensorFlow применяют преобразования «на лету» в параллельных потоках), тогда как дорогостоящие методы — back-translation, генерация синтетических табличных строк GAN-моделью — чаще выполняются статически, один раз, поскольку их вычислительная стоимость несопоставима со стоимостью одного шага обучения.

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

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

  • Нарушение семантики задачи. Преобразование, кажущееся безобидным для одной задачи, может разрушать критичную информацию для другой. Вертикальное отражение допустимо для классификации пейзажей, но недопустимо для распознавания рукописных цифр (перевёрнутая «6» становится похожей на «9»). Изменение цвета недопустимо в задачах, где цвет — диагностический признак.
  • «Нереалистичные» примеры. Чрезмерно сильная или неудачно подобранная магнитуда преобразования порождает объекты, не встречающиеся в реальном распределении данных. Обучение на таких примерах не улучшает, а искажает представление модели о задаче, тратя ёмкость модели на нерелевантные вариации.
  • Смещение статистики распределения. Некоторые методы (например, агрессивный MixUp) смещают эффективное распределение обучающей выборки относительно тестового распределения, что может ухудшить калибровку итоговых вероятностей модели.
  • Ложное чувство защищённости от переобучения. Аугментация снижает, но не устраняет переобучение полностью и не заменяет собой недостаток данных для принципиально новых классов или редких сценариев, отсутствующих в обучающей выборке ни в каком виде.
  • Вычислительная стоимость. Продвинутые методы (AutoAugment, back-translation, генеративные модели для табличных данных) требуют значительных дополнительных вычислительных ресурсов, что не всегда оправдано выигрышем в качестве.
  • Разрушение зависимостей между признаками. Для табличных данных особенно легко случайно нарушить содержательные зависимости между признаками, если шум добавляется к каждому признаку независимо, — стоит проверять, что аугментированные объекты остаются правдоподобными с точки зрения предметной области.

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

Библиотеки и инструменты

  • Albumentations — библиотека для аугментации изображений, оптимизированная по скорости (реализация на OpenCV), поддерживает согласованное преобразование изображений вместе с масками сегментации, ограничивающими рамками и ключевыми точками, что важно для задач детекции и сегментации.
  • imgaug — одна из первых широко используемых библиотек аугментации изображений в Python, гибкий API для построения сложных цепочек преобразований.
  • torchvision.transforms — модуль аугментации изображений, встроенный в PyTorch, включает готовые реализации RandAugment, AutoAugment, MixUp и CutMix.
  • nlpaug — библиотека текстовой аугментации на уровне символов, слов и предложений, включая контекстные замены на основе языковых моделей и интеграцию с сервисами перевода для back-translation.
  • audiomentations — аналог Albumentations для аудиосигналов, реализует растяжение времени, сдвиг тона, добавление шума и другие преобразования.
  • imbalanced-learn — реализация SMOTE и его модификаций (Borderline-SMOTE, ADASYN, SMOTE-NC) для табличных данных, совместима с API scikit-learn.

См. также

Литература

  1. Krizhevsky A., Sutskever I., Hinton G. E. ImageNet Classification with Deep Convolutional Neural Networks // Advances in Neural Information Processing Systems (NIPS). — 2012. — Vol. 25.
  2. Simard P. Y., Steinkraus D., Platt J. C. Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis // Proceedings of ICDAR. — 2003.
  3. 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.
  4. Chapelle O., Weston J., Bottou L., Vapnik V. Vicinal Risk Minimization // Advances in Neural Information Processing Systems (NeurIPS). — 2000.
  5. Zhang H., Cisse M., Dauphin Y. N., Lopez-Paz D. mixup: Beyond Empirical Risk Minimization // International Conference on Learning Representations (ICLR). — 2018.
  6. 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.
  7. DeVries T., Taylor G. W. Improved Regularization of Convolutional Neural Networks with Cutout // arXiv preprint. — 2017.
  8. Zhong Z., Zheng L., Kang G., Li S., Yang Y. Random Erasing Data Augmentation // Proceedings of the AAAI Conference on Artificial Intelligence. — 2020.
  9. Cubuk E. D., Zoph B., Mane D., Vasudevan V., Le Q. V. AutoAugment: Learning Augmentation Policies from Data // Proceedings of CVPR. — 2019.
  10. 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.
  11. Wei J., Zou K. EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks // Proceedings of EMNLP-IJCNLP. — 2019.
  12. Sennrich R., Haddow B., Birch A. Improving Neural Machine Translation Models with Monolingual Data // Proceedings of the 54th Annual Meeting of the ACL. — 2016.
  13. 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.
  14. Shorten C., Khoshgoftaar T. M. A Survey on Image Data Augmentation for Deep Learning // Journal of Big Data. — 2019. — Vol. 6, No. 60.
  15. Goodfellow I., Bengio Y., Courville A. Deep Learning. — MIT Press, 2016.
Личные инструменты