什么是机器学习中的“生成”

本文介绍机器学习中的生成式任务以及神经网络在其中的作用.

神经网络, 一言以蔽之, 就是个函数拟合器. 在思考神经网络时, 我们实际上思考的是它要拟合的函数, 后者通常是根据一些人为规定的假设推导得到的. 至于神经网络为什么能够很好地做函数拟合, 仍然是未解之谜.

首先, 我们给出假设1:

给定一个数据集, 我们假设其中的样本全都是从一个理想分布\(q\)中采样得到的.

这个假设是如此的基本和符合直觉, 以至于我们可以不把它当成一个假设, 而是承认为一个事实.

很自然地想到, 如果我们可以得到\(q\), 继续从中采样, 就可以得到源源不断的新样本, 也就是实现了所谓的"生成".

然而, \(q\)完全是未知的, 我们不知道它的形式 (是正态分布还是均匀分布, 抑或是一个奇形怪状的分布), 也不知道它的参数 (假如是均匀分布, 我们不知道它的定义域, 不知道一共有多少个可能的结果).

为此, 我们提出假设2:

我们假设\(q\)有一个确定的形式, 然后从数据集来估计\(q\)参数, 例如, 我们经常假设\(q\)是一个正态分布, \[ q(x)=\mathcal{N}\left( \mu, \sigma^2 \right) , \] 其中, 参数\(\mu\), \(\sigma\)是根据数据集估计得到的.

自然, \(q\)未必真的是一个正态分布, 即使是, 它的\(\mu\)\(\sigma\)也未必等于数据集中估计得到的\(\mu\)\(\sigma\), 但我们总需要使用一些假设才能进行数学推导, 而在所有假设中, "假设2"已经是条件很少的了. 我们可以再去掉一些条件, 比如, 我们可以不固定\(q\)的形式, 或者不固定\(\mu\)\(\sigma\)的值, 问题也会变得难解决得多.

在遵循如上假设后, 我们已经有了一个已知的\(q\), 其无论是形式还是参数都是完全确定的. 在deep learning中, 我们用一个神经网络\(p_\theta\)来拟合它.

很多人会疑惑: 既然假设后的\(q\)是已知的 (在这里是\(q(x)=\mathcal{N}\left( \mu, \sigma^2 \right)\)), 为什么我们还要拟合它? 直接用这个\(q\)不就行了?

原因有二:

  1. 首先, 我们假设的\(q\)和理想情况的\(q\)有巨大的差别, 所以直接使用前者的效果是很差的. 之前也说过, 理想情况的\(q\)未必就是一个正态分布, 其参数也未必就等于从数据集中统计得到的那些值.

  2. 其次, 神经网络\(p_\theta\)的拟合效果非常好. 尽管它被设计为只拟合假设的\(q\), 但是比假设的\(q\)更逼近真实的\(q\)! 这种拟合能力是被无数次工程实践证明的, 目前还没有可靠的解释.

    我们说神经网络作为函数拟合器的效果很好, 那自然就存在一些函数拟合器的效果不好, 例如例如傅立叶级数, 泰勒级数等等.

举个例子, 理想情况的\(q\)可能是一个与正态分布相似, 但有些微褶皱的分布, 我们假设的\(q\)是一个正态分布, 而神经网络\(p_\theta\), 只要训练得够好, 可能是一个与正态分布相似并带有另一些褶皱的分布, 虽然它和理想的\(q\)的褶皱未必完全相同, 但也比假设的\(q\)要好了.

具体来说, 为了让\(p_\theta\)拟合得足够好, 我们会用以下方法. 注意, 理想的\(q\)是未知的, 我们接下来讨论的\(q\)全都是假设的\(q\).

  1. 首先, 将\(p_\theta\)设计为与\(q\)相同形式的分布, 一般是正态分布.
  2. 通过设计loss function, 使得\(p_\theta\)逼近\(q\). "逼近"可以从很多种层面进行, 有些方法只要求逼近\(q\)的期望; 有些方法会要求同时逼近期望和方差; 有些方法就只是让两个分布的KL divergence接近.

实际任务可能比上面说的复杂, 因为我们会使用更小的假设 (不会比之前的小太多), 比如说\(\mu\)\(\sigma\)不再被简单地假设为两个常量, 而是被假设为关于其他变量的函数, 这样一来, \(\mu\)\(\sigma\)的估计就变复杂了 (但一定可解). 例如, 在经典的duffusion model中, \(\mu\)被假设为一个关于时间\(t\), 原始样本\(x_0\) 和其他一些数据的函数.

注意, 我们假设的\(q\)一定是可解的, 即一定可以根据已有的信息(比如数据集)算出来. 一个不可解的函数无法被拟合.