对数线性模型、最大熵马尔科夫模型和条件随机场(翻译) 一

1. 符号

整篇文章里,使用下划线表示向量,例如 ω ‾ ∈ R d \underline\omega\in \mathbb{R}^d ωRd是由 ω 1 , ω 2 , … ω d \omega_1,\omega_2,\dots\omega_d ω1,ω2,ωd
组成的向量。 e x p ( x ) = e x exp(x)=e^x exp(x)=ex

2.对数线性模型

    给定两个集合 X \mathcal{X} X Y \mathcal{Y} Y,假设 Y \mathcal{Y} Y是有限集合,我们的目标是构建一个可以估计给定一个输入 x \mathcal{x} x得到标签 y \mathcal{y} y的条件概率 p ( y ∣ x ) \mathcal{p}(\mathcal{y}|\mathcal{x}) p(yx)的模型。例如, x \mathcal{x} x可以是一个单词, y \mathcal{y} y是这个单词的词性(名词、动词、介词等)。我们定义函数 ϕ ‾ : X × Y → R d \underline\phi:\mathcal{X}\times\mathcal{Y}\rightarrow\mathbb{R}^d ϕ:X×YRd,同时假设参数向量 ω ‾ ∈ R d \underline\omega \in \mathbb{R}^d ωRd,在这些假设下对数线性模型可以表示为
p ( y ∣ x ) = e x p ( ω ‾ ⋅ ϕ ‾ ( x , y ) ) ∑ y ′ ∈ Y e x p ( ω ‾ ⋅ ϕ ‾ ( x , y ′ ) ) \mathcal{p}(\mathcal{y}|\mathcal{x})=\frac{exp(\underline\omega\cdot\underline\phi(\mathcal{x},\mathcal{y}))}{\sum_{\mathcal{y}^\prime\in\mathcal{Y}}exp(\underline\omega\cdot\underline\phi(\mathcal{x},\mathcal{y}^\prime))} p(yx)=yYexp(ωϕ(x,y))exp(ωϕ(x,y))
这就是在参数 ω ‾ \underline\omega ω下,给定 x \mathcal{x} x条件 y \mathcal{y} y的概率。

使用这个表达式来表示这个模型的原因如下。内积 ω ‾ ⋅ ϕ ‾ ( x , y ) \underline\omega\cdot\underline\phi(\mathcal{x},\mathcal{y}) ωϕ(x,y)可以是任意值(正的或者负的),可以解释为给定输入 x \mathcal{x} x标签是 y \mathcal{y} y的合理性度量。对每个给定的输入 x \mathcal{x} x,我们可以对每个可能的标签 y ∈ Y \mathcal{y}\in\mathcal{Y} yY计算这个内积。我们可以将这些量转换为一个定义良好的概率分布 p ( y ∣ x ) \mathcal{p}(\mathcal{y}|\mathcal{x}) p(yx)。如果对内积取幂, e x p ( ω ‾ ⋅ ϕ ‾ ( x , y ) ) exp(\underline\omega\cdot\underline\phi(\mathcal{x},\mathcal{y})) exp(ωϕ(x,y)),就得到了一个严格正的量,最后除以一个标准化常数 ∑ y ′ ∈ Y e x p ( ϕ ‾ ( x , y ′ ) ) \sum_{\mathcal{y}^\prime\in\mathcal{Y}}exp(\underline\phi(\mathcal{x},\mathcal{y}^\prime)) yYexp(ϕ(x,y)),这确保了 ∑ y ∈ Y p ( y ∣ x ; ω ‾ ) \sum_{\mathcal{y}\in\mathcal{Y}}{\mathcal{p}(\mathcal{y}|x;\underline\omega)} yYp(yx;ω)。这样我们就将可正可负的内积 ω ‾ ⋅ ϕ ‾ ( x , y ) \underline\omega\cdot\underline\phi(\mathcal{x},\mathcal{y}) ωϕ(x,y)变成了一个概率分布。

一个重要的问题是我们怎样从数据估计出参数 ω ‾ \underline\omega ω。接下来我们讨论这个问题。

