文章目录
一、Typical GAN二、WGAN三、Improved GAN (WGAN-GP)四、Conditional GAN(CGAN)五、CycleGAN六、🌟DCGAN参考文章论文连接: 必读的10篇关于GAN的论文
生成对抗网络理论基础:GAN、WGAN、Improved GAN。
一、Typical GAN
**框架结构:** 生成对抗网络由两个部分组成:生成器(Generator)和判别器(Distriminator) * 生成器:生成一个真实数据类似的数据分布(伪造数据) * 判别器:判断生成器生成的图片是真的还是假的(鉴别数据),类似于一个二分类器 在生成对抗模型框架中,有两个模型一个是生成模型G,一个判别模型D。生成器G根据隐含信息来随机生成观测数据,判别器D判别生成器生成的数据是真还是假。当判别器D判断生成器G生成了假数据后给生成器G一个惩罚,这导致生成器G被迫向“不受到”判别器D惩罚的方向进化学习,二者就构成了一个动态的博弈过程,到最后生成器G会生成出一个判别器D无法判断的数据,二者达到了纳什均衡,因此得到了所需要的生成器模型G。优化目标函数:
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z [ l o g ( 1 − D ( G ( z ) ) ) ] \min_{G}\max_{D}V(D,G)=\mathbb{E}_{x\sim p_{data}}(x)[logD(x)]+ \mathbb{E}_{z\sim p_{z}}[log(1-D(G(z)))] GminDmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz[log(1−D(G(z)))]
其中,G表示生成器,D表示判别器,data,x为真实样本的眼本空间和真实样本,z表示输入的噪声。
判别器的输出为
生成器G:
生成器G是为了生成与真实数据相差较小的数据,因此其目的是最小化目标函数,在训练G时控制判别器D保持不变,优化函数为: min G E z ∼ p z [ l o g ( 1 − D ( G ( z ) ) ) ] \min_{G}\mathbb{E}_{z\sim p_{z}}[log(1-D(G(z)))] GminEz∼pz[log(1−D(G(z)))]
若想使该函数最小, D ( G ( z ) ) ) = 1 D(G(z)))=1 D(G(z)))=1成立,意思为G希望判别器D将生成器生成的图片G(z)判别为真样本,骗过了判别器D。
判别器D:
在训练判别器D时,控制生成器G不变,更新D,优化函数为:
max D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z [ l o g ( 1 − D ( G ( z ) ) ) ] \max_{D}V(D,G)=\mathbb{E}_{x\sim p_{data}}(x)[logD(x)]+ \mathbb{E}_{z\sim p_{z}}[log(1-D(G(z)))] DmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz[log(1−D(G(z)))]
若想使该函数最大,那么每一部分最大,由于必须保证判别器的输出在[0,1]之间。所以该函数最大, D ( x ) = 1 D(x)=1 D(x)=1, D ( G ( z ) ) ) = 0 D(G(z)))=0 D(G(z)))=0。判别器希望判断出真实样本并且将生成的数据判别为假样本。
既然生成器的目标是最小化生成数据和真实数据之间的距离那么鉴别器就是最大化两者的距离,针对如何计算生成数据和真实数据之间的距离,引入了JS散度的概念来计算,事实上也可以看成是交叉熵乘一个负号。
二、WGAN
GAN,WGAN,WGAN-GP 通俗易懂的原理解释 这个博客写的很好,规避了复杂的数学公式,简单明了地介绍了三者之间的关系,值得学习。
解决了typcial GAN因为JS度量导致生成器G无法学习的问题。
使用JS的缺点:生成数据跟真实数据之间,使用JS散度去度量这两个数据之间的距离,但是无论这两个距离是什么情况,只要不重叠,JS散度一直都是Log2,只有当这两个数据重合的时候,JS散度才为0。很显然当这两个分布不重叠的时候,二分类正确率却一直为100%,没有办法区别一个好的程度这样一个过程,所以这样就显得没有实际意义。
使用推土距离Wasserstein distance代替JS散度:使得生成数据和真实数据无交集的时候不会出现像JS一样处于恒等值的方向,使得生成器会一直向好的地方发展而不是之间停止。
其中对于判别器,WGAN作出了限制即必须满足1-lipschitz的条件,该条件的目的是为了让生成数据和真实数据之间不会相差太大使得推算出来的推土机距离不会过大否则无任何意义,而WGAN中让判别器满足1-lipschitz的条件的方法其实相对较为简单如下图所示:
三、Improved GAN (WGAN-GP)
除了WGAN的权重修建✂️(weight clipping)策略以外,还有梯度惩罚策略。在损失函数中添加惩罚项。
四、Conditional GAN(CGAN)
非条件GAN模型是只向生成器输入一个数据分布,根据该数据分布进行学习。而条件GAN模型在输入一个数据分布的同时额外输入一段向量规定生成的图像包含什么特征,这就是conditional GAN。
五、CycleGAN
CycleGAN属于无监督的条件GAN,可以解决不清楚输入和输出对应关系的问题。常见到的应用是风格转换。
主要思想:训练四个网络并形成一个Cycle输入一幅图像生成另一个风格图像再让生成图像生成回原来的图像风格,这样的一个形式就是CycleGAN的主要思想,事实上它在训练四个网络包括两个生成器和两个判别器
六、🌟DCGAN
生成器
DCGAN的生成器网络结构相较于传统的GAN,DCGAN使用了卷积层代替全连接层,具有四个反卷积层,整个网络没有pooling层和上采样层,石景山使用了带步长(fractional-strided)的卷积/ 专置卷积(tansposed conv)代替了上采样,以增加训练的稳定性。
转置卷积:
需填充计算。
判别器
使用strided convolutions进行下采样。
Leaky ReLu
ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。Leaky ReLU激活函数是在声学模型()中首次提出的。以数学的方式我们可以表示为:
y = { x , x ≥ 0 x a , x < 0 y=\left\{\begin{matrix} x,x\ge 0 \\ \frac{x}{a} ,x< 0 \end{matrix}\right. y={x,x≥0ax,x<0
Tricks
在网络深层去除全连接层使用带步长的卷积代替池化在生成器的输出层使用tanh函数(生成器的输出层需要一个完整的映射所以使用tanh函数),其他层使用ReLu在判别器中使用leaky Relu激活函数除了生成器G的输出层和判别器D的输入层,其它层上都使用了Batch Normalization
,BN可以稳定学习,有助于处理初始化不良导致的训练问题
参考文章
文章
李宏毅机器学习笔记:GAN
GAN,WGAN,WGAN-GP 通俗易懂的原理解释
各种GAN原理总结及对比
激活函数ReLU、Leaky ReLU、PReLU和RReLU
图片
/towards-data-science/cgan-conditional-generative-adversarial-network-how-to-gain-control-over-gan-outputs-b30620bd0cc8