Изменения

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

Generative Adversarial Nets (GAN)

69 байт добавлено, 15 январь
Нет описания правки
[[File:Арх_ган.png|450px|thumb|Рисунок 1. Оригинальная архитектура GAN]]
'''Порождающие состязательные сети''' (англ. ''Generative Adversarial Nets, GAN'') {{---}} алгоритм машинного обучения, входящий в семейство [[:Порождающие модели|порождающих моделей]] и построенный на комбинации из двух нейронных сетей: генеративная модель <tex>G</tex>, которая строит приближение распределения данных, и дискриминативная модель <tex>D</tex>, оценивающая вероятность, что образец пришел из тренировочных данных, а не сгенерированных моделью <tex>G</tex>. Обучение для модели <tex>G</tex> заключается в максимизации вероятности ошибки дискрминатора <tex>D</tex>. Впервые такие сети были представлены Иэном Гудфеллоу в 2014 году.
==Интуитивный процесс тренировки==
[[File:GANIntuitive.jpg|500px|thumb|right|Рисунок 2. Иллюстрация процесса тренировки порождающих состязательных сетей GAN. Источник: https://arxiv.org/pdf/1701.07875.pdf]]
Генеративные состязательные сети обучаются путем одновременного обновления дискриминирующего распределения (<tex>D</tex> синяя пунктирная линия), так чтобы дискриминатор мог различать объекты из распределения тренировочного сета(черная пунктирная в точку линия) и из распределения генератора (<tex>G</tex> зеленая сплошная линия). Нижняя горизонтальная линия представляет собой область, из которой составлена выборка <tex>z</tex>, в нашем случае равномерно. Горизонтальная линия над ней является частью области <tex>x</tex>. Стрелками на картинке показано, как отображение <tex>x = G(z)</tex>, накладывает неравномерное распределение <tex>p_{g}</tex> на тренировочное. <tex>G</tex> сжимается в областях с высокой плотностью и расширяется в областях с низкой.
Рассмотрим описанный на картинках процесс. (a) Близкая сходимость состязающейся пары: <tex>p_{g}</tex> похоже на распределение <tex>p_{data} и D</tex> частично-точный классификатор. (b) Во внутреннем цикле алгоритма <tex>D</tex> обучается отличать объекты из тренировочных данных, сходясь к <tex>\frac{p_{data}(x)}{p_{data}(x) + p_{g}(x)}</tex>. (c) После обновления <tex>G</tex> градиент <tex>D</tex> привел <tex>G(z)</tex> к передвижению в область, с большей вероятностью быть классифицированным как данные. (d) После нескольких шагов обучения <tex>G</tex> и <tex>D</tex> придут в состояние, в котором не смогу улучшиться, так как будет выполняться условие <tex>p_{g} = p_{data}</tex> и диксриминатор не сможет различать два распределения и его выход всегда будет <tex>D(x) = \frac{1}{2}</tex>.
==Оригинальный алгоритм обучения GAN==
[[File:Обучение_ган.png|450px|thumb|right|Рисунок 3. Визуализация генерирования фотографии с помощью DCGAN по одному и тому же шуму в зависимости от итерации обучения. Источник: https://arxiv.org/pdf/1701.07875.pdf]]
В процессе обучения требуется делать два шага оптимизации поочередно: сначала обновлять веса генератора <tex>\gamma_{g}</tex> при фиксированном <tex>\gamma_{d}</tex>, а затем веса дискриминатора <tex>\gamma_{d}</tex> при фиксированном <tex>\gamma_{g}</tex>. На практике дискриминатор обновляется <tex>k</tex> раз вместо одного, поскольку, полностью оптимизировать дискриминатор вычислительно не выгодно и на конечных сетах он может переобучиться. Таким образом <tex>k</tex> является гиперпараметром.
==Применение==
[[File:прогресс_ганов.jpg|450px|thumb|right|Рисунок 4. Прогресс в генерации фотографий с помощью GAN. Источник: https://twitter.com/goodfellow_ian]]
Чаще всего GAN'ы используются для генерации реалистичных фотографий. Серьезные улучшения в этом направлении были сделаны следующими работами:
==CGAN (Conditional Generative Adversarial Nets)==
[[File:CGAN_architecture.png|450px|thumb|(Рисунок 1) 5 Архитектура CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]
'''Условные порождающие состязательные сети''' (англ. ''Conditional Generative Adversarial Nets, CGAN'') $-$ это модифицированная версия алгоритма GAN, которая может быть сконструирована при помощи передачи дополнительных данных '''y''', являющихся условием для генератора и дискриминатора. '''y''' может быть любой дополнительной информацией, например, меткой класса, изображением или данными из других моделей, что может позволить контролировать процесс генерации данных. Например, можно подавать параметр '''y''', как условие на класс для генерации чисел, похожих на MNIST. Создание таких картинок, в случае передачи картинки в качетсве '''y''' является [[:Задача трансляции изображений|задачей трансляции изображений]]. Пример работы ''CGAN'' на датасете ''MNIST'' с метками классов представленных в виде [[:Векторное представление слов|''one-hot'']] векторов <ref>[https://arxiv.org/pdf/1411.1784.pdf CGAN]</ref>
[[File:CGAN_generated.png|450px|thumb|center|Цифры, сгенерированные с помощью CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]
[[File:CGAN_generated_tags.PNG|450px|thumb|right|(Рисунок 2)6 Описание картинки. Источник: https://arxiv.org/pdf/1411.1784.pdf]]
Как уже было упомянуто на вход генератора и дискримантора из GAN подается дополнительная информация '''y''', например в случае с многослойными перецептронами условие может быть представлено дополнительным входным слоем. (Рисунок 1)
66
правок

Навигация