1.2.1 极大似然估计法
既然生成模型的核心是求解p(x),那么我们来考虑一个简单的问题,对于一批样本集合,是否可以通过直接统计样本的个数来对p(x)进行估计?这听起来是可行的,我们只需要对每一个样本统计频次,然后除以样本集合的总样本数进行概率归一化,即可得到关于p(x)的柱状分布图,如图1-2所示。但是当样本维度较大时,便会出现维数灾难问题。例如对于MNIST数据集中的图像,其维度为28×28=784,每个像素位置的可取数值为0或1,即概率分布共包含2784≈10236个样本点,也对应了大约10236个需要估计的概率数值。实际上,任何一个训练数据集都只能包含全部样本空间中的极小一部分样本点,并且每一张图像只能影响一个样本点的概率,对其他内容相似的样本点概率则不能产生任何影响,故这种计数统计模型不具备泛化性能。在实际操作中,我们不可能保存每一个样本点的概率数值,而是会使用参数化的概率密度函数pθ(x),其中θ为模型的参数。
图1-2 概率分布柱状图
我们先介绍使用极大似然估计法的生成模型,充分理解极大似然原理对理解生成模型有非常重要的意义。注意,并不是所有的生成模型都使用极大似然估计法,有些生成模型默认不使用,但是也可以做一些修改令其使用极大似然估计法,GAN就属于这一类。
极大似然估计法是对概率模型参数进行估计的一种方法,例如有一个包含N个样本的数据集{x(1),x(2),…,x(N)},数据集中每个样本都是从某个未知的概率分布pdata(x)中独立采样获得的,若我们已经知道pg(x)的形式,但是pg(x)的表达式里仍包含未知参数θ,那问题就变成如何使用数据集来估算pg(x)中的未知参数θ。例如pg(x)是一个均值和方差参数还未确定的正态分布,那么如何用样本估计均值和方差的准确数值?
在极大似然估计法中,首先计算所有样本的似然函数L(θ)为:
似然函数是一个关于模型参数θ的函数,当选择不同的参数θ时,似然函数的值是不同的,它描述了在当前参数θ下,使用模型分布pg(x;θ)产生数据集中所有样本的概率。一个朴素的想法是:在最好的模型参数θML下,产生数据集中的所有样本的概率是最大的,即
实际上,在计算机中,多个概率的乘积结果并不方便存储,例如计算过程中可能会出现数值下溢的问题,即对比较小的、接近于0的数进行四舍五入后成为0。我们可以对似然函数取对数(即log[L(θ)])来解决该问题,并且仍然通过求解最好的模型参数θML使对数似然函数最大,即
可以证明两者是等价的,但是将似然函数取对数后会把概率乘积形式转换为对数求和的形式,大大方便了计算。继续将其展开后,有
可以发现,使用极大似然估计法时,每个样本xi都希望拉高它所对应的模型概率值pg(x(i);θ),如图1-3所示。但是由于所有样本的密度函数pg(x(i);θ)的总和必须是1,所以我们不可能将所有样本点都拉高到最大的概率。换句话说,一个样本点的概率密度函数值被拉高将不可避免地使其他点的函数值被拉低,最终达到一个平衡态。
图1-3 极大似然估计法原理
我们也可以将上式除以N,此时极大似然估计最大化的目标是在经验分布下使得概率对数的期望值最大,即
另一种对极大似然估计的理解是:极大似然估计本质是最小化训练集上的经验分布和模型分布pg(x;θ)之间的KL散度值,即
而KL散度的表达式为:
由于θ值与第一项无关,故只考虑第二项,有
可以发现两者是完全一样的,也就是说极大似然估计就是希望pg(x;θ)和pdata(x)尽量相似,最好无任何差异(KL散度值为0),这与生成模型的思想是一致的。但实际的生成模型一般不可能提前知道pg(x;θ)的表达式形式,只需要估计表达式中的参数,因为实际样本数据非常复杂,往往对pg(x;θ)无任何先验知识,只能对其进行一些形式上的假设或近似。
很多生成模型可以使用最大似然的原理进行训练,在得到关于参数θ的似然函数L(θ)后,我们只需最大化似然函数即可,只是不同模型的差异在于如何表达或者近似表达似然函数L(θ)。图1-1的左边分支均为显式生成模型,其中完全可见置信网络模型对pg(x;θ)做出了形式上的假设,而流模型则通过定义一系列非线性变换给出了pg(x;θ)的表达式,这两个模型其实都给出了似然函数L(θ)的确定表达式;变分自编码器模型则采用近似的方法,只获得了对数似然函数log[L(θ)]的一个下界,通过最大化该下界近似地实现极大似然;玻尔兹曼机使用马尔可夫链对似然函数的梯度进行了近似。接下来,我们将分别介绍这些模型,并讨论它们的优缺点。