Обучение без учителя - Часть 2

Автоэнкодеры

Навигация

Это конспекты лекции FAU Глубокое обучение на YouTube. Это полный текст лекции и соответствующие слайды. Надеемся, вам понравится это не меньше, чем видео. Конечно, эта стенограмма была создана с помощью методов глубокого обучения в значительной степени автоматически, и были внесены лишь незначительные изменения вручную. "Попробуй сам!" Если вы заметили ошибки, сообщите нам об этом!

Ссылки

Предыдущая лекция / Посмотрите это видео / Верхний уровень / Следующая лекция

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

Итак, вот наши слайды. Вторая часть нашей лекции и тема автоэнкодеров. Что ж, концепция автоэнкодера заключается в том, что мы хотим использовать идеи нейронных сетей с прямой связью. Можно сказать, что нейронная сеть с прямой связью является функцией x, которая производит некоторую кодировку y.

Теперь проблема заключается в следующем: «Как мы можем вызвать потери в таком созвездии?» Идея довольно проста. Здесь мы добавляем дополнительный слой сверху, и его цель - вычислить декодирование. Итак, у нас есть еще один слой - g (y). g (y) дает шляпу x. Затем мы можем определить потерю, заключающуюся в том, что x шляпа и x должны быть одинаковыми. Таким образом, автоэнкодер пытается приблизиться к идентичности. Что ж, звучит довольно просто. Честно говоря, если у нас здесь точно такое же количество узлов на входе и в скрытом слое для y, то, вероятно, самым простым решением будет идентификация. Так почему это вообще полезно?

Что ж, давайте посмотрим на некоторые функции потерь. Обычно вы можете использовать функцию потерь, которая затем действует здесь на x и некоторых x ’. Он может быть пропорционален функции отрицательного логарифма правдоподобия, где у вас есть p (x | x ’) и результирующие функции. Затем аналогичным образом, как мы видели ранее в этом классе, вы можете использовать квадрат нормы L2, где вы предполагаете, что ваша плотность вероятности функции является нормальным распределением с равномерной дисперсией. Затем вы получаете потерю L2. Это просто x минус x ’, и это заключено в норму L2. Конечно, вы также можете делать такие вещи, как кросс-энтропия. Итак, если вы предположите распределение Бернулли, вы увидите, что в конечном итоге мы получаем именно нашу кросс-энтропию. Это просто сумма взвешенного x, умноженного на логарифм подстрочного индекса x 'i плюс 1- x подстрочного индекса i, умноженного на логарифм 1 - x 'индекс i. Помните, что если вы хотите использовать это таким образом, тогда ваши x должны находиться в диапазоне вероятностей. Итак, если вы хотите применить такую ​​функцию потерь, вы можете использовать ее в сочетании с функцией softmax.

Итак, вот несколько типичных стратегий создания таких автоэнкодеров. Я думаю, что одним из самых популярных является неполный автоэнкодер. Итак, здесь вы усиливаете сжатие информации, используя меньше нейронов в скрытом слое. Вы пытаетесь найти преобразование, которое существенно снижает размерность скрытого слоя. Затем вы пытаетесь перейти от этого скрытого слоя к исходной области данных и пытаетесь найти решение, которое приведет к минимальным потерям. Итак, вы пытаетесь изучить сжатие здесь. Между прочим, если вы сделаете это с линейными слоями и квадратом нормы L2, вы, по сути, изучите анализ главных компонентов (PCA). Если вы используете его с нелинейными слоями, вы получите нечто вроде нелинейного обобщения PCA.

Есть и такие редкие автоэнкодеры. Здесь у нас другая идея. Мы даже увеличиваем количество нейронов, чтобы они напоминали вектор с горячим кодированием. Итак, вы можете сказать: «Зачем вам увеличивать количество нейронов? Тогда вы могли бы даже найти гораздо более простое решение, например идентификацию, и пренебречь парочкой этих нейронов! » Таким образом, эта идея не будет работать напрямую. Вы должны обеспечить разреженность, что также приводит к названию разреженного автоэнкодера. Здесь вы должны обеспечить разреженность активаций, используя некоторую дополнительную регуляризацию. Например, вы можете сделать это с нормой L1 при активациях в y. Помните, что разреженный автоэнкодер проистекает из разреженности в активациях, а не из-за разреженности в весах. Если вы посмотрите на свою личность, то увидите, что это просто диагональная матрица с единицами по диагонали. Так что это тоже было бы очень разреженным решением. Итак, снова применяйте разреженность к активациям, а не к весам.

