当前位置: 代码迷 >> 综合 >> 【李宏毅2020 ML/DL】P77 Generative Adversarial Network | Theory behind GAN
  详细解决方案

【李宏毅2020 ML/DL】P77 Generative Adversarial Network | Theory behind GAN

热度:13   发布时间:2024-02-08 03:09:17.0

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

这是我的李宏毅老师 GAN 系列第4篇笔记,GAN 系列:

  • 1:Basic Idea
  • 2:Conditional GAN
  • 3:Unsupervised Conditional Generation

本节内容综述

  1. 今天讨论的是GAN原始文章的一些解释,可能会与之前的讨论有些冲突,这也是至今为解释的问题。
  2. 首先我们的数据都是高维空间中的点,见 Generation 。之前讨论过,对于概率分布,我们可以使用极大似然估计来拟合。发现,还可理解为目标值为求分布最小KL 散度。问题是,拟合的分布未必是高斯分布的(或者说我们拟合的分布是不知道公式无法求散度的),那么该怎么估计呢?
  3. 承接 2 ,这就是 GAN 的神奇之处,我们可以用 Discriminator 来接近、评价“散度”这个指标。见How to define a general P_G?
  4. How to define a general P_G? 我们假设了 生成数据与真是数据分布散度越大,D(x)越好分辨真伪(或者说,原论文中D(x)的更新目标设定是成立的)。下面从数学上来证明。见 max V(G,D)。发现,实际上这个更新式就在最大化 JSD (Jensen-Shannon divergence)。
  5. 而基于上述结论,实际上就是在做 G 与 D 的极大极小博弈。见 Algorithm 。
  6. 实际上怎么做的 In practice … 。
  7. 目标函数在实际应用中有一些改动 Objective Function for Generator in Real Implementation 。
  8. 最后用直白的方式总结一下 Intuition
  9. 引出问题:Can we consider discriminator as evaluation function?

文章目录

  • 本节内容综述
  • 小细节
      • Generation
      • How to define a general P_G?
      • max V(G,D)
      • Algorithm
      • In practice ...
      • Objective Function for Generator in Real Implementation
      • Intuition
      • Question?

小细节

Generation


如图,数据是高维空间中的点。我们希望机器找出数据在高位空间中的分布。

我们可以使用极大似然估计来拟合。

极大似然估计,也可以理解为最小化 KL Divergence(KL散度) 。如上,我们将下式

a r g max ? θ X P d a t a ( x ) l o g P G ( x ; θ ) d x arg\max_{\theta}\int_X P_{data}(x)logP_G (x;\theta)dx

变为

a r g max ? θ X P d a t a ( x ) l o g P G ( x ; θ ) d x ? x P d a t a ( x ) l o g P d a t a ( x ) d x arg\max_{\theta}\int_X P_{data}(x)logP_G (x;\theta)dx-\int_x P_{data}(x)logP_{data}(x)dx

之所以可以这么变换,是因为后面的这项与 P G ( x ; θ ) P_G(x;\theta) 一点关系都没有。

而上式正好为

a r g min ? θ K L ( P d a t a P G ) arg \min_\theta KL(P_{data} || P_G)

OK,那么现在的问题是: P G P_G 是高斯分布的话,存在很多局限性。 P G P_G 不是高斯分布的话,怎么求极大似然估计呢?

How to define a general P_G?


如上,我们现在要找一个 Generator ,达成 P G P_G P d a t a P_{data} 的KL散度最小。

但问题是,我们不知道 P P 的公式,因此无法直接计算。

如上的 V ( G , D ) V(G, D) 公式,如果:

  • x 是从 data 中来的,那么我们希望 D ( x ) D(x) 越大越好;
  • x 是从 P G P_G 中生成出来的,那么我们希望 D ( x ) D(x) 越小越好。

那实际上,在训练时就可以使用下式达到上述目标:

D ? = a r g max ? D V ( D , G ) D^* = arg\max_D V(D,G)

此外,上式与 KL 散度是直接关联的。


如上图,大的散度让 D(x) 更容易做分辨真假的工作。

max V(G,D)


如上, G 固定,找一个 D 使 V 最大。

注意有一个假设: D ( x ) D(x) 可以是任何函数,可以产生任何值。

接下来,设置代数如上,进行微分。

接下来,将极大值点带回 V 。然后为了接近 KL 散度的形式,进行一些整理,如红字。

发现,实际上后面的项就是 Jensen-Shannon divergence 。

Algorithm


于是,我们的总目标就如上图。图中下部分三个坐标轴中,横坐标代表选择某个 Discriminator 。红点代表 D 会努力接近的部分。但是 G 会让关系来到 G 3 G_3 。因为这样,G 才达到自己的目标。这像是一种博弈

依次训练 G,D 并且循环,我个人理解为一种博弈均衡解的寻找。

如上,在优化 G 时,这个 max ? D \max_D 其实也是可以微分的。我们之前学过 maxout 激活函数。

因此,如上,我们可以进行迭代。类似包络定理

但是,应注意,改变 G 后,可能会令 D 陷入局部最优。

如上,因此注意,每次不应该把 G 更新太多。

In practice …


我们在实际中进行的优化函数如上。而这是实际上就是一个二分类问题。

因此,最后总结起来,算法如上。注意,在 G 的更新中,同样使用该更新式,但是目标变为最小化。式子的前一项与 G 无关,因此不管。并且,不能更新 G 太多,因此只更新 1 次每一步。并且,实际情况中,很难收敛。

Objective Function for Generator in Real Implementation


如上,还可以将目标中 E x ? P G [ l o g ( 1 ? D ( x ) ) ] E_{x\sim P_G}[log(1-D(x))] 改为 E x ? P G [ ? l o g ( D ( x ) ) ] E_{x\sim P_G}[-log(D(x))] ,让初始的下降速度变快。但实际上,二者差别不大。

Intuition


这个例子中,生成的数据分布逐渐接近真实数据分布,导致 Discriminator 坏掉,而此时生成的数据就很接近真实值了。

Question?


如上,本节课的内容(参考自 Ian Goodfellow)与图中 Yann Lecun 的幻灯片中是有些矛盾的。Yann Lecun 认为 Discriminator 应该反应数据的分布,而非烂掉。

到底谁是对的呢?目前尚无定论。

或许我们可以通过实验理解:训练完的 GAN ,其 Discriminator 没有烂掉,也不完全反应数据分布。

  相关解决方案