李宏毅《机器学习》总结 - GAN

GAN(Generative Adverserial Network),用于生成图片等

直观理解

算法的流程可理解为以下两步:
首先,有两个 network,分别是 generator(G) 和 discriminator(D)。其中 G 能根据参数输出图片,

  1. 固定 G,更新 D,使得 D 给 G 生成的图片尽量低分,给真实的非生成图片尽量高分
  2. 固定 D,更新 G,使得 D 给 G 生成的图片的分数越高越好

详细理解

对于无外界要求的情况(如生成插画,可能会有“黑头发”“蓝眼睛”等限制,现在先不考虑这个限制)
image
和之前模式一样,想要看到由 G 生成的 \(P_G\) 和 P_data 越接近越好,这个用一种散度 JS Div 来衡量。现在就想要找到最小的 G。
问题在于,JS Div 并不好求。如何做呢?
image
考虑如何寻找最好的 D,就是要让 \(V(G,D)\) 最大(上图),发现这个函数的意义实际上是求了个一个 cross entropy(因为,以 \(y\sim P_{data}\) 为例:求期望实际上是 \(\sum_y P(y)\times log D(y)\),发现 \(D(y)\) 实际上代表的是一个概率的分布,因此原式也可以写成 \(\sum_y D(y)\times log D(y)\),这不就是交叉熵去掉负号嘛!)
又因为最大化了 (交叉熵的负值),也就是最小化了交叉熵,可以发现 D 训练的本质就是训练了一个 binary classifier
此外,经过推导发现 \(\max V(D,G)\) 和前面提到的 div 有关,因此可以用 \(V(D,G)\) 代替之。

因此,可以把训练目标:\(G^*=\arg \min_G Div(P_G,P_{data})\) 改变为 \(G^*=\arg \min_G \max V(G,D)\) 了,这样,我们就通过从 \(G\)\(data\) sampling 来求得散度

JS Divergence 的问题

如果两个分布(如:G 和 data)没有相交的话,JS Div 的结果恒为 \(log 2\),这样就无视了距离,不好。
image

一种解决措施是把 JS Divergence 换成 W distance(WGAN)

WGAN

考虑两个分布 \(P\)\(Q\),定义他们两个的距离为 W distance,是用一个推土机把 \(P\) “推成” \(Q\) 的样子,所需要移动的距离
image

这样定义的好处就是,就算两个分布不相交,依然有高低之分。

image

这样就可以进行训练了。但是直接用 W distance,求解过程很复杂,需要进行一些估测:
image
其中,\(D\) 需要足够平滑,需要 maximize 期望之差,而这个式子的含义就是让在 data 中的图片,经过 D 之后的值,越大越好,而由 G 生成的图片的 D 越小越好
直观理解为什么足够平滑?因为不然的话可能 data 的值成 \(+\infty\) 了,而 G 的值成 \(-\infty\)
image
那么如何让 D 足够平滑呢?几种方案:
image

posted @ 2024-02-12 01:28  SkyRainWind  阅读(23)  评论(0编辑  收藏  举报