生成对抗网络 (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)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))](1)
x为真实样本,z为训练G的噪声
上式为生成对抗网络的目标公式,先优化D,在优化G.具体可以分为以下两步
重点来了!!
虽说两个网络交替训练,但是具体训练方法值得推敲,两个网络是一起训练,还是分开训练呢?
其实,对于 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) 是在 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)=Ex∼pdata(x)[logD(x∣c)]+Ez∼pz(z)[log(1−D(G(z∣c)))](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)] Ex∼pdata(x)[logD(x∣c)]表示将数据 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)))] Ez∼pz(z)[log(1−D(G(z∣c)))]表示随机噪声结合条件 c c c输入 G G G然后通过 D D D判断其为真实数据的概率.
若条件 c c c为类别标签 y y y,则可认为CGAN是将无监督的GAN模型变为有监督模型的改进。
深度卷积生成对抗网络 (DCGAN) 首次将卷积网络引入 GAN 的结构, 利用卷积层强大的特征提取能力来提高 GAN 的效果.
DCGAN 相比于传统 GAN 有以下特点