Изменения

Перейти к: навигация, поиск

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

4370 байт добавлено, 16:24, 4 апреля 2019
Нет описания правки
[[File:Autoencoder1Autoencoder1RUS1998ALEX.png|450px300px|thumb|Автокодировщик]]Автокодировщик (англ. autoencoder) — специальная архитектура искусственных нейронных сетей, позволяющая применять обучение без учителя при использовании метода обратного [[ Обратное распространение ошибки | собратного распространения ошибки]]. Простейшая архитектура автокодировщика — сеть прямого распространения, без обратных связей, наиболее схожая с перцептроном и содержащая входной слой, промежуточный слой и выходной слой. В отличие от [[ Нейронные сети, перцептрон | перцептрона]], выходной слой автокодировщика должен содержать столько же нейронов, сколько и входной слой.
Автокодировщик состоит из двух частей: энкодера <tex>g</tex> и декодера <tex>f</tex>. Энкодер переводит входной сигнал в его представление (код): <tex>h = g(x)</tex>, а декодер восстанавливает сигнал по его коду: <tex>x = f(h)</tex>.
Автокодировщик можно использовать для предобучения, например, когда стоит задача классификации, а размеченных пар слишком мало. Или для понижения размерности в данных для последующей визуализации. Либо когда просто надо научиться различать полезные свойства входного сигнала.
==ОписаниеПример==
[[File:AutoencoderExampel.png|450px700px|thumb|]]
Для примера возьмем набор данных для продуктов, купленных клиентами
*Шаг 1: Возьмем первую строку из данных по клиенту для всех продуктов в качестве входа. <tex>1</tex> означает, что клиент купил продукт. <tex>0</tex> означает, что клиент не купил.
*Шаг 2: Закодируем ввод в другой вектор <tex>h</tex> меньшего размера, чем входной. Можно использовать функцию активации сигмоида для <tex>h</tex>, так как она ее область значения от <tex>0</tex> до <tex>1</tex>. <tex>W</tex> - вес, примененный к входу, <tex>b</tex> {{- --}} член смещения.
<tex>h = f(Wx+b)</tex>
*Шаг 3: Декодируем вектор <tex>h</tex>, чтобы воссоздать ввод. Выход будет того же размера, что и вход
*Шаг 4: Рассчитать ошибку <tex>L</tex>. Ошибка {{- --}} это разница между входным и выходным вектором. Наша цель {{--- }} минимизировать ошибку, чтобы выходной вектор был похож на входной вектор.
*Шаг 5: С помощью алгоритма обратного распространения ошибки нужно обновить веса. Скорость обучения определяется тем, насколько обновляются веса.
*Шаг 6: Повторите шаги с <tex>1</tex> по <tex>5</tex> для каждого клиента в наборе данных. Веса обновляются каждый раз (стохастический градиентный спуск)
==Использование==
*Нелинейное уменьшения размерности. Кодирует ввод в скрытом слое с меньшей размерностью по сравнению с входным измерением. Скрытый слой позже декодируется как выходной. Автоэнкодер уменьшает размерность линейных и нелинейных данных, следовательно, он более мощный, чем PCA[[метод главных компонент]]<sup>[на 3.04.19 не создан]</sup>. *Рекомендации пользователям. При этом используются глубокие кодеры, чтобы понять пользовательские предпочтения, чтобы рекомендовать порекомендовать фильмы, книги или предметы
*Извлечения зависимостей в данных: автоэнкодеры пытаются минимизировать ошибку восстановления. В процессе уменьшения ошибки он изучает некоторые важные зависимости, присутствующие во входных данных. Он восстанавливает входные данные из кодированного состояния. Кодирование генерирует новый набор функций, который представляет собой комбинацию оригинальных зависимостей. Кодирование в автоэнкодерах помогает идентифицировать скрытые зависимости, присутствующие во входных данных.
*Распознавание изображений: для распознавания изображений используется сложный автоэнкодер. Можно использовать несколько совмещенных кодировщиков, что помогает изучить различные функции изображения.
 
==Виды автокодировщиков==
 
===Undercomplete Autoencoders===
Имеют меньший размер скрытого слоя по сравнению с входным слоем. Это помогает выделить зависимости из данных. Undercomplete Autoencoders минимизируют функцию потерь, штрафуя <tex>g(f(x))</tex> за отличия от входных данных x. Так же не нуждаются в регуляризации, поскольку максимизируют вероятность данных, а не копируют входные данные в выходные.
 
