1 原始的 GANs
1.1 GANs 的结构
GANs 的结果图如下所示:
生成式对抗网络 GANs 最重要的两个部分为:
- 生成器(Generator) :用于生成“假”样本。生成器从先验分布中采得随机信号,经过神经网络的变换,得到模拟样本。
- 判别器(Discriminator) :用于判断输入的样本是真实的还是合成的。判别器既接收来自实际数据集的真实样本,也接收来自生成器的模拟样本,判别器需要判断输入的样本是真实数据还是生成器的模拟(假)数据。
从上面可以看出,生成器和判别器是对抗的关系,生成器要尽可能生成出让判别器失败的样本,而判别器要尽可能识别出生成器的假样本。GANs 就是通过这种对抗的关系,让生成器和判别器不断提升。理想状态下,生成器和判别器最终能达到一种平衡,两者都趋于完美,都没有更进一步的空间。
1.2 GANs 的训练过程
GANs 采用生成器和判别器交替优化的方式:
(1)固定生成器 G G G,训练判别器 D D D
固定生成器 G G G,然后利用生成器随机模拟产生样本 G ( z ) G(z) G(z) 作为负样本( z z z 是一个随机向量),并从真实数据集中采样获得正样本 X X X,将这些正负样本输入到判别器 D D D 中,根据判别器的输出(即 D ( X ) D(X) D(X) 或 D ( G ( z ) ) D(G(z)) D(G(z)) )和样本标签来计算误差,最后利误差反向传播算法来更新判别器的参数,如下图所示
(2)固定判别器 D D D,训练生成器 G G G
固定判别器 D D D,然后利用当前生成器 G G G 随机模拟产生样本 G ( z ) G(z) G(z),并输入到判别器 D D D 中;根据判别器的输出 D ( G ( z ) ) D(G(z)) D(G(z)) 和样本标签来计算误差,最后利用误差反向传播算法来更新生成器 G G G 的参数,如下图所示:
1.3 GANs 的训练模型
先给出 GANs 的公式:
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p z ( z ) [ log D ( G ( z ) ) ] (1) \min_G \max_D V(D,G)=E_{x\sim p_{data}(x)}[\log D(x)] + E_{z\sim p_{z}(z)}[\log D(G(z))] \tag{1} GminDmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[logD(G(z))](1)
训练模型中需要用到的符号有:
- G G G:生成器模型,通常为一个多层感知机结构的可微函数
- D D D:判别器模型
- x x x:判别器的输入,包括真实数据样本和生成器的输出
- z z z:生成器输入的噪声变量,则生成器的输出为 x = G ( z ) x=G(z) x=G(z)
- p d a t a ( x ) ≐ p ( x ∣ d a t a ) p_{data}(x) \doteq p(x|data) pdata(x)≐p(x∣data):表示从实际数据集得到样本 x x x 的概率
- p z ( z ) p_{z}(z) pz(z):生成器输入的噪声变量 z z z 的先验分布
- p g ( x ) ≐ p ( x ∣ g ) p_{g}(x) \doteq p(x|g) pg(x)≐p(x∣g):生成器输出的样本 x x x 的概率
- p s r c ( d a t a ) p_{src}(data) psrc(data) 与 p s r c ( g ) p_{src}(g) psrc(g):判别器模型输入样本中来自真实数据和来自生成器的概率,一般采用一半真实数据、一半假数据的方式,即: p s r c ( d a t a ) = p s r c ( g ) = 1 2 p_{src}(data)=p_{src}(g)=\frac{1}{2} psrc(data)=psrc(g)=21
- G ( z ; θ g ) G(z;\theta_g) G(z;θg): θ g \theta_g θg 为生成器的多层感知机的参数, G ( z ; θ g ) G(z;\theta_g) G(z;θg) 代表生成器模型的输出空间
- D ( x ; θ d ) D(x;\theta_d) D(x;θd): θ d \theta_d θd 为判别器的多层感知机的参数, D ( x ; θ d ) D(x;\theta_d) D(x;θd) 为判别器的输出,是一个标量值
- D ( x ) D(x) D(x):判别器预测输入样本 x x x 来自于真实数据集的概率
- ( G ∗ , D ∗ ) (G^*,D^*) (G∗,D∗):求得的解,即达到最终纳什均衡点时的生成器和判别器
1.3.1 生成器 G G G 固定,寻求当下最优的判别器 D G ∗ D_G^* DG∗
判别器 D D D 实质上解决的是一个二分类问题,其损失函数可以用 负对数似然(Negative Log-Likelihood,NLL),也称 绝对交叉熵损失(Categorical Cross-Entropy Loss) 来表示:
L ( D ) = − ∫ p ( x ) [ p ( d a t a ∣ x ) log D ( x ) + p ( g ∣ x ) log ( 1 − D ( x ) ) ] d x (2) L(D)=-\int p(x)[p(data|x) \log D(x) + p(g|x) \log (1-D(x))]dx \tag{2} L(D)=−∫p(x)[p(data∣x)logD(x)+p(g∣x)log(1−D(x))]dx(2)
其中:
- p ( d a t a ∣ x ) p(data|x) p(data∣x):样本 x x x 属于真实数据集的概率
- p ( g ∣ x ) p(g|x) p(g∣x):样本 x x x 属于生成器的概率
我们可以推出:
p ( x ) p ( d a t a ∣ x ) = p s r c ( d a t a ) p ( x ∣ d a t a ) = p s r c ( d a t a ) p d a t a ( x ) = 1 2 p d a t a ( x ) p(x)p(data|x)=p_{src}(data)p(x|data)=p_{src}(data)p_{data}(x)=\frac{1}{2}p_{data}(x) p(x)p(data∣x)=psrc(data)p(x∣data)=psrc(data)pdata(x)=21pdata(x)
p ( x ) p ( g ∣ x ) = p s r c ( g ) p ( x ∣ g ) = p s r c ( g ) p g ( x ) = 1 2 p g ( x ) p(x)p(g|x)=p_{src}(g)p(x|g)=p_{src}(g)p_{g}(x)=\frac{1}{2}p_{g}(x) p(x)p(g∣x)=psrc(g)p(x∣g)=psrc(g)pg(x)=21pg(x)
代入公式 (2)则有:
L ( D ) = − ∫ p ( x ) [ p ( d a t a ∣ x ) log D ( x ) + p ( g ∣ x ) log ( 1 − D ( x ) ) ] d x