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

Автокодировщик

Идея

Автокодировщик (autoencoder) - это нейросеть x^=f(x)\hat{x}=f(x), задача которой по входу xx, восстановить сам вход. Для настройки автокодировщика обычно используется квадрат L2L_2 потерь:

L(x^,x)=x^x2(1)\mathcal{L}(\hat{x},x)=||\hat{x}-x||^2 \tag{1}
Разметка не используется

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

Структурно автокодировщик состоит из

  • кодировщика (encoder) e(x)e(x)

  • и декодировщика (decoder) d(e)d(e)

x^=f(x)=d(e(x))\hat{x}=f(x)=d(e(x))

Кодировщик преобразует исходный объект в его внутреннее признаковое представление или эмбеддинг (embedding), а декодировщик пытается по эмбеддингу объекта восстановить сам объект.

Чтобы избежать тривиального решения задачи, когда автокодировщик настраивается повторять тождественное преобразование x^=x\hat{x}=x, на архитектуру или процесс настройки весов накладываются некоторые ограничения, о которых будет рассказано ниже.

Применения автокодировщика

  • Предобучение (pretraining). Если для конечной задачи обучения с учителем обучающая выборка {(xn,yn)}n=1N\{(x_n,y_n)\}_{n=1}^Nмала, но есть много неразмеченных объектов {x}n=1M\{x\}_{n=1}^M, MNM\gg N, то можно на большой неразмеченной выборке настроить автокодировщик f(x)=d(e(x))f(x)=d(e(x)), а потом инициализировать первые слои сети, решающей задачу обучения с учителем слоями кодировщика e(x)e(x). Таким образом, даже без использования меток мы получим перевод объекта из исходного пространства низкоуровневых признаков xx в высокоуровневые e(x)e(x), с которыми проще работать. При достаточном объёме размеченной выборки можно первые перенесённые слои донастроить под конечную задачи с небольшим шагом обучения.

  • Снижение размерности (dimensionality reduction). Если размерность пространства эмбеддингов e(x)e(x) существенно меньше размерности исходного пространства признаков xx, то объекты можно хранить не в исходном виде, а в сжатом в виде эмбеддинга. Чтобы восстановить сжатый объект e(x)e(x) до исходного, достаточно просто пропустить его через декодировщик x^=d(e(x))\hat{x}=d(e(x)). Поскольку автокодировщик неидеально восстанавливает исходный объект, получим сжатие данных с потерями (lossy compression), которое, впрочем, часто используется на практике, как, например, представление изображения в JPEG формате.

  • Визуализация данных - частный случай снижения размерности, когда размерность эмбеддинга e(x)e(x) равна двум или трём. В этом случае сложные многомерные данные можно визуализировать.

  • Фильтрация шума (denoising) достигается за счёт пропускания зашумлённого объекта (например, изображения с шумом) через автокодировщик. Удаление шума обеспечивается тем, что автокодировщик хорошо восстанавливает типичные паттерны реальных данных, а шум случаен, поэтому его сложно воспроизвести. Есть архитектура автокодировщика (denoising autoencoder), специально обученная фильтровать шум.

  • Детекция аномалий (anomaly detection) - задача, в которой нужно выделить нетипичные объекты, выбивающиеся из общего распределения объектов. Она может решаться с помощью автокодировщика.

Как с помощью автокодировщика детектировать аномальные объекты?

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

abnormality(x)=f(x)x2\text{abnormality}(x)=||f(x)-x||^2

Недоопределенный автокодировщик

Недоопределенный автокодировщик (undercomplete autoencoder) обладает свойством, что размерность пространства эмбеддингов меньше пространства исходных признаков:

dim(e(x))<dim(x)\text{dim}(e(x))<\text{dim}(x)

Ниже показан недоопределённый автокодировщик с одним скрытым слоем.

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

Автокодировщик и метод главных компонент

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

