生成对抗网络系列—GAN

系列文章目录

======================================================
专题-生成对抗网络
第一节 GAN
第二节
第三节 生成对抗网络系列—CycleGAN
第四节 生成对抗网络系列—ACL-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{ExpdatalogDϕ(x)+Ezpzlog(1Dϕ(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ϕ21{ExpdatalogD(x)+Ezpzlog(1D(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ϕEzpzlog(1D(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){1s(o)}ϕo0, 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{ExpdatalogD(x)+Ezpzlog(1D(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θ21EzpzlogD(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){1s(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θ21Ezpzexp{s1(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{ExpdatalogD(x)+Ezpzlog(1D(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)。

相关资源

1.论文相关的现场演讲视频 https://channel9.msdn.com/events/Neural-Information-Processing-Systems-Conference/Neural-Information-Processing-Systems-Conference-NIPS-2016/Generative-Adversarial-Networks

References

1.Generative Adversarial Networks, NIPS, 2016
2.Generative adversarial networks,NIPS, 2014

总结

纯手工敲的,太累了。。。有时间再续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值