我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
这是我的李宏毅老师 GAN 系列第6篇笔记,GAN 系列:
小细节
如上图,我们的数据实际上是将高维的数据描述成了低维数据。
我们采样的数据对于数据分布来说太少了,很难有数据的重叠 overlap 。
What is the problem of JS divergence?
JS 散度存在一个问题,如果两个分布没有重合,其距离就是 log2 。如上图,两个数据分布接近时,其指标应该越来越好,但是其在逐渐接近的过程中,指标并没有变化。
如上,我们同时让分类问题变成一个回归问题。希望真实值接近1,假的数据接近 0 。
使用 Earth Mover’s Distance 代替 JS divergence 。
假设我们开了一台推土机,把 P 地方的土推到 Q 地方,推土机平均走的距离就是 Earth Mover’s Distance 。
如山,把土推到另一个分布,有好多不同的“推土”方法。因此,Earth Mover’s Distance 要求穷举所有的铲土的计划,取总距离最小的那个。
“推土方法”英文“moving plan”,可以用一个矩阵表示。
如上,相比 JS Divergence ,使用 Earth Mover’s Distance ,可以时刻衡量两分布见距离。
具体的推导李老师省去了。
如上,WGAN使用 V ( G , D ) V(G, D) V(G,D) 。这里要求 D D D 必须平滑,这样防止两个分布一直上升趋近于无穷。
而 Lipschitz Function 如上,1 - Lipschitz 表示输入变化总是大于输出。那参数有了这么多约束,如何解呢?如上,可以使用 Weight Clipping 训练。
如上,通过限制 D ( x ) D(x) D(x) 的梯度小于等于 1 ,来限制 D ∈ 1 − L i p s c h i t z D \in 1 - Lipschitz D∈1−Lipschitz 。
因此目标函数可以做如上改进。此外,假设 x ∼ P p e n a l t y x\sim P_{penalty} x∼Ppenalty,因为我们很难限制所有的 x x x 都满足 ∣ ∇ x D ( x ) ∣ ∣ ≤ 1 |\nabla_x D(x) ||\le 1 ∣∇xD(x)∣∣≤1 。
那么 P p e n a l t y P_{penalty} Ppenalty 长什么样呢?
如上,真实数据与生成数据见的数据,就是 P p e n a l t y P_{penalty} Ppenalty。尽管难以证明,但是这是有用且符合直觉的。
我们要求 P G P_G PG 慢慢移动到 P d a t a P_{data} Pdata ,因此只有其二者间的数据,才是值得采样的。
此外,在实际上,我们希望 ∣ ∣ ∇ x D ( x ) ∣ ∣ ||\nabla_x D(x)|| ∣∣∇xD(x)∣∣ 越接近1越好。如上。
还有一招 Spectrum Norm ,可以做到 WGAN 中的“每一处梯度都小于1”。
如上,李老师不准备讲细节,但是其“效果很强”。
如上,使用 autoencoder 作为 Discriminator 。
如上,我们希望 reconstruction 后与真实值做差,为 0 为最好(为真实数据)。0 for the best.
好处是:不需要 generator ,discriminator 可以使用真实数据预训练。
如上,我们希望真是数据对应分数接近于 0 ,但是其他地方的数据不必很负。设一个阈值就好。
如上,在训练时对 Loss 敏感一些,如果 Loss 小一些,则分数也稍微高一些,不需要压得太低。