所以两者的比较就是:在每一个滤镜层,CNN是把大图片的重要特征提取出来,一步一步地减小图片尺寸。而DCGAN是把小图片(小数组)的特征放大,并排列成新图片。这里,作为DCGAN的输入的最初的那组小数据就是我们刚刚讲的噪声数据。
下面几页幻灯片给出了一些案例效果。
因为图片本身就是个 RGB 的矩阵,所以我们甚至可以通过向量加减来得到一些有趣的运算结果: 戴墨镜的男人 - 不戴墨镜的男人 + 不戴墨镜的女人 = 戴墨镜的女人 熟悉 NLP 的同学可能发现了,这就很像 word2vec 里面的:king - man + woman = queen。做个向量/矩阵加减并不难,难的是把加减后得到的向量/矩阵还原成「图义」上代表的图片。在 NLP 中,word2vec 是把向量对应到有意义的词;在这里,DCGAN 是把矩阵对应到有意义的图片。 刚刚我们讲了 J(G) 的两种方法,它们给 GAN 带来了两种不同的求解方式。 除了以上提到的两种书写 J(G) 的方法,最近的几篇论文又提出了一些新观点。熟悉统计学科的同学应该都知道,说到 JS 距离(也就是刚刚在 minimax 处提到的),就会想到 KL 距离;它们都是统计学科中常用的散度(divergence)方程。
散度方程是我们用来创造目标函数的基础。 GAN 作为一个全由神经网络构造并通过类 SGD 方法优化的模型,目标函数的选择是至关重要的。Ian 给我们展示了一下选择好的散度方程(并转化成 GAN 所需的目标函数)的重要性:
这里,Q 指的是我们手头噪音数据的分布,P 指的是需要找寻的目标分布。 首先,我们要知道的是,求最大似然(Maximum Likelihood)可以被看作是使 KL 距离最小化的方法。怎么解释?你自己化简一下 KL 公式就能知道:
其中 P、Q 都以 x 为变量;并且 P 是真实数据分类,
因此是个常数,
之中也只有(logQ)部分是变量,于是我们把公式化简成:
即正比于-logQ。 在严肃的表示中,Q 应该写为 P(x|θ);其中 P 是模型,θ是参数,那么,原式也就是一个负的最大似然(详见前面的相应部分)。 不管是 KL(Q || P) 还是 KL(P || Q),它们写出来都是一种类 Maximal Likelihood(最大似然)的表达形式。我们会把这类 G 的目标函数的书写方法算作一类。其实,在最近的各种论文中也提出,其实我们可以用类 GAN 的算法来最小化任何 f-divergence 方程。 但是,在之后的几篇论文中,很多学者(包括 Ian 本人)都提到,使用 KL(Q || P) 更能模拟出我们所面临的情景。而本质上讲,标准的 Maximum Likelihood 思维写出来就应该是 KL(P || Q) 的形式。 这是什么意思呢?这个过程与解释比较复杂,高阶玩家可以阅读 GoodFellow 2016 年的新论文,我这里给大家用简单的语言来说明一下: 首先,不管是 Q 在前还是 P 在前,面对无限多的数据的时候,我们都可以最终学到完美符合我们心声的真实数据分布 P。但是问题就在于,现实生活中,我们拿到的数据是有限的。我们的学习过程可能不能持续到最后模型完美的时刻。所以这里,区别就出现了:根据 KL 公式的理论意义,KL(P || Q) 里的 Q 是用来拟合真实数据 P 的,它会极大地想要解释全部 P 的内涵(overgeneralization)。这时候,遇到多模态(multimodal)的情况(比如一张图中的双峰,羞羞),KL(P || Q) 会想要最大地覆盖两座峰。如果此时数据并不够多,它会在覆盖到一半的路上就停了下来。 相反,KL(Q || P) 是一种 undergeneralization 的情况。一个被优化的 Q 一般会先想着去覆盖一个比较大的峰,有空了再去看另一个峰。 (责任编辑:本港台直播) |