对数似然函数。为了估计这个参数,假设我们有n组打好标签的样本, { x i , y i } i = 1 n \{\mathcal{x}_i,\mathcal{y}_i\}_{i=1}^n { xi,yi}i=1n。似然函数就是
L ( ω ‾ ) = ∑ i = 1 n log ⁡ p ( y i ∣ x i ; ω ‾ ) \mathcal{L}(\underline\omega)=\sum_{i=1}^n \log \mathcal{p}(\mathcal{y}_i|\mathcal{x}_i;\underline\omega) L(ω)=i=1nlogp(yixi;ω)

L ( ω ‾ ) \mathcal{L}(\underline\omega) L(ω)是对给定的 ω ‾ \underline\omega ω解释这些样本的一个度量,一个好的 ω ‾ \underline\omega ω应该会给每个 p ( y i ∣ x i ; ω ‾ ) i = 1 … 2 \mathcal{p}(\mathcal{y}_i|\mathcal{x}_i;\underline\omega) \quad i=1\dots 2 p(yixi;ω)i=12 赋予一个较大的值,从而使 L ( ω ‾ ) \mathcal{L}(\underline\omega) L(ω)也较大。

最大似然估计是
ω ‾ ∗ = a r g   max ⁡ ω ‾ ∈ R d ∑ i = 1 n log ⁡ p ( y i ∣ x i ; ω ‾ ) \underline\omega^*= arg\,\max_{\underline\omega\in\mathbb{R}^d} \sum_{i=1}^n \log \mathcal{p}(\mathcal{y}_i|\mathcal{x}_i;\underline\omega) ω=argωRdmaxi=1nlogp(yixi;ω)

最大似然估计是在 L ( ω ‾ ) \mathcal{L}(\underline\omega) L(ω)评判标准下,求出对训练集拟合最好的参数的一种方法。

找出最大似然估计。给定训练集 { x i , y i } i = 1 n \{\mathcal{x}_i,\mathcal{y}_i\}_{i=1}^n { xi,yi}i=1n,我们怎样找出最大似然参数估计 ω ‾ ∗ \underline\omega^* ω呢?不幸的是,解析解在一般情况下并不存在,通常使用基于梯度的方法来最优化 L ( ω ‾ ) \mathcal{L}(\underline\omega) L(ω)。最简单的方法就是梯度上升法,大致使用如下步骤:

  1. 初始化 ω ‾ 0 \underline\omega^0 ω0,比如设 ω ‾ j 0 j = 1 … d \underline\omega_j^0\quad j=1\dots d ωj0j=1d

  2. For t=1…T:

    • For j=1…d:
      ω j t = ω j t − 1 + α t × ∂ ∂ ω j L ( ω ‾ t − 1 ) \omega_j^t=\omega_j^{t-1}+\alpha_t\times \frac{\partial}{\partial\omega_j}\mathcal{L}(\underline\omega^{t-1}) ωjt=ωjt1+αt×ωjL(ωt1)
      其中 α t \alpha_t αt是学习率, ∂ ∂ ω j L ( ω ‾ t − 1 ) \frac{\partial}{\partial\omega_j}\mathcal{L}(\underline\omega^{t-1}) ωjL(ωt1) L \mathcal{L} L相对于 ω j \omega_j ωj的偏导数。
  3. 返回最终的参数 ω ‾ T \underline\omega^T ωT

实践中,有更多精妙的最优化方法可以使用:一个共同的选择是使用L-BFGS(一种拟牛顿法),这里就不去探究这种方法的细节了。好消息是很多软件的L-BFGS是直接可用的,实现L-BFGS需要我们计算目标函数 L ( ω ‾ ) \mathcal{L}(\underline\omega) L(ω),和它的偏导数 ∂ ∂ ω j L ( ω ‾ ) \frac{\partial}{\partial\omega_j}\mathcal{L}(\underline\omega) ωjL(ω)。所幸,这很容易计算:

∂ ∂ ω j L ( ω ‾ ) = ∑ i ϕ j ( x i , y i ) − ∑ i ∑ y p ( y ∣ x i ; ω ‾ ) ϕ j ( x i , y ) \frac{\partial}{\partial\omega_j}\mathcal{L}(\underline\omega)= \sum_i\phi_j(x_i,y_i)-\sum_i\sum_yp(y|x_i;\underline\omega)\phi_j(x_i,y) ωjL(ω)=iϕj(xi,yi)iyp(yxi;ω)ϕj(xi,y)

