Перейти к основному содержимому

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

Дополнительным требованием на модель может быть инвариантность к определённому виду преобразования gθ(x)g_\mathbf{\theta}(\mathbf{x}), где θ\mathbf{\theta} - параметр этого преобразования.

Иными словами, если f(x)f(\mathbf{x}) - прогноз нейросети для объекта x\mathbf{x}, то мы хотим, чтобы этот прогноз не изменялся при преобразовании объекта, т.е. требуем, чтобы

f(x)f(gθ(x))f(\mathbf{x}) \approx f(g_\theta(\mathbf{x}))

Это свойство называется инвариантностью (invariance) прогнозов модели к преобразованию.

Может быть много разных преобразований gθ11(x),gθ22(x),...gθKK(x)g^1_{\theta_1}(\mathbf{x}), g^2_{\theta_2}(\mathbf{x}), ... g^K_{\theta_K}(\mathbf{x}), относительно которых мы хотим достичь инвариантности.

Пример инвариантных преобразований

Рассмотрим классификацию изображений. Фотография кошки должна относиться к классу кошка даже если это изображение

  • повернуть на небольшой угол θ\theta;

  • изменить яркость цветов на θ\theta;

  • обрезать края на θ\theta пискселей

  • и т.д.

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

При этом преобразованные версии объектов помечаются той же самой целевой меткой, что и исходные объекты.

Таким образом, одно наблюдение {x,y}\{\mathbf{x},\mathbf{y}\} преобразуется в целый набор обучающих примеров вида

{gθ11(gθ22...(gθKK(x)..))}θ1,...θK,y}\{g^1_{\theta_1}(g^2_{\theta2}...(g^K_{\theta_K}(\mathbf{x})..))\}_{\theta_1,...\theta_K}, \mathbf{y} \} \\

с одним и тем же откликом yy для всевозможных параметров инвариантных преобразований θ1,...,θK\theta_1, ..., \theta_K, на которых мы обучаем модель.

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

Примеры инвариантных преобразований для классификации изображений

Рассмотрим задачу классификации изображений. Пусть у нас есть следующее изображение, отнесённая к классу "кошка":

Часто используются следующие инвариантные преобразования:

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

Также, в качестве расширения выборки, используется

  • добавление слабого шума к изображению,

  • изменение насыщенности цветов,

  • представление изображения в JPEG формате с разными уровнями сжатия.

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

Рассмотрим классификацию текстов. Популярный способ аугментации текстовых данных - это заменить текст его переформулировкой. Её можно сгенерировать автоматически, переводя текст на другой язык, а потом обратно:

Также можно заменить случайные слова их синонимами или близкими по смыслу словами:

Из текста можно исключить случайные слова, а если он состоит из предложений - то и целые предложения:

Если текст состоит из нескольких предложений, их можно менять местами:

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

При анализе звуковых данных, главным образом, человеческой речи, применяются следующие виды расширения обучающей выборки:

  • Обрезка звука. Причём обрезка может осуществляться как с начала и конца, так и в середине.

  • Менять среднюю высоту всех частот звука либо случайно варьировать каждую частоту в отдельности.

  • Изменение частоты можно производить не глобально для всего звука, а изменять её локально с разной силой.

  • Ускорять/замедлять отдельные временные фрагменты, сохраняя частоты.

  • Добавление небольшого шума к звуку. Шум можно генерировать случайным либо накладывать реальные звуки (вырезанные, например, из youtube-роликов) с небольшой громкостью.

Рекомендации по применению аугментации

Расширение обучающей выборки аугментацией - мощный инструмент по увеличению числа обучающих примеров и по обучению модели быть устойчивой к тем или иным трансформациям. Аугментация данных способна существенно повысить качество прогнозов и активно используется в прикладных задачах и соревнованиях по анализу данных.

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

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

Вот некоторые рекомендации по его использованию:

  1. Валидируйте модель только по исходным (нетрансформированным) объектам. Это обеспечит адекватный контроль качества на реальных объектах, а не на их синтетических преобразованиях.

  2. Если валидируете качество модели по объекту, то его трансформированная версия не должна оказываться в обучающей выборке, иначе модель может переобучиться на этот объект и показать завышенное качество.

  3. Контролируйте степень трансформации, чтобы она не слишком портила обучающие данные. Например в задаче распознавания цифр, если девятку повернуть на 180 градусов, то получим шестёрку! Если к изображению применить слишком сильные нелинейные искажения, то потратим ценный ресурс обучения нейросети на классификацию изображений, которые в тестовой выборке никогда не встретятся.

  4. Степень расширения и долю расширенных объектов необходимо подбирать по валидационной выборке.

Синхронное изменение прогноза

Вместо того, чтобы требовать неизменности прогноза при некоторой трансформации признаков, можно требовать синхронного изменения прогноза, т.е.

f(g(x))g(y),f(g(\mathbf{x}))\approx g(\mathbf{y}),

где f()f(\cdot) - прогностическая модель, а g()g(\cdot) - некоторая трансформация входа и выхода.

Указанное свойство называется эквивариантностью (equivariance) прогнозов модели к преобразованию.

Характерный пример - задача сегментации изображения, в которой каждый пиксель необходимо отнести к некоторому классу. Если g()g(\cdot) - операция сдвига, то логично ожидать при сдвиге входного изображения синхронный сдвиг и выходной сегментационной маски:

Эквивариантность может быть обобщено, когда преобразованию входа g1(x)g_1(\mathbf{x}) соответствует преобразованию выхода с другой функцией трансформации g2(y)g_2(\mathbf{y}):

f(g1(x))g2(y)f(g_1(\mathbf{x})) \approx g_2(\mathbf{y})