GAN生成对抗网络(一)

GAN

GAN(Generative Adversarial Networks)是两个网络的的组合, 一个网络生成模拟数据, 另一个网络判断生成的数据是真实的还是模拟的。生成模拟数据的网络要不断优化自己让判别的网络判断不出来, 判别的网络也要优化自己让自己判断得更准确。 二者关系形成对抗博弈,因此叫对抗神经网络(生成对抗网络)。实验证明, 利用这种网络间的对抗关系所形成的网络, 在无监督及半监督领域取得了很好的效果, 可以算是用网络来监督网络的一个自学习过程。在GAN发明之前,变分自编码器被认为是理论完美、实现简单,使用神经网络训练起来很稳定, 生成的图片逼近度也较高, 但是人类还是可以很轻易地分辨出真实图片与机器生成的图片。

GAN原理

生成对抗网络包含了 2 个子网络: 生成网络(Generator, G)和判别网络(Discriminator,D), 其中生成网络负责学习样本的真实分布,判别网络负责将生成网络采样的样本与真实样本区分开来。

GAN架构图

GAN网络结构

生成网络 G(𝐳) 生成网络 G 和自编码器的 Decoder 功能类似, 从先验分布𝑝_𝑧(∙)中采样隐藏变量𝒛 \sim 𝑝_𝑧(∙),通过生成网络 G 参数化的𝑝_𝑔(𝒙|𝒛)分布, 获得生成样本𝒙 \sim 𝑝_𝑔(𝒙|𝒛),如下图所示。 其中隐藏变量𝒛的先验分布𝑝_𝑧(∙)可以假设属于某中已知的分布,比如多元均匀分布𝑧 \sim 𝑈(−1,1)

生成网络

𝑝_𝑔(𝒙|𝒛)可以用深度神经网络来参数化, 如下图所示, 从均匀分布𝑝_𝑧(∙)中采样出隐藏变量𝒛, 经过多层转置卷积层网络参数化的𝑝_𝑔(𝒙|𝒛)分布中采样出样本𝒙_𝑓

转置卷积构成的生成网络

判别网络 D(𝒙) 判别网络和普通的二分类网络功能类似,它接受输入样本𝒙,包含了采样自真实数据分布𝑝_𝑟(∙)的样本𝒙_𝒓 \sim 𝑝_𝑟(∙),也包含了采样自生成网络的假样本𝒙_𝒇 \sim 𝑝_𝑔(𝒙|𝒛)𝒙_𝒓𝒙_𝒇共同组成了判别网络的训练数据集。判别网络输出为𝒙属于真实样本的概率P(𝒙为真|𝒙),我们把所有真实样本𝒙_𝒓的标签标注为1,所有生成网络产生的样本𝒙_𝒇标注为0, 通过最小化判别网络预测值与标签之间的误差来优化判别网络参数。

生成网络和判别网络

GAN的损失函数

我们的目标很明确, 既要不断提升判断器辨别真假图像样本的能力, 又要不断提升生成器生成更加逼真的图像,使判别器越来越难判别。
对于判别网络 D,它的目标是能够很好地分辨出真样本𝒙_𝑟与假样本𝒙_𝑓。即最小化图片的预测值和真实值之间的交叉熵损失函数:

\min _{\theta} \mathcal{L}=\text {Crossentropy}\left(D_{\theta}\left(\boldsymbol{x}_{r}\right), y_{r}, D_{\theta}\left(\boldsymbol{x}_{f}\right), y_{f}\right)

其中𝐷_𝜃(𝒙_𝑟)代表真实样本𝒙_𝑟在判别网络𝐷_𝜃的输出, 𝜃为判别网络的参数集, 𝐷_𝜃(𝒙_𝑓)为生成样本𝒙_𝑓在判别网络的输出, 𝑦_𝑟𝒙_𝑟的标签,由于真实样本标注为真,故𝑦_𝑟 = 1𝑦_𝑓为生成样本的𝒙_𝑓的标签,由于生成样本标注为假,故𝑦_𝑓 = 0。 根据二分类问题的交叉熵损失函数定义:

\mathcal{L}=-\sum_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)-\sum_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right)

因此判别网络的优化目标是:

\theta^{*}=\operatorname{argmin}_{\theta} \mathcal{L}

去掉\mathcal{L}中的负号,把\min_{\theta} \mathcal{L}问题转换为\max_{\theta} \mathcal{L}问题,并写为期望形式:

\theta^{*}=\operatorname{argmax} \mathbb{E}_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)+\mathbb{E}_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right)

