自动微分变分推断【ADVI】
【摘要】概率建模是迭代进行的。一位科学家假设一个简单模型,将其拟合到数据中,根据分析对其进行改进,然后重复。然而,将复杂模型拟合到大数据是其中的一个瓶颈。为新模型推导算法在数学和计算上都具有挑战性,这造成很难有效地循环执行这些步骤。为此,我们开发了自动微分变分推断 (ADVI)。使用我们的方法,科学家只提供一个概率模型和一个数据集,没有别的要求。ADVI 会自动推导出一个有效的变分推断算法,让科学家有时间提炼和探索更多模型。ADVI 不需要共轭假设,能够支持更广泛的模型。我们研究了 个不同模型的 ADVI ,并将其应用于具有数百万个观测值的数据集。ADVI 已经被集成到 Stan
概率编程系统中,可以立即使用。
【原文】Alp Kucukelbir, Dustin Tran, Rajesh Ranganath et al.(2016), Automatic Differentiation Variational Inference. ICLR, 2016. arXiv:1603.00788
1 问题提出
我们开发了一种能够为复杂概率模型自动推导出变分推断算法的新方法,并在概率编程系统 Stan
中实现了该方法,让用户可以用直观的编程语言定义模型,然后将该模型编译成一个执行推断的可执行文件。该方法能够在广泛的概率模型类别上对大型数据集进行快速变分推断。
图 14 给出了一个例子。假设我们要分析人们如何驾车在城市中穿行,现有一个包含了一年中所有出租车行程的数据集,共有 170 万条轨迹。为了探索这些数据中潜在的模式,我们提出了一个具有未知数量组份的混合模型。这是我们为了适合大型数据集而定义的一个非共轭模型。在过去,我们必须人工推导出可扩展到大数据的推断算法;但在本方法中,只需编写和编译一个 Stan
程序,即可在几分钟内拟合模型并轻松地分析结果。
图14:随机采样的五万条出租车轨迹图。不同的颜色代表了 30 个高斯混合组份以及与其相关的出租车轨迹。
本研究属于概率建模领域,它已成为定制化数据分析的强大语言。概率建模能够让我们以形式化的数学方式表达对数据的假设,然后推导出能够利用该假设计算观测数据集的算法。它对统计学
和机器学习
中的无数应用产生了影响,包括自然语言处理、语音识别、计算机视觉、种群遗传学和计算神经科学。
概率建模导致了一个自然的研究周期:
- 首先,一位科学家首先使用领域知识来假设一个包含隐变量的简单模型;
- 然后,他使用推断算法从数据中推断出这些隐变量;
- 接下来,他分析结果并确定了模型的工作原理和不足之处;
- 最后,他对模型做出调整和改进,并重复上述过程。
当我们循环执行这些步骤时,最终会找到一个具有表现力、可解释性和可用性的模型(Gelman 等人,2013 年;Blei,2014 年)。
机器学习的一个目标是使该过程变得容易,而循环此过程其实并不容易。我们研究的数据往往庞大而复杂;因此,希望提出更为丰富的概率模型并扩大其适用规模。但是使用此类模型通常需要复杂的算法,而且这些算法很难推导、实现和扩展。这使得科学家无法充分、高效地利用概率建模周期,形成了明显的瓶颈。
此问题激发了概率编程和自动推断的重要思想。概率编程允许科学家将概率模型编写成计算机程序,然后将其编译成一个高效的推断执行文件。自动推断是此类系统的支柱,它输入一个概率模型( 表达为一个程序 ),并输出一个用于计算的有效算法。以前的自动推断方法主要依赖于马尔可夫链蒙特卡罗 (MCMC) 算法,其结果是成功的,但对于许多实际应用来说, MCMC 太慢了。
我们通过变分推断来解决这个问题,这是可以替代 MCMC 的一种更快的方法,已被用于许多大规模问题(Blei 等人,2016 年)。尽管变分推断是一种很有前途的方法,但开发变分推断算法需要繁琐的、特定于模型的公式推导和实现,因此尚未在概率编程中得到广泛使用。
本文实现了可扩展变分推断算法的自动化推导。我们的方法建立在黑盒变分推断想法基础上,以充分发挥现代概率编程语言的隐变量空间变换、联合概率分布自动求导等的优势。我们称之为 自动微分变分推断 (ADVI) 。该方法为变分推断提供了一种自动化解决方案:输入概率模型和数据集;输出关于模型隐变量的后验推断。ADVI 已经在概率编程系统 Stan
中得到了实现和部署( Stan
开发团队,2015 年)。
Stan
中的 ADVI 解决了上述概率建模周期的计算瓶颈,使科学家能够轻松提出概率模型、分析大型数据集并修改模型,而无需过多操心推导和计算问题。 ADVI 通过为大量模型提供自动化和可扩展的变分推断实现概率建模周期的循环,本文第 3 节和第 4 节介绍了 10 个概率建模的范例,其中包括对 170 万条出租车轨迹数据的渐进建模和分析。
2 技术摘要
形式上,概率模型定义了观测值 和隐变量 的联合分布 。推断任务根据给定的观测数据 计算隐变量的后验条件分布 p(θ|x) 。后验能够揭示数据中隐含的模式,而且通过后验可以生成新数据的预测分布。问题在于:对于很多模型而言,后验是难以计算的。
变分推断将计算后验的任务转化为优化问题。该方法通常假设一个参数化的分布族 ,然后通过优化努力去寻找使 Kullback-Leibler (KL) 散度最小化的那个族成员。以前使用变分推断方法,需要科学家自己定义、开发和实现推断过程:指定适合模型的变分族、计算相应的目标函数、求导数并运行基于梯度或坐标上升的优化算法。
ADVI 自动化地解决了该问题。用户只需定义模型并表示为程序,ADVI 就能够自动生成相应的变分算法。其思想是先将推断问题自动转化到一个公共空间中,然后再求解变分优化。在公共空间中做处理可以解决大多数类型模型的变分推断问题。
更具体地说,ADVI 遵循如下步骤:
1. 将输入模型转换为具有无约束实值隐变量的新模型。
具体来说,它将 转换为 ,其中从 到 的映射被构建到联合分布中。这消除了对隐变量 的所有原始约束。然后 ADVI 定义变换变量 上的对应变分问题,即最小化 。通过该变换,所有隐变量都被定义在同一个空间上,进而使得 ADVI 能够对所有模型使用相同的变分族。
2. 将变分目标函数的梯度转换为变分分布 上的期望。
这涉及对数联合分布相对于隐变量的梯度 。将梯度表示为期望值为蒙特卡罗方法近似打开了大门(Robertand Casella,1999)。
3. 进一步利用标准高斯分布对梯度实施重参数化。
AVDI 在变分族中使用了另外一个变换。该转换只需从标准高斯中采样,即可使 ADVI 有效地计算蒙特卡罗近似(Kingma 和 Welling,2014 年;Rezende 等人,2014 年)。
4. 使用含噪声梯度来优化变分分布(Robbins 和 Monro,1951 年)。
在实践中,自适应地调整步长序列以提供良好的收敛性(Bottou,2012)。
我们在 Stan
系统中开发了 ADVI,它提供了两种非常重要的概率模型自动计算。首先,Stan
提供了一个转换库,能够在不改变联合分布的情况下,将各种受约束的隐变量(例如:正实值隐变量)转换为不受约束的隐变量,即上述步骤中的第 1 步。 其次,Stan
实现了 的自动微分计算(Carpenter 等人,2015 年;Baydin 等人,2015 年)。在计算 ADVI 目标函数的梯度时(上述步骤中的在第 2 步),这些导数起到至关重要的作用。
本文第 2 节介绍了 ADVI 方法,公开了上述每个步骤的细节,并提出了具体算法。第 3 节从准确性、随机性以及对转换的敏感性等方面,分析了 ADVI 的特性。第 4 节将 ADVI 应用于一系列概率模型,并与 MCMC 采样技术进行速度比较。研究中使用了具有数百万个观测值的数据集。第 5 节以讨论结束本文。
3 自动微分变分推断
4 ADVI 的性质
5 ADVI 实践
6 讨论
我们提出了自动微分变分推断 (ADVI),这是一种适用于一大类概率模型的变分推断工具。主要思想是将隐变量转换到公共空间。在这个公共空间中处理变分推断问题可以解决大多数类型模型的推断问题。我们使用十种不同类型的概率模型研究了 ADVI;展示了在实践中使用 ADVI 的简洁性和可用性。我们还在 Stan 中开发和部署了 ADVI,使 ADVI 可以供所有人使用。
后续还有几种可以研究的方向:
(1)提高参数空间变换的准确性。
正如在 3.3 节中展示的,ADVI 对将受限参数空间映射到实数坐标空间的变换比较敏感。[Dinh et al., 2014] 和 [Rezendeand Mohamed, 2015] 使用一系列简单变换来提高准确性。[Tran et al., 2016] 设置了一个高斯过程来学习最优变换,并证明其作为通用逼近器的表达能力。另外,有一类分层变分模型将这些复杂分布扩展到了离散隐变量模型 [Ranganath et al., 2015] 。
(2)改进优化算法。
ADVI 使用一阶自动微分来实现随机梯度上升。更高阶的梯度可以实现更快的收敛;但计算高阶梯度需要更大计算成本 [Fan et al., 2015]。使用线搜索 [Mahsereci 和 Hennig,2015]、非共轭模型自然梯度方法 [Khan et al.,2015] 进行优化可以提高收敛速度和鲁棒性。
(3)启发式渐进优化。
有两件事会影响 ADVI 收敛:初始化和步长自适应调整。我们在实数坐标空间中将 ADVI 初始化为标准高斯。而更好的启发式方法应当可以适应基于矩匹配的模型和数据集。我们使用有限搜索来自适应地调整步长,而更好的启发式方法应当可以避免这种额外计算。
(4)概率编程。
我们在设计和部署 ADVI 时主要考虑了 Stan。因此,专注于可微的概率模型类型。那么如何将 ADVI 扩展到离散隐变量呢?一种方法是让 ADVI 对这些变量使用黑盒梯度估计器(Ranganath 等,2014)。这需要注意,因为这些离散隐变量的梯度将比可微隐变量的梯度表现出更高的方差 (参见第 3.2 节)。随着对离散隐变量的支持,ADVI 的修改版本应当可以扩展到更一般的概率编程系统,例如 Church [Goodman et al.,2008]、Figaro[Pfeffer,2009]、Venture [Mansinghka et al.,2014] 和 Anglican [Wood et al., 2014]。