【概述】
对于线性链条件随机场的学习问题,即:已知线性链条件随机场 $P(Y|X)$,估计 $P(Y|X)$ 的参数,该问题本质上是无监督学习中的概率估计问题
其学习方法有改进的迭代尺度法 IIS、梯度下降法、拟牛顿法等,这里仅介绍使用改进的迭代尺度法 IIS 和拟牛顿法对线性链条件随机场的学习
【改进的迭代尺度法】
对数似然函数
若已知训练集,那么可知经验概率分布 $\tilde{P}(X,Y)$,那么就可以通过极大化训练数据的对数似然函数来求模型参数
根据极大似然估计,训练数据的对数似然函数为:
当 $P_{\mathbf{w}}$ 是由下式给出的线性链条件随机场时
对数似然函数为:
更新方程
改进的迭代尺度法 IIS 是通过迭代的方法,不断优化对数似然函数改变量的下界,极大化对数似然函数
假设模型的当前参数向量 $\mathbf{w}=(w_1,w_2,\cdots,w_K)^T$,向量的增量 $\boldsymbol{\delta}=(\delta_1,\delta_2,\cdots,\delta_K)^T$,则更新参数向量为:
根据 IIS,关于转移特征 $t_k$,$\delta_k$ 的更新方程为:
关于状态特征 $s_k$,$\delta_k$ 的更新方程为:
其中,$T(x,y)$ 是在数据 $(x,y)$ 中出现的所有特征数的总和,即:
算法 S
$T(x,y)$ 是在数据 $(x,y)$ 中的特征总数,但对于不同的数据 $(x,y)$,取值可能不同,为此,定义松弛特征:
其中,$S$ 是一个常数,选择足够大的 $S$ 时,会使得对训练集中的所有数据 $(x,y)$ 满足 $s(x,y)\geq 0$,此时特征总数 $T(x,y)=S$
那么,对于转移特征 $t_k$,$\delta_k$ 的更新方程为:
其中,$E_{P}[t_k] $ 为:
同理,对于状态特征 $s_l$,$\delta_k$ 的更新方程为:
其中,$E_{P}[s_l] $ 为:
算法 T
在算法 S 中,需要使常数 $S$ 足够大,但这样一来,每步迭代的增量向量会变大,算法收敛会变慢
为解决该问题,提出了算法 T,即对每个观测序列 $x$ 计算其特征总数最大值:
利用前向-后向递推公式,可计算出 $T(x)=t$
此时,对于转移特征 $t_k$,$\delta_k$ 的更新方程为:
其中,$a_{k,t}$ 是 $t_k$ 的期待值,$\delta_k=\log \beta_k$,$\beta_k$ 是上述多项式方程的唯一实根,可用牛顿法求得,进而求得相关的 $\delta_k$
同理,关于状态特征 $s_l$,$\delta_k$ 的更新方程为:
其中,$b_{l,t}$ 是 $s_l$ 的期待值,$\delta_k=\log \gamma_l$,$\gamma_l$ 是上述多项式方程的唯一实根,可用牛顿法求得,进而求得相关的 $\delta_k$
算法流程
综上所述,下面给出线性链条件随机场学习的改进的迭代尺度法的算法流程
输入:特征函数 $t_1,t_2,\cdots,t_{K_1},s_1,s_2,\cdots,s_{K_2}$,经验分布 $\tilde{P}(x,y)$
输出:参数估计值 $\hat{\mathbf{w}}$,模型 $P_{\hat{\mathbf{w}}}(y|x)$
算法步骤:
Step 1:算法初始化,对所有的 $k\in \{ 1,2,\cdots,K \}$,取初值 $w_k=0$
Step 2:对每一 $k\in \{ 1,2,\cdots,K \}$
1)当 $k=1,2,\cdots,K_1$ 时,令 $\delta_k$ 是下述方程的解
其中,$T(x,y)$ 可采取算法 S,亦可采取算法 T
2)当 $k=K_{1}+l,l=1,2,\cdots,K_2$ 时,令 $\delta_{K_1+l}$ 是下述方程的解
其中,$T(x,y)$ 可采取算法 S,亦可采取算法 T
3)更新 $w_{k}$ 的值
Step 3:若不是所有的 $w_k$ 都收敛,重复 Step 2
【拟牛顿法】
线性链条件随机场的学习,还可采用牛顿法或拟牛顿法
目标优化函数
对于线性链随机场模型:
学习的优化目标函数为:
其梯度函数为:
算法流程
基于目标优化函数,下面仅给出线性链条件随机场学习的 BFGS 算法 的算法流程
输入:特征函数 $f_1,f_2,\cdots,f_n$,经验分布 $\tilde{P}(X,Y)$
输出:参数估计值 $\hat{\mathbf{w}}$,模型 $P_{\hat{\mathbf{w}}}(y|x)$
算法步骤:
Step 1:算法初始化,选定初始点 $\mathbf{w}^{(0)}$,取初始近似矩阵 $B_0$ 为正定对称矩阵,并令 $k=0$
Step 2:计算梯度向量 $\mathbf{g_k} = g(\mathbf{w}^{(k)})$,若 $\mathbf{g_k}=0$,停止计算
Step 3:由 $B_k\mathbf{p_k}=-\mathbf{g_k}$,求出搜索方向 $\mathbf{p}_k$
Step 4:求步长 $\lambda_k$,使得
Step 5:令 $\mathbf{w}^{(k+1)}=\mathbf{w}^{(k)}+\lambda_k \mathbf{p}_k$
Step 6:计算 $\mathbf{g_{k+1}}=g(\mathbf{w}^{(k+1)})$,若 $\mathbf{g_{k+1}}=0$,停止计算
Step 7:计算第 $k+1$ 步的近似矩阵 $B_{k+1}$
其中,$\mathbf{y_k}$ 为两次迭代的梯度差
$\boldsymbol{\delta_k}$ 为两次迭代估计值的差