zoukankan      html  css  js  c++  java
  • 对数线性模型与线性链条件随机场

    对数线性模型与线性链条件随机场

    对数线性模型

    我们从书本上知道线性链条件随机场就是对数线性模型,逻辑回归也是对数线性模型。对数线性模型的一般形式如下所示:

    [p(y|x;w)=dfrac{expsum_{j=1}^Jw_jF_j(x, y)}{Z(x, w)} ]

    其中(x,y)分别是输入和标签,都是序列。(F_j(x,y)) 是特征函数,(w_j)为可学习参数,是一个实数,控制着特征函数的影响程度,特征函数都是需要提前定义好的。(Z(x,w)) 是归一化因子,其计算如下所示:

    [Z(x,w) = sum_{y'in Y}expsum_{j=1}^Jw_jF_j(x,y') ]

    模型的预测即给出使得(p(y|x;w))最大的对应(y),更加数学化的表达为:

    [hat{y} = argmax_yp(y|x;w)=argmax_ysum_{j=1}^Jw_jF_j(x,y) ]

    特征函数

    像分词这种结构化预测任务,仅仅考虑当前位置本身往往是不够的,相邻标签的影响也需要考虑进去,因此必须设计有效的特征函数。为了同时考虑到变长序列和相邻位置的信息,(F_j(x,y))被定义为如下

    [F_j(x,y) = sum_{i=1}^nf_j(y_{i-1},y_i,x,i) ]

    (f_j)是low-level的特征函数,上面这个公式解释了为什么CRF可以利用整个序列的信息,而HMM不能够。为了更好的处理边界,一般会令(y_0=mbox{START},y_{n+1}=mbox{STOP})

    线性链条件随机场的解码

    解码即预测序列的标记结果,上文提及

    [egin{split} hat{y}&=argmax_yp(y|x;w)\ &= argmax_ydfrac{1}{Z(x,w)}expsum_{j=1}^Jw_jF_j(x,y)\ &=argmax_ysum_{j=1}^Jw_jF_j(x,y)\ &=argmax_ysum_{j=1}^Jw_jsum_{i=1}^nf_j(y_{i-1},y_i,x,i)\ &=argmax_ysum_{i=1}^nsum_{j=1}^Jw_jf_j(y_{i-1},y_i,x,i)\ &=argmax_ysum_{i=1}^ng_i(y_{i-1},y_i) end{split} ]

    我们令(U(k,v))为位置(1)到位置(k)的最优序列的得分,其中第(k)个位置的标记为(v),根据定义我们有

    [egin{split} U(k,v) &= max_{y_1,dots,y_{k-1}}sum_{i=1}^{k-1} g_i(y_{i-1},y_i)+g_k(y_{k-1},v)\ &= max_u [U(k-1,u) + g_k(u,v)] end{split} ]

    在计算得到最优序列的分数后,可以按如下方式,回溯解码出对应的标记

    [hat{y}_{k-1}=argmax_u[U(k-1,u) + g_k(u,hat{y}_k)] ]

    整个解码过程其实就是动态规划的具体应用,时间复杂度为(O(m^2nJ+m^2n))

    前向后向算法

    由$$hat{y}=argmax_ysum_{i=1}^ng_i(y_{i-1},y_i)$$可以知道

    [Z(x,w) = sum_yexpsum_{i=1}^ng_i(y_{i-1},y_i) ]

    我们令

    [egin{split} alpha(k,v) &= sum_{y_1, cdots, y_{k-1}}exp[sum_{i=1}^{k-1}g_i(y_{i-1},y_i)+g_k(y_{k-1},v)]\ &= sum_{y_1, cdots, y_{k-1}}exp[sum_{i=1}^{k-1}g_i(y_{i-1},y_i)]exp [g_k(y_{k-1},v)] end{split} ]

    所以有

    [alpha(k+1,v) = sum_ualpha (k,u)exp [g_{k+1}(u,v)] ]

    上面是从前向推,同样我们可以后向推,得到

    [eta (u,k) = sum_v[exp g_{k+1}(u,v)]eta (v, k+1) ]

    这样,我们有

    [Z(x,w) = sum_ualpha(k,u)eta(u,k) ]

    同样

    [p(y_k=u|x;w) = dfrac{alpha(k,u)eta(u,k)}{Z(x,w)}=dfrac{alpha(k,u)eta(u,k)}{sum_ualpha(k,u)eta(u,k)} ]

    [p(y_k=u,y_{k+1}=v|x;w) = dfrac{alpha(k,u)exp (g_{k+1}(u,v))eta(v,k+1)}{Z(x,w)} ]

    线性链条件随机场的参数学习

    线性链的条件随机场的参数学习使用梯度下降就可以了,优化目标是使得(p(y|x;w))最大。具体的推导如下:

    [egin{split} dfrac{partial log p(y|x;w)}{partial w_j} &= dfrac{partial }{partial w_j}log left(dfrac{expsum_{j=1}^Jw_jF_j(x,y)}{Z(x,w)} ight)\ &= dfrac{partial }{partial w_j}sum_{j=1}^Jw_jF_j(x,y)-log Z(x,w)\ &= F_j(x,y) - dfrac{partial }{partial w_j}log Z(x,w)\ &= F_j(x,y) - dfrac{1}{Z(x,w)}dfrac{partial }{partial w_j}Z(x,w) end{split} ]

    [egin{split} dfrac{partial }{partial w_j}Z(x,w) &= dfrac{partial }{partial w_j}sum_{y'}[expsum_j^Jw_jF_j(x,y')]\ &= sum_{y'}dfrac{partial }{partial w_j}[expsum_j^Jw_jF_j(x,y')]\ &= sum_{y'}[expsum_j^Jw_jF_j(x,y')]dfrac{partial }{partial w_j}[sum_j^Jw_jF_j(x,y')]\ &= sum_{y'}[expsum_j^Jw_jF_j(x,y')]F_j(x,y') end{split} ]

    所以有

    [egin{split} dfrac{partial log p(y|x;w)}{partial w_j} &= F_j(x,y) - dfrac{1}{Z(x,w)}sum_{y'}[expsum_j^Jw_jF_j(x,y')]F_j(x,y')\ &= F_j(x,y) -sum_{y'}F_j(x,y')dfrac{expsum_j^Jw_jF_j(x,y')}{Z(x,w)}\ &= F_j(x,y) -sum_{y'}F_j(x,y')p(y'|x;w)\ &= F_j(x,y) - E_{y'sim p(y'|x;w)}F_j(x,y') end{split} ]

    我们现在分析下(E_{y'sim p(y'|x;w)}F_j(x,y'))该怎么求:

    [egin{split} E_{y'sim p(y'|x;w)}F_j(x,y') &= sum_{i=1}^nE_{y_{i-1},y_i}[f_j(y_{i-1},y_i,x,i)]\ &= sum_{i=1}^nsum_{y_{i-1}}sum_{y_i}p(y_{i-1},y_i|x;w)f_j(y_{i-1},y_i,x,i)\ &=sum_{i=1}^nsum_{y_{i-1}}sum_{y_i}f_j(y_{i-1},y_i,x,i)dfrac{alpha(i-1,y_{i-1})[exp g_i(y_{i-1},y_i)]eta (y_i, i)}{Z(x,w)} end{split} ]

    其计算的时间复杂度为(O(nm^2))

    CRF 与 HMM 的区别

    1. HMM是生成模型,CRF是判别模型
    2. HMM是概率有向图,CRF是概率无向图
    3. HMM求解过程可能是局部最优,CRF可以全局最优
    4. CRF概率归一化较合理,HMM则会导致label bias 问题

    CRF 与 HMM 的优缺点比较

    1. 与HMM比较。CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活(与ME一样)
    2. 与MEMM比较。由于CRF计算全局最优输出节点的条件概率,它还克服了最大熵马尔可夫模型标记偏置(Label-bias)的缺点。
    3. 与ME比较。CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。
  • 相关阅读:
    [LeetCode] Permutations II
    [LeetCode] Remove Duplicates from Sorted Array II
    [LeetCode] Permutations
    [LeetCode] Path Sum II
    [LeetCode] Plus One
    [LeetCode] Path Sum
    [LeetCode] Permutation Sequence
    [LeetCode] Pow(x, n)
    [LeetCode] Remove Duplicates from Sorted Array
    [LeetCode] Remove Element
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/9909480.html
Copyright © 2011-2022 走看看