概率推断在人工智能领域中广泛运用于不确定性的推理与经验学习,然而,实用的概率模型通常是非常复杂且维度很高的,进行精确的概率推断时常常会带来很高的计算代价。
采样方法就是一种高效的近似推断方法。假设我们要求f(x)对p(x)的期望,如式(1)所示,一种简单的方法就是,先得到从p(x)中采样的样本点,然后进行求平均,那么就得到了期望的近似估计,当采样点足够多时,结果会无限的接近真实的期望,如式(2)所示。
(1)
(2)
但是这样做的问题在于,我们通常不知道p(x)的形式,因为通常概率都被写为了配分函数的形式,而且常常没有归一化,不过未归一化的概率值是很容易求得的;另外,待采样的分布的维度通常很高,一些简单的采样方法在扩展到高维度时常常会遇到很多问题。
对于采样问题,我们一般的想法是从一个容易采样的分布中采样,然后通过一些手段转化为目标分布的样本点。
马尔可夫链蒙特卡洛方法借用了马尔可夫链的性质,即每一个状态只与其上一个状态有关,与其他状态无关。给定一个初始状态,确定转移概率,就可以确定一条马尔可夫链。为了保证能够从我们的目标分布中采样,我们希望转移概率能够满足式(3)(Fixed point equation),这样我们的样本点经过转移之后得到的新的样本点就还是落在目标分布上,也就达到了我们的目的。
(3)
但是在实践中上式一般不易满足,一般是通过保证(4)式来使(3)式满足,也即保证detailed balance,把(4)式两边求和就可得到(3)式,过程见(5)式。
(4)
(5)
满足detailed balance最简单的方法是为两边同时乘以一个接受率得到新的转移核。
(6)
假设我们找的转移核不满足细致平衡条件,让式(4)两边同时乘以式(6)中的接受率,新的式子就能保证满足细致平衡条件了。图一展示了推导过程:
图一
构造容易采样的提议分布,并从中采取样本点,通过上述接受率决定是否接受,这样的采样方法被称为Metropolis-Hasting(MH)算法。
吉布斯采样方法是MH算法的一种具体的形式。算法过程如图二所示:
图二
每次只采样本点的一个维度,把剩余的其他维度的值作为条件,采出某一个维度的值后,在随后的其他维度的采样中直接利用刚刚采出的新值。相比之下,MH算法是每一次把上一个点作为条件来采出新点,所有维度同时进行。
吉布斯采样算法的好处在于其操作相对来说比较简单,而且吉布斯采样的接受率是一。把吉布斯采样的条件分布放入接受率的表达式中,利用
技巧,可以发现
接受率右侧表达式分子分母相等,接受率恒为一。
汉密尔顿蒙特卡洛(HMC)采样是一种动力学采样方法,也是现如今最通用的采样方法。在MH算法与吉布斯采样方法中,下一个样本点与当前样本点之间的相关性都不可避免会很强,因为当前样本点是下一个样本点的条件。这样的采样路径是随机游走的,对目标分布的探索效率比较低下。
HMC通过引入辅助的动量变量,把待采样的变量作为位置变量,把二者纳入一个势能与动能守恒的动力学系统,通过采样点在动力学系统中随机的游走来得到两个变量的联合的采样点,舍去辅助变量,剩下的就是待采样的位置变量了。在探索目标分布时,位置变量的变化与能量的梯度(动量的大小)有关,这样的采样过程使得位置变量的变化可以更有针对性,而不是效率低下的随机游走。
首先,定义一个能量守恒的动力学系统:
(7)
其中H代表总能,U、K分别代表势能与动能,势能就是我们所要采的分布,动能一般设为高斯分布。
为了模拟动力学系统,采取离散化的方法,让动量半步更新,位置一步更新,具体如式(8-10)所示:
(8)
(9)
(10)
换成能量的形式:
图三
这样的离散化步骤也被称为leap frog,一般的HMC算法交替地进行着一系列的离散化步骤之后,对动量进行一个随机的更新,然后进行下一轮的离散化步骤。
观察图三中的离散化步骤,如果我们倒着执行这些步骤,其实可以从采样得到的下一个点重新回到上一个点,也就是说这样的采样转移核是可逆的,所以有:
(11)
根据接受率的表达式形式,由于上一个状态与下一个状态的能量是相同的,且上式两个转移概率相等,所以接受率应该为1;但是,HMC的过程其实是一种连续过程的离散化,图三中的步长越小,我们这个离散化的过程就越接近理想的连续过程(能量守恒的过程),HMC的动力学模拟过程中能量其实会有小的变动,那么HMC的接受率为:
(12)
如果完美的模拟了动力学系统,那么总能量应该是不变的,也就是说HMC的接受率应该恒为一,但是离散化步骤并不连续,难免会带来一些误差,使得真实的能量并不守恒,但即使有这样的影响,HMC的接受率通常还是很高,不影响它的广泛使用。
图四-1
图四-2
图四-1所示为一个动量与位置变量的动力学系统的能量变化的演示,左下角为总能量与动能和势能和,右下角圆圈所在坐标代表此处的动量与位置,这样的数值变化对应的动力学系统其实就是一个弹簧的简谐震动。对应的能量函数是
,那么对应的采样的分布也就是均值为0,方差为1的高斯分布。看图中弹簧的位置接近零势能点,弹簧会,移动的更快,那么在这一区域采样到的点似乎是少了,但是按照常理应该在中间采更多的点才对,因为图示的情况的初始值为动量为1,位置变量为-4,因此总能量为9,但在HMC中动量在每一轮中都服从标准高斯分布,正常情况下其实能量为9的情况并不多见,相空间大多数时间都集中在p,x都为0的点附近,如图四-2所示。
随机梯度下降采样算法的出现是因为现如今的机器学习规模越来越大,传统的传统采样算法面对如此巨大的数据集效率低下,于是有人从随机梯度下降算法哪里获得了灵感,希望借以提高采样的效率。比较成功的是Tianqi Chen等人的随机梯度汉密尔顿蒙特卡洛采样(SGHMC)。
如果简单地将SGD与HMC结合在一起,会出现一些问题,如式(13)所示,数据的批处理会给势能的梯度带来噪音,最终使得HMC不能很好的从目标分布上探索,SGHMC的核心贡献就是很好的解决了这个问题。
(13)
具体的做法是给动量项加上了一项摩擦项,来抵消掉了梯度上的噪音,具体的过程有严格的数学证明。
在2010年到2016年间随机梯度采样算法非常火热没吸引了众多研究人员的目光,现在该领域的研究已经接近饱和。
这方面代表性的工作有G2HMC与A-NICE-MC。
传统的HMC在离散化更新参数时是分布更新的,而且每次只更新动量或者位置变量中的一个,固定另一个,这样动量与位置变量的空间体积始终是不变的,这也称为HMC的体积不变性。图四-1是一个形象的展示,当位置变量不变,辅助变量(动量)发生变化时就会出现图示的变化,变化之前之后空间的体积是不变的。
图五
在G2HMC中给离散化步骤加上了偏置项与缩放项,这样的离散化步骤也就随之不再具有体积不变性,使得探索效率更高。G2HMC的离散化步骤依旧是可逆的,其中的缩放项与偏置项都由神经网络习得,损失函数设置为鼓励采样点之间距离远且接受率高,如图五所示。
图六
而A-NICE-MC,则是借用了对抗网络的思想来做采样。具体的,先通过自举法来产生样本作为训练样本,训练生成器生成样本来当做是对抗网络中的生成器生成的结果,其中生成器是一种体积保持流(NICE:Non-linear independent components estimation),其本质是一种可你的神经网络,训练这样的神经网络来生成样本点,训练好的神经网络就可以作为我们的可逆转移核,而且其具有神经网络强大的表达能力与非线性映射能力。再训练一个判别器来筛选得到的样本点,训练目标和G2HMC一样包括生成点与上一点的距离,不同之处是加上了一个MGAN的损失函数,如式(14)所示。开始训练后,随着自举点和判别器的质量逐渐增加,最终就会得到比较好的采样点。
(14)
但是这种方法的缺点显而易见,为了使得自举法得到的采样点的质量越来越好需要很长时间的训练,这样一来直接自举就能得到比较好的结果,用GAN来做采样的意义就不明显了。不过用文章的对抗训练做采样的方法得到的结果确实也能得到很好的效果,一开始的训练确实比较慢,但是模型训练好之后,就能用很低的代价得到高质量的采样点。另外,通过式(14)作为目标函数还有一个问题,通过这样的方式训练最终可能会使得接受率比较高,但是点与点之间的自相关性会很强,原因是生成器所使用的体积保持流为了使得自身的变换是可逆的,变换过程中是每次只对输入数据改变一半,这样使得相邻点的相关性更强,使得混合速率比较慢。文中提出了一种新颖的“对判别器”来减少自相关性,具体是当生成下一个点时,所依据的上一个点可能是生成器的点,也可能是真实的分布的采样点,这样训练判别器学会识别真假的“样本点对”,就会使得模型生成低自相关性的点。
在A-NICE-MC的源代码中,作者最终的代码里的NICE部分就加了注释说此处可以替换为RNVP,RNVP和NICE相似,但RNVP是一种体积不保持流,拥有比NICE更强的泛化能力,样本点拥有更低的自相关性,上面提到的G2HMC中用到的可逆转移核就是用RNVP构建的。
采样方法在贝叶斯推断中具有非常重要的地位,采样方法的发展也牵制着贝叶斯方法的应用程度。研究高效的,能够适应高维度分布的采样方法非常有意义。随着统计机器学习的火热,对采样方法的研究也逐渐多了起来。现有的采样方法面临的挑战是越来越大的数据集、与维度越来越大,越来越复杂的目标分布,未来采样方法的发展还是会致力于解决这些问题,近几年采样方法与神经网络的结合我认为正是采样未来的发展方向,除了深度学习,其他快速发展的机器学习领域如强化学习,元学习,或许也能为采样方法提供启示。总之,采样方法还有很多值得探索的方向,未来的发展不可限量。但是,我不建议CS的人把采样作为研究方向。