Изменения

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

Generative Adversarial Nets (GAN)

73 байта убрано, 00:24, 24 января 2021
Проблемы обучения GAN3
На практике не всегда удобно использовать уравнение описанной выше. В начале обучения, когда <tex>G</tex> плохо настроен дискриминатор <tex>D</tex> может не учитывать объекты, с высокой уверенностью в классификации, так как они сильно отличаются от тренировочного сета, в таком случае <tex>log(1 - D(G(z)))</tex> стагнирует. Чтобы избежать этого, можно вместо минимизации <tex>log(1 - D(G(z)))</tex> максимизировать <tex>log D(G(z))</tex>. На рисунке 3 представлена зависимость получаемого изображения от итерации обучения.
==Проблема запутывания (Проблема связанности характеристик)==
Сложность с генеративно состязательными сетями заключается в том, что непонятно, как им удается определять конкретные различные характеристики, как, например, возраст и пол, и связаны ли между собой эти характеристики.  Генератор хорошо обученной сети $-$ функция <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 и FID (The Frechet Inception distance), где главными критериями хорошо сгенерированных образцов является разнообразие отличительных черт в образцах и их выраженность.  Установлено, что при движении между двумя точками <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|Рисунок 16. Манипулирование подпространством. Источник:<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>\Lambda</tex> {{---}} диагональная, то проблемы запутывания нет. В противном случае проделаем манипуляции в скрытом подпространстве (рис. 16). Проецируя, можно найти такое направление <tex>n_1 - (n_1^{T} - n_2)n_2</tex> в скрытом подспространстве, что вдоль этих направлений у сгенерированных изображений будем изменяться характеристика $1$ в независимости от характеристики $2$.  При слишком большом "расстоянии" от гиперплоскости соответствующая характеристика слишком сильно делает лицо непохожим на изначальное, но это объяснимо нормальным распределением вектора шума. Также в скрытом пространстве имеют место арифмитические операции. То есть можно складывать и вычитать вектора из этого пространства, чтобы как получать промежуточные результаты, так и убирать или добавлять какую-либо характеристику. Также для борьбы с проблемой запутывания существуют и другие подходы: один из них представляет из себя разложение изображения на передний и задний слои (с возможными промежуточными слоями).  ==Улучшение Проблемы обучения GAN==
Большинство GAN'ов подвержено следующим проблемам:
* Несходимость Проблема стабильности обучения (англ. non-convergence): параметры модели дестабилизируются и не сходятся;* Схлопывание мод распределения (англ. mode collapse): генератор коллапсирует, т.е . выдает ограниченное количество разных образцов;* Исчезающий градиент (англ. diminished gradient): дискриминатор становится слишком "сильным", а градиент генератора исчезает и обучение не происходит;* Проблема запутывания (англ. disentanglement problem): выявление корреляции в признаках, не связанных (слабо связанных) в реальном мире;
* Высокая чувствительность к гиперпараметрам.
Универсального Часть этих проблем будет рассмотрена подробнее ниже, но нужно понимать, что универсального подхода к их решению нет, но существуют практические советы<ref> [https://github.com/soumith/ganhacks How to Train a GAN? Tips and tricks to make GANs work]</ref>, которые могут помочь. Основными из них являются:
# Нормализация данных. Все признаки в диапазоне $[-1; 1]$;
# Замена функции ошибки для $G$ с $\min log (1-D)$ на $\max log D$, потому что исходный вариант имеет маленький градиент на раннем этапе обучения и большой градиент при сходимости, а предложенный наоборот;
# Сэмплирование из многомерного нормального распределения вместо равномерного;
# Использовать нормализационные слои (например, batch normalization или layer normalization) в $G$ и $D$;
# Использовать метки для данных, если они имеются, т.е . обучать дискриминатор еще и классифицировать образцы.
===Mode CollapseКоллапс мод===
[[File:mode_collapse.png|700px600px|thumb|right|Рисунок 4. Проблема mode collapse в GAN сетях, на нижнем ряду представлен обычный GAN, на верхнем {{- --}} UGAN с 10 обратными шагами(англ. unrolled steps). Источник: https://arxiv.org/pdf/1611.02163.pdf]]
В процессе обучения генератор может прийти к состоянию, при котором он будет всегда выдавать ограниченный набор выходов. При этом пространство, в котором распределены сгенерированные изображения, окажется существенно меньше чем пространство исходных изображений.
Главная причина этого в том, что генератор обучается обманывать дискриминатор, а не воспроизводить исходное распределение.
Если генератор начинает каждый раз выдавать похожий выход, который является максимально правдоподобным для текущего дискриминатора, то зависмость зависимость от $z$ падает, а следовательно и градиент $G(z)$ стремиться к 0. Лучшей стратегией для дискриминатора будет улучшение детектирования этого конкретного изображения.Так на следующих итерациях наиболее вероятно, что генератор придет к другому изображению, хорошо обманывающему текущий дискриминатор, а дискриминатор будет учиться отличать конкретно это новое изображение. Этот процесс не будет сходиться и количество представленных мод не будет расти , поэтому приблизиться к исходному распределению не удастся. На рисунке 4 наглядно представлена проблема mode collapse и то как генератор "путешествует" по модам не приближаясь к targetцелевому распределению.
На текущий момент Mode collape является одной из главных проблем GAN, эффективное решение которой ещё ищется.
Возможные решения проблемы mode collapse:
* WGAN {{---}} использование метрика Вассерштейна (англ. Wasserstein Loss) внутри функции ошибки., позволяет обучать дискриминатор
* UGAN (Unrolled GAN) {{---}} для генератора используется функция потерь, которая не только от того, как текущий дискриминатор оценивает выходы генератора, но и от выходов будущих версий дискриминатора.
===Проблема стабильности обучения===
[[File:Unstable_X_Y.png|650px|thumb|right|Рисунок 5. Симуляция поведения изменения $x$ и $y$с помощью градиентного спуска, где изменяя $x$ изменяется, чтобы мы пытается минимизировать $x*y$, а при изменении $y$ изменяется, чтобы минимизировать $-x*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$ (рис. №55) то станет ясно, что они не сойдутся, а амплитуда их движения будет только увеличиваетсяувеличиваться.
В оригинальной статье про GAN используется дивергенция Дженсена-Шеннона (англ. Jensen–Shannon divergence), которая в свою очередь использует дивергенцию Кльбака-ЛейблераКульбака—Лейблера (англ. 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>.Нетрудно заметить, что при наличие наличии $x$ , в которых $q(x)=0$ , весь интеграл разойдется, что плохо влияет на сходимость обучения.
Возможные решения проблемы стабильности:
*PGGAN (Progressive Growing of GANs, разработана NVidia) {{---}} в процессе работы разрешение изображений увеличивается от очень малых (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 и FID (The Frechet Inception distance), где главными критериями хорошо сгенерированных образцов является разнообразие отличительных черт в образцах и их выраженность.
 
Установлено, что при движении между двумя точками <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|Рисунок 16. Манипулирование подпространством. Источник:<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>\Lambda</tex> {{---}} диагональная, то проблемы запутывания нет.
 
В противном случае проделаем манипуляции в скрытом подпространстве (рис. 16). Проецируя, можно найти такое направление <tex>n_1 - (n_1^{T} - n_2)n_2</tex> в скрытом подспространстве, что вдоль этих направлений у сгенерированных изображений будем изменяться характеристика $1$ в независимости от характеристики $2$.
 
При слишком большом "расстоянии" от гиперплоскости соответствующая характеристика слишком сильно делает лицо непохожим на изначальное, но это объяснимо нормальным распределением вектора шума.
 
Также в скрытом пространстве имеют место арифметические операции. То есть можно складывать и вычитать вектора из этого пространства, чтобы как получать промежуточные результаты, так и убирать или добавлять какую-либо характеристику.
==Применение==
Хоть CGAN и являются самыми популярными моделями для генерации образцов, зависимых от внешних данных, но лучше они умеют генерировать образцы с заданными ярко отличительными чертами (цвет волос, веснушки), но менее явные детали (форма бровей, сережки) вызывают затруднения (Но более поздний StyleGAN2 справляется и с этой задачей). C помощью отделения классификатора от дискриминатора, ControlGAN позволяет контролировать черты образцов. К тому же и само качество сгенерированных изображений может быть улучшено засчет того, что такое разделение на три составляющие дает возможность дискриминатору лучше выполнять свою главную задачу.
Более того, аугментация аугменатция данных может помешать некоторым сетям, например, Auxiliary Classifier GAN (ACGAN) обучаться, хотя сам способ может улучшить качество классификации. К тому же в случае контролируемой генерации нет необходимости размечать тренировочные данные, выбираются желаемые характеристики объектов для генерации, а не условная информация (например, метка объекта).
[[File:ControlGANPrinciple.png|200px|thumb|right|Рисунок 15.
20
правок

Навигация