图像的生成模型,或者说图像模型(与语言模型相对应),是图像无监督学习的核心(可以以此解决一切逆问题,如超分辨率,降噪,inpaint,等等),也是图像有监督学习的重要基础。
本系列的最终目的,在于希望提出一种稳定,可解释,每一步都具有【数学和物理基础】的生成模型训练体系(包括网络架构,损失设计,训练算法,评估方法,等等)。
在此过程中,我们将看到,有些流传甚广的,著名的说法,实际存在漏洞和误区。
本系列的前后文见我的专栏。欢迎关注,欢迎讨论:
技术备忘录zhuanlan.zhihu.com本文,对于前文中一些可能难以理解的观点,作进一步的说明。
1. 生成模型的漏洞
考虑样本集 。这里
是噪音。这就是真实的模型。下文我们先暂时忽略降噪的问题。
我在前文曾说过,对于 的估计是核心问题,而且,对于
的估计,不见得需要 GAN 这种拐弯抹角的方法。
例如,一种最简单的思路,是先还原:
然后找到合理的插值方法。这同样可以通过 Deep Image Prior(下文简称 DIP)实现。
Deep image prior 不是秘密,是公开的论文。大家都知道,大家都不重视,没有人研究,都去研究相对不重要的事情,很令人失望。
而且,很多人没有深究如何还原 ,直接就试图去猜
。例如,目前的 GAN 甚至完全不能保证还原
,这是很大的漏洞,但是没有人去考虑。
因此我在上一篇中才会做一个弱智小实验,看看硬性还原 会怎样:
这种实验我会继续做。找到最佳的 G 架构,以及怎样用最小的 z 维数还原出 X,等等。
大家可能问,AE 系列就是还原 ,但是 AE 系列生成的图片很模糊啊?
- 通常的解释是因为 AE 用了 MLE,这在一定条件下是对的。
- 我认为,根本的解释是,常见 AE 用的网络太小,架构不好,所以不能完美还原。
- 在这种限制下,Perceptual loss 比 MLE 好。但如果网络够强,其实 MLE 也不见得不行。
- 当然,最终还是需要我称为 "Conceptual loss" 的事情(我也说不清这是啥)。
- 其实有了 loss 就相当于已经很理解
,所以这个问题是很微妙的。
在弱智小实验中,我们看到几百张图片配合 MLE,是可以记住的。但在这种网络规模和简单的架构下,图片很多就必然会越来越模糊。
所以我们需要想清楚最佳的 G 是怎样。
2. 模式坍塌的细节
模式坍塌是困扰 GAN 的常见问题。
应该是 Goodfellow 说过这个,他说,对于完美的 D,就最终会模式坍塌了(显然)。
所以很多人觉得,D 不能太完美。
在我看来,这个观点有问题。
首先,如果 G 固定输出和某个 一模一样的图片,那么,没错,现在的 GAN 中“分辨样本真实度的 D”,似乎就很难工作了(但是,我必须说,实际的 D 是在不断变动的,所以问题其实很复杂)。
完美的 D,是分辨 G 的输出的分布,这种 D 是不会出错的。我们的目标本来就是拟合分布。
如何输入分布?一种方法,是输入多个样本。这种 D,很多人想过了,例如这里面就很多:
https://arxiv.org/pdf/1606.03498.pdfarxiv.org但这可能还不是最好的做法。我认为,最好的做法需要从源头开始,从 G 的架构就想清楚。
例如,一个“可解释”的 G,有助于我们实现这个目标。今天有篇文章挺好:
https://zhuanlan.zhihu.com/p/51044703zhuanlan.zhihu.com其实,如果 G 坍塌了,真的就活不过来了吗?不一定。
- 因为,我们的训练过程,是 SGD,不是 GD。
- 所以,所有用积分观点看 GAN 的看法,都有漏洞。
正如 WGAN 的文章,他认为两个 delta 函数之间没有散度,这看法有漏洞,不符合实际。
- 因为,网络的输出的分布,是可以突然冒出来一个头的。
- 例如,由于网络是高度非线性的,可能样本 A 的梯度,让另一个本来没有梯度的样本 B 也享受到梯度。
- 例如,如果 G 一直生成
,我们换一个只认
的 D,那么 G 也得变(注意 D 是一直在变的,所以完全可以这样变)。
我又想了想,如果 D 对于所有 一视同仁,那么它最终会引导 G 跑出来(类似负采样)。但这里有一些细节问题,和训练的具体方法有关系。所以优化器对于现在的 GAN 很重要。
写到这里我发现确实有个细节。
现在的深度学习框架,采样样本,都是每个 epoch 打乱一次,全部走一遍。
这个采样方法有问题。
例如,这样就不可能出现连续采样同一样本的情况。
这个非常微妙,对于普通问题不影响。
但是,现在看来,说不定,这会和 GAN 的坍塌有关?稍后实验一下。
总之,我希望最终能有一个对于优化器不敏感的生成模型。
最后,再考虑“只看单个样本的真实度的 D”。
那么,下面这几种 G 都可以完美满足 D 的需求:
- “固定生成
的 G"
- “会根据不同
生成
或
的 G"
- “会根据不同
生成不同
的 G"
- “会根据不同
生成不同
以及其它
中的样本的 G"
并不能说,一定会坍塌到第 1 个。如果经常坍塌到第 1 个,说明整个系统有问题。
看一个几何图像,来自我 1 年多前的文章,这里的用法有点区别:
PENG Bo:GAN的几何图景:样本空间的Morse流,与鉴别网络D为何不可能真正鉴别真假zhuanlan.zhihu.com这里用这个图像说明另一个问题,这里想说的是,我们最终希望,输入不同的 z,可以流到不同的 以及其它
中的样本。这样就满足了 D = 1,也可以得到很好的样本。
所以这对应一种思路,就是先输入噪音图像(噪音的 D 应该 = 0),然后降噪。或者不同噪音对应不同的 D 的值,等等。未来我也试试。
总之,生成模型确实可以有很多思路。