GAN、cGAN及DCGAN三者有哪些特点

GAN

生成对抗网络 (GAN) 由两个模型构成, 生成模型 G 和判别模型 D, 随机噪声 z 通过 G 生成尽量服从真实数据分布 p d a t a {p_{data}} pdata的样本 G(z), 判别模型 D可以判断出输入样本是真实数据 x 还是生成数据G(z). G 和 D 都可以是非线性的映射函数, 比如多层感知器.

GAN 核心原理的算法描述如下:
首先, 在生成器给定的情况下, 优化判别器. 判别器为一个二分类模型(可以用sigmoid函数), 训练判别器是实现最小化交叉熵(当然也可以是别的loss)的过程. E ( ⋅ ) E( \cdot ) E()为期望值的计算, x 采样于真实数据分布 p d a t a ( x ) {p_{data}}(x) pdata(x), z采样于先验分布 p z ( z ) {p_z}(z) pz(z).生成器为了学习数据 x 的分布, 由先验噪声分布 p z ( z ) {p_z}(z) pz(z)构建了一个映射空间 G ( z ; θ d ) G(z;{\theta _d}) G(z;θd), 对应的判别器映射函数为 D ( x ; θ d ) D(x;{\theta _d}) D(x;θd) , 输出一个标量表示 x 为真实数据的概率.
(1) min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {E_{x \sim {p_{data}}(x)}}[\log D(x)] + {E_{z \sim {p_z}(z)}}[\log (1 - D(G(z)))]\tag1 GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))](1)
x为真实样本,z为训练G的噪声
上式为生成对抗网络的目标公式,先优化D,在优化G.具体可以分为以下两步

  • 优化D
    (2) max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \mathop {\max }\limits_D V(D,G) = {E_{x \sim {p_{data}}(x)}}[\log D(x)] + {E_{z \sim {p_z}(z)}}[\log (1 - D(G(z)))]\tag2 DmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))](2)
    最大化上述公式意味着使 D ( x ) D(x) D(x)越大越好 D ( G ( z ) ) D(G(z)) D(G(z))越小越好,公式(2)通过尽可能让真样本取值大,假样本取值小,来训练判别网络 D D D
  • 优化G
    (3) min ⁡ G V ( D , G ) = E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \mathop {\min }\limits_G V(D,G){\rm{ = }}{E_{z \sim {p_z}(z)}}[\log (1 - D(G(z)))]\tag3 GminV(D,G)=Ezpz(z)[log(1D(G(z)))](3)
    同理, G G G的训练只需要能够骗过判别器就OK了

重点来了!!
虽说两个网络交替训练,但是具体训练方法值得推敲,两个网络是一起训练,还是分开训练呢?
其实,对于 D D D的训练是单独的。将真假样本丢进去就ok
因为 G G G需要骗过 D D D,所以必须要有D的参与,因此 G G G的训练是和 D D D一起的。有人可能会问,不是交替训练吗,放一起怎么训练?只需要保持 D D D的参数不变就可以了。

相比其他生成模型, 从实际结果看, GAN 能产生更好的生成样本.但原始的 GAN 存在很多问题. 训练 GAN 需要达到纳什均衡, 训练 GAN 模型是不稳定的. 另外,它也很难去学习生成离散的数据, 为了取得 “胜利”生成器会选择容易生成的样本.

CGAN

条件生成对抗网络 (CGAN) 是在 GAN 的基础上加上了条件扩展为条件模型, 如果生成器和判别器都适用于某些额外的条件 c c c, 例如类标签, 那么可以通过将 c c c 附加到输入层中输入到生成器和判别器中进行调节, 可以指导数据生成过程。

在生成器中, 输入噪声的同时输入相应条件 c c c,而真实数据 x 和条件 c c c 作为判别器的输入. 其目标函数 V ( D , G ) V (D, G) V(D,G) 如式 (4) 所示:
(4) min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ∣ c ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ∣ c ) ) ) ] \mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {E_{x \sim {p_{data}}(x)}}[\log D(x|c)] + {E_{z \sim {p_z}(z)}}[\log (1 - D(G(z|c)))]\tag4 GminDmaxV(D,G)=Expdata(x)[logD(xc)]+Ezpz(z)[log(1D(G(zc)))](4)
由上式可知,CGAN对于目标函数 V ( D , G ) V(D,G) V(D,G)的优化过程与GAN相似: E x ∼ p d a t a ( x ) [ log ⁡ D ( x ∣ c ) ] {E_{x \sim {p_{data}}(x)}}[\log D(x|c)] Expdata(x)[logD(xc)]表示将数据 x x x与条件 c c c输入 D D D得到是否为真实数据的概率; E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ∣ c ) ) ) ] {E_{z \sim {p_z}(z)}}[\log (1 - D(G(z|c)))] Ezpz(z)[log(1D(G(zc)))]表示随机噪声结合条件 c c c输入 G G G然后通过 D D D判断其为真实数据的概率.
若条件 c c c为类别标签 y y y,则可认为CGAN是将无监督的GAN模型变为有监督模型的改进。

DCGAN

深度卷积生成对抗网络 (DCGAN) 首次将卷积网络引入 GAN 的结构, 利用卷积层强大的特征提取能力来提高 GAN 的效果.

DCGAN 相比于传统 GAN 有以下特点

  1. 在判别器模型中使用带步幅的卷积代替池化层 ; 在生成器模型中使用 Four fractionally-strided convolution 完成从随机噪声到图片的生成过程.
  2. 在网络结构中, 除了生成器模型的输出层及其对应的判别器模型的输入层, 其他层上都使用了批量归一化 (Batch normalization), 加入 Batch normalization 层这一操作解决了初始化差的问题,同时保住梯度传播到每一层, 也能够防止生成器把所有的样本都收敛到同一个点.
  3. 去除全连接层, 直接使用卷积层连接生成器和判别器的输入层和输出层; 需要注意, 取消全连接层增加了模型的稳定性, 但却使得收敛速度变慢.
  4. 生成器的输出层使用 Tanh (双切正切函数) 激活函数, 其余层使用 ReLU ; 判别器的所有层使用 Leaky ReLU.

你可能感兴趣的:(GAN)