生成对抗网络(GAN )的原理前言1 )什么是生成对抗网络)1)什么是GAN2)生成任务3 ) gan的数学描述2 )各种GAN1.DCGAN(1)1) DCGAN网络结构) 2 2 .条件生成对抗网络(CGAN )1)输入CGAN )2)损失函数)3) ColorGAN 3)3.改善生成对抗网络)1)传统的GAN )2) Wasserstein GAN(3)3) iin
前言
这几天,生成对抗网络(GAN )进入了主题。 主要研究了等待的故事 zldhn着写的《深入浅出GAN生成对抗网络原理剖析与Tensorflow实践》。 在这里整理GAN的基础和必要的东西。
一)对抗网络(什么是GAN )1.什么是GAN ) GAN网络结构由生成器和判别器组成。 在训练中,发生器g不断产生假货,识别器d识别发生器g产生的结果是真的还是假的,两个网络相互对抗。生成器G努力生成出欺骗过判别器D的赝品,而判别器D努力识别出生成器G生成的赝品,往复循环,从而训练彼此
2 .生成任务GAN主要用于生成任务,生成任务是通过将随机噪声输入生成模型,生成模型将这些噪声映射到真实数据的分布上。 以图像生成为例,我们手里有很多真实图片数据。 这些数据存在于高维空间中,特定的概率分布中。 我们用GAN训练3358www.Sina.com
3 .在GAN的数学描述元论文中,假设用于生成的噪声分布为pz(z ) pz(z ) pz ) pz ),实际数据分布为px ) x ) p_x ) px ),生成器和鉴别器分别为g和d
d(x )表示x由实际数据衍生的分布,理想地说,d ) x )=1,LOGD(x )=0。 如果鉴别器不是理想的,则d(x )的输出越小,logD(x ) x )越小。 g(z )表示噪声通过生成器后生成的样本,d(g ) z ) )是识别器识别生成的样本为真样本的概率,理想情况下该值为0,但性能越差,d ) g ) z )越大总之,后两个期望之和越大,识别器的识别能力越好。 如果观察评价函数v(g,d )之前的min/max,就会明白。 最终目标是寻求外面的minG,g的目标是将v最小化,以假乱真。 嵌套在内部的maxD表示,d被赋予g时,将v,也就是被赋予的生成器最大化,识别能力最高的识别器。
)2)各类GAN 1.DCGAN与原始GAN相比,DGGAN的主要区别在于发生器和鉴别器使用的是深层卷积网络。
)1) DCGAN网络结构
)2) DCGAN进行了以下改进)1)生成器和判别器使用阶梯滤波器代替池化层,加快模型的收敛速度,但会降低网络的稳定性
(2)生成器和判别器使用Batch Normalization加速模型的收敛,避免模型的过拟合
)3)生成器的最后一层使用tanh作为激活函数,其余层使用relu作为激活函数
)4)在判别器的所有层上使用Leaky ReLU作为激活函数
)3)生成模型
随着网络的深入,各层网络的参数更新后输出就会发生变化,层重叠会引起上层不断重新计算参数以适应下层变化的现象,称为ICS现象
)4) BN的优势BN可以缓解ICS问题,训练网络可以使用更大的学习速度,加快网络的收敛
BN可以减少梯度爆炸和梯度色散问题
BN减少了训练网络时正则化的必要性
BN的核心是:
BN操作保证神经网络生成的图片的概率分布会逐渐的往真实的图片的概率分布靠近有“伸缩不变性”
BN确保了
神经网络中输入数据具有“伸缩不变性”
(5) DCGAN的损失函数与训练过程
判别器的损失:
(1)判别器给真实图片打的分与其期望分数(1)的差距D_L1
(2)判别器给生成图片打的分与其期望分数(0)的差距D_L2
(3)则生成器的总损失为 D_L1 + D_L2
生成器的损失:
(1)生成图片与真实图片的差距
(2)实际上,将该差距转化为
生成器期望判别器给自己生成图片打多少分与实际判别器打多少分的差距
2.条件生成对抗网络(CGAN) (1)CGAN的输入
条件生成网络(CGAN)与DCGAN一个重要差别是,CGAN给生成器的输入除了一个随机噪声还多了一个约束条件。
(2)损失函数
(3)ColorGAN
colorGAN是一个经典的CGAN,ColorGAN的训练数据是彩色图片,
数据准备时,将彩色图片通过自适应阀值的方法获得对应的线条图片做为约束条件,然后再使用彩色图片的blur滤波的模糊图片作为颜色噪声。
ColorGAN还可用于去除图片的马赛克,将原图片数据随机打码,打码的图片作为约束条件,然后通过blur滤波生成全模糊的图像作为噪声,就可以进行训练了。
ColorGAN与DCGAN还有一个较大不同点是,
ColorGAN的生成器的网络结构使用了U型网络
3.改进生成对抗网络 (1)传统GAN 传统的GAN,本质是最小化两个概率分布的 JS散点使用JS散度表示概率分布距离,需要满足分布之间有重叠部分的要求,在高维环境中,GAN通常重叠部分可忽略的当两分布没有任何重叠或重叠可忽略,JS散度恒为log2,梯度为恒0,会产生梯度消失问题可以再开始的训练中,给输入叠加一个目标分布,使得两分布存在重叠部分,然后再缓慢去掉重叠,同时,也不要把判别器训练的太好传统GAN会存在模式崩溃问题,直观表现是生成器生成的样本多样性不足 (2) Wasserstein GAN
Wasserstein GAN 是为解决传统GAN 遇到的梯度消失,训练梯度不稳定以及模式崩溃而提出的。
其本质就是用Wasserstein距离(EM距离)来替代JS散度。
GAN中使用EM距离,是在判别器的目标函数加一个 1-Lipschitz约束条件,如下图
Lipschitz函数定义如下
∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ < = K ∣ ∣ x 1 − x 2 ∣ ∣ ||f(x_1)-f(x_2)|| <= K||x_1-x_2|| ∣∣f(x1)−f(x2)∣∣<=K∣∣x1−x2∣∣
当K = 1 时,Lipschitz函数就叫1-Lipschitz
WGAN论文没有直接解决如何使得判别器的目标函数服从1-Lipschitz约束,而是采用限制的方式是目标函数平滑,这种方式为 Weight Clipping
WGAN的改动有:
判别器最后一层去掉了sigmoid生成器与判别器的损失不取log训练判别器时,每次参数更新后的值限制在一个范围(-c,c)不使用基于动量的梯度优化算法,改为RMSProp 或SGD (3) Improved WGAN(WGAN-GP)
WGAN 使用了Weight Clipping,这会很容易会导致判别器的参数要么取极大值要么取极小值,从而导致判别器变成一个二值化网络,丧失了原本强大的拟合能力
同时Weight Clipping的限制范围若设得过大,可能会参数梯度爆炸问题,过小也可能会产生梯度消失问题
为此,WGAN-GP提出了gradient penalty(梯度惩罚)
在 WGAN或WGAN-GP中,通常是先训练K次判别器,再训练1次生成器
(4) SN GAN
gradient genalty只对生成数据分布与真实数据分布之间的空间做梯度惩罚,无法对整个空间的数据做惩罚,从而导致graident penalty正则化方式不稳定。
SN GAN 使用Spectral Normalization(光谱标准化),具有一下优势
以SN的方式让判别器满足Lipschitz约束,Lipschit的K是唯一要调的超参数整体上,SN-GAN只改变判别器权值矩阵的最大奇异值,从而最大限度的保留原始信息具体训练模型时,power iteration可加快训练速度 三:一些具体的GAN结构 1.循环一致性
此类型的,有cycleGAN,StarGAN,XGAN…
2.渐进增强式生成对抗网络
StackGAN
PGGAN
3.文本转图像
这一使用CGAN结构的GAN,输入的约束条件
可以使用Skip-Thought 来构建句子级别的语义向量来作为约束条件
后记
本文许多内容是《深入浅出GAN生成对抗网络原理剖析与Tensorflow实践》摘抄的内容
同时,也用paddlepaddle复现了 DCGAN和ColorGAN。
开源链接如下:
https://gitee.com/lingcb/dcgan
https://gitee.com/lingcb/color-gan