条件随机场介绍(5)—— An Introduction to Conditional Random Fields

时间:2021-05-25 11:49:11

5. 参数估计

本节我们讨论如何估计条件随机场的参数\(\theta = \{ \theta_k \}\)。在最简单最典型情况下,我们面对的数据是完全标注的独立数据,但是也有关于半监督学习的条件随机场、带隐变量的条件随机场,以及用于关系学习的条件随机场等的研究。

训练条件随机场的一种方法是极大似然估计,也就是说要确定那些能使训练数据出现概率最高的模型参数。理论上来说,使用该方法时与逻辑回归的训练相似(逻辑回归与条件随机场的关系参见第2部分)。主要区别在于计算量:条件随机场与简单分类器相比有更多的参数和更复杂的结构,因此训练起来也更加复杂。

在树结构的条件随机场中,可以利用数值优化算法确定极大似然估计的参数。一般情况下,将第4.1节介绍的推断算法作为数值优化过程的子序。推断算法用于计算似然函数的值及梯度。关键在于,树状条件随机场的似然函数是参数的凸函数,因此存在收敛至最优解的高效优化算法。

本部分首先介绍极线性链条件随机场(5.1.1节)和任意图结构条件随机场(5.1.2节)的极大似然估计方法,包括含有隐变量的情况。然后介绍两种利用数据的独立同分布性质提高参数估计速度的方法:随机梯度下降(5.2节)和多线程训练(5.3节)。

对于任意结构的条件随机场,精确的极大似然估计训练是不可行的,需要利用近似方法。总的来说有两种近似方法。第一种方法,利用容易处理的函数对似然函数进行近似,称为代理似然(surrogate likelihood),然后用数值方法优化代理似然函数。第二种方法是对边缘分布进行近似的方法。当极大似然训练算法需要精确的边缘分布时,利用近似推断算法计算近似边缘分布来替代。在使用这种方法时一定要注意,近似推断和训练过程之间的复杂相互作用可能会产生出乎意料的结果。第5.4节讨论这个问题。

5.1 极大似然估计

5.1.1 线性链条件随机场

在线性链条件随机场中,极大似然估计的参数可以利用数值优化方法确定。给定独立同分布的训练数据\(\mathcal{D}=\{\mathbf{x}^{(i)},\mathbf{y}^{(i)} \}_{i=1}^N\),其中\(\mathbf{x}^{(i)}=\{\mathbf{x}_1^{(i)},\mathbf{x}_2^{(i)},\dots,\mathbf{x}_T^{(i)}\}\)为输入序列,\(\mathbf{y}^{(i)}=\{y_1^{(i)},y_2^{(i)},\dots,y_T^{(i)}\}\)为需要预测的输出序列。为了简化符号标记,假设每个训练序列\(\mathbf{x}^{(i)}\)具有相同的长度\(T\)。一般情况下,序列的长度是不一样的,即\(T\)依赖于\(i\)。不过下面讨论的方法经过简单的改变即能够覆盖到这种情况。

一般利用惩罚极大似然(penalized maximum likelihood)方法估计参数。由于我们的建模对象是条件分布,因此适用下式所示的对数似然,也称为条件对数似然(conditional log likelihood),
\[\ell (\theta) = \sum_{i=1}^N \log p(\mathbf{y}^{(i)}| \mathbf{x}^{(i)};\theta).\tag{5.1}\]
使得\(\ell(\theta)\)最大化的参数为\(\hat{\theta}_{\text{ML}}=\sup_\theta \ell(\theta)\)

