• 条件随机场(四)


    对所有类型的CRF模型,包括最大熵模型,都是采用极大似然估计的方法来进行参数估计,也就是说在训练数据集$mathcal T$上进行对数似然函数$mathcal L$的极大化。根据上一篇《条件随机场(三)》,我们知道线性链CRF的模型为

    egin{equation} p_{vec {lambda}}(vec y | vec x) = frac 1 {Z_{vec {lambda}} (vec x)} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j)) end{equation}

    egin{equation} Z_{vec {lambda}}(vec x) =  sum_{vec {y} in mathcal Y} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j)) end{equation}

    所以对数似然函数为,

    egin{equation} egin{aligned} overline {mathcal L} (mathcal T)  & = sum_{(vec x, vec y) in mathcal T} log p(vec y | vec x) \ & = sum_{(vec x, vec y) in mathcal T} [log (frac {exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j))} { sum_{y' in mathcal Y} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y'_{j-1}, y'_j, vec x, j))})] end{aligned} end{equation}

    为了避免过拟合,对数似然函数增加一个惩罚因子$- sum_{i=1}^m frac {lambda_{i}^2} {2 sigma^2}$,其中$sigma^2$是平衡因子,于是重新组织对数似然函数并作变换,

    egin{equation} egin{aligned} mathcal {L} (mathcal T) & = sum_{(vec x, vec y) in mathcal T} [log (frac {exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j))} { sum_{y' in mathcal Y} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y'_{j-1}, y'_j, vec x, j))})] - sum_{i=1}^m frac {lambda_{i}^2} {2 sigma^2} \ & = sum_{(vec x, vec y) in mathcal T} [(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j)) - log (sum_{y' in mathcal Y} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y'_{j-1}, y'_j, vec x, j)))] - sum_{i=1}^m frac {lambda_{i}^2} {2 sigma^2} \ & = underbrace {sum_{(vec x, vec y) in mathcal T} sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j)}_{mathcal A}  \ & quad - underbrace{sum_{(vec x, vec y) in mathcal T} log underbrace {(sum_{y' in mathcal Y} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y'_{j-1}, y'_j, vec x, j)))}_{Z_{vec lambda}(vec x)}}_{mathcal B}  - underbrace{sum_{i=1}^m frac {lambda_{i}^2} {2 sigma^2}}_{mathcal C} end{aligned}end{equation}

    对数似然函数$mathcal L(mathcal T)$的各项$mathcal A, mathcal B, mathcal C$分别对$lambda_i$求偏导,

    egin{equation} frac partial {partial {lambda_i}} sum_{(vec x, vec y) in mathcal T} sum_{j=1}^n sum_{i=1}^m lambda_i f_i (y_{j-1}, y_j, vec x, j) = sum_{(vec x, vec y) in mathcal T} sum_{j=1}^n f_j(y_{j-1}, y_j, vec x, j) end{equation}

    上式的求导中,将$lambda_i$看作变量,而$lambda_k, k eq i$看作常数。

    egin{equation} egin{aligned} frac partial {partial {lambda_i}} sum_{(vec x, vec y) in mathcal T} log Z_{vec lambda}(vec x) & = sum_{(vec x, vec y) in mathcal T} frac 1 {Z_{vec lambda}(vec x)} frac {partial {Z_{vec lambda}(vec x)}} {partial lambda_j} \ & = sum_{(vec x, vec y) in mathcal T} frac 1 {Z_{vec lambda}(vec x)} sum_{vec {y}' in mathcal Y} exp (sum_{j=1}^n sum_{i=1}^m lambda_i f_i ( y'_{j-1}, y'_j, vec x , j)) cdot sum_{j=1}^n f_i(y'_{j-1}, y'_j, vec x , j) \ & = sum_{(vec x, vec y) in mathcal T} sum_{{vec y}' in mathcal Y} underbrace{frac 1 {Z_{vec lambda}(vec x)} exp(sum_{j=1}^n sum_{i=1}^m lambda_i f_i ( y'_{j-1}, y'_j, vec x , j))}_{=p_{vec lambda}(vec y | vec x)} cdot sum_{j=1}^n f_i(y'_{j-1}, y'_j, vec x , j) \ & = sum_{(vec x, vec y) in mathcal T} left( sum_{{vec y}' in mathcal Y} p_{vec lambda}({vec y}' | vec x) sum_{j=1}^n f_i(y'_{j-1}, y'_j, vec x , j) ight) end{aligned} end{equation}

    egin{equation} frac partial {partial{lambda_k}} (- sum_{i=1}^m frac {lambda_{i}^2} {2 sigma^2}) = - frac {lambda_k} {sigma^2} end{equation}

    上面的对数似然函数(4)式是凹函数:其中第一项是线性的,因为关于$lambda_i$求导后的表达式不包含$lambda_i$了,第二项求导后的表达式中有一个归一化项,自然也与$lambda_i$无关了,所以第二项也可以看成$lambda_i$的线性项,而第三项明显是$lambda_i$的凹函数,所以对数似然函数整体也是凹函数。

    对数似然函数的$mathcal A$项其实就是特征函数$f_i$在经验分布下的期望值(我怎么觉得要除以$| mathcal T |$,然而这个对计算值没影响,后文会解释),

    egin{equation} ilde{E}(f_i) = sum_{(vec x, vec y) in mathcal T} sum_{j=1}^n f_i (y_{j-1},y_j, vec x, j) end{equation}

    $mathcal B$项的求导则是CRF模型下的$f_i$的期望,

    egin{equation} egin{aligned}  E(f_i) & = sum_{(vec x, vec y) in mathcal Z} p(vec x, vec y) sum_{j=1}^n f_i ({y_{j-1}}' , {y_j}' , vec x, j)  \ & =  sum_{(vec x, vec y) in mathcal Z} p(vec x) p(vec y | vec x) sum_{j=1}^n f_i ({y_{j-1}}' , {y_j}' , vec x, j) \ & =  sum_{(vec x, vec y) in mathcal Z} ilde{p}(vec x) p(vec y | vec x) sum_{j=1}^n f_i ({y_{j-1}}' ,{y_j}' , vec x, j) \ & propto sum_{(vec x, vec y) in mathcal T} sum_{{vec y}' in mathcal Y} p_{vec lambda}({vec y}' | vec x) sum_{j=1}^n f_i ({y_{j-1}}', {y_j}', vec x, j) end{aligned} end{equation}

    上式推导中使用经验概率$ ilde{p}(vec x)$代替$p(vec x)$,最后一步的正比其实就是乘以了训练集的数量$| mathcal T|$,这与(8)式也是一致的,(8)中也是经验期望乘以了$| mathcal T |$,而第三项也可以认为是经过了乘以$| mathcal T |$ 这一步,

    于是对数似然函数的偏导为,

    egin{equation} frac {partial {mathcal {L} (mathcal T)}} {partial {lambda_i}} = ilde{E}(f_i) - E(f_i) - frac {lambda_i} {sigma^2} end{equation}

    (8)和(9)式与最大熵模型(见条件随机场二中的(12)~(16)式)类似,令上式等于0,于是乘以的$| mathcal T |$这一项就可以忽略了。

     计算$f_i$的经验期望是很容易的,只要找出特征$f_i$在训练数据集中出现次数(按道理,应该除以$| mathcal T |$,但是上文解释过了,可以忽略这一常数因子),计算$E(f_i)$则没那么容易了,因为分类序列的情况比较多,即$| mathcal Y |$值比较大。而在最大熵模型中可以计算$E(f_i)$的原因是因为其分类输出为单个,而非一个序列,显然序列排序的情况比单个的情况多很多,比如分类总共有J个,则单个分类的情况就是J个,而n长度的序列的可能情况理论上则是 $J^n$个。在CRF中,由于计算的复杂,我们采用动态规划的方法,与HMM中一样,即前向-后向算法。如下图

     

    我们令$T_{j}(s)$表示从位置j,状态为s的节点出发可以到达下一个位置上所有状态对应的节点,$T{j}^{-1}(s)$表示位置 j 且状态为s的节点可以由上一个位置上所有可能的状态节点转换而来,根据前面HMM的介绍内容不难知道,对于线性链CRF模型,前向$alpha$和后向$eta$分别为,

    egin{equation} alpha_{j}(s| vec x) = sum_{s' in T_{j}^{-1}(s)} alpha_{j-1}(s' | vec x) cdot Psi_{j}(vec x, s', s) end{equation}

    egin{equation} eta_{j}(s | vec x) = sum_{s' in T_{j}(s)}(s' | vec x) cdot Psi_{j}(vec x, s, s') end{equation}

     其中势函数$Psi_{j}(vec x, s', s)$可以根据条件随机场(三)中的(3)式和(5)式很容易得到:$Psi_{j}(vec x, s, s') = exp (sum_{i=1}^m lambda_i f_i (y_{j-1} = s, y_{j} = s' , vec x , j)) $

     这里,前向概率 $alpha_{j}(s | vec x)$表示输入为$vec x$的条件下,位置 j 处的状态为 s 并且到位置 j 的前部分标记序列的非规范化条件概率,而后向概率 $eta_{j}(s | vec x)$ 表示输入为 $vec x$的条件下,位置 j 的状态为s 且 j 位置到最后的那一部分标记序列的非规范化条件概率,一定要注意是非规范化的,因为没有考虑因子$Z_{vec {lambda}}(vec x)$。

    定义第一个位置 j = 1 之前的起始位置 j = 0 的状态记为 $ot$,最后一个位置 j = n 之后的一个位置 j = n + 1 的状态记为 $ op$,于是有

    egin{equation} alpha_{0} (ot | vec x) = 1 end{equation}

    egin{equation} eta_{|vec x| + 1}( op | vec x) = 1 end{equation}

     有了上述信息,计算$f_i$的期望就可以有效地实现了,根据(9)式,

    条件概率$sum_{{vec y}' in mathcal T} p_{vec {lambda}}({vec y}' | vec x)$表示给定输入$vec x$的条件下,所有可能的输出$vec y$的条件概率之和,易知

    $$sum_{{vec y}' in mathcal T} p_{vec {lambda}}({vec y}' | vec x) = frac 1 {Z_{vec {lambda}}(vec x)}  sum_{s in S}  alpha_{j}(s | vec x) eta_{j}(s|vec x) $$

    代入(9)式得,

    egin{equation} egin{aligned} E(f_i) & = sum_{(vec x, vec y) in mathcal T} frac 1 {Z_{vec {lambda}}(vec x)}  sum_{s in S}  alpha_{j}(s | vec x) eta_{j}(s|vec x) cdot sum_{j=1}^n f_i({y_{j-1}}', {y_j}', vec x, j)  \ & =  sum_{(vec x, vec y) in mathcal T} frac 1 {Z_{vec {lambda}}(vec x)} sum_{j=1}^n sum_{s in S}   f_i({y_{j-1}}', {y_j}', vec x, j) alpha_{j}(s | vec x) eta_{j}(s|vec x) \ & = sum_{(vec x, vec y) in mathcal T} frac 1 {Z_{vec {lambda}}(vec x)} sum_{j=1}^n sum_{s in S} sum_{s' in T_{j}(s)} f_i((s, s', vec x, j) alpha_{j}(s | vec x) Psi_{j}(vec x, s, s') eta_{j+1}(s'|vec x) end{aligned} end{equation}

    上式计算过程可以用下图形象的表示出来

    此外,归一化因子可以表示为

    $$Z_{vec {lambda}}(vec x) = eta_{0}(ot | vec x) $$

     于是解(10)式方程即可。

    (未完待续,后面将持续统计学习相关的文章,鄙人也是边学边记录)

    ref

    Classical Probabilistic Models and Conditional Random Fields

  • 相关阅读:
    [Z] Windows 8/10 audio编程
    [Z]The Boost C++ Libraries
    [Z] windows进程在32、64位系统里用户和系统空间的地址范围
    [Z] 关于c++ typename的另一种用法
    [z] 人工智能和图形学、图像处理方面的各种会议的评级
    [Z] 计算机类会议期刊根据引用数排名
    关于windows的service编程
    关于Linux session管理与GUI架构
    搭建框架-ECS.ECommerce
    不调用构造函数而创建一个类型实例
  • 原文地址:https://www.cnblogs.com/sjjsxl/p/7048564.html
Copyright © 2020-2023  润新知