生成对抗网络GAN


1. GAN的主要思想


概述

GAN训练了两个网络

一个是生成器(generative)一个是判别器(discriminative)

生成器负责学习数据分布

判别器负责区分数据到底是由生成器产生还是由真实数据产生


生成器

生成器的输入数据是一组随机噪声X(简单理解就是一个随机向量, 或者说是随机数种子)

生成器去学习一个映射F, 将随机噪声X映射为一个结果Y, 这个结果就是我们想要生成的图片

也就是通过学习来的F, 生成器能将一个随机向量的空间映射到训练数据的分布上, 通过一个随机向量能通过映射F生成一个符合训练数据分布的数据


判别器

判别器的输入数据是生成器的输出Y或是训练数据X, 判别器是一个分类器, 判断输入数据是来自生成器还是训练数据




2. GAN的训练目标


训练目标(人话)

生成器尽量骗过判别器

判别器尽量区分数据来源

理想模型

生成器完全学习到了训练数据的分布

判别器输出恒为1/2




3. GAN的损失函数


总损失函数(泛函functional)

m i n G    m a x D    V ( D ,   G ) = E x [   l o g D ( x )   ]   +   E z [   l o g (   1 − D ( G ( z ) )   )   ] . min_G\ ~max_D\ ~V(D,~G) = E_{x}[~logD(x)~]~ + ~E_z[~log(~1-D(G(z))~)~]. minG  maxD  V(D, G)=Ex[ logD(x) ] + Ez[ log( 1D(G(z)) ) ].


符号解释

D:判别器

G:生成器

x:来自训练数据的样本数据

z: 随机噪声

说明:

对于单个数据输入

输入数据来自训练数据x ,则D(x) = 1

输入数据来自生成器G( z ),则D( G( z ) ) = 0




判别器D的优化目标

m a x D    V ( D )   =   E x [   l o g ( D ( x ) )   ]   +   E z [   l o g (   1 − D ( G ( z ) )   )   ] max_D~~V(D) ~=~ E_x[~log(D(x))~]~+~E_z[~log(~1-D(G(z))~)~] maxD  V(D) = Ex[ log(D(x)) ] + Ez[ log( 1D(G(z)) ) ]

解释:

​ 判别器越完美, 越能区分数据来源, 则第一个期望越接近0, 第二个期望越接近0

​ 完美的判别器V(D)优化为0




生成器G的优化目标

m i n G V ( G )   =   E z [   l o g (   1 − D ( G ( z ) )   )   ] min_G V(G)~=~E_z[~log(~1-D(G(z))~)~] minGV(G) = Ez[ log( 1D(G(z)) ) ]

解释:

​ 因为总损失函数中, 第一个期望不含G, 所以只用考虑第二个期望

​ 生成器越完美, 越能骗过判别器, 第二个期望越接近负无穷

​ 完美的生成器V(G)优化为负无穷




4. GAN的训练过程

在这里插入图片描述

算法过程

在这里插入图片描述




训练过程:

在一次迭代里

先采随机噪声, 再采集训练数据

先训练k轮判别器D ,再训练生成器




解释:

k是一个超参数,这里k是一个超参数, 不能把D训练的太好也不能太坏

梯度下降的时候是对D,G的损失函数分别进行梯度下降, 不对总损失剃度下降

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