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

Расширение обучающей выборки

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

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

f(x)f(gθ(x))f(x) \approx f(g_\theta(x))

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

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

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

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

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

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

  • и т.д.

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

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

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

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

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

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

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

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

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

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

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

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

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

Расширение выборки для текстов

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

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

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

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

Расширение выборки при анализе речи

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

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

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

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

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

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

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

Рекомендации по расширению выборки

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

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

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

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

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

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

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

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

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

f(g(x))g(y),(1)f(g(x))\approx g(y), \tag{1}

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

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

Свойство (1) называется эквивариантностью (equivariance) и может быть обобщено, когда преобразованию входа g1(x)g_1(x) должно соответствовать преобразованию выхода с некоторой другой функцией трансформации g2(y)g_2(y):

f(g1(x))g2(y)f(g_1(x)) \approx g_2(y)