Изменения

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

Generative Adversarial Nets (GAN)

266 байт добавлено, 18:03, 23 февраля 2020
Английский -> в русский
==Интуитивный процесс тренировки==
[[File:GANIntuitive.jpg|500px|thumb|right|Иллюстрация процесса тренировки порождающих состязательных сетей GAN. Источник: https://arxiv.org/pdf/1701.07875.pdf]]
Генеративные состязательные сети обучаются путем одновременного обновления дискриминирующего распределения (<tex>D</tex> синяя пунктирная линия), так чтобы дискриминатор мог различать объекты из распределения тренировочного сета(черная пунктирная в точку линия) и из распределения генератора(<tex>D</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 подается дополнительная информация '''y''', например в случае с многослойными перецептронами условие может быть представлено дополнительным входным слоем.
В генераторе априорная вероятность шума <tex>p_{z}(z)</tex> и условие <tex>y</tex> комбинируются в объединённое скрытое представление, а состязательная тренирующая модель предоставляет достаточно свободы в том как это представление составляется.<ref>[https://arxiv.org/pdf/1207.4404.pdf Yoshua Bengio, Gre ́goire Mesnil, Yann Dauphin and Salah Rifai {{---}} Better Mixing via Deep Representations ]</ref>
В дискриминаторе '''x''' и '''y''' представлены как входные параметры.
[[File:DCGAN_generator.png|450px|thumb|right|Архитектура генератора в DCGAN. Источник: https://arxiv.org/pdf/1511.06434.pdf]]
'''DCGAN''' $-$ модификация алгоритма ''GAN'', в основе которых лежат сверотчные сверточные нейронные сети (''CNN''). Задача поиска удобного представления признаков на больших объемах не размеченных данных является одной из наибольнее активных сфер исследований, в частности представление изображений и видио. Одним из удобных способов поиска представлений может быть '''DCGAN'''. Использование сверточных нейронных сетей напрямую не давало хороших результатов, поэтому было внесены ограничения на слои сверток. Эти ограничения и лежат в основе '''DCGAN''':
* Замена всех пулинговых слоев на страйдинговые свертки (''strided convolutions'') в дискриминаторе и частично-страйдинговые свертки (''fractional-strided-convolutions'') в генераторе, что позволяет сетям находить подходящие понижения и повышения размерностей;
* Использование ''LeakyReLU'' в качестве функции активации в дискриминаторе для всех слоев.
Помимо задачи генерации объектов, данный алгоритм хорошо показывает себя в качестве ''feature extractor'''аизвлечении признаков.Данный алгоритм был натренирован на датасете наборе данных ''Imagenet-1k''<ref name = "datasets">[http://neerc.ifmo.ru/wiki/index.php?title=Известные_наборы_данных Известные наборы данных]</ref>, после чего были использованы значения со сверточных слоев дискриминатора, подвергнутые ''max-pooling'''у, чтобы образовать матрицы <tex> 4 \times 4 </tex> и получить общий вектор признаков на их основе. ''L2-SVM'' с данным ''feature extractor'''ом , c полученным представлением, на датасете наборе данных ''CIFAR-10'' <ref name="datasets" /> превосходит по точности решения, основанные на алгоритме''K-Means''. Более подробно Подробнее об этом вы можете прочитать в статье. <ref> [https://arxiv.org/pdf/1511.06434.pdf Alec Radford, Luke Metz, Soumith Chintala {{---}} Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks]</ref>
==StackGAN(Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks)==
[[File:StackGANexample.jpg|500px|thumb|right| Пример работы порождающей состязателной сети для генерации фото-реалистичных изображений StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]
'''StackGAN''' $-$ порождающая состязательная сеть для генерации фото-реалистичных изображений(256x256) исходя из текстового описания. Генерировать фото-реалистичные изображения на обычных GAN сложно, поэтому была придумана двух-этапная модель генерации. Stage-I GAN рисует скетчи с примитивными формами и цветами, основанные на текстовом описании, в низком разрешении. Stage-II GAN принимает на вход изображения с первого этапа и текстовое описание и генерирует изображение в высоком разрешении с фото-реалистичными деталями. Чтобы улучшить разнообразие синтезированных изображений и стабилизировать обучение, вместо CGAN использовался метод Conditioning Augmentation.
Раннее использовались CGAN, поскольку на вход им можно было подавать условия, но просто добавляя слои upsampling , увеличивающие размер изображения, достичь хороших результатов не удалось. Поэтому основной задачей было повысить разрешение изображений.
Одной из ключевых особенностей StackGAN является Conditioning Augmentation, так как оно позволило расширить количество примеров тренировочного сета, путем небольших случайных изменений в исходных изображениях, что увеличивало многообразие данных. Как показано на картинке, текстовое описание <tex>t</tex> кодировщиком переводится в векторное представление <tex>\varphi_{t}</tex>. Раннее векторное представление нелинейно трансформировалось, чтобы получить скрытые условные переменные, которые подавались на вход генератору, однако простарнство значений скрытых переменных имеет большую размерность, что приводило к разрывам в многообразии данных, что не выгодно для генератора. Чтобы избавиться от этого как раз нужно Conditioning Augmentation, которое в отличии от предоставления фиксированных значений переменных выбирает их из нормального распределения <tex>\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t}))</tex>, где среднее значение <tex>\mu(\varphi_{t})</tex> и ковариация <tex>\Sigma(\varphi_{t}))</tex> это функции от входного вектора <tex>\varphi_{t}</tex>. В добавок к уже упомянотому, чтобы сделать многообразие гладким и не переобучиться, нужно добавить регуляризацию, <tex>D_{KL}(\mathcal{N}(\mu(\varphi_{t}), \Sigma(\varphi_{t})) || \mathcal{N}(0, I))</tex> (KL divergence)<ref> [https://ru.wikipedia.org/wiki/Расстояние_Кульбака_—_Лейблера {{--}} Kullback-Leibler divergence]</ref>.
[[File:StackGANProcess.jpg|1200px|thumb|right|Процесс обучения StackGAN. Источник: https://arxiv.org/pdf/1612.03242.pdf]]
Stage-I GAN тренирует дискриминатор <tex>D_{0}</tex> и генератор <tex>G_{0}</tex> поочередной максимизицаии <tex>L_{D_{0}}</tex> и минимизации <tex>L_{G_{0}}</tex>, как указано в уравенинях:
Где <tex>s_0 = G_0(z,\hat{c_0})</tex> результат работы генератора Stage-I GAN и скрытый параметр <tex>\hat{c}</tex> подаются на вход дискриминатору и генератору Stage-II GAN, при этом на вход не подается случайное значение, как на первой стадии, поскольку хватает подачи случайного <tex>z</tex> на вход Stage-I GAN. При этом Stage-I GAN и Stage-II GAN имеют разные полно-связные слои, чтобы отличаться по среднему значению и стандартному отклонению, таким образом на разных этапах фокусируюемся на разных деталях исходного текста.
==LAPGAN(Laplacian Pyramid of Adversarial Networks)==
'''LAPGAN''' $-$ генеративная параметрическая модель, производящая высоко-качественные изображения. В ее основе лежит каскад представленная пирамидой лапласианов с каскадом сверточных нейронных сетей внутри пирамиды лапласианов, который которая генерирует изображения в coarse-to-fine стилепостепенно от исходного изображения с низким разрешением к изображению с высоким. На каждом уровне пирамиды обучается сверточная генеративная модель, используя подход порождающих состязательных сетей. На вход первому слою подается низко-частотное изображение. Такая стратегия позволяет декомпозировать задачу генерации изображений на последовательность уровней, что упрощает ее решение.
Пирамида лапласианов $-$ это линейное обратимое представление изображений, состоящее из набора частотных полос изображений. Пусть <tex>d(.\cdot)</tex> - это операция сжатия изображения размера <tex>j \times j</tex> так, что новое изображение <tex>d(I)</tex> имеет размеры <tex>j/2 \times j/2</tex>, также <tex>u(.\cdot)</tex> - операция расширения такой, что <tex>u(I)</tex> имеет размеры <tex>2j \times 2j</tex>. Тогда пирамида гаусианов имеет вид <tex>\mathcal{G}(I) = [I_0, I_1,..., I_k]</tex>, где <tex>I_0 = I</tex> и <tex>I_k</tex> представляет собой <tex>k</tex> раз выполненное применение <tex>d(.\cdot)</tex>. Коэффициенты <tex>h_k</tex> на каждом уровне пирамиды лапласианов считаются так:
<center><tex>h_k = \mathcal{L_k}(I) = \mathcal{G_k}(I) - u(\mathcal{G_{k + 1}}(I)) = I_k - u(I_{k + 1})</tex></center>
Интуитивно каждый уровень захватывает структуру изображения. Конечный слой пирамиды лапласианов <tex>h_k</tex> это не разница изображений, а низко-частотное представление равное гаусиану <tex>h_k = I_k</tex>. Реконструкция по пирамиде лапласианов происходит обратным проходом по ней:
Анонимный участник

Навигация