引言
2016年的论文《f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization》引入了一种新的生成对抗网络(GAN)框架,名为f-GAN。这篇论文通过将传统的GAN训练框架扩展到一系列基于f散度的更广泛的距离或散度措施上,为训练生成模型提供了新的视角和方法。
f-GAN利用了一类称为f-散度的函数来衡量两个概率分布之间的差异。通过引入f-散度,f-GAN为训练生成模型提供了一个更加通用的框架。这意味着研究者可以根据具体任务的需求选择最合适的散度类型,以此来优化生成模型的学习和性能。
GAN模型损失与散度
简单回忆一下 GAN 模型的目标函数, 在标准 GAN 设置中, 生成器 \(G\) 的目标是最大化判别器 \(D\) 做出错误判断的概率, 而判别器 \(D\) 的目标是准确区分真实数据和假数据。这可以形式化为以下的极小极大问题:
$$
\min _G \max _D V(D, G)=\mathbb{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]
$$
其中, \(\mathbb{E}\) 表示期望操作; \(p_{\text {data }}\) 是真实数据的分布; \(x\) 是从真实数据中抽样的样本; \(p_z\) 是生成器的输入噪声分布, 通常假定为高斯或均匀分布; \(z\) 是从 \(p_z\) 中抽样的噪声向量; \(G(z)\) 是生成器 \(G\) 使用噪声 \(z\) 生成的数据样本。
当判别器 \(D\) 和生成器 \(G\) 都达到其各自的最优时, GAN 训练过程实际上在最小化生成数据分布 \(p_g\) 和真实数据分布 \(p_{\text {data }}\) 之间的 Jensen-Shannon 散度 (JS 散度)。JS 散度是衡量两个概率分布差异的一种方法, 定义为:
$$
J S(P \| Q)=\frac{1}{2} K L(P \| M)+\frac{1}{2} K L(Q \| M)
$$
其中, \(M=\frac{1}{2}(P+Q)\) 是 \(P\) 和 \(Q\) 的平均分布。 \(K L(P \| Q)\) 是两个概率分布 \(P\) 和 \(Q\) 之间的 Kullback-Leibler 散度, 具体来说 KL 散度定义为:
$$
\mathrm{KL}(P \| Q)=\sum_x P(x) \log \frac{P(x)}{Q(x)}
$$
对于连续变量, 求和符号换成积分, 下面来仔细推导一下上述结论。判别器 \(D\) 的目标函数可以表示为:
$$
V(D, G)=\mathbb{E}_{x \sim p_{\text {data }}}[\log D(x)]+\mathbb{E}_{x \sim p_g}[\log (1-D(x))]
$$
我们要找到 \(D\) 的形式, 使得 \(V(D, G)\) 最大化。为此, 可以将期望转换成积分的形式, 并分别针对 \(p_{\text {data }}\) 和 \(p_g\) 进行计算, 公式如下:
$$
V(D, G)=\int_x p_{\text {data }}(x) \log D(x) d x+\int_x p_g(x) \log (1-D(x)) d x
$$
为了最大化 \(V(D, G)\), 对 \(D\) 求导并令其为 0 , 公式如下:
$$
\frac{\delta V}{\delta D}=\frac{p_{\text {data }}(x)}{D(x)}-\frac{p_g(x)}{1-D(x)}=0
$$
将上述公式的导数设置为 0 , 求解 \(D\) 得到:
$$
\begin{gathered}
\frac{p_{\text {data }}(x)}{D(x)}=\frac{p_g(x)}{1-D(x)} \\
p_{\text {data }}(x)(1-D(x))=p_g(x) D(x) \\
p_{\text {data }}(x)-p_{\text {data }}(x) D(x)=p_g(x) D(x) \\
p_{\text {data }}(x)=D(x)\left(p_{\text {data }}(x)+p_g(x)\right) \\
D(x)=\frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}
\end{gathered}
$$
这就是最优判别器 \(D^*\) 的形式。直观地说, 这个形式表示了 \(x\) 来自真实数据的概率, 与 \(x\)来自真实数据和生成数据的总概率之比。当生成器 \(G\) 完美地模仿了真实数据分布 \(p_{\text {data }}\) 时, 即 \(p_g(x)=p_{\text {daa }}(x)\) 。此时, \(D^*(x)\) 将输出 0.5 , 表示它无法区分真实数据和生成数据, 这也是 GAN 训练的理想状态。
当判别器 \(D\) 是最优的, 即 \(D^*(x)=\frac{p_{\text {data }}(x)}{p_g(x)+p_{\text {data }}(x)}\) 时, 考虑生成器 \(G\) 的最优情况。在这种情况下, 可以重新审视 GAN 的值函数 \(V(D, G)\), 它在 \(D\) 最优的情况下转化为:
$$
V\left(G, D^*\right)=\mathbb{E}_{x \sim p_{\text {data }}}\left[\log D^*(x)\right]+\mathbb{E}_{x \sim p_g}\left[\log \left(1-D^*(x)\right)\right]
$$
将 \(D^*\) 的最优形式代入上述等式中, 可以得到:
$$
V\left(G, D^*\right)=\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right]+\mathbb{E}_{x \sim p_g}\left[\log \frac{p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right]
$$
理论上, 求 \(G^*\) 等价于 \(p_g(x)\) 可以准确地模仿 \(p_{\text {data }}(x)\), 即 \(p_g(x)=p_{\text {data }}(x)\), 此时, \(\frac{p_{\text {data }}(x)}{p_g(x)+p_{\text {data }}(x)}\) 和 \(\frac{p_g(x)}{p_g(x)+p_{\text {data }}(x)}\) 都趋近于 \(\frac{1}{2}\) 。
在这种情况下, 由于 \(\log \frac{1}{2}=-\log 2\), 当 \(p_{\text {data }}=p_g\) 时, 这两个期望值加在一起就是 \(-\log 2-\log 2=-2 \log 2\) 。即最优的生成器将趋向于其最小值 \(-2 \log 2\) 。
所以, 生成器 \(G\) 的最优策略是调整其参数, 使得 \(p_g(x)\) 趋向于 \(p_{\text {data }}(x)\), 在这种情况下, \(V\left(G, D^*\right)\) 达到其理论最小值 \(-2 \log 2\), 表明 \(G\) 成功地模仿了数据分布。
继续推导 GAN 损失函数与散度的关系。可以对带入最优 \(D^*\) 的损失函数进行进一步的推导, 具体如下:
\begin{aligned}
\operatorname{LoSs} & =\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right]+\mathbb{E}_{x \sim p_g}\left[\log \frac{p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right] \\
& =\mathbb{E}_{x \sim p \text { data }}\left[\log \left(\frac{1}{2} \cdot \frac{2 p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right)\right]+\mathbb{E}_{x \sim p_g}\left[\log \left(\frac{1}{2} \cdot \frac{2 p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right)\right] \\
& =\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{1}{2}\right]+\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{2 p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right]+\mathbb{E}_{x \sim p_g}\left[\log \frac{1}{2}\right]\\
&+\mathbb{E}_{x \sim p_g}\left[\log \frac{2 p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right] \\
& =-\log 4+\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{2 p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right]+\mathbb{E}_{x \sim p_g}\left[\log \frac{2 p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right]
\end{aligned}
下面, 将 \(V\left(G, D^*\right)\) 与 \(\mathrm{KL}\) 和 JS 散度联系起来, 先看 \(V\left(G, D^*\right)\) 的后两项。首先, 观察到 \(\frac{2 p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\) 和 \(\frac{2 p_g(x)}{p_{\text {data }}(x)+p_g(x)}\) 分别是以 \(p_{\text {data }}\) 和 \(p_{\mathrm{g}}\) 为基础的两个概率分布, 其中每个都与中间分布 \(M=\frac{p_{\text {data }}+p_g}{2}\) 有关。这样可以重写 \(V\left(G, D^*\right)\) :
\(\begin{aligned} V\left(G, D^*\right) & =-\log 4+\mathbb{E}_{x \sim p \text { data }}\left[\log \frac{2 p_{\text {data }}(x)}{p_{\text {data }}(x)+p_g(x)}\right]+\mathbb{E}_{x \sim p_g}\left[\log \frac{2 p_g(x)}{p_{\text {data }}(x)+p_g(x)}\right] \\ & =-\log 4+K L\left(p_{\text {data }} \| \frac{p_{\text {data }}+p_g}{2}\right)+K L\left(p_g \| \frac{p_{\text {data }}+p_g}{2}\right) \\ & =-\log 4+2 \cdot J S\left(p_{\text {data }} \| p_g\right)\end{aligned}\)
因此, 可以得出结论: 在最优判别器 \(D^*\) 的条件下, GAN 的价值函数 \(V\left(G, D^*\right)\) 实际上等于 \(-\log 4\) 加上 \(p_{\text {data }}\) 和 \(p_g\) 之间的两倍 \(\mathrm{JS}\) 散度。这表明 GAN 的训练过程本质上是试图最小化 \(p_{\text {data }}\) 和 \(p_g\) 之间的 \(\mathrm{JS}\) 散度, 使生成的数据分布尽可能地接近真实数据分布。当 \(\mathrm{JS}\) 散度散度最小时, 意味着 \(p_{\text {data }}\) 和 \(p_g\) 不可区分, 这是 GAN 训练的理想目标。
GAN损失的通用框架f-散度
\(f\)-散度是一类用于衡量两个概率分布差异的度量方法。对于任意凸函数 \(f\), 满足 \(f(1)=0\),两个概率分布 \(P\) 和 \(Q\) 之间的 \(\mathrm{f}\)-散度定义为:
$$
D_f(P \| Q)=\int Q(x) f\left(\frac{P(x)}{Q(x)}\right) d x
$$
这个定义可以覆盖许多常见的散度, 如 KL 散度、JS 散度和 Total Variation 距离等, 只要选择适当的 \(\mathrm{f}\) 函数即可。
1. KL 散度
对于 KL 散度, \(f(u)=u \log u\) 。因此, KL 散度表示为:
$$
D_{\mathrm{KL}}(P \| Q)=\int Q(x)\left(\frac{P(x)}{Q(x)} \log \frac{P(x)}{Q(x)}\right) d x
$$
这表示在给定 \(Q\) 的情况下, \(P\) 的相对熵。
2. JS 散度
JS 散度是 KL 散度的一个对称且平滑的版本。它可以表示为:
$$
D_{\mathrm{JS}}(P \| Q)=\frac{1}{2} D_{\mathrm{KL}}(P \| M)+\frac{1}{2} D_{\mathrm{KL}}(Q \| M)
$$
其中 \(M=\frac{1}{2}(P+Q)\) 。不过, 这不是一个直接由 \(f(u)\) 定义的形式, 但可以展示为两个 KL 散度的平均。
3. Total Variation (TV) 距离
对于总变异距离, \(f(u)=\frac{1}{2}|u-1|\) 。因此, 总变异距离为:
$$
D_{\mathrm{TV}}(P \| Q)=\frac{1}{2} \int|P(x)-Q(x)| d x
$$
在实践中, 直接计算 \(D_f(P \| Q)\) 往往是不切实际的, 因为往往无法直接获取完整的分布 \(P\)和 \(Q\) 。这里可以引入变分下界来近似 \(D_f(P \| Q)\) 。
首先, 应用 Jensen 不等式。给定凸函数 \(f\) 和随机变量 \(X\), Jensen 不等式表明: \(f(E[X]) \leq E[f(X)]\) 。接着, 考虑一个任意的可测函数 \(T(x)\) (在 GAN 的上下文中, 这个函数通常由判别器模型实现), 可以将 \(T(x)\) 看作是 \(f\left(\frac{P(x)}{Q(x)}\right)\) 的一个估计。应用 Jensen 不等式,可以得到:
$$
f\left(E_{x \sim Q}\left[\frac{T(x)}{Q(x)}\right]\right) \leq E_{x \sim Q}\left[f\left(\frac{T(x)}{Q(x)}\right)\right]
$$
这里使用了 \(T(x)\) 作为 \(\frac{P(x)}{Q(x)}\) 的估计, 但实际上需要找到 \(T(x)\) 的一个函数来更接近地估计 \(f\left(\frac{P(x)}{O(x)}\right)\) 。为此, 使用 \(f\) 的凸共轭 \(f^*\) 来构建这样的函数。凸共轭 \(f^*\) 定义为:
$$
f^*(t)=\sup _{u \in \operatorname{dom}_f}(u t-f(u))
$$
于是可以构建一个关于 \(T(x)\) 的下界:
$$
D_f(P \| Q) \geq \int Q(x) T(x) d x-\int Q(x) f^*(T(x)) d x
$$
在 GAN 的框架中, 目标是找到一个生成器 \(G\) 和一个鉴别器 \(T\), 使得上述不等式的右侧最大化 (对于鉴别器) 和最小化 (对于生成器)。上述不等式给出了一个使用 \(\mathrm{f}\)-散度的通用框架, 可以适应多种不同类型的 GAN。其中:
- (1) \(P(x)\) 是真实数据的分布;
- (2) \(Q(x)\) 是生成器 \(G\) 生成的数据分布;
- (3) \(T(x)\) 是鉴别器的输出;
- (4) \(f^*\) 是函数 \(f\) 的凸共轭。
这个不等式的意义在于, 它提供了一个通过优化鉴别器 \(T\) 来近似任意 \(\mathrm{f}\)-散度的方法。在这个框架中, 我们可以选择不同的 \(f\) 函数来得到不同类型的 GANs, 例如选择 \(f(u)=u \log u\)会得到类似传统 GAN 使用的 KL 散度。
在 GAN 的训练过程中: 鉴别器 \(D\) 的训练目标是最大化 \(\int P(x) T(x) d x-\int Q(x) f^*(T(x)) d x\),这意味着鉴别器尝试找到最佳策略来区分真实样本和生成样本。生成器 \(G\) 的训练目标是最小化这个不等式的右侧或者使 \(Q(x)\) 趋近于 \(P(x)\), 使得鉴别器难以区分真实样本和生成样本。通过选择不同的 \(f\) 函数和相应的凸共轭 \(f^*\), 可以构建不同种类的 GAN 模型, 每种模型都对应着不同的训练目标和策略, 如下表所示。这种方法使得 GAN 训练更加灵活和强大, 因为不再局限于特定类型的散度或距离度量, 而是可以根据特定问题和数据特性来选择最合适的 f-散度。
![图片[1]-f-GAN-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2024/03/20240304114147939-1024x284.png)
暂无评论内容