<tex>L = |x - f(g(x))|</tex>
 
===Sparse Autoencoders===
Размерность скрытого слоя больше, чем входного. Они все еще могут обнаружить важные особенности из данных. Sparse Autoencoders имеют штраф за разреженность, <tex>Ω(h)</tex>, значение, близкое к нулю. На скрытый слой накладывается штраф за разреженность в дополнение к ошибке восстановления. Это предотвращает переобучение.
 
<tex>L = |x - f(g(x))| + Ω(h)</tex>
 
===Denoising Autoencoders(DAE)===
Создаем поврежденную копию ввода, внося некоторый шум. Это помогает избежать автоматического копировать входных данные в выходные, не изучая их особенности. DAE минимизирует функцию потерь между выходным узлом и поврежденным вводом.
 
<tex>L = |x' - f(g(x))|</tex>
 
===Contractive Autoencoders(CAE)===
Целью CAE является получение надежного представления данных, которое менее чувствительно к небольшим изменениям. Надежность представления данных достигается путем регуляризации. Наказание в CAE это норма Фробениуса матрицы Якоби, которая вычисляется для скрытого слоя относительно входных данных. Фробениусовой нормой матрицы Якоби является сумма квадратов всех элементов.
 
<tex>L = |x - f(g(x))| + \lambda*||J_f(x)||_F^2</tex>
 
<tex>||J_f(x)||_F^2 = sum_{i, j}(\partial h_j(x) / \partial x_i)^2</tex>
 
===Stacked Denoising Autoencoders===
Stacked Autoencoders {{---}} это нейронная сеть с несколькими слоями Sparse Autoencoders. Когда мы добавляем в автоэнкодер больше скрытых слоев, это помогает уменьшить объемные код, получаемый кодировщиком. Restricted Boltzmann Machine (RBM) является основной частью сети глубокого убеждения.
 
===Deep Autoencoders===
Состоит из двух идентичных глубоких сетей. Одна сеть для кодирования и другая для декодирования. Обычно имеют от 4 до 5 уровней для кодирования и следующие от 4 до 5 уровней для декодирования.
==Пример реализации==
def create_dense_ae():
<font color="green"># Размерность кодированного представления</font>
encoding_dim = 49
<font color="green"># Энкодер</font> <font color="green"># Входной плейсхолдер</font> input_img = Input(shape=(28, 28, 1)) <font color="green"># 28, 28, 1 {{-- -}} размерности строк, столбцов, фильтров одной картинки, без батч-размерности</font> <font color="green"># Вспомогательный слой решейпинга</font>
flat_img = Flatten()(input_img)
<font color="green"># Кодированное полносвязным слоем представление</font> encoded = Dense(encoding_dim, activation=<font color="green">'relu'</font>)(flat_img)
<font color="green"># Декодер</font> <font color="green"># Раскодированное другим полносвязным слоем изображение</font>
input_encoded = Input(shape=(encoding_dim,))
flat_decoded = Dense(28*28, activation=<font color="green">'sigmoid'</font>)(input_encoded)
decoded = Reshape((28, 28, 1))(flat_decoded)
<font color="green"># Модели, в конструктор первым аргументом передаются входные слои, а вторым выходные слои</font> <font color="green"># Другие модели можно так же использовать как и слои</font> encoder = Model(input_img, encoded, name=<font color="green">"encoder"</font>) decoder = Model(input_encoded, decoded, name=<font color="green">"decoder"</font>) autoencoder = Model(input_img, decoder(encoder(input_img)), name=<font color="green">"autoencoder"</font>)
return encoder, decoder, autoencoder
== Источники информации ==
*[https://medium.com/datadriveninvestor/deep-learning-different-types-of-autoencoders-41d4fa5f7570 Deep Learning — Different Types of Autoencoders]
*[https://medium.com/datadriveninvestor/deep-learning-autoencoders-db265359943e Deep Learning Autoencoders]
*[https://habr.com/ru/post/331382/ Автоэнкодеры в Keras]
[[Категория: Машинное обучение]]
[[Категория: Порождающие модели]]
9
правок

Навигация