对于生成网络G(𝒛),我们希望𝒙_𝑓 = 𝐺(𝒛)能够很好地骗过判别网络 D, 假样本𝒙_𝑓在判别网络的输出越接近真实的标签越好。也就是说,在训练生成网络时, 希望判别网络的输出𝐷(𝐺(𝒛))越逼近 1 越好,此时的交叉熵损失函数:

\min _{\phi} \mathcal{L}=\text { Crossentropy }\left(D\left(G_{\phi}(z)\right), 1\right)=-\log D\left(G_{\phi}(z)\right)

\min_{\phi} \mathcal{L}问题转换为\max_{\phi} \mathcal{L}问题,并写为期望形式:

\phi^{*}=\underset{\phi}{\operatorname{argmax}} \mathbb{E}_{\mathbf{z} \sim p_{\mathbf{z}}(\cdot)} \log D\left(G_{\phi}(\mathbf{z})\right)

再等价转化为:

\phi^{*}=\underset{\phi}{\operatorname{argmin}} \mathcal{L}=\mathbb{E}_{\mathbf{z} \sim p_{\mathbf{z}}(\cdot)} \log \left[1-D\left(G_{\phi}(\mathbf{z})\right)\right]

GAN的优化过程不像通常的求损失函数的最小值, 而是保持生成与判别两股力量的动态平衡。 因此, 其训练过程要比一般神经网络难很多。

统一损失代价函数

把判别网络的目标和生成网络的目标合并,写成min-max形式:
\begin{aligned} \underset{\phi}{\operatorname{min}} \underset{\theta}{\operatorname{max}} \mathcal{L}(D, G)&=\mathbb{E}_{x_{r} \sim p_{r}(\cdot)} \log D_{\theta}\left(x_{r}\right)+\mathbb{E}_{x_{f} \sim p_{g}(\cdot)} \log \left(1-D_{\theta}\left(x_{f}\right)\right) \\ &=\mathbb{E}_{x \sim p_{r}(\cdot)} \log D_{\theta}(x)+\mathbb{E}_{z \sim p_{z}(\cdot)} \log \left(1-D_{\theta}\left(G_{\phi}(z)\right)\right) \end{aligned}
原GAN论文中:
\min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]

这里为了好理解,把各个符号梳理的更清晰了,注意符号和网络参数的对应。
理想情况下D会有更精确的鉴别真伪数据的能力,经过大量次数的迭代训练会使G尽可能模拟出以假乱真的样本, 最终整个GAN会达到所谓的纳什均衡, 即D对于生成样本和真实样本鉴别结果为正确率和错误率各占50%。下面具体从理论层面来推导。


纳什均衡

现在从理论层面进行分析, 通过博弈学习的训练方式,生成器 G 和判别器 D 分别会达到什么状态。 具体地,来看以下 2 个问题:

  • 问题1:固定生成器 G, 判别器D 会收敛到什么最优状态D^*?
  • 问题2:在 鉴别器 D 达到最优状态𝐷^∗后, G 会收敛到什么状态?

首先我们通过𝒙_𝒓 \sim 𝑝_𝑟(∙)一维正态分布的例子给出一个直观的解释,如下图所示,黑色虚线曲线代表了真实数据的分布𝑝_𝑟(∙), 为某正态分布N(𝜇, 𝜎^2), 绿色实线代表了生成网络学习到的分布𝒙_𝒇 \sim 𝑝_𝑔(∙), 蓝色虚线代表了判别器的决策边界曲线, 图中(a)(b)(c)(d)分别代表了生成网络的学习轨迹。在初始状态,如图 (a)所示, 𝑝_𝑔(∙)分布与𝑝_𝑟(∙)差异较大,判别器可以很轻松地学习到决策边界,即图(a)中的蓝色虚线,将来自𝑝_𝑔(∙)的采样点判定为 0, 𝑝_𝑟(∙)中的采样点判定为 1。 随着生成网络的分布𝑝_𝑔(∙)越来越逼近真实分布𝑝_𝑟(∙),判别器越来越困难将真假样本区分开,如图 (b)(c)所示。 最后,生成网络性能达到最佳,学习到的分布𝑝_𝑔(∙) = 𝑝_𝑟(∙),此时从生成网络中采样的样本非常逼真, 判别器无法区分,即判定为真假样本的概率均等,如图(d)所示。

直观解释

问题1:判别器D状态

固定生成器G的参数\phi,判别器D最佳能达到的状态:
D^{*}(\boldsymbol{x})=\frac{p_{r}(\boldsymbol{x})}{p_{r}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}