第一个求和项 ∑ i ϕ j ( x i , y i ) \sum_i\phi_j(x_i,y_i) iϕj(xi,yi),将所有样本 { x i , y i } i = 1 n \{\mathcal{x}_i,\mathcal{y}_i\}_{i=1}^n { xi,yi}i=1n的第j个特征 ϕ j ( x i , y i ) \phi_j(x_i,y_i) ϕj(xi,yi)求和。第二个求和项对所有样本的第j个特征的期望 ∑ y p ( y ∣ x i ; ω ‾ ) ϕ j ( x i , y ) \sum_yp(y|x_i;\underline\omega)\phi_j(x_i,y) yp(yxi;ω)ϕj(xi,y)求和。

正则化对数似然函数。在很多应用,在对数似然函数中加上额外的正则项是非常有好处的。修改后的函数变为:

L ( ω ‾ ) = ∑ i = 1 n log ⁡ p ( y i ∣ x i ; ω ‾ ) − λ 2 ∣ ∣ ω ‾ ∣ ∣ 2 \mathcal{L}(\underline\omega)=\sum_{i=1}^n \log \mathcal{p}(\mathcal{y}_i|\mathcal{x}_i;\underline\omega) - \frac{\lambda}{2}||\underline\omega||^2 L(ω)=i=1nlogp(yixi;ω)2λω2

这里 ∣ ∣ ω ‾ ∣ ∣ 2 = ∑ i ω i 2 ||\underline\omega||^2=\sum_i \omega_i^2 ω2=iωi2, λ \lambda λ是一个超参数,决定正则项的强度。还是和上面一样,我们所求的参数为:

ω ‾ ∗ = a r g   max ⁡ ω ‾ ∈ R d L ( ω ‾ ) \underline\omega^*= arg\,\max_{\underline\omega\in\mathbb{R}^d}\mathcal{L}(\underline\omega) ω=argωRdmaxL(ω)
此时,在估计参数时有一个权衡取舍,我们想使 log ⁡ p ( y i ∣ x i ; ω ‾ ) \log p(y_i|x_i;\underline\omega) logp(yixi;ω)尽量大,但同时还要保持范数 ∣ ∣ ω ‾ ∣ ∣ 2 ||\underline\omega||^2 ω2尽量小( λ \lambda λ越大,则我们希望范数越小)。正则项惩罚大的参数值。

直觉上,我们可以认为正则项是对复杂模型的一个惩罚,参数越大,模型越复杂。我们想要寻找可以很好拟合样本的模型,但我们也不想模型过于复杂(过拟合)

在实践中,往对数线性模型添加正则项是非常有用的。特别是在d很大时,这种场景在自然语言处理程序中是非常常见的,甚至d比训练样本数n还大的情况也存在,在这些情况下只要添加正则项惩罚大的参数值,我们还是可以获得较好的泛化性能。

寻找最优化参数
ω ‾ ∗ = a r g   max ⁡ ω ‾ ∈ R d L ( ω ‾ ) \underline\omega^*= arg\,\max_{\underline\omega\in\mathbb{R}^d}\mathcal{L}(\underline\omega) ω=argmaxωRdL(ω)还是可以使用基于梯度的方法,只需稍微修改偏导数公式为:

∂ ∂ ω j L ( ω ‾ ) = ∑ i ϕ j ( x i , y i ) − ∑ i ∑ y p ( y ∣ x i ; ω ‾ ) ϕ j ( x i , y ) − λ ω j \frac{\partial}{\partial\omega_j}\mathcal{L}(\underline\omega)= \sum_i\phi_j(x_i,y_i)-\sum_i\sum_yp(y|x_i;\underline\omega)\phi_j(x_i,y)-\lambda\omega_j ωjL(ω)=iϕj(xi,yi)iyp(yxi;ω)ϕj(xi,y)λωj

你可能感兴趣的:(机器学习)