zoukankan      html  css  js  c++  java
  • 条件随机场入门(四) 条件随机场的训练

    本节讨论给定训练数据集估计条件随机场模型参数的问题,即条件随机场的学习问题。条件随机场模型实际上是定义在时序数据上的对数线形模型,其学习方法包括极大似然估计和正则化的极大似然估计。具体的优化实现算法有改进的迭代尺度法IIS、梯度下降法以及 L-BFGS 算法。(crf++ 采用了 L-BFGS 优化的方式,所以着重看这种训练方法即可)

    L-BFGS算法

    对于条件随机场模型:

    [P_w(y|x) = frac{exp left { sum_{k=1}^K w_kf_k(x,y) ight }}{ sum_y  left { exp sum_{i=1}^n w_if_i(x,y) ight }}]

    已知训练数据集,由此可知经验概率分布 $widetilde{P}(X,Y)$ 可以通过极大化训练数据的对数似然函数来求模型参数,训练数据的对数似然函数为:

    [L(w) = L_{widetilde{P}}(P_w) = log prod_{x,y}P_w(y|x)^{widetilde{P}(x,y)} = sum_{x,y}widetilde{P}(x,y) log P_w(y|x)]

    接下来给出 $log$ 似然函数:

    egin{aligned}
    L(w) &= sum_{x,y} widetilde{P}(x,y) log P_w(y|x) \
    &= sum_{x,y} left { widetilde{P}(x,y)sum_{k=1}^Kw_kf_k(y,x)-widetilde{P}(x,y) log Z_w(x) ight } \
    &= sum_{x,y} widetilde{P}(x,y) sum_{k=1}^K w_kf_k(x,y) - sum_xwidetilde{P}(x)logsum_yexpleft { sum_{i=1} ^nw_if_i(x,y) ight }
    end{aligned}

    对目标进行 MLE 等价于极小化以下优化目标函数:

    [min_w f(w)  = sum_xwidetilde{P}(x) log sum_y exp left {  sum_{i=1}^n w_if_i(x,y) ight } -sum_{x,y}widetilde{P}(x,y)sum_{i=1}^nw_i f_i(x,y)]

    其一阶梯度函数在 BFGS 算法的过程中有用到,形式如下:

    [g(w) = left { frac{partial f(w)}{partial w_1},frac{partial f(w)}{partial w_2},…,frac{partial f(w)}{partial w_n} ight }]

    具体其形式如下:

    [g(w) = sum_{x,y}widetilde{P}(x)P_w(y|x)f(x,y)-E_{widetilde{P}}(f) = E_P(f) - E_{widetilde{P}}(f)]

    可以看到,这是要使得真实期望与经验期望的差值尽可能小,也正是我们的初衷,还可以为目标函数加上一个权重为 $1/ delta^2$ 的 $L_2$ 正则项(贝叶斯先验),因此 $g(w)$ 的形式变为:

    [ g(w) = E_P(f) - E_{widetilde{P}}(f) + frac{w}{delta^2}]

    总结一下便得到求解 CRF 的 BFGS 算法

    输入:特征函数 $f_1,f_2,…,f_n$;经验分布 $widetilde{P}(X,Y)$;

    输出:最优参数值 $hat{w}$;最优模型 $P_{hat{w}}(y|x)$。

    (1) 选定初始点 $w^{(0)}$,取 $B_0$ 为正定对称矩阵,置 $k = 0$;

    (2) 计算 $g_k = g(w^{(k)})$。若 $g_k = 0$ ,则停止计算;否则转(3)

    (3) 由拟牛顿条件 $B_kp_k = –g_k$ 求出 $p_k$

    (4) 线性搜索:求 $lambda_k$ 使得:

    [f(w^{(k)} + lambda_kp_k) = min_{lambda ge 0}f(w^{(k)} + lambda p_k)]

    (5) 置 $w^{(k+1)} = w^{(k)} + lambda_k p_k$

    (6) 计算 $g_{k+1} = g(w^{(k+1)})$,若 $g_k = 0$ ,则停止计算;否则,按下式求出 $B_{k+1}$:

    [B_{k+1} = B_k + frac{y_ky_k^T}{y_k^T delta_k} – frac{B_k delta_k delta_k^TB_k}{delta_k^TB_kdelta_k}]

    其中:[y_k = g_{k+1}-g_k ,     delta_k = w^{(k+1)} - w^{(k)}]

    (7)  置 k = k+1,转(3)

    这便是 BFGS 求解 CRF 的过程。

  • 相关阅读:
    【Python】多态、协议和鸭子类型
    【Python】魔法方法之__call__,将对象当方法使用
    【Python】策略模式
    【Python】if 后怎么就可以跟对象?变量交换写法是语法糖吗?
    【Python 库】NumPy 超详细教程(3):ndarray 的内部机理及高级迭代
    【Python 库】NumPy 超详细教程(2):数据类型
    【Python 库】NumPy 超详细教程(1):NumPy 数组
    【杂谈】10 年三线小城 IT 开发的感悟
    【PostgreSQL】安装及中文显示
    【Python 库】轻量级 ORM 框架 peewee 用法详解之——增删改查
  • 原文地址:https://www.cnblogs.com/ooon/p/5826757.html
Copyright © 2011-2022 走看看