文章目录
  1. 1. Generative Adversarial Networks
    1. 1.1. 生成模型与判别模型
    2. 1.2. 极大似然估计
    3. 1.3. ${\text{KL}}$ Divergence
    4. 1.4. ${G}$ & ${D}$
    5. 1.5. ${\max_{D}V(G,D)}$
    6. 1.6. JS Divergence
    7. 1.7. 优化技巧
    8. 1.8. 对抗生成网络
    9. 1.9. 为什么需要生成模型
    10. 1.10. 思考
    11. 1.11. 参考

Generative Adversarial Networks

生成式对抗网络模型由 Goodfellow 等人在 2014 年首次提出,将博弈论中非零和博弈思想与生成模型结合在一起,巧妙避开了传统生成模型中概率密度估计困难等问题,使得生成模型(Generative Model)达到良好的效果。

生成模型与判别模型

机器学习的任务就是学习一个模型,应用这个模型,对给定的输入预测相应的输出。这个模型的一般形式为决策函数 ${Y=f(x)}$,或者条件概率分布:${Y=\arg \max_Y P(Y|X)}$。机器学习方法又可以分为生成方法和判别方法,所学到的模型分别称为生成模型(Generative Model)和判别模型(Discriminative Model)。

  • 生成模型:先找出 ${X}$ 和 ${Y}$ 的联合概率 ${P(X, Y)}$,再得到 ${y = P(Y|X) = \frac{P(X, Y)}{P(X)}}$。
  • 判别模型:直接求得 ${y = P(Y|X)}$ 或者 ${y = f(x)}$。

生成模型更关注数据之间的内在联系,需要学习联合分布;而判别模型更关注于给定输入 ${X}$,模型应该预测怎么样的输出 ${Y}$。由生成模型可以推导出判别模型,反之则不能。

极大似然估计

参数估计的一种方式,也是生成模型的原理。

${\text{KL}}$ Divergence

$
\theta^{\ast}=\arg\max_{\theta}\prod_{i=1}^{m}P_{G}(x^{i};\theta)=\arg\max_{\theta}\log\prod_{i=1}^{m}P_{G}(x^{i};\theta)
$

$
\ \ \ \ =\arg\max_{\theta}\sum_{i=1}^{m}\log P_{G}(x^{i};\theta) \quad \quad \{x^{1},x^{2},\ldots,x^{m}\} \quad \text{from} \quad P_{data}(x)
$

$
\ \ \ \ \approx \arg \max_{\theta} E_{x \sim P_{\text{data}}}[\log P_{G}(x;\theta)]
$

$
\ \ \ \ =\arg\max_{\theta}\int_{x}P_{data}(x)\log P_{G}(x;\theta)dx-\int_{x}P_{data}(x)\log P_{data}(x)dx
$

$
\ \ \ \ =\arg\min_{\theta}KL(P_{data}(x)|P_{G}(x;\theta))
$

${P_{G}}$ & ${P_{data}}$

从而,生成器的生成数据分布为:

但是这个积分很难求解。

${G}$ & ${D}$

生成对抗网络有两个重要组成部分。

framework

如果用图片来举例子:

Adversarial Nets Framework

  • Generator ${G}$:从先验分布 ${P_{prior}(z)}$ 中产出的 ${z}$,生成 ${x}$,分布为 ${P_G(x)}$。
  • Discriminator ${D}$:输入 ${x}$,输出一个值,用于评估 ${P_{G}(x)}$ 和 ${P_{data}(x)}$ 的差异。
  • ${V(G, D)}$:GANs 模型的优化函数为 ${V(G, D)}$,用于得到最高的生成器 ${G^{\ast}}$:

${\max_{D}V(G,D)}$

$
V=E_{x\sim P_{\text{data}}}[\log D(x)]+E_{x\sim P_{G}}[\log (1-D(x))]
$