证明:对于给定的生成器G,要让判别器D达到最优,我们的目标是最大化损失函数,其积分形式为:
\begin{aligned} \mathcal{L}(D, G) &=\int_{x} p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x})) d x+\int_{z} p_{\boldsymbol{z}}(\boldsymbol{z}) \log (1-D(G(\boldsymbol{z}))) d z \\ &=\int_{x} p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x})) d x \end{aligned}

对于给定的 G,真实分布始终是固定的,所以p_r(x)p_g(x)都是定值,于是对于判别器D,要找出
f_{\theta}=p_{r}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x}))

的最大值,其中\theta是判别器网络参数,对于函数f(x)=alog(x)+blog(1-x),x \in (0,1),a > 0, b > 0,不难得到f(x)\frac{a}{a+b}处取得极大值且是最大值。因此可得f_{\theta}的极值点也为
\theta^* s.t. D^{*}(\boldsymbol{x})=\frac{p_{r}(\boldsymbol{x})}{p_{r}(\boldsymbol{x})+p_{g}(\boldsymbol{x})}

故判别器 G 能达到的最佳状态为定理中给出的式子。

问题2:生成器G状态

现在考虑第二个问题。
JS 散度(Jensen–Shannon divergence)

D_{J S}(p \| q)=\frac{1}{2} D_{K L}\left(p \| \frac{p+q}{2}\right)+\frac{1}{2} D_{K L}\left(q \| \frac{p+q}{2}\right)

对于KL散度,D_{KL}(p,q) \neq D_{KL}(q,p),是不对称的。但JS散度是对称的。


D达到D^*时,考虑此时p_rp_gJS散度:
\begin{aligned} D_{J S}\left(p_{r} \| p_{g}\right)=& \frac{1}{2} D_{K L}\left(p_{r} \| \frac{p_{r}+p_{g}}{2}\right)+\frac{1}{2} D_{K L}\left(p_{g} \| \frac{p_{r}+p_{g}}{2}\right) \\ =& \frac{1}{2}\left(\log 2+\int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x\right)+ \frac{1}{2}\left(\log 2+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x\right) \\ =& \frac{1}{2}\left(\log 4+\int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x + \int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x \right) \end{aligned}
考虑到判别网络到达𝐷^∗时,此时的损失函数为:
\begin{aligned} \mathcal{L}\left(G, D^{*}\right)= &\int_{x} p_{r}(x) \log \left(D^{*}(x)\right)+p_{g}(x) \log \left(1-D^{*}(x)\right) d x \\ =& \int_{x} p_{r}(x) \log \frac{p_{r}(x)}{p_{r}+p_{g}(x)} d x+\int_{x} p_{g}(x) \log \frac{p_{g}(x)}{p_{r}+p_{g}(x)} d x \end{aligned}

于是我们可以得到:
\mathcal{L}\left(G, D^{*}\right)=2 D_{J S}\left(p_{r} \| p_{g}\right)-2 \log 2

对于生成网络G而言,目标是最小化损失函数,由于D_{J S}\left(p_{r} \| p_{g}\right) \geq 0,因此\mathcal{L}(𝐺, 𝐷^∗)取得最小值仅在𝐷_{𝐽𝑆}(𝑝_𝑟||𝑝_𝑔) = 0时(此时𝑝_𝑔 = 𝑝_𝑟),\mathcal{L}(𝐺, 𝐷^∗)取得最小值:
\mathcal{L}(𝐺, 𝐷^∗)=-2log2

此时生成网络达到G^*状态是:
p_g=p_r

G^∗的学到的分布𝑝_𝑔与真实分布𝑝_𝑟一致,网络达到纳什均衡点,此时:
D^{*}(x)=\frac{p_{r}(x)}{p_{r}(x)+p_{g}(x)}=0.5

即对于生成器生成的图像有0.5的概率被判定为真,也有0.5的概率被判定为假。

GAN训练过程

算法过程

参考资料

GoodfellowIan, Pouget-AbadieJean, MirzaMehdi, XuBing, Warde-FarleyDavid, OzairSherjil, . . .
BengioYoshua. (2014). Generative Adversarial Nets

Radford, Alec, Luke Metz, and Soumith Chintala. (2015).Unsupervised representation learning with deep convolutional generative adversarial networks.

https://www.jianshu.com/p/058fd15cfa52

https://zhuanlan.zhihu.com/p/83476792

深度学习Tensorflow2.0+Github项目

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342