Что такое автоэнкодер?
Я студент и изучаю машинное обучение. Я сосредотачиваюсь на глубоких генеративных моделях , в частности на автокодерах и вариационных автокодерах (VAE) .
Я пытаюсь понять концепцию, но у меня возникают некоторые проблемы.
До сих пор я понял, что автоэнкодер принимает входные данные, например изображение, и хочет уменьшить это изображение до скрытого пространства , которое должно содержать основные функции набора данных, с операцией кодирования , затем с помощью операции из декодирования , то reconstrunct изображения , которое потеряло некоторую информацию из - за кодирование части.
После этого с функцией потерь он восстанавливает скрытое пространство и таким образом получает скрытые функции.

Что касается VAE, он использует вероятностный подход, поэтому мы должны изучить среднюю и новую ковариацию гауссиана.
Пока это то, что я понял.
Что мне действительно непонятно, так это то, что мы пытаемся изучить с помощью автокодировщиков и VAE?
Я видел примеры, когда изображение переходило от неулыбчивого к улыбающемуся лицу или от черно-белого изображения к цветному.
Но я не понимаю основной концепции: что делает автоэнкодер?
Я добавляю сюда несколько источников, где я учился, чтобы все желающие могли их увидеть:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
Ответы
что делает автокодировщик?
Простейший автокодировщик преобразует изображение большой размерности (скажем, 100 тыс. Пикселей) в представление низкой размерности (скажем, вектор длиной 10), а затем использует только эти 10 функций, чтобы попытаться восстановить исходное изображение. Вы можете представить себе аналогию с людьми: я смотрю на кого-то, описываю его («высокий, темноволосый,…»), а затем, когда я забываю, как они выглядят, я пытаюсь зарисовать их, используя только свои записи.
что мы пытаемся узнать?
Другими словами, зачем беспокоиться? Несколько причин:
- уменьшение размерности: 10 функций намного удобнее, чем 100K пикселей. Например, я могу выполнить классификацию путем кластеризации в 10-мерном пространстве (в то время как кластеризация в 100К-мерном пространстве была бы неразрешимой).
- семантическое значение: если все пойдет хорошо, у каждой из 10 функций будет очевидное «объяснение» - например, изменение одного значения заставит объект выглядеть старше (хотя обычно это не так просто). В отличие от значений пикселей, на которые влияют перемещение, поворот и т. Д.
- Распознавание исключений: если я тренирую свой автокодировщик на собаках, он, как правило, должен хорошо выполнять кодирование и декодирование изображений собак. Но если я поставлю кошку, она, вероятно, будет делать ужасную работу - что я могу сказать, потому что вывод не похож на ввод. Итак, поиск мест, где автокодировщик плохо справляется с работой, - это обычный способ поиска аномалий.
Я видел примеры, когда изображение переходит от неулыбчивого к улыбающемуся лицу или от черно-белого изображения к цветному.
Есть много разных типов автокодировщиков. То, что я описал выше, является самым простым. Другой распространенный тип - это автокодировщик с шумоподавлением - вместо восстановления исходного изображения цель состоит в том, чтобы создать изображение, которое связано с исходным изображением, но отличается.
Классическим примером этого является шумоподавление (отсюда и название): вы можете взять чистое изображение, добавить кучу шума, пропустить его через автокодировщик, а затем вознаградить автокодировщик за создание чистого изображения. Итак, ввод (зашумленное изображение) на самом деле отличается от желаемого вывода (чистое изображение). Приведенные вами примеры аналогичны.
Проблема при разработке таких типов автокодировщиков обычно заключается в потерях - вам нужен какой-то механизм, чтобы сообщить автокодировщику, правильно он поступил или нет.
Что касается VAE, он использует вероятностный подход, поэтому мы должны узнать среднее значение и ковариацию гауссиана.
VAE - это третий тип автокодировщика. Это немного особенное, потому что оно хорошо обосновано математически; никаких специальных показателей не требуется. Математика здесь слишком сложна, но основные идеи заключаются в следующем:
- Мы хотим, чтобы скрытое пространство было непрерывным. Вместо того, чтобы назначать каждый класс своему собственному углу скрытого пространства, мы хотим, чтобы скрытое пространство имело четко определенную непрерывную форму (т. Е. Гауссову). Это хорошо, потому что заставляет скрытое пространство быть семантически значимым.
- Сопоставление изображений и скрытых пространств должно быть вероятностным, а не детерминированным. Это потому, что один и тот же объект может создавать несколько изображений.
Итак, рабочий процесс такой:
- Вы начинаете со своего образа, как и раньше
- Как и раньше, ваш кодировщик определяет вектор (скажем, длиной 200).
- Но этот вектор не является скрытым пространством. Вместо этого вы используете этот вектор в качестве параметров для определения скрытого пространства. Например, вы можете выбрать для своего латентного пространства 100-мерное гауссово. Для 100-мерного гаусса потребуется среднее значение и стандартное отклонение в каждом измерении - это то, для чего вы используете свой вектор длины 200.
- Теперь у вас есть распределение вероятностей. Вы выбираете одну точку из этого распределения. Это представление вашего изображения в скрытом пространстве.
- Как и раньше, ваш декодер превратит этот вектор в новый «вывод» (скажем, в вектор длиной 200К).
- Но этот «результат» не является вашим выходным изображением. Вместо этого вы используете эти 200K параметров для определения 100K-мерного гаусса. Затем вы выбираете одну точку из этого распределения - это ваше выходное изображение.
Конечно, в гауссианах нет ничего особенного, вы могли бы так же легко использовать другое параметрическое распределение. На практике люди обычно используют гауссианы.
Иногда это дает лучшие результаты, чем другие автокодировщики. Кроме того, иногда вы получаете интересные результаты, когда смотрите между классами в вашем скрытом пространстве. Расстояние изображения в скрытом пространстве от центра кластера иногда связано с неопределенностью.
Более того, есть хорошее свойство, что эти многомерные гауссианы являются распределениями вероятностей в строгом математическом смысле. Они аппроксимируют вероятность того, что данное изображение принадлежит определенному классу. Итак, есть некоторые мысли, что VAE смогут преодолеть «размахивание руками» глубокого обучения и вернуть все на твердое байесовское вероятностное основание. Но, конечно, это только приближение, а приближение включает в себя множество глубоких нейронных сетей, поэтому на данный момент еще много размахивания руками.
Кстати, мне нравится использовать этот вопрос во время интервью - удивительное количество людей заявляют, что имеют опыт работы с VAE, но на самом деле не осознают, что VAE отличаются от «обычных» AE.
Проще всего подумать об автоэнкодерах: насколько хорошо определенная часть инфрматона может быть реконструирована из ее уменьшенного или иного представления. Если вы зашли так далеко, это означает, что вы успешно реконструировали предыдущее предложение, используя только 92 из его исходных 103 символов.
В частности, автоэнкодеры - это нейронные сети, которые обучены изучать эффективное кодирование данных неконтролируемым образом. Цель состоит в том, чтобы изучить представление данного набора данных, обучая сеть игнорировать «неважные» сигналы, такие как шум. Обычно AE рассматриваются для уменьшения размерности.
Практически AE
- изначально сжимает входные данные в представление в латентном пространстве
- реконструирует вывод из этого представления скрытого пространства
- вычисляет разницу между входом и выходом, которая определяется как потеря реконструкции.
В этом цикле обучения AE минимизирует потери при восстановлении, чтобы выходной сигнал был максимально похож на входной.
Один из подходов, который я нашел полезным при рассмотрении автокодировщиков, заключается в следующем: в то время как такие методы, как PCA, идентифицируют оси максимального изменения во входном пространстве, введение нелинейных функций активации в автокодировщике позволяет идентифицировать оси максимального изменения. вариация, вложенная в (потенциально) нелинейное преобразование пространства.
В качестве примера рассмотрим данные,
Обратите внимание, что при отсутствии нелинейных функций активации автокодировщик по сути становится эквивалентным PCA - вплоть до изменения основы. Полезным упражнением может быть понимание того, почему это так.