整篇文章里,使用下划线表示向量,例如 ω ‾ ∈ 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。
给定两个集合 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(y∣x)的模型。例如, x \mathcal{x} x可以是一个单词, y \mathcal{y} y是这个单词的词性(名词、动词、介词等)。我们定义函数 ϕ ‾ : X × Y → R d \underline\phi:\mathcal{X}\times\mathcal{Y}\rightarrow\mathbb{R}^d ϕ:X×Y→Rd,同时假设参数向量 ω ‾ ∈ 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(y∣x)=∑y′∈Yexp(ω⋅ϕ(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} y∈Y计算这个内积。我们可以将这些量转换为一个定义良好的概率分布 p ( y ∣ x ) \mathcal{p}(\mathcal{y}|\mathcal{x}) p(y∣x)。如果对内积取幂, 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)) ∑y′∈Yexp(ϕ(x,y′)),这确保了 ∑ y ∈ Y p ( y ∣ x ; ω ‾ ) \sum_{\mathcal{y}\in\mathcal{Y}}{\mathcal{p}(\mathcal{y}|x;\underline\omega)} ∑y∈Yp(y∣x;ω)。这样我们就将可正可负的内积 ω ‾ ⋅ ϕ ‾ ( 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=1∑nlogp(yi∣xi;ω)
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(yi∣xi;ω)i=1…2 赋予一个较大的值,从而使 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=1∑nlogp(yi∣xi;ω)
最大似然估计是在 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(ω)。最简单的方法就是梯度上升法,大致使用如下步骤:
初始化 ω ‾ 0 \underline\omega^0 ω0,比如设 ω ‾ j 0 j = 1 … d \underline\omega_j^0\quad j=1\dots d ωj0j=1…d
For t=1…T:
返回最终的参数 ω ‾ 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) ∂ωj∂L(ω)。所幸,这很容易计算:
∂ ∂ ω 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) ∂ωj∂L(ω)=i∑ϕj(xi,yi)−i∑y∑p(y∣xi;ω)ϕ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(y∣xi;ω)ϕ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=1∑nlogp(yi∣xi;ω)−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(yi∣xi;ω)尽量大,但同时还要保持范数 ∣ ∣ ω ‾ ∣ ∣ 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 ∂ωj∂L(ω)=i∑ϕj(xi,yi)−i∑y∑p(y∣xi;ω)ϕj(xi,y)−λωj