文章目录
GAN生成对抗网络(Generative Adversarial Network)
根据《从概率分布的角度去理解“生成”一张图片》可知,我们想要生成一张图片,就是要想办法生成一个分布函数P(X),让他尽可能的拟合真实世界中的分布。
神经网络的本质就是一个函数,一个用于拟合的函数
神经网络NN,即使一个function。
对于线性回归问题, 拟合出一条直线,通过样本的feature和label去优化这个Neural Network中的参数,最终使得:输入一个新的(testing&validation)的X(feature),能够输出一个“预测”的Y,并且这个Y要尽可能的“合理”,即从样本中归纳出的经验要能够成功的指导当网络遇见没见过的输入时,应该得出怎样的输出。0
对于分类问题, label是一个分布,也就是neural network需要拟合一个分布。如果是10类别动物分类问题,就是拟合一个离散型随机变量的分布律。通过大量的(feature,label)组合,网络可以成功拟合出正确的分布,最终给出新图片时,能够产生合理的离散分布律。
对于生成问题, 生成的不是一个数的可能取值(回归问题),不是一个类别的概率分布(分类问题),而是一张图片——高维度的概率分布的一个采样。这并不同于分类问题,可以直接产生分布律,生成模型产生的是这个未知的distribution的某个sample(某一张图片)。
所以,生成模型需要一定的"creativity",他的输入不是某一个向量,而是一组向量,且这组向量是从某个已知的先验分布中采样得到,每个向量都可以经过generator产生一张图片。这样,【已知分布,进行采样】得到一组vector->【通过NN映射,小向量转为高维度向量】得到一组image->【一组高维度向量sample构成一个新的分布Pg】如下图中绿色分布。最后,我们需要将Pg尽量拟合(逼近)为我们真的要去生成的目标图片的分布Pdata(如图中蓝色曲线分布) 。并且当输入是一个没见过的输入时,可以在高维分布中采样得到合理的sample(一张看起来符合要求的图片,比如很像宝可梦)。
注:分布Pdata: Pdata中采样的图片,一定是宝可梦;Pdata外采样的图片,一定不是宝可梦。
生成模型面临的前所未有的问题
那么如何训练网络呢?训练网络就是去让他把自己输出产生的分布与ground truth的分布进行比较,比如CrossEntropyLoss,MSELoss等损失函数,都可以作为网络衡量“与正确值的差距”的标准,并通过梯度下降减小loss来优化内部参数,得到表现越来越好的neural network。
但是,生成模型面临的问题是:产生的不是一个简单的分布律,一个标量,亦或是一个sequence(比如transformer),而是一个图片。他面临的是如何拟合一个高维度的分布,而拟合出一个分布,最关键的是能够定量的去表示二者(Pg和Pdata)之间的差异(Divergence),比如上面提到的CrossEntropyLoss,MSELoss等损失函数。显然,传统的损失函数并不能很好的解决这个问题。
GAN解决这一问题的思想
一种全新的想法是:既然我们之前衡量“与正确值的差距”的标准是一个损失函数->函数都可以看做是神经网络的本质->用一个神经网络去衡量图片是否符合分布并定量表示分布差异。于是,设计出Discriminator这一个判别器,与Generator做“对抗”,GAN模型应运而生。
Discriminator并不是通过数学手段找到了 {Pg的函数,Pdata的函数,以及可以表示二者分布差异的那个损失函数Divergence}的具体formulation,并通过梯度下降减小损失函数以优化Generator。而是将D作为一个分类器(打分器):只要你能够从Pdata、Pg采样出sample,就可以去定量衡量二者的分布差异!
- 从Pdata中sample:从图库中取照片即可
- 从Pg中sample:从分布Z(normal distribution)中sample然后输入G得到的输出即可
- 真的图片->给高分,生成的图片->给低分
然后D作为一个分类器,通过判别分类《真实图片样本》和《生成图片样本》的对抗过程(这里的过程省略),来让《生成图片分布》逐渐达到了以假乱真的效果,是一种”硬做出来“的方法。这里的前提是:如果生成图片通过同一个高度优化的(迭代很多次)分类器依然无法判别是”生成的“还是”真实的“,那么我们的生成模型的分布拟合过程就完成了。
Objective Function的推导
判别网络
D ∗ = a r g max D V ( G , D ) D^{*}=arg\max\limits_{D} V(G,D) D∗=argDmaxV(G,D)
从交叉熵公式而来
设从低维空间随机采样Z,Z服从分布P(Z),经过生成器G(Z;θ):Z->X后得分布Pg(X),真实图像的分布为Pdata(X),生成图像或真实图像经过判别器得到的结果为D(X;φ)。
判别器输出D(X;φ):D(X;φ)表示图像为真实图像的概率。相应的1-D(X;φ)表示图像为生成图像的概率。D(X;φ)=1表示为真实图像,D(X;φ)=0表示为生成图像。也就是我们理想中:当输入图像为真实图像时,Label=1的概率为1,label=0的概率为0。反之,当输入图像为生成图像时,Label=0的概率为1,Label=1的概率为0.
对于给定数据(X,y)而言,真实图像标签y=1,生成图像标签y=0,也就是正确的输出分布应该为
P
(
l
a
b
e
l
=
1
∣
x
)
=
1
w
h
e
n
y
=
1
P
(
l
a
b
e
l
=
1
∣
x
)
=
0
w
h
e
n
y
=
0
P
(
l
a
b
e
l
=
0
∣
x
)
=
0
w
h
e
n
y
=
1
P
(
l
a
b
e
l
=
0
∣
x
)
=
1
w
h
e
n
y
=
0
综上:
P
(
l
a
b
e
l
=
1
∣
x
)
=
y
,
P
(
l
a
b
e
l
=
0
∣
x
)
=
1
−
y
P(label=1|x)=1\quad when\quad y=1\\P(label=1|x)=0\quad when\quad y=0\\ P(label=0|x)=0\quad when\quad y=1\\P(label=0|x)=1\quad when\quad y=0\\综上:\\ P(label=1|x)=y,P(label=0|x)=1-y
P(label=1∣x)=1wheny=1P(label=1∣x)=0wheny=0P(label=0∣x)=0wheny=1P(label=0∣x)=1wheny=0综上:P(label=1∣x)=y,P(label=0∣x)=1−y
而我们预测的分布为:
P
(
l
a
b
e
l
=
1
∣
x
)
=
D
(
x
;
φ
)
P
(
l
a
b
e
l
=
0
∣
x
)
=
1
−
D
(
x
;
φ
)
P(label=1|x)=D(x;φ)\\ P(label=0|x)=1-D(x;φ)
P(label=1∣x)=D(x;φ)P(label=0∣x)=1−D(x;φ)
列表如下:
Label | 0(生成图像) | 1(真实图像) |
---|---|---|
正确判断的理想概率 | 1-y | y |
预测的概率分布 | 1-D(X;φ) | D(X;φ) |
某一个样本(x,y)送入系统后,判别网络D的目标是最小化交叉熵,写为:
min
D
H
(
T
r
u
e
,
P
r
e
d
i
c
t
)
=
min
D
−
[
y
l
o
g
(
D
(
x
;
φ
)
)
+
(
1
−
y
)
l
o
g
(
1
−
D
(
x
;
φ
)
)
]
\min\limits_{D}H(True,Predict)=\min\limits_{D}{-[ylog(D(x;φ))+(1-y)log(1-D(x;φ))]}
DminH(True,Predict)=Dmin−[ylog(D(x;φ))+(1−y)log(1−D(x;φ))]
一批样本{(x,y)|x~P(X),P(X)=Pg(X)∪Pdata(X),y∈{0,1}},送入系统后,目标函数为:
min
D
E
x
∼
P
(
x
)
[
H
(
T
r
u
e
,
P
r
e
d
i
c
t
)
]
\min\limits_{D}E_{x\sim P(x)}[H(True,Predict)]
DminEx∼P(x)[H(True,Predict)]
其中P(x)是两种分布混合而成,有的x属于分布Pg(X),有的属于Pdata(X),拆开写变为:
min
D
E
x
∼
P
(
x
)
[
H
(
T
r
u
e
,
P
r
e
d
i
c
t
)
]
=
max
D
[
E
x
∼
P
d
a
t
a
(
x
)
(
1
∗
l
o
g
D
+
0
∗
l
o
g
(
1
−
D
)
)
+
E
x
∼
P
g
(
x
)
(
0
∗
l
o
g
D
+
(
1
−
0
)
∗
l
o
g
(
1
−
D
)
]
=
max
D
[
E
x
∼
P
d
a
t
a
(
x
)
(
l
o
g
(
D
(
x
;
φ
)
)
)
+
E
x
∼
P
g
(
x
)
(
l
o
g
(
1
−
D
(
x
;
φ
)
)
)
]
=
max
D
[
E
x
∼
P
d
a
t
a
(
x
)
(
l
o
g
(
D
(
x
;
φ
)
)
)
+
E
z
∼
P
z
(
z
)
(
l
o
g
(
1
−
D
(
G
(
z
;
θ
)
;
φ
)
)
)
]
=
max
D
V
(
G
,
D
)
\min\limits_{D}E_{x\sim P(x)}[H(True,Predict)]\\ =\max\limits_{D}[E_{x\sim Pdata(x)}(1*logD+0*log(1-D))+E_{x\sim Pg(x)}(0*logD+(1-0)*log(1-D)]\\ =\max\limits_{D}[E_{x\sim Pdata(x)}(log(D(x;φ)))+E_{x\sim Pg(x)}(log(1-D(x;φ)))]\\ =\max\limits_{D}[E_{x\sim Pdata(x)}(log(D(x;φ)))+E_{z\sim Pz(z)}(log(1-D(G(z;θ);φ)))]\\ =\max\limits_{D}V(G,D)
DminEx∼P(x)[H(True,Predict)]=Dmax[Ex∼Pdata(x)(1∗logD+0∗log(1−D))+Ex∼Pg(x)(0∗logD+(1−0)∗log(1−D)]=Dmax[Ex∼Pdata(x)(log(D(x;φ)))+Ex∼Pg(x)(log(1−D(x;φ)))]=Dmax[Ex∼Pdata(x)(log(D(x;φ)))+Ez∼Pz(z)(log(1−D(G(z;θ);φ)))]=DmaxV(G,D)
由此得到上述的max-V(G,D)这一Discriminator的目标函数公式。
D
∗
=
a
r
g
max
D
V
(
G
,
D
)
D^{*}=arg\max\limits_{D}\,V(G,D)
D∗=argDmaxV(G,D)
生成网络
生成网络的目的是在判别网络已经训练好的情况下,尽可能调整G的参数使其生成的样本被D判定为真实样本(从而使Pg分布趋同于Pdata)
注:max-V(G,D)等效于用D*替代的V(G,D*)
G
∗
=
a
r
g
min
G
max
D
V
(
G
,
D
)
=
a
r
g
min
G
V
(
G
,
D
∗
)
G^{*}=arg\min\limits_{G}\max\limits_{D}V(G,D)=arg\min\limits_{G}V(G,D^*)
G∗=argGminDmaxV(G,D)=argGminV(G,D∗)
目标函数如下:min max指的是:后者max是调整Discriminator来使得尽可能把生成器的图片判定为0。前者的min是在D优化完毕后,调整G使得D误将G产生的图片的判定结果逐渐向1(真实图像)靠拢。min-max通常在实作中改用max-max.
min
G
V
(
G
,
D
∗
)
=
min
G
E
x
∼
P
z
(
z
)
(
l
o
g
(
1
−
D
∗
(
G
(
z
;
θ
)
;
φ
)
)
)
=
max
G
E
x
∼
P
z
(
z
)
l
o
g
(
D
∗
(
G
(
z
;
θ
)
;
φ
)
)
=
max
G
W
(
G
,
D
)
\min\limits_{G}V(G,D^*)=\min\limits_{G}E_{x\sim Pz(z)}(log(1-D^{*}(G(z;\theta);\varphi)))\\=\max\limits_{G} E_{x\sim Pz(z)}log(D^{*}(G(z;\theta);\varphi))\\=\max\limits_{G}W(G,D)
GminV(G,D∗)=GminEx∼Pz(z)(log(1−D∗(G(z;θ);φ)))=GmaxEx∼Pz(z)log(D∗(G(z;θ);φ))=GmaxW(G,D)
一般使用后者的max-max目标函数,因为在一开始训练时,首先判别器比较优秀,生成器效果差,导致lim D(G)=0,使得log(1-D(G))->0梯度比较小,不利于优化。造假钞举例:一开始警察太优秀、造假者太菜,直接一锅端。
综上,生成模型是一个min max对抗优化问题
训练算法Algorithm
判别网络
判别网络的目标是判别出来的概率分布尽可能趋同于真实概率分布:
m
i
n
E
x
∼
P
(
x
)
[
H
(
T
r
u
e
,
P
r
e
d
i
c
t
)
]
=
m
a
x
V
(
G
,
D
)
=
m
a
x
E
x
∼
P
d
a
t
a
(
x
)
[
l
o
g
(
D
(
x
;
φ
)
)
]
+
E
z
∼
P
z
(
z
)
[
l
o
g
(
1
−
D
(
G
(
z
;
θ
)
;
φ
)
)
]
=
m
a
x
E
x
∼
P
d
a
t
a
(
x
)
[
−
B
C
E
L
o
s
s
(
D
(
x
;
φ
)
,
1
)
]
+
E
z
∼
P
z
(
z
)
[
−
B
C
E
L
o
s
s
(
D
(
G
(
z
;
θ
)
;
φ
)
,
0
)
]
其中
二元交叉熵损失
n
n
.
B
C
E
L
o
s
s
(
x
,
y
)
=
y
∗
[
−
l
o
g
(
x
)
]
+
(
1
−
y
)
∗
[
−
l
o
g
(
1
−
x
)
]
min\,E_{x\sim P(x)}[H(True,Predict)]=max\,V(G,D)\\ =maxE_{x\sim Pdata(x)}[log(D(x;φ))]+E_{z\sim Pz(z)}[log(1-D(G(z;θ);φ))]\\ =maxE_{x\sim Pdata(x)}[-BCELoss(D(x;\varphi),1)]+E_{z\sim Pz(z)}[-BCELoss(D(G(z;\theta);\varphi),0)]\\其中\\二元交叉熵损失nn.BCELoss(x,y)=y*[-log(x)]+(1-y)*[-log(1-x)]
minEx∼P(x)[H(True,Predict)]=maxV(G,D)=maxEx∼Pdata(x)[log(D(x;φ))]+Ez∼Pz(z)[log(1−D(G(z;θ);φ))]=maxEx∼Pdata(x)[−BCELoss(D(x;φ),1)]+Ez∼Pz(z)[−BCELoss(D(G(z;θ);φ),0)]其中二元交叉熵损失nn.BCELoss(x,y)=y∗[−log(x)]+(1−y)∗[−log(1−x)]
故:
-
从真实图像data中采样出M个样本
{ x ( m ) ∣ 1 < = m < = M } \{x^{(m)}|1<=m<=M\} {x(m)∣1<=m<=M} -
从低维已知简单分布(E.g.正态分布)中采样M个样本
{ z ( m ) ∣ 1 < = m < = M } \{z^{(m)}|1<=m<=M\} {z(m)∣1<=m<=M} -
计算V(G,D)
V ( G , D ) = 1 M Σ { l o g ( D ( x ( m ) ; φ ) ) + l o g ( 1 − D ( G ( z ( m ) ; θ ) ; φ ) ) } V(G,D)=\frac{1}{M}\Sigma \{ log(D(x^{(m)};\varphi))+log(1-D(G(z^{(m)};\theta);\varphi)) \} V(G,D)=M1Σ{log(D(x(m);φ))+log(1−D(G(z(m);θ);φ))} -
计算V(G,D)对φ的偏导数
δ = ∂ ∂ φ [ 1 M Σ { l o g ( D ( x ( m ) ; φ ) ) + l o g ( 1 − D ( G ( z ( m ) ; θ ) ; φ ) ) } ] \delta=\frac{\partial}{\partial\varphi}[\frac{1}{M}\Sigma \{ log(D(x^{(m)};\varphi))+log(1-D(G(z^{(m)};\theta);\varphi)) \}] δ=∂φ∂[M1Σ{log(D(x(m);φ))+log(1−D(G(z(m);θ);φ))}] -
更新φ使得V变大
φ = φ + l r ∗ δ \varphi=\varphi+lr*\delta φ=φ+lr∗δ
循环上述更新K次
生成网络
每循环K次更新D后,进行G的一次更新
- 从低维已知简单分布(E.g.正态分布)中采样M个样本
{ z ( m ) ∣ 1 < = m < = M } \{z^{(m)}|1<=m<=M\} {z(m)∣1<=m<=M}
- 计算W(G,D*),也就是经过max V(G,D)找到的D*带入后的W(G,D*),W(G,D*)是V(G,D*)经过min-max变为max-max的过程,详见前文
W ( G , D ∗ ) = 1 M Σ { l o g ( D ∗ ( G ( z ( m ) ; θ ) ; φ ) ) } W(G,D^*)=\frac{1}{M}\Sigma \{log(D^{*}(G(z^{(m)};\theta);\varphi))\} W(G,D∗)=M1Σ{log(D∗(G(z(m);θ);φ))}
-
求其对θ的偏导
δ = ∂ ∂ θ [ 1 M Σ { l o g ( D ∗ ( G ( z ( m ) ; θ ) ; φ ) ) } ] \delta=\frac{\partial}{\partial\theta}[\frac{1}{M}\Sigma \{log(D^{*}(G(z^{(m)};\theta);\varphi))\}] δ=∂θ∂[M1Σ{log(D∗(G(z(m);θ);φ))}] -
更新θ使得W变大
θ = θ + l r ∗ δ \theta=\theta+lr*\delta θ=θ+lr∗δ
重复上述:for-loop:{训练D-训练G}的流程T次,网络收敛后训练完毕
训练Algorithm过程中取M个样本的内含剖析
E x ∼ P d a t a ( x ) ( l o g ( D ( x ; φ ) ) ) + E z ∼ P z ( z ) ( l o g ( 1 − D ( G ( z ; θ ) ; φ ) ) ) E_{x\sim Pdata(x)}(log(D(x;φ)))+E_{z\sim Pz(z)}(log(1-D(G(z;θ);φ))) Ex∼Pdata(x)(log(D(x;φ)))+Ez∼Pz(z)(log(1−D(G(z;θ);φ)))
上述是V(G,D)的计算式,其中期望E表述了,这里的目标函数,不是类似以往的图像分类问题中,我们只需要:**得到某1张图片真实类别分布+预测类别分布,就可以计算交叉熵,然后得到分布差异值。继而对一整个batch的图片进行同样的操作并求和取均值。然而,这里的生成模型,需要考虑的就是“期望”,因为每1张图片只是某个分布的一次采样,对应的概率密度不同,所以是需要对Pdata或者Pz求交叉熵的“期望值”。**在实操中,我们通过采样M张图片,令每张图片都是概率为1/M,并求取期望,来模拟对这个整体的分布求期望。所以,图片分类问题中求所有图片交叉熵然后求取平均值的方法,是这里用期望值替换“均值”的一个特例。显然,用样本交叉熵的期望值更加合理。
我们可能会疑惑:刚刚说的考虑整体“期望”,而不是求单个交叉熵然后一起求均值,是因为每个图片对应的概率密度不同。但是实操中却令每个图片的概率都是1/M,这不是没用了么?其实,我们在采样的时候,是从分布中采样的,显然概率密度大的地方,我们取得样本x的概率更大,概率密度小的地方,我们取得样本x的概率更小。由大数定律,只要取得样本x足够多(M足够大),我们的样本分布就可以反应整体分布,所以才应该令每个图片的“权重”都是1/M。
训练Algorithm过程中为何K次D+1次G为一次迭代
在G的优化中,需要保证此时的D需要是理想的D*,也就是始终保持内部的max成立,再去迭代达到外层的min。然而D*是Pg和Pdata的函数,改变G后,D*会随之改变。所以每一次迭代G,都需要先把D给train好。
【理论推导】进行min-max V(G,D)操作,对于得到limit Pg=Pdata的可行性理论论证
结论
在生成对抗网络中,当判别网络为最优时,生成网络的优化目标是最小化真实分布Pdata 和模型分布Pg 之间的JS散度.当两个分布相同时,JS散度为0,达到纳什均衡,最优生成网络𝐺 ⋆ 对应的损失为ℒ(𝐺⋆|𝐷⋆) = −2 log 2.
推导
我们把判别网络和生成网络合并为一个整体,将整个生成对抗网络的目标函数看作最小化最大化游戏(min-max Game):
G
∗
=
a
r
g
min
G
max
D
V
(
G
,
D
)
=
a
r
g
min
G
max
D
(
E
x
∼
P
d
a
t
a
(
x
)
[
l
o
g
(
D
(
x
;
φ
)
)
]
+
E
x
∼
P
g
(
x
)
[
l
o
g
(
1
−
D
(
x
;
φ
)
)
]
)
=
a
r
g
min
G
max
D
(
E
x
∼
P
d
a
t
a
(
x
)
[
l
o
g
(
D
(
x
;
φ
)
)
]
+
E
z
∼
P
z
(
z
)
[
l
o
g
(
1
−
D
(
G
(
z
;
θ
)
;
φ
)
)
]
)
G^{*}=arg\min\limits_{G}\max\limits_{D}V(G,D)\\ =arg\min\limits_{G}\max\limits_{D}(E_{x\sim Pdata(x)}[log(D(x;φ))]+E_{x\sim Pg(x)}[log(1-D(x;φ))])\\ =arg\min\limits_{G}\max\limits_{D}(E_{x\sim Pdata(x)}[log(D(x;φ))]+E_{z\sim Pz(z)}[log(1-D(G(z;θ);φ))])\\
G∗=argGminDmaxV(G,D)=argGminDmax(Ex∼Pdata(x)[log(D(x;φ))]+Ex∼Pg(x)[log(1−D(x;φ))])=argGminDmax(Ex∼Pdata(x)[log(D(x;φ))]+Ez∼Pz(z)[log(1−D(G(z;θ);φ))])
因为之前提到的生成网络梯度问题,这个min-max形式的目标函数一般用来进行理论分析,并不是实际训练时的目标函数.
- 先求最佳判别器D:
D ∗ = a r g max D E x ∼ P d a t a ( x ) [ l o g ( D ( x ; φ ) ) ] + E x ∼ P g ( x ) [ l o g ( 1 − D ( x ; φ ) ) ] = a r g max D ∫ P d a t a ( x ) ∗ l o g ( D ( x ; φ ) ) + P g ( x ) ∗ l o g ( 1 − D ( x ; φ ) ) d x D^*=arg\max\limits_{D}E_{x\sim Pdata(x)}[log(D(x;\varphi))]+E_{x\sim Pg(x)}[log(1-D(x;\varphi))]\\ =arg\max\limits_{D}\int Pdata(x)*log(D(x;\varphi))+Pg(x)*log(1-D(x;\varphi))dx D∗=argDmaxEx∼Pdata(x)[log(D(x;φ))]+Ex∼Pg(x)[log(1−D(x;φ))]=argDmax∫Pdata(x)∗log(D(x;φ))+Pg(x)∗log(1−D(x;φ))dx
积分的含义在于:对任何一张可能的图片x做判别,在总体期望上,要使得判别效果最好。可以等价于,我们要使每一张图片的判别效果都做到最好,这样整体也会最好。(贪心思想)。于是,求积分的最大值等价于求被积函数的最大值。
KaTeX parse error: Expected group after '_' at position 13: D^*=arg\max_̲\limits{D}Pdata…
令
f
‘
(
D
)
=
0
f^`(D)=0
f‘(D)=0
解得
P
d
a
t
a
1
D
∗
+
P
g
1
D
∗
−
1
=
0
Pdata\frac{1}{D^*}+Pg\frac{1}{D^*-1}=0\\
PdataD∗1+PgD∗−11=0
最优判别器为:
D
∗
=
P
d
a
t
a
(
x
)
P
d
a
t
a
(
x
)
+
P
g
(
x
)
D^*=\frac{Pdata(x)}{Pdata(x)+Pg(x)}
D∗=Pdata(x)+Pg(x)Pdata(x)
-
再求最佳生成器G
把D*代入公式,这里由于并不是训练好D后得到D*然后训练G,若是后者则可以在下述第二行中令第一项为0;这里的D为收敛到最优解后的D,当G改变时,D也随着变化。所以“将第一项简单的看做是不随G变化,可以置为0”的想法是错误的
G ∗ = a r g min G max D V ( G , D ) = a r g min G V ( G , D ∗ ) = a r g min G ( E x ∼ P d a t a ( x ) [ l o g D ∗ ] + E x ∼ P g ( x ) [ l o g ( 1 − D ∗ ) ] ) = a r g min G ∫ P d a t a ( x ) [ l o g P d a t a ( x ) 1 2 P d a t a ( x ) + 1 2 P g ( x ) − l o g 2 ] d x + ∫ P g ( x ) [ l o g P g ( x ) 1 2 P d a t a ( x ) + 1 2 P g ( x ) − l o g 2 ] d x = a r g min G ∫ − P d a t a ( x ) l o g { 1 2 [ P d a t a ( x ) + P g ( x ) ] } d x − ∫ − P d a t a ( x ) l o g ( P d a t a ( x ) ) d x + ∫ − P g ( x ) l o g { 1 2 [ P d a t a ( x ) + P g ( x ) ] } d x − ∫ − P g ( x ) l o g P g ( x ) d x − 2 l o g 2 = a r g min G H ( P d a t a , 1 2 [ P d a t a + P g ] ) − H ( P d a t a ) + H ( P g , 1 2 [ P d a t a + P g ] ) − H ( P g ) − 2 l o g 2 = a r g min G K L ( P d a t a ∣ ∣ P m ) + K L ( P g ∣ ∣ P m ) − 2 l o g 2 = a r g min G 2 J S ( P d a t a ∣ ∣ P g ) − 2 l o g 2 其中 P m = 1 2 [ P d a t a + P g ] G^{*}=arg\min\limits_{G}\max\limits_{D}V(G,D)=arg\min\limits_{G}V(G,D^*)\\ =arg\min\limits_{G}(E_{x\sim Pdata(x)}[logD^*]+E_{x\sim Pg(x)}[log(1-D^*)])\\ =arg\min\limits_{G}\int Pdata(x)[log\frac{Pdata(x)}{\frac{1}{2}Pdata(x)+\frac{1}{2}Pg(x)}-log2]dx+ \int Pg(x)[log\frac{Pg(x)}{\frac{1}{2}Pdata(x)+\frac{1}{2}Pg(x)}-log2]dx\\ =arg\min\limits_{G}\int -Pdata(x)log\{\frac{1}{2}[Pdata(x)+Pg(x)]\}dx-\int-Pdata(x)log(Pdata(x))dx+\\\int -Pg(x)log\{\frac{1}{2}[Pdata(x)+Pg(x)]\}dx-\int -Pg(x)logPg(x)dx-2log2\\ =arg\min\limits_{G}H(Pdata,\frac{1}{2}[Pdata+Pg])-H(Pdata)+H(Pg,\frac{1}{2}[Pdata+Pg])-H(Pg)-2log2\\ =arg\min\limits_{G}KL(Pdata||Pm)+KL(Pg||Pm)-2log2\\ =arg\min\limits_{G}2JS(Pdata||Pg)-2log2\\其中Pm=\frac{1}{2}[Pdata+Pg] G∗=argGminDmaxV(G,D)=argGminV(G,D∗)=argGmin(Ex∼Pdata(x)[logD∗]+Ex∼Pg(x)[log(1−D∗)])=argGmin∫Pdata(x)[log21Pdata(x)+21Pg(x)Pdata(x)−log2]dx+∫Pg(x)[log21Pdata(x)+21Pg(x)Pg(x)−log2]dx=argGmin∫−Pdata(x)log{21[Pdata(x)+Pg(x)]}dx−∫−Pdata(x)log(Pdata(x))dx+∫−Pg(x)log{21[Pdata(x)+Pg(x)]}dx−∫−Pg(x)logPg(x)dx−2log2=argGminH(Pdata,21[Pdata+Pg])−H(Pdata)+H(Pg,21[Pdata+Pg])−H(Pg)−2log2=argGminKL(Pdata∣∣Pm)+KL(Pg∣∣Pm)−2log2=argGmin2JS(Pdata∣∣Pg)−2log2其中Pm=21[Pdata+Pg]
在生成对抗网络中,当判别网络为最优时,生成网络的优化目标是最小化真实分布Pdata 和模型分布Pg 之间的JS散度.当两个分布相同时,JS散度为0,最优生成网络𝐺* 对应的损失为ℒ(𝐺*|𝐷*) = −2 log 2.
所以进行min-max V(G,D)操作等价于最小化JS(Pdata||Pg)等价于令Pg趋同于Pdata。
至此,我们的思路是:提出生成图片的生成对抗网络GAN->用概率分布的角度去论证“生成“这一含义->将D视作一个由神经网络构成的”损失函数“来度量Pdata和Pg的分布差异->写出目标函数V(G,D)和D、G的优化目标min-max V(G,D)->给出能使min-max V(G,D)收敛的训练方法Algorithm->理论分析min-max V(G,D)的合理性,论文中不仅论证了min-max V(G,D)可以得到global optimum这一合理性,还论证了给出的模型训练Algorithm是正确的:的确能够通过Algorithm解这个min-max函数,得到正确的G和D,也就是可以使得G和D收敛。这里不给出数学证明,只在前文中对其进行简单解释。
【补充知识】散度
散度是刻画两个分布之间差距的度量值
-
KL散度:p(x)和q(x),均为连续型随机变量。f(x)表示信息量。
D K L ( P ∣ ∣ Q ) = ∫ p ( x ) [ f q ( x ) − f p ( x ) ] d x = ∫ p ( x ) [ − l o g 2 q ( x ) + l o g 2 p ( x ) ] d x = ∫ p ( x ) ( − l o g 2 q ( x ) ) d x − ∫ p ( x ) ( − l o g 2 p ( x ) ) d x = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=\int p(x)[f_{q}(x)-f_{p}(x)]dx\\=\int p(x)[-log_{2}q(x)+log_{2}p(x)]dx\\=\int p(x)(-log_{2}q(x))dx-\int p(x)(-log_{2}p(x))dx\\=H(P,Q)-H(P) DKL(P∣∣Q)=∫p(x)[fq(x)−fp(x)]dx=∫p(x)[−log2q(x)+log2p(x)]dx=∫p(x)(−log2q(x))dx−∫p(x)(−log2p(x))dx=H(P,Q)−H(P) -
JS散度:JS 散度是 KL 散度一种改进
D J S = 1 2 D K L ( P ∣ ∣ M ) + 1 2 D K L ( Q ∣ ∣ M ) 其中 M = 1 2 ( P + Q ) D_{JS}=\frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)\\ 其中M=\frac{1}{2}(P+Q) DJS=21DKL(P∣∣M)+21DKL(Q∣∣M)其中M=21(P+Q)
但两种散度都存在一个问题,即如果两个分布𝑝, 𝑞没有重叠或者重叠非常少时,KL散度和JS散度都很难衡量两个分布的距离。
GAN或许并不好
优化目标不一定是最小化JS Divergence,也可以是其他散度
上文得知,整个GAN的优化目标在于最小化JS(Pdata||Pg)。之所以是JS散度,而不是其他散度,是由于目标函数V(G,D)的形式所定。max V(G,D)的形式确定了D*,把D*代入min-max V(G,D)得到的min V(G,D*)的形式确定了G*收敛在JS(Pdata||Pg)=0处。而若改变V(G,D)的形式,也会使得GAN的优化目标变成最小化其他的“Pg-Pdata间散度”。然而,单单从改变V(G,D)来更换散度,并不能显著提升GAN的表现或者使GAN变得更容易训练。GAN is difficult to train.
JS Divergence的问题
我们知道,Pg和Pdata在图像的高维空间中,重叠的部分很少,这会对JS散度造成很大问题。
理由:一张皮卡丘的图片,在高维分布中,绝大多数地方都是P(x)=0,只有特定的非常狭窄的地方,可以取得比较大的值,仿佛一大片平原中耸立着一面狭窄细长的高墙。但凡图片有一些不同,分布就会变化的很大,分布间重叠的部分就很少。
- 【从G训练的角度】使用 JS 散度来训练生成对抗网络的一个问题是,当两个分布没有重叠时,它们之间的 JS 散度恒等于常数 log 2。这使得,给出一个训练好的D*时,在G的优化中出现梯度消失,难以使G收敛
G ∗ = a r g min G max D V ( G , D ) = a r g min G 2 J S ( P d a t a ∣ ∣ P g ) − 2 l o g 2 = 0 在计算梯度时: ∂ 2 J S ( P d a t a ∣ ∣ P g ) − 2 l o g 2 ∂ θ g = 0 G 无法收敛 G^*=arg \min\limits_{G}\max\limits_{D}V(G,D)\\ =arg\min\limits_{G}2JS(Pdata||Pg)-2log2=0\\ 在计算梯度时:\frac{\partial\,2JS(Pdata||Pg)-2log2}{\partial \theta_g}=0\\ G无法收敛 G∗=argGminDmaxV(G,D)=argGmin2JS(Pdata∣∣Pg)−2log2=0在计算梯度时:∂θg∂2JS(Pdata∣∣Pg)−2log2=0G无法收敛
**因此,在实际训练生成对抗网络时,一般不会将判别网络训练到最优,只进行一步或多步梯度下降,使得生成网络的梯度依然存在。**在"学AI"代码里的"GAN_复习"中可见到,令K=1。如果K=10,训练到完美的D会使得G参数梯度消失,G无法优化,而D的loss降低为0。
-
【从D的角度】另一个问题是,在收敛判断上,我们的model会因为JS散度在Pdata和Pg分布不重合时恒等于log2这一特性,而使得Discriminator的分辨真伪的正确率始终为100%。我们很难从目标函数的值判断,网络是否正在向着收敛的方向发展,只能通过输出生成图片进行人工观测的方式来判断是否要继续训练下去。
在给出某一阶段迭代后的G之后,去训练一个最好的D,迭代K次后得到:
在模型没有收敛时,即使减小 P g 与 P d a t a 之间的差异, D J S 依然恒等于 l o g 2 max D V ( G 未收敛 ∗ , D ) = 2 J S ( P a t a ( x ) ∣ ∣ P g ( x ) ) − 2 l o g 2 = 0 = E x ∼ P d a t a ( x ) [ l o g ( D ( x ) ) ] + E x ∼ P g ( x ) [ l o g ( 1 − D ( x ) ) ] 在模型没有收敛时,即使减小Pg与Pdata之间的差异,D_{JS}依然恒等于log2\\ \max\limits_{D}V(G^*_{未收敛},D)=2JS(Pata(x)||Pg(x))-2log2=0\\ =E_{x\sim Pdata(x)}[log(D(x))]+E_{x\sim Pg(x)}[log(1-D(x))] 在模型没有收敛时,即使减小Pg与Pdata之间的差异,DJS依然恒等于log2DmaxV(G未收敛∗,D)=2JS(Pata(x)∣∣Pg(x))−2log2=0=Ex∼Pdata(x)[log(D(x))]+Ex∼Pg(x)[log(1−D(x))]
意味着完美的Discriminator(也就是D*)对两个不重合的分布的判别可以完全区分,正确率为100%。且对于逐渐收敛的Pg和Pdata,max-V(G*,D)始终等于0。只有当二者的分布有所重合,JS才会逐渐变小,才会令最好的D也“力不从心”。直至JS=0时,最好的D(无论K多大)也完全丧失判别能力,如下所示。
在模型已经完全收敛时 , P g = P d a t a ,有: m a x V ( G 已收敛 ∗ , D ) = E x ∼ P d a t a ( x ) [ l o g ( D ( x ) ) ] + E x ∼ P g ( x ) [ l o g ( 1 − D ( x ) ) ] = 1 ∗ l o g 1 2 + 1 ∗ l o g 1 2 = − 2 l o g 2 = 2 J S − 2 l o g 2 = − 2 l o g 2 在模型已经完全收敛时,Pg=Pdata,有:\\ maxV(G^*_{已收敛},D)=E_{x\sim Pdata(x)}[log(D(x))]+E_{x\sim Pg(x)}[log(1-D(x))]\\ =1*log\frac{1}{2}+1*log\frac{1}{2}=-2log2\\ =2JS-2log2=-2log2 在模型已经完全收敛时,Pg=Pdata,有:maxV(G已收敛∗,D)=Ex∼Pdata(x)[log(D(x))]+Ex∼Pg(x)[log(1−D(x))]=1∗log21+1∗log21=−2log2=2JS−2log2=−2log2
然而,在训练初期、中期,我们的Pg和Pdata重合部分非常少,JS始终为log2,也就是V始终等于0,判别结果始终是“十分完美”。只有在训练后期才能显现出【V(G,D)值下降,D的准确率下降】的标志。但是这样,前中期V值不变、准确率不变是否是由于模型不收敛导致就无法观测判别了。这使得无法通过观察objective function V的从0到-2log2这一取值下降变化或观察D的判别准确率下降变化来判断模型是否正在收敛。而以往的深度学习问题,我们可以很容易的根据loss的变化或者accuracy的变化来判断模型收敛趋势。
如果我们用其他的度量值来衡量Pg和Pdata,来取代JS Divergence。且这种度量值满足如下所示:
这样:
- 在给定D*,求解G的收敛中,梯度消失问题解决。
- 在给定G*,求解到最佳D对应的max-V(G*,D)值随分布差距减小而逐步减小,进而可以观测到模型收敛趋势。
W的提出来自于WGAN
WGAN
用Wasserstein distance取代JS Divergence
- 传统JS Divergence计算:
max D V ( G , D ) = max D E x ∼ P d a t a ( x ) [ l o g ( D ( x ; φ ) ) ] + E x ∼ P g ( x ) [ l o g ( 1 − D ( x ; φ ) ) ] = 2 J S ( P d a t a ∣ ∣ P g ) − 2 l o g 2 \max\limits_{D}V(G,D)=\\ \max\limits_{D}E_{x\sim Pdata(x)}[log(D(x;\varphi))]+E_{x\sim Pg(x)}[log(1-D(x;\varphi))]\\ =2JS(Pdata||Pg)-2log2 DmaxV(G,D)=DmaxEx∼Pdata(x)[log(D(x;φ))]+Ex∼Pg(x)[log(1−D(x;φ))]=2JS(Pdata∣∣Pg)−2log2
D致力于:让来自Pdata的D(x)趋向于1,来自Pg(x)的D(x)趋向于0
- Wasserstein distance计算:
W a s s e r s t e i n D i s t a n c e ( P d a t a ∣ ∣ P g ) = max D W ( G , D ) = max D ∈ 1 − L i p s c h i t z E x ∼ P d a t a ( x ) [ D ( x ; φ ) ] − E x ∼ P g ( x ) [ D ( x ; φ ) ] Wasserstein\;Distance(Pdata||Pg)=\max\limits_{D}W(G,D)\\ =\max\limits_{D\in 1-Lipschitz}E_{x\sim Pdata(x)}[D(x;\varphi)]-E_{x\sim Pg(x)}[D(x;\varphi)] WassersteinDistance(Pdata∣∣Pg)=DmaxW(G,D)=D∈1−LipschitzmaxEx∼Pdata(x)[D(x;φ)]−Ex∼Pg(x)[D(x;φ)]
D致力于:让来自Pdata的D(x)趋向于无穷大,来自Pg(x)的D(x)趋向于无穷小,但是有一个1-Lipschitz的限制,需要让D曲线平滑。
在数学中,对于一个实数函数 𝑓 ∶ ℝ → ℝ,如果满足函数曲线上任意两点连线的斜率一致有界,即任意两点的斜率都小于常数𝐾 > 0,则函数𝑓 就称为K-Lipschitz连续函数
**如果不加D∈1-Lipschitz限制,则G依然无法收敛:**如同“JS Divergence在Pdata与Pg无交集时JS恒等于log2,导致梯度消失”一样,不加限制会导致Wasserstein distance的值在Pdata与Pg无交集时为无穷大,也是梯度消失。没能实现我们要求的:分布离得越近,distance越小;分布里的越远,distance越大
加以限制后,Pg和Pdata差异大时,max-W(G,D)很大;Pg和Pdata差异小时,max-W(G,D)很小;且随着G的优化,Wasserstein distance=max-W(G,D)越来越小。当Pg=Pdata时,Wasserstein distance=0
如何实现1-Lipschitz
训练算法
初始化Generator和Discriminator
判别网络
-
sample M images from real data
X = { x ( m ) ∣ 1 < = m < = M } X=\{x^{(m)}|1<=m<=M\} X={x(m)∣1<=m<=M} -
sample M codes from P z P_z Pz (normal distribution)
Z = { z ( m ) ∣ 1 < = m > = M } Z=\{z^{(m)}|1<=m>=M\} Z={z(m)∣1<=m>=M} -
Generate images via G
G ( z ) = { G ( z ( m ) ) ∣ 1 < = m < = M } G(z)=\{G(z^{(m)})|1<=m<=M\} G(z)={G(z(m))∣1<=m<=M} -
compute the target function
W d ( G , D ) = E x ∼ P d a t a [ D ( x ; φ ) ] − E z ∼ P z [ D ( G ( z ) ; φ ) ] = 1 M Σ [ D ( x ( i ) ; φ ) ] − 1 M Σ [ D ( G ( z ( i ) ) ; φ ) ] W_d(G,D)=E_{x\sim P_{data}}[D(x;\varphi)]-E_{z\sim Pz}[D(G(z);\varphi)]\\ =\frac{1}{M}\Sigma[D(x^{(i)};\varphi)]-\frac{1}{M}\Sigma[D(G(z^{(i)});\varphi)] Wd(G,D)=Ex∼Pdata[D(x;φ)]−Ez∼Pz[D(G(z);φ)]=M1Σ[D(x(i);φ)]−M1Σ[D(G(z(i));φ)] -
compute the gradient of W
δ = ∂ ∂ φ [ W d ( G , D ) ] \delta=\frac{\partial}{\partial \varphi}[W_d(G,D)] δ=∂φ∂[Wd(G,D)] -
update φ \varphi φ
φ = φ + α ∗ R M S P r o p ( φ , δ ) \varphi=\varphi+\alpha*RMSProp(\varphi,\delta) φ=φ+α∗RMSProp(φ,δ) -
clip parameters
φ = c l i p ( φ , − c , c ) \varphi=clip(\varphi,-c,c) φ=clip(φ,−c,c)
生成网络
-
sample M codes from P z Pz Pz
Z = { z ( m ) ∣ 1 < = m < = M } Z=\{z^{(m)}|1<=m<=M\} Z={z(m)∣1<=m<=M} -
Generate images via G
G ( z ) = { G ( z ( m ) ) ∣ 1 < = m < = M } G(z)=\{G(z^{(m)})|1<=m<=M\} G(z)={G(z(m))∣1<=m<=M} -
compute the target function
W g ( G , D ) = E z ∼ P z [ D ( G ( z ; θ ) ) ] = 1 M Σ [ D ( G ( z ( i ) ; θ ) ) ] W_g(G,D)=E_{z\sim P_z}[D(G(z;\theta))]\\ =\frac{1}{M}\Sigma[D(G(z^{(i)};\theta))] Wg(G,D)=Ez∼Pz[D(G(z;θ))]=M1Σ[D(G(z(i);θ))] -
compute the gradient of theta
δ = ∂ ∂ θ [ W g ( G , D ) ] \delta=\frac{\partial}{\partial\theta}[W_g(G,D)] δ=∂θ∂[Wg(G,D)] -
update θ \theta θ
θ = θ + α ∗ R M S P r o p ( θ , δ ) \theta=\theta+\alpha*RMSProp(\theta,\delta) θ=θ+α∗RMSProp(θ,δ)
循环上述直到参数收敛
WGAN与GAN训练上的不同
- Discriminator最后一层不加Sigmoid层
- G和D的target function中没有了log,也就不需要用BCELoss
- 每次更新D的参数后,采用权重截断法来保证1-Lipschitz
- 参数优化器不适应基于动量的优化算法(比如Adam),推荐使用RMSProp
评估GAN
Quality
将产生的图片输入一个Image Classifier中,输出的P(class|y)应该足够集中(方差越小越好)
Diversity
mode collapse
没有很好的解决方法,最好在Generator在陷入“模型坍塌”之前,stop the train!
mode dropping
mode dropping不仅没有好的解决方法,而且不容易被察觉
评估方案
P ( c ∣ y ) 尽可能集中 1 N Σ i N P ( c ∣ y i ) 尽可能平均 P(c|y)尽可能集中\\\frac{1}{N}\mathop{\Sigma}\limits_{i}^{N} P(c|y^i)尽可能平均 P(c∣y)尽可能集中N1iΣNP(c∣yi)尽可能平均
Inception Score (IS)
Good Quality+Large Diversity ->high IS
Fréchet Inception Distance (FID)
进一步,评估结果好就是真的好么?
完全产生和real data数据集一模一样的图片,显然会令各种评估指数都“非常完美”,但是显然,我们需要GAN是来产生“新”的图片,而不是“copy”。
Conditional GAN
可以输入x,来控制生成器G的产生的Pg。
比如生成mnist手写数字时,普通的GAN可以随机的从z中采样然后生成数字1-9.而Conditional GAN可以通过输入x,比如x=1,让GAN只生成数字1的手写数字图片。
- Discriminator需要接收图片(X_true,Label_true)并判定为1,接收图片(X_true,Label_false)并判定为0,接收图片(X_gen,c)并判定为0。即仅对正确分布+正确匹配condition的情况判定为1,其余情况判定为0。
- Generator需要接收随机变量z和输入标签c,生成图片G(z,c),并尽可能使D(G(z,c ))输出向1靠拢
训练
目标函数
min
G
max
D
E
x
∼
P
d
a
t
a
,
m
a
t
c
h
[
l
o
g
D
(
x
∣
c
)
]
+
E
x
^
∼
P
d
a
t
a
,
d
i
s
m
a
t
c
h
[
l
o
g
(
1
−
D
(
x
^
∣
c
)
)
]
+
E
z
∼
P
z
[
l
o
g
(
1
−
D
(
G
(
z
∣
c
)
∣
c
)
)
]
也可以不考虑真实图片
+
不匹配
c
o
n
d
i
t
i
o
n
的情况
(
原论文提出的
)
,但是效果不如对上者。
min
G
max
D
E
x
∼
P
d
a
t
a
[
l
o
g
D
(
x
∣
c
)
]
+
E
z
∼
P
z
[
l
o
g
(
1
−
D
(
G
(
z
∣
c
)
∣
c
)
)
]
\min\limits_{G}\max\limits_{D}E_{x\sim Pdata,match}[logD(x|c)]+E_{\hat{x}\sim Pdata,dismatch}[log(1-D(\hat{x}|c))]+\\E_{z\sim Pz}[log(1-D(G(z|c)|c))]\\ 也可以不考虑真实图片+不匹配condition的情况(原论文提出的),但是效果不如对上者。\\ \min\limits_{G}\max\limits_{D}E_{x\sim Pdata}[logD(x|c)]+E_{z\sim Pz}[log(1-D(G(z|c)|c))]\\
GminDmaxEx∼Pdata,match[logD(x∣c)]+Ex^∼Pdata,dismatch[log(1−D(x^∣c))]+Ez∼Pz[log(1−D(G(z∣c)∣c))]也可以不考虑真实图片+不匹配condition的情况(原论文提出的),但是效果不如对上者。GminDmaxEx∼Pdata[logD(x∣c)]+Ez∼Pz[log(1−D(G(z∣c)∣c))]
判别网络D
-
从真实图片Pdata中抽取M个样本+condition
{ ( x ( 1 ) , c ( 1 ) ) , ( x ( 2 ) , c ( 2 ) ) , ( x ( 3 ) , c ( 3 ) ) , ( x ( 4 ) , c ( 4 ) ) . . . . . . } \{(x^{(1)},c^{(1)}),(x^{(2)},c^{(2)}),(x^{(3)},c^{(3)}),(x^{(4)},c^{(4)})......\} {(x(1),c(1)),(x(2),c(2)),(x(3),c(3)),(x(4),c(4))......} -
从低维已知简单分布(E.g.正态分布)中采样M个样本并为每个Z分配一个condition,实作中可以直接为其对应分配上述“抽取Pdata+condition”时所得到的condition值,等效于让zi模拟xi
{ ( G ( z ( 1 ) ) , c ( 1 ) ) , ( G ( z ( 2 ) ) , c ( 2 ) ) , ( G ( z ( 3 ) ) , c ( 3 ) ) , ( G ( z ( 4 ) ) , c ( 4 ) ) . . . . . . } \{(G(z^{(1)}),c^{(1)}),(G(z^{(2)}),c^{(2)}),(G(z^{(3)}),c^{(3)}),(G(z^{(4)}),c^{(4)})......\} {(G(z(1)),c(1)),(G(z(2)),c(2)),(G(z(3)),c(3)),(G(z(4)),c(4))......} -
从真实图片中抽取M个样本,并给其分配错误的condition,实作中可以直接为其对应分配上述“抽取Pdata+condition”时所得到的condition值,来实现错配c值
{ ( x ^ ( 1 ) , c ( 1 ) ) , ( x ^ ( 2 ) , c ( 2 ) ) , ( x ^ ( 3 ) , c ( 3 ) ) , ( x ^ ( 4 ) , c ( 4 ) ) . . . . . . } \{(\hat{x}^{(1)} ,c^{(1)}),(\hat{x}^{(2)} ,c^{(2)}),(\hat{x}^{(3)} ,c^{(3)}),(\hat{x}^{(4)} ,c^{(4)})......\} {(x^(1),c(1)),(x^(2),c(2)),(x^(3),c(3)),(x^(4),c(4))......} -
计算V(G,D)
max D 1 M Σ [ l o g D ( x ( i ) ∣ c ( i ) ) ] + 1 M Σ [ l o g ( 1 − D ( x ^ ( i ) ∣ c ( i ) ) ) ] + 1 M Σ [ l o g ( 1 − D ( G ( z ( i ) ∣ c ( i ) ) ∣ c ( i ) ) ) ] = min D B C E ( D ( x ∣ c ; φ ) , 1 ) + B C E ( D ( x ^ ∣ c ; φ ) , 0 ) + B C E ( D ( G ( z ∣ c ) ∣ c ; φ ) , 0 ) \max\limits_{D}\;\frac{1}{M}\Sigma[logD(x^{(i)}|c^{(i)})]+\frac{1}{M}\Sigma[log(1-D(\hat{x}^{(i)}|c^{(i)}))]+\\ \frac{1}{M}\Sigma[log(1-D(G(z^{(i)}|c^{(i)})|c^{(i)}))]\\ =\min\limits_{D}\;BCE(D(x|c;\varphi),1)+BCE(D(\hat{x}|c;\varphi),0)+BCE(D(G(z|c)|c;\varphi),0) DmaxM1Σ[logD(x(i)∣c(i))]+M1Σ[log(1−D(x^(i)∣c(i)))]+M1Σ[log(1−D(G(z(i)∣c(i))∣c(i)))]=DminBCE(D(x∣c;φ),1)+BCE(D(x^∣c;φ),0)+BCE(D(G(z∣c)∣c;φ),0) -
求梯度
δ = ∂ ∂ φ B C E ( D ( x ∣ c ; φ ) , 1 ) + B C E ( D ( x ^ ∣ c ; φ ) , 0 ) + B C E ( D ( G ( z ∣ c ) ∣ c ; φ ) , 0 ) \delta=\frac{\partial}{\partial \varphi} BCE(D(x|c;\varphi),1)+BCE(D(\hat{x}|c;\varphi),0)+BCE(D(G(z|c)|c;\varphi),0) δ=∂φ∂BCE(D(x∣c;φ),1)+BCE(D(x^∣c;φ),0)+BCE(D(G(z∣c)∣c;φ),0) -
更新D的参数φ
φ = φ − l r ∗ δ \varphi=\varphi-lr*\delta φ=φ−lr∗δ
生成网络G
-
从低维已知简单分布(E.g.正态分布)中采样M个样本并为每个Z分配一个condition,实作中可以从所有可能的condition中随机分配c给每个z。
{ ( G ( z ( 1 ) ) , c ( 1 ) ) , ( G ( z ( 2 ) ) , c ( 2 ) ) , ( G ( z ( 3 ) ) , c ( 3 ) ) , ( G ( z ( 4 ) ) , c ( 4 ) ) . . . . . . } \{(G(z^{(1)}),c^{(1)}),(G(z^{(2)}),c^{(2)}),(G(z^{(3)}),c^{(3)}),(G(z^{(4)}),c^{(4)})......\} {(G(z(1)),c(1)),(G(z(2)),c(2)),(G(z(3)),c(3)),(G(z(4)),c(4))......} -
计算V(G,D)
max G 1 M Σ [ l o g D ( G ( z ( i ) ∣ c ( i ) ) ∣ c ( i ) ) ] = min G B C E ( D ( G ( z ∣ c ; θ ) ∣ c ) , 1 ) \max\limits_{G}\frac{1}{M}\Sigma [logD(G(z^{(i)}|c^{(i)})|c^{(i)})]\\ =\min\limits_{G}BCE(D(G(z|c;\theta)|c),1) GmaxM1Σ[logD(G(z(i)∣c(i))∣c(i))]=GminBCE(D(G(z∣c;θ)∣c),1) -
求梯度
δ = ∂ ∂ θ B C E ( D ( G ( z ∣ c ; θ ) ∣ c ) ) \delta=\frac{\partial}{\partial\theta}BCE(D(G(z|c;\theta)|c)) δ=∂θ∂BCE(D(G(z∣c;θ)∣c)) -
更新G的参数θ
θ = θ − l r ∗ δ \theta=\theta-lr*\delta θ=θ−lr∗δ
Cycle GAN
Cycle GAN的典型应用:图片风格转换。
CGAN的问题:Conditional GAN需要成对的(带标签)的训练数据,比如给出condition:1,可以生成数字1的手写图片。训练时,D需要(condition,image)这样成对的数据。然而,如果我们想要“将图片风格化为二次元图片”,那么我们需要(原图片,二次元图片)这样成对的数据,显然,为数万张图片“画出对应的二次元风格图片”比“标注label”的难度要高得多。所以,在不提供“成对数据”的情况下,如何完成
- 生成数据分布Pg符合目标数据分布Pdata
- 从Pg采样得到的sample与输入的image具有一定的相似性。
原始GAN:z服从某一个容易sample的分布。我们采用高斯分布、均匀分布的目的是,我们可以轻松地从这些分布中sample。同样的,z也可以是一个待转换风格的图片集,一样的,选取一张图片就是从这个分布中sample。
Cycle GAN:而现在我们需要把真实大头贴转为二次元图片版本,就如下所示,输入为X domain的图片,输出是Y domain的图片。
如果简单的套用原始GAN,则我们的y domain的图片,会和原始GAN的效果一样,完成**“生成数据分布Pg符合目标数据分布Pdata”**这一目标,因为GAN直接忽略了输入的X domain中图片的特性。只是将其分布做了映射。最终,G的输出只是“符合D判断”的“二次元头像,就如同conditional GAN中我们不给D输入condition label一样,G的输出会忽略输入domain X的特征,仅仅是满足”产生的二次元图片能够骗过D“这个要求。
然而,我们无法像解决condition GAN的方法,将成对的信息输入给Discriminator,那么如何迫使G在生成符合Pdata分布的二次元图片的同时,让”这张图片Y“与输入的X尽可能相似呢?——提出了Cycle GAN。
由于产生的Y需要重新通过G‘来还原回原图X,则G在产生Y时就会受到G’的限制,让Y与X会保持相似性。上述是我们的理想设计,那么有没有可能:G学习到了某种不合理的转换把X变换为Y,只要同样的G‘能恰好转换回去?然而,实操中其实效果很好,上述“理论”问题不常见。
其他风格转换:文本风格转换、unsupervised translation, unsupervised abstractive summarization, unsupervised ASR等等