Можно показать, что недоопределённый автокодировщик с K нейронами на скрытом слое эквивалентен методу главных компонент, т.е. e(x)e(x) выступает проекцией на то же самое подпространство наилучшей аппроксимации, если настройка весов осуществляется согласно (1), а на всех слоях используются тождественные активации.

При этом интересно, что даже если на скрытом будут нелинейные активации, кодировщик всё равно будет отображать объекты в пространство наилучшей аппроксимации [1].

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

Пример 4-слойного автокодировщика, переводящего многомерный объект в двумерное представление, которое можно визуализировать:

Разреженный автокодировщик

Разреженный автокодировщик (sparse autoencoder) добивается невырожденного решения (которым выступает тождественное преобразование f(x)=xf(x)=x) за счёт модификации функции потерь (1), добавляя в неё L1L_1 регуляризацию на эмбеддинг объекта e(x)=[e1,e2,...eK]e(x)=[e_1,e_2,...e_K]:

Ls(x^,x)=f(x)x2+λk=1Kek,\mathcal{L}_s(\hat{x},x)=||f(x)-x||^2+\lambda \sum_{k=1}^K |e_k|,

где λ>0\lambda>0 - гиперпараметр, отвечающий за силу регуляризации. Можно показать, что использование L1L_1-регуляризации при настройке автокодировщика будет приводить к разреженным эмбеддингам, т.е. эмбеддингам, у которых часть элементов будут в точности равны нулю.

Фильтрующий автокодировщик

Фильтрующий автокодировщик (denoising autoencoder, [2]) избавляется от вырождения автокодировщика к тождественному преобразованию за счёт внесения шума в исходный объект xx:

x+шумx~x \xrightarrow{\text{+шум}} \tilde{x}

При этом в функции потерь требуется восстановление исходного незашумлённого объекта xx:

L(x,x^)=f(x~)x2.\mathcal{L}(x,\hat{x})=||f(\tilde{x})-x||^2.

Шум можно добавлять, зануляя отдельные случайные элементы xx либо добавляя к xx Гауссов шум.

Маскированный автокодировщик

При применении фильтрующего автокодировщика к изображениям, компонентами xx выступают пиксели изображения, интенсивность которых меняется плавно, за счёт чего автокодировщику становится очень просто восстановить зашумлённые пиксели по их соседям. Чтобы заставить автокодировщик решать более сложную задачу (и получать более интеллектуальные эмбеддинги) используется маскированный автокодировщик (masked autoencoder, [3]), в котором в качестве зашумляющего преобразования применяется исключение квадратных фрагментов (патчей, patch) изображения, как показано на схеме ([3]):

Автокодировщик на базе трансформерной модели (image transformer) позволяет добиться правдоподобного восстановления изображения, даже если 80% фрагментов пропущено ([3]):

Сжимающий автокодировщик

Сжимающий автокодировщик (contractive autoencoder, [4]), в свою очередь, аналогичен разреженному автокодировщику, но в качестве регуляризатора используется квадрат нормы Фробениуса (сумма квадратов элементов) от матрицы Якоби эмбеддингов по входным признакам x=[x1,x2,...xD]x=[x^1,x^2,...x^D]:

Lс(x^,x)=f(x)x2+λd=1Dk=1K(ek(x)xd)2\mathcal{L}_с(\hat{x},x)=||f(x)-x||^2+\lambda \sum_{d=1}^D\sum_{k=1}^K \left( \frac{\partial e_k(x)}{\partial x^d} \right )^2

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

Литература

  1. Bourlard H. Auto-association by multilayer perceptrons and singular value decomposition. – 2000.
  2. Vincent P. et al. Extracting and composing robust features with denoising autoencoders //Proceedings of the 25th international conference on Machine learning. – 2008. – С. 1096-1103.
  3. He K. et al. Masked autoencoders are scalable vision learners //Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. – 2022. – С. 16000-16009.
  4. Rifai S. et al. Contractive auto-encoders: Explicit invariance during feature extraction //Proceedings of the 28th international conference on international conference on machine learning. – 2011. – С. 833-840.