Изменения

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

Generative Adversarial Nets (GAN)

3588 байт добавлено, 19:58, 24 января 2021
Нет описания правки
Большинство GAN'ов подвержено следующим проблемам:
* Схлопывание мод распределения (англ. mode collapse): генератор коллапсирует, т.е. то есть выдает ограниченное количество разных образцов;.* Проблема стабильности обучения (англ. non-convergence): параметры модели дестабилизируются и не сходятся;.* Исчезающий градиент (англ. diminished gradient): дискриминатор становится слишком "сильным", а градиент генератора исчезает и обучение не происходит;.* Проблема запутывания (англ. disentanglement problem): выявление корреляции в признаках, не связанных (слабо связанных) в реальном мире;.
* Высокая чувствительность к гиперпараметрам.
# Сэмплирование из многомерного нормального распределения вместо равномерного;
# Использовать нормализационные слои (например, batch normalization или layer normalization) в $G$ и $D$;
# Использовать метки для данных, если они имеются, т.е. то есть обучать дискриминатор еще и классифицировать образцы.
===Коллапс мод===
[[File:mode_collapse.png|600px|thumb|right|Рисунок 4. Проблема mode collapse в GAN сетях, на нижнем ряду представлен обычный GAN, на верхнем {{---}} UGAN с 10 обратными шагами (англ. unrolled steps). Источник: https://arxiv.org/pdf/1611.02163.pdf]]
[[File:mode_collapse_UGAN.png|600px|thumb|right|Рисунок 5. Проблема mode collapse в GAN сетях на примере MNIST датасета, на нижнем ряду представлен обычный GAN, на верхнем {{---}} UGAN с 20 обратными шагами (англ. unrolled steps). Источник: https://arxiv.org/pdf/1611.02163.pdf]] В процессе обучения генератор может прийти к состоянию, при котором он будет всегда выдавать ограниченный набор выходов. При этом пространство, в котором распределены сгенерированные изображения, окажется существенно меньше , чем пространство исходных изображений.
Главная причина этого в том, что генератор обучается обманывать дискриминатор, а не воспроизводить исходное распределение.
Если генератор начинает каждый раз выдавать похожий выход, который является максимально правдоподобным для текущего дискриминатора, то зависимость от $z$ падает, а следовательно и градиент $G(z)$ стремиться к 0. Лучшей стратегией для дискриминатора будет улучшение детектирования этого конкретного изображения.
Так на следующих итерациях наиболее вероятно, что генератор придет к другому изображению, хорошо обманывающему текущий дискриминатор, а дискриминатор будет учиться отличать конкретно это новое изображение. Этот процесс не будет сходиться и количество представленных мод не будет расти, поэтому приблизиться к исходному распределению не удастся. На рисунке 4 наглядно представлена проблема mode collapse и то как генератор "путешествует" по модам не приближаясь к целевому распределению. На рисунке 5 наглядно представлен пример mode collapse в процессе работы обычной GAN, обучаемой на датасете MNIST.
На текущий момент Mode mode collape является одной из главных проблем GAN, эффективное решение которой ещё ищется.
Возможные решения проблемы mode collapse:
* WGAN {{---}} использование метрики Вассерштейна (англ. Wasserstein Loss) внутри функции ошибки, позволяет дискриминатору быстрее обучаться выявлять повторяющиеся выходы, на которых стабилизируется генератор<ref>[https://developers.google.com/machine-learning/gan/problems Common Problems]</ref>.
===Проблема стабильности обучения===
[[File:Unstable_X_Y.png|600px|thumb|right|Рисунок 56. Симуляция изменения $x$ и $y$ с помощью градиентного спуска, где изменяя $x$ мы пытается минимизировать величину $x*y$, а при изменении $y$, наоборот, стараемся ее максимизировать. Шаг градиентного спуска <tex>\alpha = 0.1</tex>. Источник: https://lilianweng.github.io/lil-log/2017/08/20/from-GAN-to-WGAN.html]]
Задача обучения двух состязательных сетей дискриминатора и генератора в общем смысле не является задачей поиска локального или глобального минимума функции, а является задачей поиска точки равновесия двух игроков. В теории игр это эта точка называется точкой равновесия Нэша (англ. Nash equilibrium) в которой оба игрока больше не получают выгоды, хотя следуют оптимальной стратегии. Рассмотрим задачу поиска этой точки на игрушечном примере, где $G$ хочет максимизировать произведение $xy$ а $D$ {{---}} минимизировать. Будем обновлять параметры $x$ и $y$ на основе градиентного спуска:
<tex> \Delta x = \alpha\frac{\delta(x*y)}{ \delta(x)} </tex>
<tex> \Delta y = - \alpha\frac{\delta(x*y)}{ \delta(y)} </tex>
Если изобразить на графике поведение $x$,$y$ и $xy$ (рис. 56) то станет ясно, что они не сойдутся, а амплитуда их движения будет только увеличиваться.
В оригинальной статье про GAN используется дивергенция Дженсена-Шеннона (англ. Jensen–Shannon divergence), которая в свою очередь использует дивергенцию Кульбака—Лейблера Кульбака-Лейблера (англ. Kullback–Leibler Kullback-Leibler divergence)::<math>D_\text{KL}(P \parallel Q) = \int_{-\infty}^\infty p(x) \log\left(\frac{p(x)}{q(x)}\right)\, dx</math>, где $P$ и $Q$ {{---}} $k$-мерные абсолютно непрерывные распределения, $p(x)$ и $q(x)$ {{---}} функции плотности этих распределений, заданные на <math>X \subseteq R^k</math>.Нетрудно заметить, что при наличии $x$, в которых $q(x)=0$, весь интеграл разойдется, что плохо влияет на сходимость обучения.
Возможные решения проблемы стабильности:
*Регуляризация {{---}} Добавление шума ко входам дискриминатора и соответствующая настройка гиперпараметров дискриминатора.
*PGGAN (Progressive Growing of GANs, разработана NVidia<ref>[https://research.nvidia.com/sites/default/files/pubs/2017-10_Progressive-Growing-of/karras2018iclr-paper.pdf PROGRESSIVE GROWING OF GANS FOR IMPROVEDQUALITY, STABILITY, AND VARIATION]</ref>) {{---}} в процессе работы разрешение изображений увеличивается от очень малых (4 на 4 пикселя), до конечных (1024 на 1024 пикселя), что позволяет тренировать сначала выявление крупных черт а затем более мелких, что крайне положительно сказывается на стабильности.
*WGAN {{---}} В качестве функции дивергенции используется метрика Вассерштейна, которая в большинстве случаев решает проблему расходимости интеграла в функции Дженсена-Шеннона.
===Проблема запутывания (Проблема связанности характеристик)===
Сложность с генеративными состязательными сетями заключается в том, что непонятно, как им удается определять конкретные различные характеристики, как, например, (возраст и пол, например) и связаны ли между собой эти характеристики.
Генератор хорошо обученной сети $-$ функция
<tex>g : Z \rightarrow X</tex>, где <tex>Z \subseteq \mathbb{R}^{d}</tex> $-$ скрытое пространство размерности <tex>d</tex>, для которого обычно применимо Гауссово распределение в многомерном случае.
<tex>X</tex> $-$ пространство изображений, где у каждого изображения существует набор характеристик вроде возраста или пола. Пусть нам дана функция оценки <tex>f_{S} : X \rightarrow S</tex>, где <tex>S \subseteq \mathbb{R}^{m}</tex> $-$ пространство изображений размерности <tex>m</tex>. Тогда <tex>s = f_{S}(g(z))</tex>, где <tex>z \in Z</tex>, <tex>s \in S</tex> $-$ связь между точкой в скрытом подпространстве и характеристиками получившегося изображения. Для функции оценок часто используют The Inception score <ref>[https://arxiv.org/abs/1801.01973 Shane Barratt, Rishi Sharma {{---}} A Note on the Inception Score]</ref> и FID (Frechet Inception distance<ref> [https://en.wikipedia.org/wiki/Fr%C3%A9chet_inception_distance#:~:text=The %20Fr%C3%A9chet%20inception%20distance%20(FID,generative%20adversarial%20network%20(GAN). Frechet Inception distanceon Wikipedia]</ref>), где главными критериями хорошо сгенерированных образцов является разнообразие отличительных черт в образцах и их выраженность.
Установлено, что при движении между двумя точками <tex>z_1</tex> и <tex>z_2</tex> характеристики меняются постепенно, без скачков. Тогда по этому направлению в $Z$ можно построить гиперплоскость.
Тогда сделаем предположение, при котором для любого бинарного параметра существует гиперплоскость, что все образцы с одной стороны от нее имеют одинаковое значение этого параметра.
Заведем следующую функцию "расстояния": <tex>d(n, z) = n^{T}z</tex>, где <tex>n \in \mathbb{R}^{d}</tex>, <tex>n</tex> $-$ вектор нормали гиперплоскости.
Данная функция не подходит под определение расстояния из-за наличия отрицательных значений (но знак нам необходим для определения знака параметра характеристики).
Ожидается, что есть близкая к линеной зависимость оценки $f$ по данному параметру от "расстояния":
<tex>f(g(z)) = \lambda d(n, z)</tex>.
[[File:SubspaceManipulation.png|200px|thumb|right|Рисунок 67. Манипулирование подпространством. Источник:<tex>\href{https://arxiv.org/pdf/1907.10786.pdf}{\text{[x]}}</tex>]]
В таком случае выраженность характеристики зависит от "расстояния" до этой гиперплоскости.
Аналогично происходит и в случае нескольких характеристик:
<tex>f_{S}(g(z)) = \Lambda N^{T}z</tex>, где <tex>\Lambda</tex> {{- --}} диагональная матрица с линейными коэффициентами <tex>\lambda_{i}</tex> для каждой из характеристик, <tex>N = [n_1, . . . , n_m]</tex> $-$ границывектора нормалей для гиперплоскостей, разделяющих значения признаков <tex>1..m</tex>.
В случае если <tex>\Lambda</tex> {{---}} диагональная, то проблемы запутывания нет.
В противном случае проделаем манипуляции в скрытом подпространстве (рис. 67). Проецируя<tex>n_1</tex> на <tex>n_2</tex> и вычитая полученный вектор из <tex>n_1</tex>, можно найти получаем такое направление <tex>n_1 - (n_1^{T} - n_2)n_2</tex> в скрытом подспространствепространстве, что вдоль этих направлений у сгенерированных изображений будем будет изменяться характеристика $1$ в независимости вне зависимости от характеристики $2$.
При слишком большом "расстоянии" от гиперплоскости соответствующая характеристика слишком сильно делает лицо непохожим на изначальное, но это объяснимо нормальным распределением вектора шума.
Также в скрытом пространстве имеют место арифметические арифмитические операции. То есть можно складывать и вычитать вектора из этого пространства, чтобы как получать промежуточные результаты, так и убирать или добавлять какую-либо характеристику. Для борьбы с проблемой запутывания существуют и другие подходы: один из них представляет из себя разложение изображения на передний и задний слои (с возможными промежуточными слоями)<ref>[https://openaccess.thecvf.com/content_CVPR_2020/papers/Alharbi_Disentangled_Image_Generation_Through_Structured_Noise_Injection_CVPR_2020_paper.pdf Yazeed Alharbi, Peter Wonka {{---}} Disentangled Image Generation Through Structured Noise Injection, 3.3]</ref>. Следующий метод основан на том факте, что существуют как локальные черты, так и глобальные. К первым можно отнести форму отдельной части лица, а ко вторым $-$ возраст и пол. Иногда изменение локальной черты может очень сильно влиять на глобальную. Этого хочется избежать, для этого некоторые размерности вектора шума применяются к каждой остальной размерности<ref>[https://openaccess.thecvf.com/content_CVPR_2020/papers/Alharbi_Disentangled_Image_Generation_Through_Structured_Noise_Injection_CVPR_2020_paper.pdf Yazeed Alharbi, Peter Wonka {{---}} Disentangled Image Generation Through Structured Noise Injection, 3.5]</ref>.
==Применение==
[[File:прогресс_ганов.jpg|450px|thumb|right|Рисунок 78. Прогресс в генерации фотографий с помощью GAN. Источник: https://twitter.com/goodfellow_ian]]
Чаще всего GAN'ы используются для генерации реалистичных фотографий (рис. 78). Серьезные улучшения в этом направлении были сделаны следующими работами:
* Auxiliary GAN<ref> [https://arxiv.org/pdf/1610.09585.pdf Augustus Odena {{---}} Conditional Image Synthesis with Auxiliary Classifier GANs]</ref>: вариант GAN-архитектуры, использующий метки данных;
==CGAN (Conditional Generative Adversarial Nets)==
[[File:CGAN_architecture.png|450px|thumb|Рисунок 89. Архитектура 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> (рис. 9).
[[File:CGAN_generated.png|450px|thumb|center|Рисунок 910. Цифры, сгенерированные с помощью CGAN. Источник: https://arxiv.org/pdf/1411.1784.pdf]]
[[File:CGAN_generated_tags.PNG|450px|thumb|right|Рисунок 1011. Описание картинки. Источник: https://arxiv.org/pdf/1411.1784.pdf]]
Как уже было упомянуто на вход генератора и дискримантора из GAN подается дополнительная информация '''y''', например в случае с многослойными перецептронами условие может быть представлено дополнительным входным слоем. (рис. 89)
В генераторе априорная вероятность шума <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''' представлены как входные параметры.
В качестве примера использования данного алгоритма можно рассмотреть задачу генерации рукописных цифр.
При создании изображения в генератор поступает скомбинированная информация двух параметров: '''y''' и вектора шума. В случае ''MNIST'' это может быть, например, просто метка класса (от 0 до 9). На выходе из генератора поступает изображение, полученное с помощью транспонированной свертки (происходит деконволюция). Затем полученное изображение комбинируется с '''y''' и поступает в дискриминатор, который в свою очередь применяет свертку, чтобы получить полносвязный слой. Наконец, анализируя полученную информацию (полносвязный слой) дискриминатор принимает решение, является ли изображение сгенерированным. (рис. 1112)[[File:CGAN_gen_disc_v2.png|450px|thumb|center|Рисунок 1112. Генерация при использовании CGAN]]
Также, используя условные порождающие состязательные сети, можно научить такую сеть генерировать текст по картинке и наоборот. В качестве параметра '''y''' в данном случае передается изображение, которое будет описано (рис. 1211).
Более того, для такого типа нейронных сетей, принимающих в качестве параметра '''у''' некоротое изображение местности, в результате может быть получено аналогичное изображение этого места зимой или летом, днем или ночью. Такая задача является [[:Задача трансляции изображений|задачей трансляции изображений]].
Хоть CGAN и являются самыми популярными моделями для генерации образцов, зависимых от внешних данных, но лучше они умеют генерировать образцы с заданными ярко отличительными чертами (цвет волос, веснушки), но менее явные детали (форма бровей, сережки) вызывают затруднения (Но более поздний StyleGAN2 справляется и с этой задачей). C помощью отделения классификатора от дискриминатора, ControlGAN позволяет контролировать черты образцов. К тому же и само качество сгенерированных изображений может быть улучшено засчет того, что такое разделение на три составляющие дает возможность дискриминатору лучше выполнять свою главную задачу.
Более того, аугменатция аугментация данных может помешать некоторым сетям, например, Auxiliary Classifier GAN (ACGAN) обучаться, хотя сам способ может улучшить качество классификации. К тому же в случае контролируемой генерации нет необходимости размечать тренировочные данные, выбираются желаемые характеристики объектов для генерации, а не условная информация (например, метка объекта).
[[File:ControlGANPrinciple.png|200px|thumb|right|Рисунок 19.
101
правка

Навигация