ИИ 101

Что такое Автоэнкодер?

mm

Если вы раньше читали о методах обучения без учителя, вы, возможно, встречали термин «автоэнкодер». Автоэнкодеры являются одним из основных способов разработки моделей обучения без учителя. Однако, что такое автоэнкодер?

Кратко, автоэнкодеры работают, принимая данные, сжимая и кодируя данные, а затем реконструируя данные из представления кодирования. Модель обучается до тех пор, пока потеря не будет минимизирована, и данные воспроизводятся как можно ближе. Через этот процесс автоэнкодер может научиться важным особенностям данных. Хотя это быстрое определение автоэнкодера, было бы полезно более внимательно рассмотреть автоэнкодеры и получить лучшее понимание того, как они работают. Эта статья попытается развеять тайну автоэнкодеров, объясняя архитектуру автоэнкодеров и их применения.

Что такое Автоэнкодер?

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

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

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

Архитектура Автоэнкодера

Давайте рассмотрим архитектуру автоэнкодера. Мы обсудим основную архитектуру автоэнкодера здесь. Существуют вариации этой общей архитектуры, которые мы обсудим в разделе ниже.

Фото: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Как упоминалось ранее, автоэнкодер можно по сути разделить на три различных компонента: кодировщик, бутылку и декодировщик.

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

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

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

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

Атрибуты Автоэнкодера

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

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

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

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

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

Типы Автоэнкодеров

Как упоминалось выше, существуют вариации классической архитектуры автоэнкодера. Давайте рассмотрим различные архитектуры автоэнкодеров.

Редкий

Фото: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

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

Контрактный

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

Свёрточный

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

Деноизный

Фото: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Деноизные автоэнкодеры вводят шум в кодирование, в результате чего получается кодирование, которое является испорченной версией исходных входных данных. Эта испорченная версия данных используется для обучения модели, но функция потерь сравнивает выходные значения с исходными входными данными, а не с испорченными входными данными. Цель состоит в том, чтобы сеть смогла воспроизвести исходную, неиспорченную версию изображения. Сравнивая испорченные данные с исходными данными, сеть учится, какие особенности данных являются наиболее важными, а какие особенности являются незначительными/испорченными. Другими словами, чтобы модель могла деноизировать испорченные изображения, она должна была извлечь важные особенности изображения.

Вариационный

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

 

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

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

Применения Автоэнкодеров

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

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

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

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

Блогер и программист с специализацией в Machine Learning и Deep Learning темах. Daniel надеется помочь другим использовать силу ИИ для социального блага.