Что еще можно сделать? Что ж, вы можете использовать варианты автоэнкодера. Вы можете комбинировать его практически со всеми рецептами, которые мы уже выучили в этом классе. Вы можете создавать сверточные автоэнкодеры. Здесь вы заменяете полностью связанные слои сверточными слоями, а также можете при желании добавить слои объединения.

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

Теперь вы можете даже пойти дальше, используя автокодировщик шумоподавления в качестве генеративной модели. Идея здесь в том, что если вы часто пробуете модель искажения, то модель шума. Затем автоэнкодер с шумоподавлением изучает вероятность соответствующего входа. Итак, если у вас есть x в качестве типичного образца, то при многократном применении шума и шумоподавления этот образец будет воспроизводиться очень часто. Таким образом, вы можете затем использовать цепь Маркова и чередовать модель шумоподавления и процесс искажения. Затем это приводит к оценке p (x). Честно говоря, это часто бывает дорого, и очень сложно оценить сходимость, что является причиной того, что так называемые вариационные автокодеры гораздо более распространены. Мы поговорим об этих вариационных автоэнкодерах на нескольких слайдах.

Есть несколько вариантов, которые нам нужно представить в первую очередь. Есть так называемый автокодировщик с накоплением. В составном автокодировщике вы, по сути, помещаете автокодер внутри автокодировщика. Это позволяет нам создавать по существу глубокие автоэнкодеры. Мы видим это здесь, в концепции. Автоэнкодер 1 использует в скрытом слое Автоэнкодер 2, который обозначен синими узлами. Вы можете объединить их в один автокодировщик.

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

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

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

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

Итак, предположение состоит в том, что у нас есть некая скрытая скрытая переменная z, которая генерирует некоторое наблюдение x. Затем вы можете обучить вариационный автокодер, определив распределение z . Тогда проблема в том, что вычисление этого распределения p (z | x) обычно неразрешимо. Итак, мы каким-то образом должны аппроксимировать наше p (z | x) легко управляемым распределением. Это означает, что управляемое распределение q затем приводит к проблеме, заключающейся в том, что мы должны определить параметры q. Например, для этого можно использовать распределение Гаусса. Затем вы можете использовать это, чтобы определить расхождение Кульбака-Лейблера между P (z | x) и q (z | x ). Это эквивалентно максимизации вероятности восстановления ожидаемого значения логарифма p (x | z) за вычетом расхождения KL между q (z | x) и p (z). Это заставляет q (z | x) быть похожим на истинное априорное распределение p (z).

Итак, теперь p (z) часто считается изотропным гауссовым распределением. Теперь определение q (z | x) сводится к оценке векторов параметров μ и σ. Итак, делаем это с помощью нейронной сети. Кто бы мог подумать об этом? Мы оцениваем наши q (z | x) и p (x | z). Итак, здесь вы видите общую схему. Опять же, вы видите эту структуру автоэнкодера, и у нас есть этот кодировщик q (z | x), который производит представление скрытого пространства, а затем наш p (x | z), что снова дает наш результат x '. x ’должен быть похож на x.

Итак, давайте рассмотрим это более подробно. Вы можете видеть, что в ветви кодировщика у нас, по сути, есть классическая домашняя нейронная сеть с прямой связью, которая снижает размерность. Далее мы вносим одно ключевое изменение. Это обозначено здесь светло-красным и светло-зеленым. Ключевой идеей здесь является то, что в конкретном слое, обозначенном цветами, мы меняем интерпретацию активаций. В этих нейронах они, по сути, представляют собой просто слои с прямой связью, но мы интерпретируем здесь два верхних нейрона как средство нашего латентного распределения, а два нижних нейрона как вариации скрытых распределений. Теперь ключевая проблема заключается в том, что для перехода к следующему уровню мы должны выполнить выборку из этих распределений, чтобы получить фактические наблюдения и выполнить их декодирование. Итак, как это потенциально можно сделать? Что ж, у нас есть проблема, потому что мы не можем распространяться в обратном направлении через процесс случайной выборки.

