Deep Generative Models:生成对抗网络(GAN)
什么是生成建模(Generative Modeling)
生成模型的主要目标是从数据中学习其分布,从而具备“生成”数据的能力。两个关键任务:
- 密度估计(Density Estimation):学习真实数据的概率分布 p ( x ) p(x) p(x)。
- 样本生成(Sample Generation):从模型学习的分布中采样,生成新样本。
换句话说,生成建模不是仅预测标签,而是要建模整个数据的生成过程,使模型能“想象”并产生新的样本。
图示说明了输入图像 x x x 是由真实分布 p ( x ) p(x) p(x) 生成的。我们希望构建一个模型,也能从噪声或潜变量中生成具有相同分布的新样本。
为什么研究生成建模?
逼真的生成任务
模拟可能的未来规划(如股票市场)
训练生成模型还可以对潜在表征进行推理,这些潜在表征可以作为通用特征
从多个角度说明生成模型的重要性:
- 潜变量结构学习:生成模型能够发现数据中的隐藏因素,如风格、姿态、语义等。
- 半监督学习能力强:即使标签很少,也可以利用未标注数据学到有意义的表示。
- 数据建模能力强:可用于数据修复、风格迁移、图像翻译、图像上色等任务。
- 表示学习(Representation Learning):通过对输入数据建模,生成模型学到的特征常常可迁移用于其他任务。
- 未来模拟与预测:如视频预测、图像到视频生成等。
什么是生成对抗网络(GAN)
生成对抗网络是一种重要的深度生成模型,由两个神经网络组成:
- 生成器 G G G:从随机变量(noise) z ∼ p ( z ) z \sim p(z) z∼p(z) 生成图像 G ( z ) G(z) G(z)。
- 判别器 D D D:判断图像 x x x 是否来自真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x)。
二者的训练过程是一个博弈(对抗)过程。
GAN 的目标函数
GAN 的优化目标是一个极小极大问题:
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p(z)}[\log(1 - D(G(z)))] minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼p(z)[log(1−D(G(z)))]
含义如下:
- 第一项鼓励判别器 D D D 对真实图像 x x x 输出概率越接近 1 1 1 越好;
- 第二项鼓励判别器对生成图像 G ( z ) G(z) G(z) 输出概率越接近 0 0 0 越好;
- D的目标:最大化目标,使D(x)接近于1(真实),D(G(z))接近于0(假)
- G的目标:最小化目标,使D(G(z))接近于1(鉴别器被骗以为生成的G(z)是真实的)
因此,判别器和生成器是两个对手:
- 判别器 D D D 试图区分真假;
- 生成器 G G G 则试图以假乱真。
当博弈达到平衡时,判别器无法分辨真假图像,即 D ( G ( z ) ) = 0.5 D(G(z)) = 0.5 D(G(z))=0.5。
GAN 的训练直观理解
输入是noise,给到G,generated image + real image data as input,两个输入。D用来做binary classification.
可以将 GAN 的训练比喻为“造假者 vs 警察”的博弈:
- 初始时,生成器 G G G 生成的图像非常粗糙,容易被判别器 D D D 识别;
- 随着训练进行, G G G 不断改进生成策略, D D D 也在不断提升识别能力;
- 最终双方达到均衡, G G G 的输出与真实数据无法区分, D D D 的输出变成 0.5 0.5 0.5。
GAN 的总目标函数
生成器和判别器之间的博弈关系形式化为一个极小极大的对抗优化问题:
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p(z)}[\log(1 - D(G(z)))] minGmaxDV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼p(z)[log(1−D(G(z)))]
这个公式表示:
- 判别器试图最大化该表达式,正确区分真实图像和伪造图像;
- 生成器试图最小化该表达式,让伪造图像也被判断为真实;
- 最终博弈平衡点是 p g ( x ) = p d a t a ( x ) p_g(x) = p_{data}(x) pg(x)=pdata(x) 且 D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5。
交替训练策略(Alternate Optimization)
为了求解上述极小极大问题,采用以下 交替更新策略:
1. Gradient Ascent on D
固定生成器参数 θ g \theta_g θg,更新判别器参数 θ d \theta_d θd,最大化以下目标:
max θ d [ E x ∼ p d a t a log D θ d ( x ) + E z ∼ p ( z ) log ( 1 − D θ d ( G θ g ( z ) ) ) ] \max_{\theta_d} \left[ \mathbb{E}_{x \sim p_{data}} \log D_{\theta_d}(x) + \mathbb{E}_{z \sim p(z)} \log(1 - D_{\theta_d}(G_{\theta_g}(z))) \right] maxθd[Ex∼pdatalogDθd(x)+Ez∼p(z)log(1−Dθd(Gθg(z)))]
也就是说:
- 判别器希望对真实样本 x x x 输出接近 1 1 1;
- 对伪造样本 G ( z ) G(z) G(z) 输出接近 0 0 0;
- 因为目标是最大化,所以需要对判别器使用 梯度上升。
2. Gradient Descent on G
固定判别器参数 θ d \theta_d θd,优化生成器参数 θ g \theta_g θg,最小化如下损失函数:
$ \min_{\theta_g} \mathbb{E}{z \sim p(z)} \log(1 - D{\theta_d}(G_{\theta_g}(z))) $
这个目标使得生成器试图提升 D ( G ( z ) ) D(G(z)) D(G(z)),让判别器认为伪造图像也是真实的,即:
- 尽可能让 D ( G ( z ) ) → 1 D(G(z)) \rightarrow 1 D(G(z))→1;
- 所以生成器使用 梯度下降 来最小化该损失。
但注意,这一损失可能在训练初期导致梯度消失,因此实际训练中常采用非饱和形式(non-saturating loss):
min θ g − E z ∼ p ( z ) log D θ d ( G θ g ( z ) ) \min_{\theta_g} - \mathbb{E}_{z \sim p(z)} \log D_{\theta_d}(G_{\theta_g}(z)) minθg−Ez∼p(z)logDθd(Gθg(z))
算法流程
外层:训练轮数
for number of training iterations do
对所有训练轮数重复执行以下步骤(每轮包括 k k k 次判别器更新 + 1 次生成器更新)。
内层:判别器更新(k 次)
for k steps do
每轮训练中先更新 k k k 次判别器, k k k 是一个超参数(原论文中使用 k = 1 k = 1 k=1,以节省计算资源)。
每次判别器更新包含以下步骤:
采样 m m m 个噪声样本:
$ {z^{(1)}, \dots, z^{(m)}} \sim p_g(z) $采样 m m m 个真实样本:
$ {x^{(1)}, \dots, x^{(m)}} \sim p_{data}(x) $更新判别器参数(梯度上升):
∇ θ d 1 m ∑ i = 1 m [ log D ( x ( i ) ) + log ( 1 − D ( G ( z ( i ) ) ) ) ] \nabla_{\theta_d} \frac{1}{m} \sum_{i=1}^{m} \left[ \log D(x^{(i)}) + \log(1 - D(G(z^{(i)}))) \right] ∇θdm1i=1∑m[logD(x(i))+log(1−D(G(z(i))))]
此步骤最大化判别器输出正确分类的概率:真实图像输出高,伪造图像输出低。
end for
生成器更新(1 次)
采样 m m m 个噪声样本:
$ {z^{(1)}, \dots, z^{(m)}} \sim p_g(z) $更新生成器参数(梯度下降):
∇ θ g 1 m ∑ i = 1 m log ( 1 − D ( G ( z ( i ) ) ) ) \nabla_{\theta_g} \frac{1}{m} \sum_{i=1}^{m} \log \left(1 - D(G(z^{(i)})) \right) ∇θgm1i=1∑mlog(1−D(G(z(i))))
GAN 的训练过程可视化示例:A Simple Example
简单而直观的 1 维高斯分布示例,帮助我们理解 GAN 的对抗训练过程是如何逐步推进的。
图中包括四个子图(a)到(d),展示了生成分布 p g p_g pg 如何逐步接近真实分布 p d a t a p_{data} pdata,以及判别器 D ( x ) D(x) D(x) 的输出如何随着训练而变化。
图中元素说明
- 黑色虚线:真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x);
- 绿色曲线:生成器生成的分布 p g ( x ) p_g(x) pg(x);
- 蓝色曲线:判别器的输出 D ( x ) D(x) D(x),即当前判别器认为输入来自真实数据的概率;
- 横轴:样本空间 x x x;
- 下方横线:表示潜变量 z z z 的均匀分布域;
- 向上箭头:生成器 G ( z ) G(z) G(z) 将均匀分布映射到数据空间。
(a) 初始状态
- 真实数据分布 p d a t a ( x ) p_{data}(x) pdata(x) 和生成分布 p g ( x ) p_g(x) pg(x) 相差很远;
- 判别器 D ( x ) D(x) D(x) 在真实样本处输出接近 1,在伪造样本处输出接近 0;
- 说明判别器能很好地区分真假样本。
(b) 中间阶段
- 生成器开始学习, p g ( x ) p_g(x) pg(x) 向 p d a t a ( x ) p_{data}(x) pdata(x) 靠近;
- 判别器 D ( x ) D(x) D(x) 的输出逐渐平滑,对部分区域开始感到“困惑”;
- 说明生成器在某些区域已能成功欺骗判别器。
© 接近收敛
- 生成分布 p g ( x ) p_g(x) pg(x) 与真实分布 p d a t a ( x ) p_{data}(x) pdata(x) 几乎重合;
- 判别器输出趋近于 0.5 0.5 0.5,无法有效判断真假;
- 判别器的能力已接近上限。
(d) 理想收敛状态
- p g ( x ) = p d a t a ( x ) p_g(x) = p_{data}(x) pg(x)=pdata(x);
- 判别器对所有 x x x 的输出都为 D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5;
- 说明两分布完全一致,GAN 达到理论最优状态。
下方生成机制解释
- 均匀采样 z z z:例如在 [ − 1 , 1 ] [-1, 1] [−1,1] 区间;
- 生成器 G G G 将 z z z 映射为 x = G ( z ) x = G(z) x=G(z);
- 当 G ( z ) G(z) G(z) 映射集中于高密度区域时,对应图中箭头密集;
- 当 G G G 映射至低密度区域,箭头稀疏。
文本解析与结论
文中说明如下关键结论:
- 判别器 D D D 学习输出概率来识别样本真假;
- 生成器 G G G 调整生成分布,使其逐步逼近真实分布;
- 当 p g = p d a t a p_g = p_{data} pg=pdata 时,GAN 达到 Nash 均衡;
- 判别器无法区分两者,输出恒为 D ( x ) = 0.5 D(x) = 0.5 D(x)=0.5;
- 此时训练达成目标,GAN 成功生成真实感极强的样本。
核心公式
生成器定义为一个可微分函数:
x = G ( z ; θ ( G ) ) x = G(z; \theta^{(G)}) x=G(z;θ(G))
其中:
- z z z 是从先验分布 p ( z ) p(z) p(z)(通常为均匀分布或高斯分布)中采样的随机变量;
- θ ( G ) \theta^{(G)} θ(G) 是生成器的参数;
- x x x 是生成样本,输出空间与真实数据空间相同;
- G G G 是一个可微的神经网络,用于将潜变量 z z z 映射为样本 x x x。
关键属性
- 无需显式写出 p g ( x ) p_g(x) pg(x) 的公式;
- 只需构建一个能够从 p g p_g pg 分布中采样的生成器 G G G;
- 只要 G G G 可微,就可以使用梯度优化进行训练;
- 这种方式称为隐式建模,相比显式建模(如 VAE)不要求明确分布函数。
GAN 的目标
我们有来自真实分布 p r p_r pr 的训练数据,目标是训练一个生成模型,使得其输出服从 p g p_g pg,并且有:
p g ≈ p r p_g \approx p_r pg≈pr
也就是说,我们不关心生成器输出的分布公式长什么样,只需要它能“以假乱真”。