Alex_McAvoy

想要成为渔夫的猎手

条件随机场的学习

【概述】

对于线性链条件随机场的学习问题,即:已知线性链条件随机场 $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}$ 为两次迭代估计值的差

感谢您对我的支持,让我继续努力分享有用的技术与知识点!