Идея здесь в том, что кодировщик производит средние и отклонения. Затем мы производим некоторый z, который является выборкой нашей функции q (z | x). Итак, это случайный узел, и проблема случайности заключается в том, что мы не знаем, как выполнить обратное распространение для этого узла. Итак, ключевой элемент, который мы ввели здесь в прямом проходе, - это повторная параметризация z. z определяется детерминированно как μ плюс σ, умноженное на некоторое ε. ε - случайная информация. Теперь он основан на генераторе случайных чисел, который просто связан с z. Например, вы можете выбрать его как распределение Гаусса с нулевым средним и единичной дисперсией. Таким образом, это позволяет нам осуществлять обратное распространение на μ и σ, потому что случайный узел находится здесь с правой стороны, и нам не нужно распространяться обратно на случайный узел. . Таким образом, с помощью этого трюка с репараметризацией мы даже можем ввести выборку в сеть в качестве слоя. Итак, это довольно увлекательно, как вы уже догадались. это также очень хорошо, потому что затем мы можем использовать этот шум для генерации случайных выборок из этого конкретного распределения. Итак, мы можем использовать правую часть нашего автоэнкодера для создания новых образцов. Все это детерминировано в обратном распространении, и вы можете вычислять свои градиенты так же, как и мы. Вы можете применить свой алгоритм обратного распространения ошибки, как и раньше.

Так какой эффект это имеет? Итак, у нас есть визуализации скрытого пространства. Если вы используете только потерю реконструкции, вы можете увидеть, что образцы хорошо разделены, но плавного перехода нет. Очевидно, что если бы у вас было только расхождение KL, вы не смогли бы описать исходные данные. Итак, вам нужна комбинация, в которой вы одновременно оптимизируете входные распределения и соответствующее расхождение KL. Итак, это довольно круто, потому что тогда мы можем сгенерировать новые данные путем выборки из распределений в скрытом пространстве, а затем вы реконструируете с помощью декодера, что диагональный априор обеспечивает независимые скрытые переменные.

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

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

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

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

Если вам понравился этот пост, вы можете найти больше эссе здесь, больше образовательных материалов по машинному обучению здесь или взглянуть на нашу Лекцию Глубокое обучение. Я также был бы признателен за подписку на YouTube, Twitter, Facebook или LinkedIn, если вы хотите получать информацию о новых эссе, видео и исследованиях в будущем. Эта статья выпущена под лицензией Creative Commons 4.0 Attribution License и может быть перепечатана и изменена при наличии ссылки. Если вас интересует создание стенограмм видеолекций, попробуйте Автоблог.

использованная литература

Link - вариационные автоэнкодеры:
Link - NIPS 2016 GAN Tutorial of Goodfellow
Link - Как обучить GAN? Советы и уловки, как заставить GAN работать (осторожно,
все верно!)
Ссылка - Вы когда-нибудь задумывались, как назвать свою GAN?

