系列文章目录
======================================================
专题-生成对抗网络
第一节 GAN
第二节
第三节 生成对抗网络系列—CycleGAN
第四节 生成对抗网络系列—ACL-GAN
======================================================
生成对抗网络系列—GAN
什么是GAN?
Generative adversarial network (GANs) 由两个独立的Module组成:Generator (G), Discriminator (D), 这两个module都是神经网络, 其中G由
θ
\theta
θ参数化,
D
D
D由
ϕ
\phi
ϕ参数化,假设训练集为X, X被称为true样本, G基于先验分布P(z)产生fake样本
G
θ
(
z
)
G_{\theta}(z)
Gθ(z), 而D输出样本x是true样本的概率
D
ϕ
(
x
)
D_{\phi}(x)
Dϕ(x)。
GAN的优化本质上是一个min-max game: D的目的是提升其鉴别/判别真假样本的能力,而G的目的是生成与真实样本尽可能相似的假样本来欺骗D(使D将生成的样本误判为真样本)。
GAN的概率图模型结构如下:(其中z为隐变量,x为观察变量)
GAN中G和D的设计
G的设计有很多tricks:
(1)G的输入z不一定非要在G的第一层输入 (实际上它可以在任何一层输入)
例如,假设
z
=
(
z
1
,
z
2
)
z=(z^{1}, z^{2})
z=(z1,z2),
z
1
z^{1}
z1在G的第一层输入,
z
2
z^{2}
z2服从Gaussian先验作为G的最后一层的输入,这样生成的
x
=
G
θ
(
z
1
,
z
2
)
x=G_{\theta}(z1,z2)
x=Gθ(z1,z2) conditionally Gaussian given
z
1
z^{1}
z1。
(2) 将加性或乘性噪声z应用于隐藏层,或将噪声z直接级联到隐藏层。
上述技巧在实际中有广泛的应用。
损失函数
GANs的损失函数形式由很多种,其中D的损失函数形式都是一样的,区别在于G的损失形式多有不同。
理论完美的损失函数形式
arg min θ max ϕ V ( θ , ϕ ) = arg min θ max ϕ 1 2 { E x ∈ p d a t a l o g D ϕ ( x ) + E z ∈ p z l o g ( 1 − D ϕ ( G θ ( z ) ) ) } \mathop{\arg\min}_{\theta}{\max}_{\phi}V(\theta,\phi)=\mathop{\arg\min}_{\theta}{\max}_{\phi}\frac{1}{2}\{{\rm E}_{x \in p_{data}}{\rm log}D_{\phi}(x)+{\rm E}_{z \in p_{z}}{\rm log}(1-D_{\phi}(G_{\theta}(z)))\} argminθmaxϕV(θ,ϕ)=argminθmaxϕ21{Ex∈pdatalogDϕ(x)+Ez∈pzlog(1−Dϕ(Gθ(z)))}
其中D输出的是输入样本属于真样本的概率(即经过了sigmoid的激活值)
分析:
V
V
V代表值函数,与损失函数
L
L
L相比刚好差了一个负号,即:
V
=
−
L
V=-L
V=−L,
G
G
G和
D
D
D是交替优化进行的,拆开来看,
ϕ
\phi
ϕ的优化:
arg
min
ϕ
−
1
2
{
E
x
∈
p
d
a
t
a
l
o
g
D
(
x
)
+
E
z
∈
p
z
l
o
g
(
1
−
D
(
G
(
z
)
)
)
}
\mathop{\arg\min}_{\phi}\frac{-1}{2}\{{\rm E}_{x \in p_{data}}{\rm log}D(x)+{\rm E}_{z \in p_{z}}{\rm log}(1-D(G(z)))\}
argminϕ2−1{Ex∈pdatalogD(x)+Ez∈pzlog(1−D(G(z)))}
可以看到这实际上就是一个带有sigmoid激活的标准的二元分类器的交叉熵损失,其中训练数据由两个minibatch组成,一个为真实的数据(标记为1),一个为假数据(标记为0).
θ
\theta
θ的优化:
arg
min
ϕ
E
z
∈
p
z
l
o
g
(
1
−
D
(
G
(
z
)
)
)
\mathop{\arg\min}_{\phi}{\rm E}_{z \in p_{z}}{\rm log}(1-D(G(z)))
argminϕEz∈pzlog(1−D(G(z)))
因为第一项在
θ
\theta
θ无关。
总结:由于G的损失函数/代价函数直接取为了D的代价函数的负数
,因此G的min L转max L (==min V), G和D的优化值函数V中实现了统一, 该函数i形式在理论分析是非常方便,但是它存在的一个严重的问题:见下面。
实际中更加有效的损失函数形式
G的损失函数/代价函数直接取为了D的代价函数的负数存在的弊端
是:一开始G比较弱(产生样本的质量较差),这样的话D会一比较高的置信度将其判别为假样本,即
D
ϕ
D_{\phi}
Dϕ(x) -> 0, 这样会导致在更新G的参数时由于梯度趋近于0而得不到更新。具体数学分析如下:
D
=
s
(
o
)
D=s(o)
D=s(o)
由于D的输出是sigmoid (简记为s)激活的,s(o)->0, 因此
∂
D
∂
ϕ
=
s
(
o
)
{
1
−
s
(
o
)
}
∂
o
∂
ϕ
→
0
\frac{\partial D}{\partial \phi}=s(o)\{1-s(o)\}\frac{\partial o}{\partial \phi} \rightarrow 0
∂ϕ∂D=s(o){1−s(o)}∂ϕ∂o→0, o为激活前的输出。
因此实际中: 不采用G的损失函数/代价函数直接取为了D的代价函数的负数,而是 最小化D做出正确判断的对数概率,基于此实际中常用的优化形式为:
arg
max
ϕ
1
2
{
E
x
∈
p
d
a
t
a
l
o
g
D
(
x
)
+
E
z
∈
p
z
l
o
g
(
1
−
D
(
G
(
z
)
)
)
}
\mathop{\arg\max}_{\phi}\frac{1}{2}\{{\rm E}_{x \in p_{data}}{\rm log}D(x)+{\rm E}_{z \in p_{z}}{\rm log}(1-D(G(z)))\}
argmaxϕ21{Ex∈pdatalogD(x)+Ez∈pzlog(1−D(G(z)))}
arg
min
θ
−
1
2
E
z
∈
p
z
l
o
g
D
(
G
(
z
)
)
\mathop{\arg\min}_{\theta}\frac{-1}{2}{\rm E}_{z \in p_{z}}{\rm log}D(G(z))
argminθ2−1Ez∈pzlogD(G(z))
这样一来,就可以避免上述问题
, 因为: log(s)的倒数为
1
s
(
o
)
\frac{1}{s(o)}
s(o)1, 根据链式求导法则,
s
(
o
)
{
1
−
s
(
o
)
}
⋅
1
s
(
o
)
s(o)\{1-s(o)\} \cdot \frac{1}{s(o)}
s(o){1−s(o)}⋅s(o)1,
s
(
o
)
s(o)
s(o)被抵消掉了。
极大似然版本的损失函数
arg
min
θ
−
1
2
E
z
∈
p
z
e
x
p
{
s
−
1
(
D
(
G
(
z
)
)
)
}
\mathop{\arg\min}_{\theta}\frac{-1}{2}{\rm E}_{z \in p_{z}}exp\{s^{-1}(D(G(z)))\}
argminθ2−1Ez∈pzexp{s−1(D(G(z)))}
arg
max
ϕ
1
2
{
E
x
∈
p
d
a
t
a
l
o
g
D
(
x
)
+
E
z
∈
p
z
l
o
g
(
1
−
D
(
G
(
z
)
)
)
}
\mathop{\arg\max}_{\phi}\frac{1}{2}\{{\rm E}_{x \in p_{data}}{\rm log}D(x)+{\rm E}_{z \in p_{z}}{\rm log}(1-D(G(z)))\}
argmaxϕ21{Ex∈pdatalogD(x)+Ez∈pzlog(1−D(G(z)))}
G的更新中,优化该似然函数与优化以下KL散度是完全等价的:
arg
min
θ
D
K
L
(
p
d
a
t
a
(
x
)
∣
∣
p
m
o
d
e
l
(
x
;
θ
)
)
\mathop{\arg\min}_{\theta}D_{KL}(p_{data}(x)||p_{model}(x; \theta))
argminθDKL(pdata(x)∣∣pmodel(x;θ))
其中
p
d
a
t
a
p_{data}
pdata为数据的真实分布(未知),
p
m
o
d
e
l
p_{model}
pmodel为模型隐式定义的分布,
优化的本质
G实际上隐式地定义了一个分布,记为 p m o d e l p_{model} pmodel, 并且由于G是通过神经网络实现的,换句话说,G相当于一个通用的近似器(universarial approximator),可以逼近/近似任何分布,根据 极大似然版本的损失函数, 最终G隐式定义的分布无限逼近数据的真实分布 p d a t a p_{data} pdata, 准确来说:GAN的优化过程是在最小化 p m o d e l p_{model} pmodel和 p d a t a p_{data} pdata之间的Jensen-Shannon divergence。
对抗还是协作?
对抗不是目的,对抗只是一种借助对方来提升自己的方式,最理想的情况是:G和D势均力敌,这样游戏才能继续下去,双方各自的提升也是最大的,否则,一旦一方太弱,则游戏无法继续,这实际上也是GAN训练比较困难的地方。
对抗的一面:D想要提升其鉴别真假样本的能力,而G想要生成更真的假样本来欺骗D。
协作的一面:G和D本身是相互独立的,各自的代价函数都依赖于对方的参数但是却又无法控制对方的参数,G和D在更新时都是借助对方来更新自己,换句话说借助了对方shared的信息。
注
:有一个概念叫做 域对抗,一般与多任务学习/多域学习相结合,目的很明显:使得学习到的feature在informative(对于目标任务而言)的同时更加general (在多域学习里面叫做cross-domain, 在任务学习里面叫做cross-task), 相比之下,域对抗里面的对抗更加贴近字面意思,因为域分类的损失和主任务损失在feature extractor层真的会产生对抗(trade-off)。
相关资源
References
1.Generative Adversarial Networks, NIPS, 2016
2.Generative adversarial networks,NIPS, 2014
总结
纯手工敲的,太累了。。。有时间再续。