Connect with us

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

ИИ 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 надеется помочь другим использовать силу ИИ для социального блага.