[1] Си Чен, Си Чен, Янь Дуань и др. «InfoGAN: обучение интерпретируемым представлениям с помощью информационных сетей, обеспечивающих максимальную эффективность генеративных состязательных сетей». В: «Достижения в системах обработки нейронной информации» 29. Curran Associates, Inc., 2016, стр. 2172–2180.
[2] Паскаль Винсент, Хьюго Ларошель, Изабель Ладжуа и др. «Составные автокодеры шумоподавления: изучение полезных представлений в глубокой сети с локальным критерием шумоподавления». В: Journal of Machine Learning Research 11. Dec (2010), pp. 3371–3408.
[3] Эмили Л. Дентон, Сумит Чинтала, Артур Шлам и др. «Глубокие генеративные модели изображений с использованием лапласовской пирамиды состязательных сетей». В: CoRR abs / 1506.05751 (2015). arXiv: 1506.05751.
[4] Ричард О. Дуда, Питер Э. Харт и Дэвид Г. Сторк. Классификация паттернов. 2-е изд. Нью-Йорк: Wiley-Interscience, ноябрь 2000 г.
[5] Ася Фишер и Кристиан Игель. «Обучение ограниченным машинам Больцмана: Введение». В: Распознавание образов 47.1 (2014), стр. 25–39.
[6] Джон Готье. Условные генеративные состязательные сети для генерации лиц. 17 марта 2015 г. URL: «http://www.foldl.me/2015/conditional-gans-face-generation/» (посещение 22.01.2018).
[7] Ян Гудфеллоу. Учебное пособие NIPS 2016: Генеративные состязательные сети. 2016. eprint: arXiv: 1701.00160.
[8] Мартин Хойзель, Хуберт Рамзауэр, Томас Унтертинер и др. «Сети GAN, обученные правилом обновления двух шкал времени, сходятся к локальному равновесию по Нэшу». В: Достижения в системах обработки нейронной информации 30. Curran Associates, Inc., 2017, стр. 6626–6637.
[9] Джеффри Э. Хинтон и Руслан Р. Салахутдинов. «Уменьшение размерности данных с помощью нейронных сетей». В: Science 313.5786 (июль 2006 г.), стр. 504–507. arXiv: 20.
[10] Джеффри Э. Хинтон. «Практическое руководство по обучению ограниченных машин Больцмана». В: Neural Networks: Tricks of the Trade: Second Edition. Берлин, Гейдельберг: Springer Berlin Heidelberg, 2012, стр. 599–619.
[11] Филип Изола, Цзюнь-Ян Чжу, Тинхуэй Чжоу и др. «Преобразование изображения в изображение с использованием сетей с условным противодействием». В: (2016). eprint: arXiv: 1611.07004.
[12] Дидерик П. Кингма и Макс Веллинг. «Автоматическое кодирование вариационного Байеса». В: arXiv e-prints, arXiv: 1312.6114 (декабрь 2013 г.), arXiv: 1312.6114. arXiv: 1312.6114 [stat.ML].
[13] Джонатан Масчи, Ули Мейер, Дэн Чиресан и др. «Сложенные сверточные автокодеры для извлечения иерархических признаков». В: Искусственные нейронные сети и машинное обучение - ICANN 2011. Берлин, Гейдельберг: Springer Berlin Heidelberg, 2011, стр. 52–59.
[14] Люк Мец, Бен Пул, Дэвид Пфау и др. «Развернутые генеративные состязательные сети». В кн .: Международная конференция по обучающимся представлениям. Апрель 2017 г. eprint: arXiv: 1611.02163.
[15] Мехди Мирза и Саймон Осиндеро. «Условно порождающие состязательные сети». В: CoRR abs / 1411.1784 (2014). arXiv: 1411.1784.
[16] Алек Рэдфорд, Люк Мец и Сумит Чинтала. Обучение неконтролируемому представлению с помощью Deep Convolutional Generative Adversarial 2015. eprint: arXiv: 1511.06434.
[17] Тим Салиманс, Ян Гудфеллоу, Войцех Заремба и др. «Улучшенные методы обучения GAN». В: Достижения в системах обработки нейронной информации 29. Curran Associates, Inc., 2016, стр. 2234–2242.
[18] Эндрю Нг. «CS294A Конспект лекций». В: 2011.
[19] Хан Чжан, Тао Сюй, Хуншэн Ли и др. «StackGAN: синтез текста в фотореалистичное изображение с помощью составных генеративных состязательных сетей». В: CoRR abs / 1612.03242 (2016). arXiv: 1612.03242.
[20] Хань Чжан, Тао Сюй, Хуншэн Ли и др. «Stackgan: синтез текста в фотореалистичное изображение с помощью сложенных генеративных состязательных сетей». В: препринт arXiv arXiv: 1612.03242 (2016).
[21] Болей Чжоу, Адитья Хосла, Агата Лапедриза и др. «Изучение глубоких функций для дискриминационной локализации». В: Конференция IEEE 2016 года по компьютерному зрению и распознаванию образов (CVPR). Лас-Вегас, июнь 2016 г., стр. 2921–2929. arXiv: 1512.04150.
[22] Джун-Ян Чжу, Парк Тэсун, Филипп Изола и др. «Непарный преобразование изображения в изображение с использованием согласованных с циклом состязательных сетей». В: CoRR abs / 1703.10593 (2017). arXiv: 1703.10593.

Обучение без учителя - Часть 2