$
\ \ \ \ =\int_{x}P_{data}(x) \log D(x)dx+\int_{x}P_{G}(x)\log(1-D(x))dx
$

$
\ \ \ \ =\int_{x}\left[P_{data}(x)\log D(x)+P_{G}(x)\log (1-D(x))\right]dx
$

对于给定的 ${x}$,那么就是优化 ${D^{\ast}}$ 来最大化:

通过求导,得到 ${D^{\ast}}$ 为:

$
\max_{D}V(G,D)=V(G,D^{*})
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = E_{x \sim P_{\text{data}}}\left[\log \frac{P_{\text{data}}(x)}{P_{\text{data}}(x)+P_{G}(x)}\right]+E_{x\sim p_{G}} \left[\log \frac{P_{G}(x)}{P_{\text{data}}(x)+P_{G}(x)} \right]
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \int_{x}{ P_{\text{data}}}\left[\log \frac{\frac{1}{2} P_{\text{data}}(x)} {(P_{data}(x)+P_{G}(x))/2}\right] dx + \int_{x} P_{G}(x) \left[\log \frac{\frac{1}{2} P_{G}(x)}{(P_{data}(x)+P_{G}(x))/2}\right] dx
$

JS Divergence

JS 散度(Jensen-Shannon divergence),由于${\text{KL}}$散度是不对称的,而 JS 散度由${\text{KL}}$散度计算而来,是对称的。

得到了最好的 ${D^{\ast}(x)}$ 如下:

$
\max_{D}V(G,D)=V(G,D^{\ast})
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =-2 \log 2+ \int_{x} P_{data}(x) \log \frac{P_{data}(x)}{(P_{data}(x)+P_{G}(x))/2}dx+\int_{x}P_{G}(x) \log \frac{P_{G}(x)}{(P_{data}(x)+P_{G}(x))/2}dx
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =-2 \log2 + \text{KL}(P_{\mathrm{data}}(x)|\frac{P_{\mathrm{data}}(x)+P_{G}(x)}{2}) + \text{KL}(P_{G}(x)|\frac{P_{\mathrm{data}}(x)+ P_{G}(x)}{2})
$

$
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =-2 \log2 + 2 \text{JS} (P_{data}(x)|P_{G}(x))
$

优化技巧

在优化的开始,希望梯度较大,接近收敛的时候,希望梯度较小,那么在不改变单调性的情况下,尝试用 ${-\log(x)}$ 替换 ${\log(1-x)}$,起到加速优化的效果。

generator optimize trick

由于 ${\text{KL}}$ 散度是不对称的。假设有一个分布 ${p(x)}$,并且希望用另一个分布 ${q(x)}$ 来近似它。可以选择最小化 ${D_{\text{KL}}(p||q)}$ 或最小化 ${D_{\text{KL}}(q||p)}$。为了说明每种选择的效果,令 ${p}$ 是两个高斯分布的混合,令 ${q}$ 为单个高斯分布。选择使用 ${\text{KL}}$ 散度的哪个方向是取决于问题的。一些应用需要这个近似分布 ${q}$ 在真实分布 ${p}$ 放置高概率的所有地方都放置高概率,而其他应用需要这个近似分布 ${q}$ 在真实分布 ${p}$ 放置低概率的所有地方都很少放置高概率。${KL}$ 散度方向的选择反映了对于每种应用,优先考虑哪一种选择。

  • (左)最小化 ${D_{\text{KL}}(p||q)}$ 的效果。在这种情况下,选择一个${q}$使得它在 ${p}$ 具有高概率的地方具有高概率。当${p}$具有多个峰时,${q}$ 选择将这些峰模糊到一起,以便将高概率质量放到所有峰上。优化方向等价于极大似然估计,较为激进。
  • (右)最小化 ${D_{\text{KL}}(q||p)}$ 的效果。在这种情况下,选择一个${q}$使得它在 ${p}$ 具有低概率的地方具有低概率。当 ${p}$ 具有多个峰并且这些峰间隔很宽时,最小化 ${\text{KL}}$ 散度会选择单个峰,以避免将概率质量放置在 ${p}$ 的多个峰之间的低概率区域中。说明当 ${q}$ 被选择成强调左边峰时的结果。也可以通过选择右边峰来得到 ${\text{KL}}$ 散度相同的值。如果这些峰没有被足够强的低概率区域分离,那么 ${\text{KL}}$ 散度的这个方向仍然可能选择模糊这些峰。较为保守,宁愿只拟合一侧,也不接近概率密度为 ${0}$ 的地方。