要理解条件似然\(p(\mathbf{y}|\mathbf{x};\theta)\),首先设想将其与任意的先验分布\(p(\mathbf{x};\theta')\)相结合,构成联合分布\(p(\mathbf{y},\mathbf{x})\)。然后考虑联合对数似然
\[\log p(\mathbf{y},\mathbf{x};\theta) = \log p(\mathbf{y}|\mathbf{x};\theta) + \log p(\mathbf{x};\theta'),\tag{5.2}\]
注意\(p(\mathbf{x};\theta')\)不依赖条件分布的参数\(\theta\)。如果不需要估计\(p(\mathbf{x})\),那么当计算\(\theta\)的极大似然估计时,我们可以将上式第二项去除,于是可得式(5.1)。

将条件随机场(式2.18)代入式(5.1):
\[\ell(\theta) = \sum_{i=1}^N \sum_{t=1}^T\sum_{k=1}^K \theta_kf_k(y_t^{(i)},y_{t-1}^{(i)},\mathbf{x}_t^{(i)}) - \sum_{i-1}^N \log Z(\mathbf{x}^{(i)}),\tag{5.3}\]
一般情况下,待估计参数量量很大,可能高达数十万。为了避免过学习,需要使用规则化(regularization)方法。这种方法对范数(norm)太大的权值向量进行惩罚。常用的惩罚方法采用\(\theta\)的欧几里得范数,并利用规则化参数(regularization parameter)\(1/2\sigma^2\)来调整惩罚的强度。经过规则化,对数似然变为如下形式
\[\ell (\theta) = \sum_{i=1}^N \sum_{t=1}^T \sum_{k=1}^K \theta_k f_k (y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_t^{(i)}) - \sum_{i=1}^N\log Z(\mathbf{x}^{(i)}) - \sum_{k=1}^k \frac{\theta_k^2}{2\sigma^2}.\tag{5.4}\]
\(\sigma^2\)是一个*参数,它决定着对过大权值的惩罚强度。直觉上,可以认为这么做是为了避免预测结果由少数特征决定。这种规则化表示方法目的是令其可被看作使用了最大化后验(maximum a posteriori, MAP)的方法来估计\(\theta\)(当\(\theta\)服从均值0方差\(\sigma^2I\)的高斯分布时)。确定最优的规则化参数需要对参数进行密集的扫描。幸运的是,最终模型的精度对\(\sigma^2\)的较小变动不敏感(变动范围在10倍以内)。最佳的\(\sigma^2\)与训练集的大小相关。对于5.5部分所示的训练集,我们常取\(\delta^2=10\)

另一种规则化方法是利用\(L_1\)范数代替欧氏范数,这方法与参数的双指数先验分布[44]相一致。似然函数如下式所示
\[\ell' (\theta) = \sum_{i=1}^N \sum_{t=1}^T \sum_{k=1}^K \theta_k f_k (y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_t^{(i)}) - \sum_{i=1}^N\log Z(\mathbf{x}^{(i)}) - \alpha \sum_{k=1}^k |\theta|,\tag{5.5}\]
其中,\(\alpha\)为需要调整的规则化参数,与\(L_2\)规则化中的\(\sigma^2\)作用一致。这种规则化方法鼓励参数的稀疏性,或者说希望大部分\(\theta_k\)为0。这样做有利于特征选择,并且理论上更有优势[97]。实际上,利用\(L_1\)规则化的模型精度与\(L_2\)规则化基本一致[65]。\(L_1\)规则化的一个缺点是其在0点是不可导的,这会增加数值优化过程的复杂度[3,44,160]。

一般地,函数\(\ell(\theta)\)不能封闭式(closed form)最大化,因此需要采用数值方法。式(5.4)的偏导为
\[\frac{\partial \ell}{\partial \theta_k}=\sum_{i=1}^N\sum_{t=1}^Tf_k(y_t^{(i)}, y_{t-1}^{(i)},\mathbf{x}_t^{(i)})-\sum_{i-1}^N \sum_{t=1}^T \sum_{y,y'}f_k(y,y',\mathbf{x}_t^{(i)})p(y,y'|\mathbf{x}^{(i)}) - \frac{\theta_k}{\sigma^2}.\tag{5.6}\]
上式第一项可解释为\(f_k\)在经验分布\(\tilde{p}\)下的期望值。验分布\(\tilde{p}\)定义为
\[\tilde{p}(\mathbf{y},\mathbf{x}) = \frac{1}{N}\sum_{i=1}^N \mathbf{1}_{\{\mathbf{y}=\mathbf{y}^{(i)}\}}\mathbf{1}_{\{\mathbf{x}=\mathbf{x}^{(i)}\}}.\tag{5.7}\]
第二项来自\(\log Z(\mathbf{x})\)的求导,是\(f_k\)在模型分布\(p(\mathbf{y}|\mathbf{x};\theta)\tilde{p}(x)\)下的期望。因此,非规则化的极大似然最优解中这两部分是相等的(因为最优解处梯度为0)。这种令人满意的结果是指数分部族极大似然估计的标准结果。

计算似然\(\ell(\theta)\)及其偏导需要使用我们在第4部分中介绍的推断技术。首先,在似然函数中需要使用推断算法来计算配分函数(partition function)\(Z(\mathbf{x}^{(i)})\),它是在所有标记上的求和运算。第二,在求导中需要使用推断算法来计算边缘分布\(p(y,y'|\mathbf{x}^{i})\)。由于这两个量都依赖于\(\mathbf{x}^{(i)}\),我们需要在每个训练实例的每次求似然的运算中都运行一次推断算法。这种情况与生成模型不同,如第2.1.1节介绍的无向生成模型。无向生成模型也可以用极大似然方法训练,但是模型的\(Z\)并非同时依赖于参数和输入,而是仅依赖于参数。在每一次似然函数计算中都需要运行\(N\)次推断算法,促使我们使用速度更快的随机梯度下降方法(参见5.2节)。

下面我们讨论如何优化\(\ell(\theta)\)\(\ell(\theta)\)是一个凸函数,这种性质源于形如\(g(\mathbf{x}=\log\sum_i\exp x_i)\)的函数的凸性。函数的凸性在参数估计中极其重要,原因在于它意味着每个局部最优都是全局最优。此外,如果使用具有严格凸性的规则化方法,如\(L_2\)规则化,目标函数就是严格凸的,这意味着其具有唯一的全局最优解。

梯度下降算法可能是优化\(\ell\)最简单的办法(梯度计算见式5.6),但是实现过程中替代次数太多。牛顿法的收敛速度快得多,但是要求计算Hessian矩阵。Hessian矩阵元素数量为参数平方。由于能数数量通常达到数万乃至数百万,仅仅存储Hessian矩阵都是不可能的。

因此,优化式(5.4)要使用近似二阶导数信息。如BFGS[8]的拟牛顿法效果非常好,这种方法基于目标函数的一阶导数计算近似的Hessian矩阵。不过存储该矩阵依旧需要\(K\times K\)的空间,Byrd等[17]提出一种有限存储版本的BFGS算法。共轭梯度(conjugate gradient)是另一种利用二阶导数信息的优化算法,也被成功的用于条件随机场之中。更详细的对有限存储BFGS和共轭梯度的介绍,参见Nocedal和Wright[100]。这两种方法都可以被看作替代梯度下降算法的黑盒优化过程。当使用二阶导数信息时,基于梯度的优化速度要远快于原始的梯度算法(Lafferty等[63]),这方法的实验参见[90,92,125,153]。另外,依赖域(trust region)方法在多项式逻辑回归的训练上表现良好,它在条件随机场中的表现可能也会非常不错。

所有的这些优化算法——梯度下降、牛顿法、拟牛顿法、共轭梯度法、依赖域法,都是非线性函数数值优化的标准方法。我们直接使用它们来优化规则化的条件随机场似然函数。典型地, 这些算法要求具有计算待优化函数的值和梯度的能力。本文中,数值由式(5.4)计算,而梯度则由式(5.6)计算。这是第4部分我们在讨论边缘分布时还讨论如何计算配分函数\(Z(\mathbf{x})\)的原因。

最后,分析线性链条件随机场训练的计算复杂度。如4.1部分所示,使用前向后向算法计算一个训练实例的似然函数和梯度时间复杂度为\(O(TM^2)\),其中\(M\)为标记的数量,\(T\)为训练实例的长度。由于我们需要对每个实例运行前向后向算法,似然函数和梯度的时间复杂度为\(O(TM^2N)\),于是总的训练时间复杂度为\(O(TM^2NG)\),其中\(G\)为优化算法中梯度的计算次数。很不幸,\(G\)依赖于数据集,而且在计算之前无法预测。批处理L-BFGS在条件随机场中该数字常小于100,但并非总是如此。在很多数据集上,这个数字可以接受,但如果\(M\)很大,或者训练集\(N\)非常大,计算量也会非常巨大。根据标记数量的大小,训练条件随机场可能需要数分钟或数天,参见5.5节的例子。

5.1.2 任意结构条件随机场

本质上来说,任意结构条件随机场的训练与线性链条件随机场一样,区别在于它需要使用更为一般的推断算法。首先,我们讨论完全可观测的情况,其中训练和测试数据是独立的,训练数据可以被完全观测。这种情况下,基于2.4节的分析,条件对数似然为
\[\ell(\theta)=\sum_{C_p\in \mathcal{C}} \sum_{\Psi_c\in C_p} \sum_{k=1}^{K(p)} \theta_{pk}f_{pk}(\mathbf{x}_c, \mathbf{y}_c) -\log Z(\mathbf{x}).\tag{5.8}\]

利用团模板的表示方法,参见式2.25-2.27

本部分的公式没有明确的在训练集上求和,因为如果一个特殊的应用的训练实例刚好为独立同分布,那么这些数据就可以表示为图\(G\)中不相连的组成部分。

对数似然对与团模板\(C_p\)相关的参数\(\theta_{pk}\)的偏导为
\[\frac{\partial \ell}{\partial \theta_{pk}}=\sum_{\Psi_c\in C_p} f_{pk}(\mathbf{x}_c, \mathbf{y}_c) -\sum_{\Psi_c \in C_p} \sum_{\mathbf{y}'_c} f_{pk}(\mathbf{x}_c, \mathbf{y}'_c) p(\mathbf{y}_c'|\mathbf{x}).\tag{5.9}\]
函数\(\ell(\theta)\)与线性链条件随机场的似然有很多类似的性质。首先,0梯度条件可以解释为要求充分统计量\(F_{pk}(\mathbf{x},\mathbf{y})=\sum_{\Psi_c}f_{pk}(\mathbf{x}_c, \mathbf{y}_c)\)在经验分布和模型分布下具有同样的期望。第二,函数\(\ell(\theta)\)为凸函数,可以使用储如共轭梯度或L-BFGS这样的二阶技术有效的进行优化。第三,规则化的使用与线性条件随机场一样。

目前,所有的讨论都假设训练数据包含了模型所需的全部标记变量。隐变量(latent variable)是那些只能在训练或测试中观测到的状态变量【不能同时在训练和测试中观测】。具有隐变量的条件随机场称为隐状态条件随机场(hidden-state CRFs)[109,110],这两个文献最早研究了隐状态条件随机场。其他HCRFs的应用参见[84,138]。隐状态条件随机场的训练更加困难,因为隐变量也需要被边缘化以计算似然函数。

假设一个条件随场,其输入为\(\mathbf{x}\),输出变量\(\mathbf{y}\)在训练数据中可被观测,但是模型中还包含了隐变量\(\mathbf{w}\),于是条件随机场的形式为
\[p(\mathbf{y},\mathbf{w}|\mathbf{x}) = \frac{1}{Z(\mathbf{x})} \prod_{C_p \in \mathcal{C}} \prod_{\Psi_c \in C_p} \Psi_c(\mathbf{x}_c,\mathbf{w}_c, \mathbf{y}_c;\theta_p).\tag{5.10}\]
训练过程中的目标函数为边缘似然
\[\ell(\theta) = \log p(\mathbf{y}|\mathbf{x}) = \log \sum_\mathbf{w} p(\mathbf{y}, \mathbf{w}|\mathbf{x}).\tag{5.11}\]
上式中第一部分为边缘似然\(\ell(\theta)\)的计算,由于存在变量\(\mathbf{w}\),不能直接求和。关键在于要认识到我们不需要对所有\(\mathbf{y}\)的取值计算\(\log\sum_\mathbf{w}p(\mathbf{y},\mathbf{w}|\mathbf{x})\),仅需要在那些包含了隐变量的训练数据上计算。于是,我们将原条件随机场(5.10)中的训练数据中的变量\(\mathbf{y}\)固定(clamping),得到\(\mathbf{w}\)的分布
\[p(\mathbf{w}|\mathbf{y},\mathbf{x})=\frac{1}{Z(\mathbf{y},\mathbf{x})} \prod_{C_p \in \mathcal{C}} \prod_{\Psi_c \in C_p} \Psi_c(\mathbf{x}_c, \mathbf{w}_c, \mathbf{y}_c; \theta_p),\tag{5.12}\]
其中归一化因子为
\[Z(\mathbf{y},\mathbf{x}) = \sum_{\mathbf{w}} \prod_{C_p\in \mathcal{C}} \prod_{\Psi_c\in C_p}\Psi_c(\mathbf{x}_c, \mathbf{w}_c, \mathbf{y}_c; \theta_p).\tag{5.13}\]
该归一化常数\(Z(\mathbf{y},\mathbf{x})\)可以使用与\(Z(\mathbf{x})\)同样的推断算法计算。实际上,\(Z(\mathbf{y},\mathbf{x})\)的计算要更容易一些,因为它仅对\(\mathbf{w}\)求和,而\(Z(\mathbf{x})\)则需要对\(\mathbf{w}\)\(\mathbf{y}\)求和。从图的角度来说,这相当于将图\(G\)中的变量\(\mathbf{y}\)固定(clamping),从而简化了\(\mathbf{w}\)的结构。

一旦有了\(Z(\mathbf{y},\mathbf{x})\),边缘似然根据下式计算
\[p(\mathbf{y}|\mathbf{x}) = \frac{1}{Z(\mathbf{x})} \sum_{\mathbf{w}} \prod_{C_p\in \mathcal{C}} \prod_{\Psi_c \in C_p} \Psi_c (\mathbf{x}_c, \mathbf{w}_c, \mathbf{y}_c; \theta_p) = \frac{Z(\mathbf{y},\mathbf{x})}{Z(\mathbf{x})}.\tag{5.14}\]
有了计算\(\ell\)的方法,我们接下来讨论如何对\(\theta\)最大化。\(\ell(\theta)\)的最大化难度较大,因为\(\ell\)一般不再是凸的(log-sum-exp是凸的,但是两个log-sum-exp相除则不一定),于是优化算法只能找到局部最优。在使用优化技术的时候,初始值需要小心确定以得到较好的局部最优。

下面我们讨论两种不同的最大化\(\ell\)的方法:直接利用梯度,如Quattoni等[109];利用EM算法,如McCallum等[84]。(除此之外,还可以使用随机梯度下降算法,参见5.2节)。为了直接最大化\(\ell\),需要计算梯度。最简单的办法是利用以下事实,即对任何函数\(f(\theta)\)都有
\[\frac{d f}{d \theta}=f(\theta) \frac{d \log f}{d\theta}.\tag{5.15}\]
将其用于边缘似然\(\ell(\theta)=\log\sum_{\mathbf{w}}p(\mathbf{y},\mathbf{w}|\mathbf{x})\)得到
\[\begin{align}\frac{\partial l}{\partial \theta_{pk}} &= \frac{1}{\sum_{\mathbf{w}}p(\mathbf{y},\mathbf{w|\mathbf{x})}} \sum_\mathbf{w} \frac{\partial}{\partial \theta_{pk}}[p(\mathbf{y},\mathbf{w}|\mathbf{x})] \tag{5.16}\\&= \sum_\mathbf{w}p(\mathbf{w}|\mathbf{y},\mathbf{x}) \frac{\partial}{\partial \theta_{pk}}[\log p(\mathbf{y}, \mathbf{w}|\mathbf{x})]. \tag{5.17}\end{align}\]
这正是在\(\mathbf{w}\)上计算的完全观测的梯度的期望。通过化简,上式变为
\[\frac{\partial l}{\partial \theta_{pk}} = \sum_{\Psi_c \in C_p} \sum_{\mathbf{w}_c'} p(\mathbf{w}_c'|\mathbf{y}, \mathbf{x})f_k(\mathbf{y}_c, \mathbf{x}_c,\mathbf{w}_c') - \sum_{\Psi_c\in C_p} \sum_{\mathbf{w}_c', \mathbf{y}_c'} p(\mathbf{w}_c', \mathbf{y}_c' |\mathbf{c})f_k(\mathbf{y}_c', \mathbf{x}_c, \mathbf{w}_c').\tag{5.18}\]
该梯度要求计算两种不同的边缘概率。第一项包含了边缘概率\(p(\mathbf{w}_c'|\mathbf{y},\mathbf{x})\),它是式(5.12)所示的被固定(clamped)的条件随机场的边缘分布。第二项包含了边缘分布$ p(\mathbf{w}_c', \mathbf{y}_c' |\mathbf{c})\(,它是完全观测的条件随机场边缘分布。一旦确定了梯度,\)\ell$就可以用标准的优化技术最大化,如共轭梯度法。对于BFGS算法,根据我们的经验,函数的非凸性会为基于存储的近似Hessian矩阵带来混乱。解决该问题的持巧是,当这种情况出现时,重置近似Hessian矩阵。

此外,\(\ell\)也可以使用EM算法优化。在EM算法的每次迭代中,当前参数向量\(\theta^{(j)}\)按下述方法更新:首先,在E步,Q函数为\(q(\mathbf{w})=p(\mathbf{w}|\mathbf{y},\mathbf{x};\theta^{(j)})\);其次,在M步中,参数\(\theta^{(j+1)}\)的更新公式为
\[\theta^{j+1} = \arg \max_{\theta'} \sum_{\mathbf{w}'}q(\mathbf{w}')\log p(\mathbf{y},\mathbf{w}'|\mathbf{x};\theta').\tag{5.19}\]
直接优化算法和EM算法惊人地相似。通过在式(5.19)中代入\(q\)的定义然后求导可看出这种相似性。其梯度与式(5.18)所示的直接优化情况下的梯度几乎一样。唯一区别在于EM算法中分布\(p(\mathbf{w}|\mathbf{y},\mathbf{x})\)自前一次迭代中固定参数而来,而直接优化中该分布则来自最大化。我们还没有看到关于隐变量条件随机的直接优化和EM算法对比的研究。

5.2 随机梯度方法

截至目前,我们讨化的所有似然函数的优化方法都是批量配置(batch setting),其含义是模型参数在扫描整个训练集求得梯度之后才会更新。如果训练数据包含大量独立同分布样本,这种做法看起来比较浪费时间。我们可以猜测,训练集中的很多样本其实为模型参数提供了类似的信息,因此只用处理少数几个样本就可以参数进行更新,而不必等到处理完全部样本。

随机梯度下降(Stochastic gradient descent, SGD)是基于这种思路的一种简单的优化方法。基本思想是,在每次迭代中随机选择一个训练实例,根据该实例的梯度,向前移动一小步。在批量配置情况下,梯度下降常常是一种不好的优化方法,因为局部最陡峭的方向(负梯度方向)可能与优化目标所在的方向差别很大。于是,随机梯度方法涉及到一个有意思的取舍问题:单个步骤中L-BFGS的方向要比SGD更好,但是SGD的计算速度更快。

为了简化符号表示,我们仅给出线性链条件随机场场的SGD,但是它可以很容易地推广至任意图结构,只要训练数据满足独立同分布。似然函数在单个训练实例\((\mathbf{x}^{(i)}, \mathbf{y}^{(i)})\)下的梯度为
\[\frac{\partial \ell_i}{\partial \theta_k} = \sum_{t=1}^T f_k(y_t^{(i)}, y_{t-1}^{(i)}, \mathbf{x}_{t}^{(i)}) - \sum_{t=1}^T \sum_{y,y'} f_k(y,y',\mathbf{x}_t^{(i)})p(y,y'|\mathbf{x}^{(i)}) - \frac{\theta_k}{N\sigma^2}.\tag{5.20}\]
与完全梯度(5.6)几乎完全一样,仅有两个变化:去了在整个训练集上的求和运算,规则化部分乘上\(1/N\)。这两个变化保证批梯度与单实例梯度之和相等,即\(\nabla \ell = \sum_{i=1}^N \nabla \ell_i\),其中\(\nabla \ell_i\)表示实例\(i\)的梯度。

在SGD的第\(m\)步迭代中,随机选择一个训练实例\((\mathbf{x}^{(i)}, \mathbf{y}^{(i)})\)。然后基于原参数向量\(\theta^{m-1}\)计算新的参数向量\(\theta^{(m)}\)
\[\theta^{(m)} = \theta^{(m-1)}+\alpha_m \nabla \ell_i (\theta^{(m-1)}),\tag{5.21}\]
其中,\(\alpha_m >0\)控制参数学习中每步的步长。如果步长过大,参数在每次迭代中都会向样本梯度方向做大幅度的摆动。如果\(\alpha_m\)太小,训练速度会很慢。极端情况下,从数值上看似收敛,但实际上距离最优还很远。

我们希望\(\alpha_m\)随着\(m\)增大而减小,以使得优化算法收敛至一点。随机逼近过程的研究[54,115]给出了最低要求,\(\sum_m \alpha_m = \infty\)以及\(\sum_m \alpha^2_m < \infty\),也就是说当\(m\)非常大时\(\alpha\)应当趋于0,但是速度不能太快。满足该要求的最常用的步长形式为\(\alpha_m \sim 1/m\)\(\alpha_m \sim 1/\sqrt{m}\)。不过,简单地采用\(\alpha_m =1/m\)效果通常很差,因为开始的几步的步长太大。通常采用如下形式
\[\alpha_m = \frac{1}{\sigma^2(m_0 +m)},\tag{5.22}\]
其中\(m_0\)是需要设置的*参数。Leon Bottou[13]的crfsgd工具包中使用了一种方法,首先选择一个小的训练集,在该训练集上使用多个固定的步长\(\alpha\)运行SGD。然后,取表现最好的那个\(\alpha^*\),选择\(m_0\)使得\(\alpha_0=\alpha^*\)

随机梯度下降在很多神经网络反向传播算法相关的文献中出现,并且已经发展了很多年[66]。最近,研究人员对良好的在线优化算法重新发生兴趣[27,43,126,149],这些方法以在线的方法更新参数,但是要比简单SGD方法更加随机。Vishwanathan等[149]是第一个将随机梯度下降用于条件随机场的研究。

随机梯度方法的主要缺点是其需要调参,不像共轭梯度或L-BFGS等较为现成的方法。随机梯度法在训练数据不满足独立同分布或者数据集太小时效果不好。不过,在数据集满足要求的条件下,随机梯度带来的训练增速非常可观。

5.3 并行处理

随机梯度下降通过在少量数据上更新梯度提高了训练速度。另一种提高训练速度的方法是并行处理,同时计算多个实例的梯度。由于梯度(式5.6)为训练实例上的求和,因此可以很容易地将计算量分配给多个线程,每个线程处理一个训练子集。如果训练算法运行在多核计算机上,这些线程会并行运行,使得梯度计算速度大大增加。很多机器学习算法使用了这种技术提高训练速度[22]。

理论上来说,也可以使用多台计算机来实现并行计算,但是网络中传输的大量参数向量的处理可能是个问题。解决这一问题的一种可能的方法是异步地更新参数向量。文献[64]采用了这种思路并行实现计算随机梯度下降算法。

5.4 近似训练

我们前面讨论的所有训练方法,包括随机梯度和并行方法,都假设条件随机场的图结构是易于处理的,也就是说我们可以有效的计算配分函数\(Z(\mathbf{x})\)及边缘分布\(p(\mathbf{y}_c|\mathbf{x})\)。在线性链和树结构的条件随机场中的确如此。前期条件随机场关注这些类型的问题,一方面因为其推断易于处理,另一方面这种选择对于某些任务来说非常自然,例如自然语言处理中的序列标注。

当图结构更加复杂时,边缘分布和配分函数不容易计算,必须采用近似方法。参见第4部分,有很多近似推断算法的文献。不过,条件随机场中的近似算法还要考虑的是,近似推断过程需要嵌入在参数优化算法之中。

条件随机场的近似训练主要有两种方法[139]:代理似然(surrogate likelihood)法与近似边缘(approximate marginals)法。前者修改训练的目标函数,后者对梯度进行近似。第一种方法需要找到能够替代\(\ell(\theta)\)的函数,称为代理似然。代理似然易于处理且依旧能够获得良好的参数(如式5.27的BP近似方法)。代理似然的优化可使用基于梯度的方法,与精确似然的处理方法类似。第二种方法中的近似边缘,是指利用通用的推断算法计算的近似边缘分布\(p(\mathbf{y}_c|\mathbf{x})\),用于替代式(5.9)梯度计算中的精确边缘分布,然后运行梯度下降算法。

尽管代理似然应运和近似边缘法明显具有一定的相关性,但是它们是不同的。一般情况下,一种代理似然算法可直接转化为近似边缘算法。正如\(\log Z(\mathbf{x})\)微分可得到真实的边缘分布,对近似\(\log Z(\mathbf{x})\)的微分也可看作近似边缘分布。近似边缘分布有时候也称为伪边缘分布(pseudomarginals)[151]。不过,相反的过程并非总是成立。例如,存在一些特定的近似边缘分布求解过程,已被证明与似然函数的微分没有关系[131,139]。

代理似然法的主要优点在于其拥有一个容易被分析人员及优化过程所理解的目标函数。先进的优化引擎如共轭梯度和BFGS都要求具有明确的目标函数来进行优化。近似边缘应运的优点则在于其具有更强大的灵活性。可以使用任意的推断算法,包括提前停止的BP算法和MCMC算法。而且,随机梯度下降更适用于近似边缘法。

关于近似推断和参数估计之间的相互作用还有一些没有被完全理解的问题。例如,Kulesza和Pereira[60]给出了一个例子,其中感知机算法与max-product信念传播算法之间以一种病态的形式相互作用。相反,代理似然法则没有出现这种情况,例如Wainwright[151]就指出凸代理似然没有出现这种问题。

为了更具体地讨论问题,本节其余部分讨论几种代理似然和近似推断方法。代理似然法包括伪似然(pseudolikelihood)(5.4.1节)和信念传播(5.4.2节),近似梯度法包括信念传播(5.4.2节)和MCMC(5.4.3节)。

5.4.1 伪似然(Pseudolikelihood)

伪似然[9]是最早研究的代理似然法之一。伪似然的思想是,训练目标仅依赖于单变量的条件分布。由于这些分布的归一化常数仅依赖于单变量,因此可以快速计算。条件随机场中的伪似然为
\[\ell_\text{PL}(\theta) = \sum_{s\in V}\log p(y_s|\mathbf{y}_{N(s)}, \mathbf{x};\theta).\tag{5.23}\]
其中,\(s\)上的求和范围为图中的所有节点,\(\mathbf{y}_{N(s)}\)\(Y_s\)邻节点变量的取值。(与式5.8类似,这里没有明确对所有训练集求和)。

直观上,理解伪似然的一种方法是,它试图将模型分布的局部条件分布\(p(y_s|\mathbf{y}_{N(s)},\mathbf{x};\theta)\)与训练数据相匹配。由于模型的条件独立性假设,局部条件分布能够充分明确一个联合分布。(这与吉布斯采样的动因类似)。

参数通过最大化伪似然得到,即\(\hat{\theta}_\text{PL}=\max_\theta \ell_\text{PL}(\theta)\)。典型地,最大化采用二阶方法如L-BFGS,不过理论上来说使用并行计算或随机梯度也没有问题。此外,伪似然的规则化与极大似然一样。

该方法并没有试图利用伪似然函数值来近似真实的似然函数值。相反,它只是要使得伪似然的最优参数\(\hat{\theta}_\text{PL}\)与真实似然的最优参数\(\hat\theta_\text{ML}\)尽可能接近。也就是说,这两个函数并不完全对应,但是它们的最优值是一致的。一定条件下,比如在恰当的模型的分布族下,可以证明伪似然是渐近正确的,即在训练数据集无限大的时候可得到真实的模型参数。

伪似然的动因是为了提高计算效率,其计算和优化不必计算\(Z(\mathbf{x})\)和边缘分布。尽管伪似然被证明在自然语言处理中是有效的[146],但大部分情况下其表现并不好[134],直观上其原因与吉布斯采样序列数据中收敛速度变慢的原因类似。在视觉问题中,对伪似然的普遍批评是其“过于强调网络边上的势(edge potentials)”[149]。直观的解释是,由伪似然训练的模型的学习中可以利用相邻变量的真实值,但测试时是没有这些值的。

可以利用“阻塞(blockwise)”版本的伪似然来获得更好的性能,其中局部项涉及模型中较大区域的条件概率。例如,在线性链条件随机场中,可以考虑逐边伪似然(per-edge pseudolikelihood):
\[\ell_\text{EPL}(\theta) = \sum_{t=1}^{T-1} \log p(y_t, y_{t+1}|y_{t-1},y_{t+2}, \theta).\tag{5.24}\]
这里,我们假设序列分别以虚拟标记\(y_0\)\(y_{T + 1}\)开始和结束。

这种“阻塞(blockwise)”版本的伪似然是复合似然[34,75]的一个特例。在复合似然中,每个项不仅预测单个变量或一对变量,而且预测用户选择的任意大小的变量组块。复合似然是标准伪似然和“阻塞”伪似然的一般化拓展。复合似然估计的渐近一致性和正态性,有一般的理论结果。通常不论在理论还是实践中,更大的变量组块会得到更好的参数估计。因此,需要在训练时间和参数估计质量之间进行权衡。

最后,Sutton和McCallum的分段训练法(piecewise training method)[134,137]与复合似然相关,但是将这种方法理解为信念传播法更恰当,因此我们在下节讨论。

5.4.2 信念传播

环路信念传播算法(4.2.2节)可以用于条件随机场的近似训练。在代理似然法和近似梯度法中都能得到应用。

在近似梯度算法中,训练过程中的每个迭代步中都在输入\(\mathbf{x}\)上运行环路BP,得到模型中每个团的近似边缘分布\(q(\mathbf{y}_c)\)。然后,我们将BP边缘分布代入来近似真实梯度式(5.9)。于是,近似偏导为
\[\frac{\partial \tilde{\ell}}{\partial \theta_{pk}} = \sum_{\Psi_c \in C_p} f_{pk}(\mathbf{x}_c, \mathbf{y}_c) - \sum_{\Psi_c \in C_p} \sum_{\mathbf{y}'_c} f_{pk}(\mathbf{x}_c, \mathbf{y}_c')q(\mathbf{y}_c').\tag{5.25}\]
近似偏导可用于更新参数
\[\theta_{pk}^{(t+1)} = \theta_{pk}^{(t)}+\alpha\frac{\partial \tilde{\ell}}{\partial \theta_{pk}},\tag{5.26}\]
其中,\(\alpha>0\)为步长参数。这种方法的优点是非常简单,特别在外层算法为随机梯度近似时非常有用。

不过,更有意思的是也可将环路BP用于代理似然中。要这样做,我们需要为真实似然(式5.8)构造代理函数,以使得伪似然的梯度与近似BP的梯度(式5.26)相等。看起来是个很难的任务,但幸运地是我们可以使用4.2.2节所述的Bethe*能。

回忆前文中,环路信念传播可以被看作一个优化算法,在所有局部一致信念向量上最小化目标函数\(\mathcal{O}_\text{BETHE}(q)\)(式4.36),最小值\(\min_q\mathcal{O}_\text{BETHE}(q)\)可作为配分函数的近似。将其代入式(5.8)的真实似然中,对于固定的信念向量\(q\),近似似然为
\[\begin{align}\ell_\text{BETHE}(\theta,q) &= \sum_{C_p\in \mathcal{C}} \sum_{\Psi_c\in C_p} \log \Psi_c(\mathbf{x}_c, \mathbf{y}_c) \\&- \sum_{C_p\in \mathcal{C}} \sum_{\Psi_c\in C_p}q(\mathbf{y}_c) \log \frac{q(\mathbf{y}_c)}{\Psi_c(\mathbf{x}_c,\mathbf{y}_c)} \\ &+ \sum_{s\in Y}(1-d_i)q(y_s)\log q(y_s).\tag{5.27}\end{align}\]
近似训练可被看作优化问题\(\max_\theta\min_q \ell_\text{BETHE}(\theta,q)\)。这是一个鞍点问题(saddlepoint problem),我们需要先根据一个变量最大化(找到最优参数),然后根据另一个变量最小化(解决近似推断问题)。解决该鞍点问题的一种方法是坐标上升法(coordinage ascent)。其过程为,首先固定\(\theta\)根据\(q\)最小化\(\ell_\text{BETHE}\),然后前进一个梯度步(take a gradient setp),固定\(b\)根据\(\theta\)部分最大化\(\ell_\text{BETHE}\),这两个步骤交替运行。第一步(根据\(q\)最小化)就是运行环路BP算法。关键在于第二步(根据\(\theta\)最大化),式(5.27)关于\(\theta_k\)的偏导正是式(5.26)所需要的。

或者,还可以使用另一个代理似然:
\[\hat{\ell}(\theta;q) = \log\left[\frac{\prod_{C_p\in\mathcal{C}} \prod_{\Psi_c\in C_p} q(\mathbf{y}_c)}{\prod_{s\in Y}q(y_s)^{d_s-1}} \right].\tag{5.28}\]
换句话说,我们利用每个团的近似信念来代替真实的联合似然,还要除以节点信念避免过学习。这样做的好处是,它是真实似然在树状结构模型中的直接推广,比较式(5.28)和式(4.31)即可明白这一点。该代理似然可以利用我们给出的Bethe*能的对偶形式来证实[91,94]。当BP收敛时,可以证明,对于最终的信念向量\(q\)\(\ell_\text{BETHE}(\theta,q)=\hat{\ell}(\theta,q)\)。若BP没有收敛,则相应的\(q\)并不能使该等式成立。

另一种与BP相关的代理似然法是piecewise estimato[137]。该方法将模型的因子划分为易于处理的子图独立地训练。如果局部特征有充分的信息(sufficiently informative),这个思路的效果出奇地好(优于伪似然)。Sutton和Minka[139]讨论了piecewise训练和早停信念传播(early stopping of belief propagation)之间的密切联系。

5.4.3 马尔可夫链蒙特卡罗

马尔可夫链蒙特卡罗(MCMC)推断方法(4.2.1节)可在条件随机场训练中用于对边缘分布进行近似。在构造一个收敛于\(p(\mathbf{y}|\mathbf x ;\theta)\)的马尔可夫链后,可将其用于多次采样,利用近似边缘分布\(\hat p( \mathbf y | \mathbf x; \theta)\)代替梯度(式5.9)中的真实边缘分布。

不过实际上MCMC方法很少用于条件随机场的训练,因为MCMC一般要迭代非常多次才能收敛,正如我们曾指出的那样,推断算法在训练过程中要在不同的参数配置下被调用很多次。

解决该难题的一种可能的方法是对比散度(contrastive divergence, CD)[50],该方法中式(5.9)中的真实边缘分布\(p(y_c|\mathbf x)\)通过MCMC运行很少的次数来替代,其中马尔可夫链的初始状态(即\(\mathbf y\)的一个取值)置为训练数据中\(\mathbf y\)的值。CD一般用于隐变量模型,如受限玻尔兹曼机(restricted Boltzmann machines)。尽管理论上来说,CD可用于条件随机场,但我们没有看到太多这方面的工作。

另一中可能的方法称为SampleRank[155],其目标是用学习到的参数对\(\mathbf y\)进行两两比较,使其排序与给定的监督排序一致(监督排序通常来自一个与\(\mathbf y\)的真实值相比较的固定评分函数)。近似梯度可以从MCMC采样器的连续状态中计算出来。与CD一样,SampleRank的参数更新不是在MCMC收敛的情况下进行的。实验表明,SampleRank训练算法的精度优于CD[155]。

与我们在前面讨论的近似方法不同,在代理似然中使用MCMC推断非常困难,原因在于利用采样样本获得较好的\(\log Z(\mathbf x)\)近似时非常困难。

5.5 实现问题

为了更具体的讨论高效训练方法,这里我们给出一些条件随机场成功应用的自然语言处理数据集实例。目的是让读者对条件随机场的应用状况有一个初步的印象,包括特征的数量和训练时间等。

我们给出三个条件随机场应用案例。第一个是名词短语组块(noun-phrase chunking)[120],目的是识别文本中的基本名词短语,如句子_He reckons the current account deficit will narrow_中的短语“He”和“the current account deficit”。第二个是命名实体识别(NER)[121]。第三个是词性标记。名词短语组块和词性标记的数据集来自WSJ Penn Treebank[82],命名实体识别数据集来自路透社的新闻文章。

这里,我们不会对所用的特征做详细的分析,仅列出其中的一小部分,包括当前词、前驱词、前缀后缀、自动生成的词性标记和常见的地名人名(针对命名实体识别和组块分析)。特征集与2.6节命名实体实例中所讨论的类似。这些特征集不一定是最优的,但是它对理解条件随机场的应用情况很有帮助。

表5.1所示的是这三个数据集的条件随机场参数数量、训练集大小、序列和词的总数、每个序列位上标记集大小、训练时间等。训练时间从数分钟到数天不等。正如我们在前文中所讨论的,貌似标记的数量对训练时间影响最大。

很明显,训练时间与实现方法和硬件密切相关。表5.1中,我们使用了MALLET工具包,在2.4 GHz Intel Xeon CPU的计算机上运行,似然函数优化采用的是L-BFGS,没有使用多线程和随机梯度下降方法。