值此岁末之际,又逢DL浪潮之巅,深觉应该整理下看过的一些 papers,写写自己粗鄙的见解,第一篇就从目前热门的 GAN 开始吧
摘要
GAN 是一个框架 ,有两个 model,一个是用于刻画数据分布的生成式模型 G ; 另一个是判别模型 D ,用于判断数据是从 G 生成的还是从训练样本中采样的。理所应当的, G 模型要让 D 模型相信数据是从自身产生的,因此目标就是 "maximize the probability of D making a mistake" 。作为一个判别模型,D 的目标更明确,就是让模型的判别误差最小。所以,GAN 框架就是一个 minmax two-player game。模型就是函数,对于任意函数 G 、 D , 在 G 覆盖所有的训练数据的情况下,并且 D = 1/2 的时候,minmax 目标函数存在唯一解。也就是说 GAN 的最优化的目标是让判别模型 D 失去了分类能力,证明过程不复杂,稍后分解。Goodfellow 称,我的框架很给力,不需要马尔科夫链、近似推断等方法,只需要两个 MLP 加上 bp , Mission Success !
框架
为了能够直观的看出 GAN 的框架,抠一张图来说明下。
左边就是没有加入对抗的训练过程,判别模型 D 希望能干尽量拟合训练数据的分布。右边就是加入了对抗 G 的训练过程,G 学习 加入 noise z 后的数据分布,x = G( z; theta(G) ) 让 D 判别 x 的来源,有了一个框架图,是不是 so easy 呢。
优化目标
再来看看 GAN 的目标函数是啥,继续截图。。。
训练方式,其实训练 D 就类似于最大似然的过程,用于估计 P ( Y = y | x ) , Y 表示 x 的来源,由于单独训练 D 会导致过拟合,因此采取 k 个 batch 训练 D, 一个 batch 训练 G,具体过程如下:
收敛证明
刚才说到 min max 目标函数的收敛问题,也就是证明这个公式的收敛下界,首先,固定 G, 先找到 Dmax 为 D’ , 利用 D' , 求 G 。那 Dmax 是啥呢?
先抛出结论
证明,先把
展开,得到
由于,y -> alog( y) + blog(1 - y ) 在 [0,1] 取得最大值为 a/a+b .
所以,将 pdata 视为a,pg 视为 b , D(x) 的最大值为 pdata / pdata + pg ; 因此 V(G, D) 变成了 C(G),下一步是求 min C(G)
再次抛出结论,C(G) 当且仅当 pg = pdata 的时候取得唯一解 -log4 。怎么证明 ?
将 C(G) 结合 KL 离散度进行变换,得到
再由 KL 离散度变为 Jensen–Shannon 离散度
由于 两个概率分布的 Jensen–Shannon 离散度总是非负的,当两个分布相同的时候为0,所以呢 ,当 pg = pdata 的时候 C(G) 取得最小值,为 -log4,也就是文章开始说的 minmax 的唯一解。
到此,证明过程就结束了。
总结
推导完之后,也大概能够发现,在 GAN 框架的训练过程中 D model 是变得越来约弱的,从最后的收敛条件也能够看出来,D = 1/2 , 也就是说 D 彻底失去的分类能力。G model 才是最终需要的。
那么,在一番训练之后,我们到底从 G 模型中得到了什么呢? 我理解是现实世界中的真实数据是远多于训练数据的,通过训练数据直接学习出来的生成模型在真实数据中的拟合结果存在gap,通过对抗学习的框架,
在训练过程中不断加入干扰,用于模拟真实数据,同时用一个判别模型进行判断真伪,从而使得生成模型泛化能力更强。当然还是有很多限制条件的,比如 G 必须是可导的,z 的维度一般要高于 x ; etc .
最后,本文到此结束,果然不出所料的水,能有兴趣看到这里的也不多了。。。
References
摘要
GAN 是一个框架 ,有两个 model,一个是用于刻画数据分布的生成式模型 G ; 另一个是判别模型 D ,用于判断数据是从 G 生成的还是从训练样本中采样的。理所应当的, G 模型要让 D 模型相信数据是从自身产生的,因此目标就是 "maximize the probability of D making a mistake" 。作为一个判别模型,D 的目标更明确,就是让模型的判别误差最小。所以,GAN 框架就是一个 minmax two-player game。模型就是函数,对于任意函数 G 、 D , 在 G 覆盖所有的训练数据的情况下,并且 D = 1/2 的时候,minmax 目标函数存在唯一解。也就是说 GAN 的最优化的目标是让判别模型 D 失去了分类能力,证明过程不复杂,稍后分解。Goodfellow 称,我的框架很给力,不需要马尔科夫链、近似推断等方法,只需要两个 MLP 加上 bp , Mission Success !
框架
为了能够直观的看出 GAN 的框架,抠一张图来说明下。
左边就是没有加入对抗的训练过程,判别模型 D 希望能干尽量拟合训练数据的分布。右边就是加入了对抗 G 的训练过程,G 学习 加入 noise z 后的数据分布,x = G( z; theta(G) ) 让 D 判别 x 的来源,有了一个框架图,是不是 so easy 呢。
优化目标
再来看看 GAN 的目标函数是啥,继续截图。。。
训练方式,其实训练 D 就类似于最大似然的过程,用于估计 P ( Y = y | x ) , Y 表示 x 的来源,由于单独训练 D 会导致过拟合,因此采取 k 个 batch 训练 D, 一个 batch 训练 G,具体过程如下:
- 分 k 个 batch, 每个 batch 从 pg 分布中采样 { z1, z2, z3, ... , zm } , 从 pdata 分布中采样 { x1, x2, x3, .., xm }, pdata 反应训练数据的分布,pg 是训练数据加入噪音后的分布固定 G, 对 目标函数进行梯度下降,更新 D 的参数
- k 个 batch 训练完成后,再从 pg 中取一个 batch , { z1, z2, z3, ... , zm },更新 G 的参数,G 目标是最小化 log(1-D(G(z))) , 也可以看成最大化 log(D(G(z)))
收敛证明
刚才说到 min max 目标函数的收敛问题,也就是证明这个公式的收敛下界,首先,固定 G, 先找到 Dmax 为 D’ , 利用 D' , 求 G 。那 Dmax 是啥呢?
先抛出结论
证明,先把
展开,得到
由于,y -> alog( y) + blog(1 - y ) 在 [0,1] 取得最大值为 a/a+b .
所以,将 pdata 视为a,pg 视为 b , D(x) 的最大值为 pdata / pdata + pg ; 因此 V(G, D) 变成了 C(G),下一步是求 min C(G)
再次抛出结论,C(G) 当且仅当 pg = pdata 的时候取得唯一解 -log4 。怎么证明 ?
将 C(G) 结合 KL 离散度进行变换,得到
再由 KL 离散度变为 Jensen–Shannon 离散度
由于 两个概率分布的 Jensen–Shannon 离散度总是非负的,当两个分布相同的时候为0,所以呢 ,当 pg = pdata 的时候 C(G) 取得最小值,为 -log4,也就是文章开始说的 minmax 的唯一解。
到此,证明过程就结束了。
总结
推导完之后,也大概能够发现,在 GAN 框架的训练过程中 D model 是变得越来约弱的,从最后的收敛条件也能够看出来,D = 1/2 , 也就是说 D 彻底失去的分类能力。G model 才是最终需要的。
那么,在一番训练之后,我们到底从 G 模型中得到了什么呢? 我理解是现实世界中的真实数据是远多于训练数据的,通过训练数据直接学习出来的生成模型在真实数据中的拟合结果存在gap,通过对抗学习的框架,
在训练过程中不断加入干扰,用于模拟真实数据,同时用一个判别模型进行判断真伪,从而使得生成模型泛化能力更强。当然还是有很多限制条件的,比如 G 必须是可导的,z 的维度一般要高于 x ; etc .
最后,本文到此结束,果然不出所料的水,能有兴趣看到这里的也不多了。。。
References
[Goodfellow and others 2014] Goodfellow, I., et al. Generative adversarial nets. In NIPS, 2672–2680
[Goodfellow, Bengio, and Courville 2016] Goodfellow, I.;Bengio, Y.; and Courville, A. 2016. Deep learning. 2015.