KL & Reverse KL

此外,由于判别器只需要判断是否是真实样本,相对于生成器(从噪声到真实数据)而言,学习任务要简单很多,那么通常情况下,在训练多次生成器之后再训练一次判别器,可以加快模型的收敛。

对抗生成网络

对抗生成网络其背后基本思想是从训练库里获取很多训练样本,从而学习这些训练数据生成的概率分布。而实现的方法,是让两个网络相互竞争,‘玩一个游戏’。其中一个叫做生成器网络(Generator Network),它不断捕捉训练库里真实图片的概率分布,将输入的随机噪声(Random Noise)转变成新的样本(也就是假数据)。另一个叫做判别器网络(Discriminator Network),它可以同时观察真实和假造的数据,判断这个数据到底是不是真的。”

给定随机噪声向量 noise,生成模型 ${G}$生成符合真实数据分布的样本。 ${G}$ 训练信号来自于判别器 ${D(x)}$。${D(x)}$ 的学习目标是准确区分输入样本的来源,是真实数据还是生成数据,而生成器 ${D}$ 的学习目标是生成尽可能真实的数据,使得判别器 ${G}$ 认为生成数据是真实的。二者的目标较为对抗。

为什么需要生成模型

  • 对使用高维、复杂概率分布能力的有极好测试。
  • 为计划或模拟强化学习可能的未来。
  • 数据缺失:半监督学习。
  • 多模式输出。
  • 现实的生成任务。

思考

生成对抗网络需要事先有一部分真实的数据,这些数据可以没有标签(本身也用不到标签),生成器生成尽可能逼真的样本,判别器可以认为是一个二分类模型,判断是真实数据的概率是多少。

一个很重要的操作就是不要判别网络的参数发生变化,也就是不让它参数发生更新,只是把误差一直传,传到生成网络那块后更新生成网络的参数。这样就完成了生成网络的训练了。

GAN 的强大在于可以自动学习出原始真实样本集的数据分布,不管这个样本多么复杂。传统的机器学习方法,都是选择一个模型让数据去学,就是说,所有的这些方法都在直接或者间接的告诉数据该怎么映射一样,只是不同的映射方法能力不一样。而生成模型最后可以通过噪声生成一个完整的真实数据,说明生成模型已经掌握了从随机噪声到真实数据的分布规律了,有了这个规律,很容易就能生成真实数据。

参考

  1. 【GAN 货】生成式对抗网络资料荟萃(原理/教程/报告/论文/实战/资料库)
  2. 最简单易懂的GAN(生成对抗网络)教程:从理论到实践(附代码)
  3. GAN for NLP (论文笔记及解读)
  4. GAN (Generative Adversarial Network)
  5. 开发者自述:我是这样学习 GAN 的
  6. 花书《深度学习》
文章目录
  1. 1. Generative Adversarial Networks
    1. 1.1. 生成模型与判别模型
    2. 1.2. 极大似然估计
    3. 1.3. ${\text{KL}}$ Divergence
    4. 1.4. ${G}$ & ${D}$
    5. 1.5. ${\max_{D}V(G,D)}$
    6. 1.6. JS Divergence
    7. 1.7. 优化技巧
    8. 1.8. 对抗生成网络
    9. 1.9. 为什么需要生成模型
    10. 1.10. 思考
    11. 1.11. 参考