MLE, Bayes, 生成模型:思考DL的理论细节 (1)

445 阅读3分钟
原文链接: zhuanlan.zhihu.com

1. 简单回顾 MLE

让我们从最大似然估计(MLE)说起。

令样本为 \{x_i\} \in X\,我们希望用 Q_\theta 模型拟合样本的分布。这里 \theta 是模型的参数。

若模型认为 x_i 的概率为 Q_\theta(x_i) ,且样本的采样为独立事件,那么,这样的模型参数 \theta 可最大化总概率:

\mathop{\arg\max}_{\theta} \prod_i Q_\theta(x_i)

这等价于:

\mathop{\arg\max}_{\theta} \sum_i \log Q_\theta(x_i)

若样本的实际分布是 p_x ,那么上式最终是:

\mathop{\arg\max}_{\theta} \int_X p_x(x) \log Q_\theta(x) \, dx

其中最大化的,无疑就是负交叉熵损失。


2. MLE 的问题,与 Bayes 估计

到此似乎是最基础的知识。但依我说,MLE 的优化目标,到此可能已经错了。

为什么?例如这种情况:

由于 MLE 只看最大概率,它可能走入一个深而窄的谷里面,这往往就是过拟合。很多文章也提到过,"平坦"的局部极小值,可能比全局最小值更好。

这里已经在暗中用了 Bayes 的观点。在 Bayes 观点下,简单的 MLE 就是错的。这里隐藏的先验分布和 \theta 有关。

那么,是否可以用类似下面的方法估计 \theta (这是后验期望估计,是一种 Bayes 估计):

\frac{\int_\theta \theta \cdot \prod_i Q_\theta(x_i) \, d\theta}{\int_\theta \prod_i Q_\theta(x_i) \, d\theta}

或者给出不同置信度下的 \theta 估计,等等?

但是,这样仍然有问题。例如下面的情况下,就容易会去对两个谷对应的 \theta 取平均,那么得到的会是很差的参数。

可以做得更精细一些,例如考虑 \theta 的稳定性等等。但总而言之,这里的问题是 \theta 的"正确" metric / 分布并不明确。

所以我们最好再用一个网络去学 \theta 的情况。现在的很多生成模型就有这样的意思,后续再讨论。


3. 生成模型

样本 x_i 并非随机,它来自于物理过程。之前在这篇文章介绍过一些类似的话题:

PENG Bo:深度学习与物理,有效场论,重整化群,简介1608.08225zhuanlan.zhihu.com图标

令样本的“物理生成模型”为 \widetilde{G} ,生成过程大致是这样:

\mathbb{R^d} \xrightarrow{p_z} z \in \mathbb{R^d}  \xrightarrow{\widetilde{G}} x \in \mathbb{R^k}  \quad \text{注意往往有 } k \gg d

根据 p_z 采样一个 d -维的编码 z ,送入生成模型,生成样本 x


那么,经典的问题是,这样得到的样本分布 p_x 是怎样的?

如果 \widetilde{G} 可逆可导(此时 k=d ),答案是:

p_x(x)=\operatorname{Jac}(\widetilde{G})|_x \; p_z(\widetilde{G}^{-1}(x))


这时我们有几点观察:

  • 其实,对于普通的采用 +/-/*/ReLU 的深度网络,即使 k \gg d ,也可以算出来 p_x。这个稍后看看是否算一下。
  • 可逆的生成模型 G 有很多好的性质(例如编码也很简单),但这时 z 的空间非常大,因为需要 d=k。关于此,OpenAI 做过值得一读的研究,其中的思路很明确,降低计算 Jacobian 的计算量,同时在损失函数中要求维数尽可能坍塌:
https://blog.openai.com/glow/blog.openai.com图标

Glow: Better Reversible Generative Models

Glow: Better Reversible Generative Modelsblog.openai.com图标
  • 更进一步的问题,是生成网络 G\widetilde{G} 的拟合过程。我的一点感觉,常用的转置卷积在此是有问题的,配合 attention 后有改善,但还是有问题。
  • 我们需要多思考自己的 G 到底在生成什么(例如从前 CoordConv 的研究方法),而不是盲目地只看训练和测试效果。
  • 其实d=k有它的道理!因为大部分编码对应噪音,我们需要噪音,因为图像本来就有噪音,没有噪音就模糊。这个问题我们后续继续谈,我有一个办法可以解决这种维数的诅咒!


后续继续这里的讨论,并看看常见的生成模型。欢迎大家讨论。