《统计学习方法》——条件随机场(中)

news2024/11/25 12:54:57

引言

这是统计学习方法第十一章条件随机场的阅读笔记,包含所有公式的详细推导。

条件随机场(conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。

建议先阅读概率图简介,了解一些概率图的知识。


  1. 《统计学习方法》——条件随机场(上)
  2. 《统计学习方法》——条件随机场(中)
  3. 《统计学习方法》——条件随机场(下)
  4. 《统计学习方法》——条件随机场#习题解答#

条件随机场的概率计算问题

前向-后向算法

概率计算问题不可避免的涉及到计算 Z ( x ) Z(x) Z(x),我们知道
Z ( x ) = ∑ y ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) Z(x) = \sum_y \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) Z(x)=yi=1n+1Mi(yi1,yix)
是以start为起点stop为终点通过状态的所有路径 y 1 y 2 ⋯ y n y_1y_2\cdots y_n y1y2yn的非规范化概率之 ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) i=1n+1Mi(yi1,yix)之和。

即它可以写成:
Z ( x ) = ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) (p1) Z(x) = \sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n} \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) \tag{p1} Z(x)=y1yi1yi+1yni=1n+1Mi(yi1,yix)(p1)
从左往右看,这里有 n n n个求和,此时复杂度为 O ( n ) O(n) O(n),而每个求和中 y i y_i yi的取值有 m m m个,所以复杂度变成了 O ( m n ) O(m^n) O(mn),而最后还有 n + 1 n+1 n+1个连乘,最终复杂度为 O ( m n ⋅ n ) O(m^n \cdot n) O(mnn)。这在计算上是不可行的。

类似HMM,这里也基于动态规划引入前向和后向算法,使得时间复杂度降低成 O ( n ⋅ m 2 ) O(n \cdot m^2) O(nm2)

我们把上式 ( p 1 ) (p1) (p1)展开,并且为了统一,多加了一个 ∑ y 0 \sum_{y_0} y0,我们上面引入 y 0 = start y_0=\text{start} y0=start,只有一个取值,我们也可以把它看成一个向量,非 start \text{start} start位置取值为 0 0 0,只有 start \text{start} start位置取值为 1 1 1
Z ( x ) = ∑ y 0 ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) = ∑ y 0 ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n M 1 ( y 0 , y 1 ∣ x ) M 2 ( y 1 , y 2 ∣ x ) ⋯ M i ( y i − 1 , y i ∣ x ) M i + 1 ( y i , y i + 1 ∣ x ) ⋯ M n + 1 ( y n , y n + 1 ∣ x ) \begin{aligned} Z(x) &= \sum_{y_0}\sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n} \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) \\ &= \sum_{y_0}\sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n} M_1(y_0,y_1|x) M_2(y_1,y_2|x)\cdots M_i(y_{i-1},y_i|x) M_{i+1}(y_{i},y_{i+1}|x) \cdots M_{n+1}(y_n,y_{n+1}|x) \end{aligned} Z(x)=y0y1yi1yi+1yni=1n+1Mi(yi1,yix)=y0y1yi1yi+1ynM1(y0,y1x)M2(y1,y2x)Mi(yi1,yix)Mi+1(yi,yi+1x)Mn+1(yn,yn+1x)
观察上式,每个因子 M j ( y j − 1 , y j ∣ x ) M_j(y_{j-1},y_j|x) Mj(yj1,yjx)只与两个变量 y j − 1 y_{j-1} yj1 y j y_j yj有关,因此,可以重写一下上式:
Z ( x ) = ∑ y n M n + 1 ( y n , y n + 1 ∣ x ) ⋯ ∑ y i + 1 M i + 2 ( y i + 1 , y i + 2 ∣ x ) ∑ y i M i + 1 ( y i , y i + 1 ∣ x ) ∑ y i − 1 M i ( y i − 1 , y i ∣ x ) ⋯ ∑ y 2 M 3 ( y 2 , y 3 ∣ x ) ∑ y 1 M 2 ( y 1 , y 2 ∣ x ) ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) (p2) Z(x) = \sum_{y_n} M_{n+1}(y_n,y_{n+1}|x) \cdots \sum_{y_{i+1}} M_{i+2}(y_{i+1},y_{i+2}|x)\sum_{y_i} M_{i+1}(y_{i},y_{i+1}|x) \sum_{y_{i-1}} M_i(y_{i-1},y_i|x) \\ \cdots \sum_{y_2} M_3(y_2,y_3|x) \sum_{y_1} M_2(y_1,y_2|x)\sum_{y_0} M_1(y_0,y_1|x) \tag{p2} Z(x)=ynMn+1(yn,yn+1x)yi+1Mi+2(yi+1,yi+2x)yiMi+1(yi,yi+1x)yi1Mi(yi1,yix)y2M3(y2,y3x)y1M2(y1,y2x)y0M1(y0,y1x)(p2)
类似上面的例题,我们也画出这个 Z ( x ) Z(x) Z(x)的状态路径图(假设start和stop都在第一个状态位置):

image-20230528163429070

我们针对 ( p 2 ) (p2) (p2)式从右往左看,看如何对应上图中的结点位置。首先最右边的 ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) \sum_{y_0} M_1(y_0,y_1|x) y0M1(y0,y1x)

我们知道 M 1 ( y 0 , y 1 ∣ x ) = exp ⁡ ( ∑ k = 1 K w k f k ( y 0 , y 1 , x , 1 ) ) M_1(y_0,y_1|x)= \exp(\sum_{k=1}^K w_kf_k(y_0,y_1,x,1)) M1(y0,y1x)=exp(k=1Kwkfk(y0,y1,x,1))表示从 y 0 y_0 y0 y 1 y_1 y1的非规范化概率。

基于上面的一个向量的情况下,那么
∑ y 0 M 1 ( y 0 , y 1 ∣ x ) = M 1 ( y 0 = 1 , y 1 ∣ x ) + M 1 ( y 0 = 2 , y 1 ∣ x ) + ⋯ + M 1 ( y 0 = m , y 1 ∣ x ) (p3) \sum_{y_0} M_1(y_0,y_1|x)=M_1(y_0=1,y_1|x)+M_1(y_0=2,y_1|x)+\cdots + M_1(y_0=m,y_1|x) \tag{p3} y0M1(y0,y1x)=M1(y0=1,y1x)+M1(y0=2,y1x)++M1(y0=m,y1x)(p3)
这里先假设 y 1 y_1 y1取固定值,假设是 1 1 1,那么 ( p 3 ) (p3) (p3)做的事情就是如下图:

image-20230528164157861

我们看出来了,就是计算所有的前一个状态 y 0 y_0 y0 y 1 y_1 y1的非规范化概率,得到的是一个标量

我们知道,实际上只有start位置到 y 1 y_1 y1的那条连线才有意义,假设 y 0 = 1 = start y_0=1=\text{start} y0=1=start,那么实际上计算的是 M 1 ( y 0 = 1 , y 1 ∣ x ) M_1(y_0=1,y_1|x) M1(y0=1,y1x)。所有 y 0 y_0 y0对应竖排非start的结点和连线都是虚线,画出来是为了和后面步骤统一。

上面是固定 y 1 = 1 y_1=1 y1=1,即状态1的情况,实际 ( p 2 ) (p2) (p2)中的 ∑ y 0 \sum_{y_0} y0前面还有一个 ∑ y 1 \sum_{y_1} y1:$\sum_{y_1} M_2(y_1,y_2|x)\sum_{y_0} M_1(y_0,y_1|x) $。这是一种简写形式,完整的写法应该是:
∑ y 1 M 2 ( y 1 , y 2 ∣ x ) ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) = ∑ y 1 ( M 2 ( y 1 , y 2 ∣ x ) ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) ) \sum_{y_1} M_2(y_1,y_2|x)\sum_{y_0} M_1(y_0,y_1|x) = \sum_{y_1} \left(M_2(y_1,y_2|x)\sum_{y_0} M_1(y_0,y_1|x) \right) y1M2(y1,y2x)y0M1(y0,y1x)=y1(M2(y1,y2x)y0M1(y0,y1x))
暂时忽略 M 2 ( y 1 , y 2 ∣ x ) M_2(y_1,y_2|x) M2(y1,y2x)的情况下,显然要计算所有的 y 1 y_1 y1。即实际上 y 1 y_1 y1也可以有 m m m种取值,所以 ( p 3 ) (p3) (p3)实际上计算出的是一个 m m m维的向量——从所有的 y 0 y_0 y0到所有的 y 1 y_1 y1的非规范化概率。

image-20230528164745266

就如上图所示。

如果考虑所有 y 1 y_1 y1的情况下,那么 ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) \sum_{y_0} M_1(y_0,y_1|x) y0M1(y0,y1x)的计算可以用一个向量和矩阵相乘表示:
∑ y 0 M 1 ( y 0 , y 1 ∣ x ) = v 1 × m ⋅ [ M 1 ( y 0 , y 1 ∣ x ) ] m × m (p4) \begin{aligned} \sum_{y_0} M_1(y_0,y_1|x) &= \pmb v_{1\times m} \cdot [M_1(y_0,y_1|x)]_{m\times m} \end{aligned} \tag{p4} y0M1(y0,y1x)=v1×m[M1(y0,y1x)]m×m(p4)
这向量 v \pmb v v就是我们上面说的 y 0 y_0 y0对应的竖排向量,类似HMM中前向后向算法的表示,我们也用 α 0 ( y ∣ x ) \alpha_0(y|x) α0(yx)表示这个包含 y 0 y_0 y0初始状态的向量:
α 0 ( y ∣ x ) = { 1 , y = start 0 , else (11.26) \alpha_0(y|x) = \begin{cases} 1, & y=\text{start} \\ 0 , & \text{else} \end{cases} \tag{11.26} α0(yx)={1,0,y=startelse(11.26)
那么(值为1表示start位置)
α 0 ( x ) = [ α 0 ( y 0 = 1 ∣ x ) ⋮ α 0 ( y 0 = j ∣ x ) ⋮ α 0 ( y 0 = m ∣ x ) ] m = [ 1 ⋮ 0 ⋮ 0 ] m \alpha_0(x) = \begin{bmatrix} \alpha_0(y_0=1|x)\\ \vdots\\ \alpha_0(y_0=j|x) \\ \vdots\\ \alpha_0(y_0=m|x) \end{bmatrix}_m =\begin{bmatrix} 1\\ \vdots\\ 0 \\ \vdots\\ 0 \end{bmatrix}_m α0(x)= α0(y0=1∣x)α0(y0=jx)α0(y0=mx) m= 100 m
这是一个 m × 1 m \times 1 m×1的列向量, ( p 4 ) (p4) (p4)中的是一个行向量,我们变成行向量加个转置 α 0 T ( x ) \alpha_0^T(x) α0T(x)

那么 ( p 4 ) (p4) (p4)用新的向量表示为:
∑ y 0 M 1 ( y 0 , y 1 ∣ x ) = v 1 × m ⋅ [ M 1 ( y 0 , y 1 ∣ x ) ] m × m = α 0 T ( x ) 1 × m ⋅ [ M 1 ( y 0 , y 1 ∣ x ) ] m × m = α 0 T ( x ) 1 × m ⋅ M 1 ( x ) m × m \begin{aligned} \sum_{y_0} M_1(y_0,y_1|x) &= \pmb v_{1\times m} \cdot [M_1(y_0,y_1|x)]_{m\times m} \\ &= \alpha_0^T(x)_{1 \times m} \cdot [M_1(y_0,y_1|x)]_{m\times m} \\ &= \alpha_0^T(x)_{1 \times m} \cdot M_1(x)_{m\times m} \end{aligned} y0M1(y0,y1x)=v1×m[M1(y0,y1x)]m×m=α0T(x)1×m[M1(y0,y1x)]m×m=α0T(x)1×mM1(x)m×m
公式 ( p 3 ) (p3) (p3)计算出的新的向量,用 α 1 ( x ) \alpha_1(x) α1(x)表示,即
α 1 T ( x ) = α 0 T ( x ) ⋅ M 1 ( x ) \alpha_1^T(x) =\alpha_0^T(x) \cdot M_1(x) α1T(x)=α0T(x)M1(x)
基于这个新向量,可以改写 ( p 2 ) (p2) (p2)为:
Z ( x ) = ∑ y n M n + 1 ( y n , y n + 1 ∣ x ) ⋯ ∑ y i + 1 M i + 2 ( y i + 1 , y i + 2 ∣ x ) ∑ y i M i + 1 ( y i , y i + 1 ∣ x ) ∑ y i − 1 M i ( y i − 1 , y i ∣ x ) ⋯ ∑ y 2 M 3 ( y 2 , y 3 ∣ x ) ∑ y 1 M 2 ( y 1 , y 2 ∣ x ) ∑ y 0 M 1 ( y 0 , y 1 ∣ x ) = ∑ y n M n + 1 ( y n , y n + 1 ∣ x ) ⋯ ∑ y i + 1 M i + 2 ( y i + 1 , y i + 2 ∣ x ) ∑ y i M i + 1 ( y i , y i + 1 ∣ x ) ∑ y i − 1 M i ( y i − 1 , y i ∣ x ) ⋯ ∑ y 2 M 3 ( y 2 , y 3 ∣ x ) ∑ y 1 α 1 ( y 1 ∣ x ) M 2 ( y 1 , y 2 ∣ x ) (p5) \begin{aligned} Z(x) &= \sum_{y_n} M_{n+1}(y_n,y_{n+1}|x) \cdots \sum_{y_{i+1}} M_{i+2}(y_{i+1},y_{i+2}|x)\sum_{y_i}M_{i+1}(y_{i},y_{i+1}|x) \sum_{y_{i-1}} M_i(y_{i-1},y_i|x) \cdots \sum_{y_2} M_3(y_2,y_3|x) \sum_{y_1} M_2(y_1,y_2|x)\sum_{y_0} M_1(y_0,y_1|x)\\ &= \sum_{y_n} M_{n+1}(y_n,y_{n+1}|x) \cdots \sum_{y_{i+1}} M_{i+2}(y_{i+1},y_{i+2}|x)\sum_{y_i} M_{i+1}(y_{i},y_{i+1}|x) \sum_{y_{i-1}} M_i(y_{i-1},y_i|x) \cdots \sum_{y_2} M_3(y_2,y_3|x) \sum_{y_1} \alpha_1(y_1|x) M_2(y_1,y_2|x) \end{aligned} \tag{p5} Z(x)=ynMn+1(yn,yn+1x)yi+1Mi+2(yi+1,yi+2x)yiMi+1(yi,yi+1x)yi1Mi(yi1,yix)y2M3(y2,y3x)y1M2(y1,y2x)y0M1(y0,y1x)=ynMn+1(yn,yn+1x)yi+1Mi+2(yi+1,yi+2x)yiMi+1(yi,yi+1x)yi1Mi(yi1,yix)y2M3(y2,y3x)y1α1(y1x)M2(y1,y2x)(p5)
即在固定 y 2 y_2 y2的情况下,计算从 y 0 y_0 y0 y 2 y_2 y2的所有非规范化概率:

image-20230528173709769

上图是假设 y 2 = 1 y_2=1 y2=1时的情形,用加粗的箭头表示实际进行了的计算。同理我们知道,实际上会计算所有可能的 y 2 y_2 y2,即计算出 α 2 T ( x ) \alpha_2^T(x) α2T(x)

image-20230528173926940

如上图红色结点所示,表示计算从 y 0 y_0 y0 y 2 y_2 y2的所有非规范化概率。那么对于每个指标 i = 0 , 1 , ⋯   , n + 1 i=0,1,\cdots,n+1 i=0,1,,n+1,定义一个前向向量 α i ( x ) \alpha_i(x) αi(x)

α i ( x ) = [ α i ( y i = 1 ∣ x ) α i ( y i = 2 ∣ x ) ⋮ α i ( y i = i ∣ x ) ⋮ α i ( y i = m ∣ x ) ] m \alpha_i(x)=\begin{bmatrix} \alpha_i(y_i=1|x)\\ \alpha_i(y_i=2|x)\\ \vdots\\ \alpha_i(y_i=i|x)\\ \vdots\\ \alpha_i(y_i=m|x) \end{bmatrix}_m αi(x)= αi(yi=1∣x)αi(yi=2∣x)αi(yi=ix)αi(yi=mx) m
α i ( y i ∣ x ) \alpha_i(y_i|x) αi(yix)表示在位置 i i i的标记是 y i y_i yi且从 1 1 1 i i i( y 0 y_0 y0 y i y_i yi)的前部分标记序列的非规范化概率。

α i ( y i ∣ x ) = α i − 1 T ( y i − 1 ∣ x ) [ M i ( y i − 1 , y i ∣ x ) ] , i = 1 , 2 , ⋯   , n + 1 (11.27) \alpha_i(y_i|x) = \alpha_{i-1}^T(y_{i-1}|x)[M_i(y_{i-1},y_i|x)],\quad i=1,2,\cdots, n+1 \tag{11.27} αi(yix)=αi1T(yi1x)[Mi(yi1,yix)],i=1,2,,n+1(11.27)
又可以表示为:
α i T ( x ) = α i − 1 T ( x ) M i ( x ) (11.28) \alpha_i^T(x)= \alpha_{i-1}^T(x)M_i(x) \tag{11.28} αiT(x)=αi1T(x)Mi(x)(11.28)

此时从 y 1 y_1 y1 y 2 y_2 y2的过程中,我们可以看到,在 y 1 y_1 y1需要计算 m m m个结点,即 α 1 ( x ) \alpha_1(x) α1(x)向量中的每个元素,在 y 2 y_2 y2也需要根据 y 1 y_1 y1计算 m m m个结点。这个过程需要计算 m × m m \times m m×m次。如果序列长度为 n + 1 n+1 n+1,那么共有 n n n个这样的操作,显然整个过程的时间复杂度为 O ( m 2 ⋅ n ) O(m^2\cdot n) O(m2n)

假设我们基于此过程已经计算出了 α n T ( x ) \alpha_n^T(x) αnT(x),我们来看最后一步是怎么样的。此时,对应的 ( p 5 ) (p5) (p5)变成了:
Z ( x ) = ∑ y n α n ( y n ∣ x ) M n + 1 ( y n , y n + 1 ∣ x ) = ∑ y n α n ( y n ∣ x ) M n + 1 ( y n , y n + 1 = stop ∣ x ) Z(x) = \sum_{y_n} \alpha_n(y_n|x) M_{n+1}(y_n,y_{n+1}|x) = \sum_{y_n} \alpha_n(y_n|x) M_{n+1}(y_n,y_{n+1}=\text{stop}|x) Z(x)=ynαn(ynx)Mn+1(yn,yn+1x)=ynαn(ynx)Mn+1(yn,yn+1=stopx)
image-20230528181950650

因为 stop \text{stop} stop也只有一个,按照我们前面的理解,最终得到的是汇聚到 y n + 1 = stop y_{n+1}=\text{stop} yn+1=stop结点上的标量。即
Z ( x ) = ∑ y n α n ( y n ∣ x ) M n + 1 ( y n , y n + 1 ∣ x ) = ∑ y n α n ( y n ∣ x ) M n + 1 ( y n , y n + 1 = stop ∣ x ) = α n ( y n = 1 ∣ x ) M n + 1 ( y n = 1 , y n + 1 = stop ∣ x ) + α n ( y n = 2 ∣ x ) M n + 1 ( y n = 2 , y n + 1 = stop ∣ x ) + ⋯ + α n ( y n = m ∣ x ) M n + 1 ( y n = m , y n + 1 = stop ∣ x ) \begin{aligned} Z(x) &= \sum_{y_n} \alpha_n(y_n|x) M_{n+1}(y_n,y_{n+1}|x)\\ &= \sum_{y_n} \alpha_n(y_n|x) M_{n+1}(y_n,y_{n+1}=\text{stop}|x) \\ &= \alpha_n(y_n=1|x) M_{n+1}(y_n=1,y_{n+1}=\text{stop}|x) + \alpha_n(y_n=2|x) M_{n+1}(y_n=2,y_{n+1}=\text{stop}|x) + \cdots + \alpha_n(y_n=m|x) M_{n+1}(y_n=m,y_{n+1}=\text{stop}|x) \end{aligned} Z(x)=ynαn(ynx)Mn+1(yn,yn+1x)=ynαn(ynx)Mn+1(yn,yn+1=stopx)=αn(yn=1∣x)Mn+1(yn=1,yn+1=stopx)+αn(yn=2∣x)Mn+1(yn=2,yn+1=stopx)++αn(yn=mx)Mn+1(yn=m,yn+1=stopx)

对应上面的这些连线,如果把上式后面的结果写成向量化形式的话:
Z ( x ) = α n T ( x ) 1 × m ⋅ 1 m × 1 Z(x) = \alpha_n^T(x)_{1 \times m} \cdot \pmb{1}_{m \times 1} Z(x)=αnT(x)1×m1m×1
上面我们讨论的是前向算法,那么对于后向算法也是同样的思想。

类似 ( p 2 ) (p2) (p2),我们按另一个顺序,从后往前。

首先对于每个指标 i = 0 , 1 , ⋯   , n + 1 i=0,1,\cdots,n+1 i=0,1,,n+1,定义后向向量 β i ( x ) \beta_i(x) βi(x)
β n + 1 ( y n + 1 ∣ x ) = { 1 , y n + 1 = stop 0 , else (11.29) \beta_{n+1}(y_{n+1}|x) = \begin{cases} 1, & y_{n+1}=\text{stop} \\ 0 , & \text{else} \end{cases} \tag{11.29} βn+1(yn+1x)={1,0,yn+1=stopelse(11.29)

β n + 1 ( x ) \beta_{n+1}(x) βn+1(x)是一个 m × 1 m \times 1 m×1的列向量,只有一个元素为 1 1 1,其他元素为 0 0 0

Z ( x ) = ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) = ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n ∑ y n + 1 M 1 ( y 0 , y 1 ∣ x ) M 2 ( y 1 , y 2 ∣ x ) ⋯ M i ( y i − 1 , y i ∣ x ) M i + 1 ( y i , y i + 1 ∣ x ) ⋯ M n + 1 ( y n , y n + 1 ∣ x ) = ∑ y 1 M 1 ( y 0 , y 1 ∣ x ) ⋯ ∑ y n M n ( y n − 1 , y n ∣ x ) ∑ y n + 1 M n + 1 ( y n , y n + 1 ∣ x ) (p6) \begin{aligned} Z(x) &= \sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n} \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) \\ &= \sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n}\sum_{y_{n+1}} M_1(y_0,y_1|x) M_2(y_1,y_2|x)\cdots M_i(y_{i-1},y_i|x) M_{i+1}(y_{i},y_{i+1}|x) \cdots M_{n+1}(y_n,y_{n+1}|x) \\ &= \sum_{y_1} M_1(y_0,y_1|x) \cdots \sum_{y_n} M_{n}(y_{n-1},y_{n}|x) \sum_{y_{n+1}} M_{n+1}(y_n,y_{n+1}|x) \end{aligned} \tag{p6} Z(x)=y1yi1yi+1yni=1n+1Mi(yi1,yix)=y1yi1yi+1ynyn+1M1(y0,y1x)M2(y1,y2x)Mi(yi1,yix)Mi+1(yi,yi+1x)Mn+1(yn,yn+1x)=y1M1(y0,y1x)ynMn(yn1,ynx)yn+1Mn+1(yn,yn+1x)(p6)

从后往前的状态路径图如下图所示:

image-20230529093905965

同样先根据 ( p 6 ) (p6) (p6)最后一个求和有:
β n ( y n ∣ x ) = ∑ y n + 1 M n + 1 ( y n , y n + 1 ∣ x ) = [ M n + 1 ( y n , y n + 1 ∣ x ) ] m × m ⋅ β n + 1 ( y n + 1 ∣ x ) m × 1 \begin{aligned} \beta_{n}(y_{n}|x) = \sum_{y_{n+1}} M_{n+1}(y_n,y_{n+1}|x) &= [M_{n+1}(y_n,y_{n+1}|x)]_{m\times m} \cdot \beta_{n+1}(y_{n+1}|x)_{m \times 1} \end{aligned} βn(ynx)=yn+1Mn+1(yn,yn+1x)=[Mn+1(yn,yn+1x)]m×mβn+1(yn+1x)m×1

同理,我们可以得到
β i ( y i ∣ x ) = [ M i + 1 ( y i , y i + 1 ∣ x ) ] β i + 1 ( y i + 1 ∣ x ) (11.30) \beta_i(y_i|x) = [M_{i+1}(y_i,y_{i+1}|x)]\beta_{i+1}(y_{i+1}|x) \tag{11.30} βi(yix)=[Mi+1(yi,yi+1x)]βi+1(yi+1x)(11.30)
可以表示为
β i ( x ) = M i + 1 β i + 1 ( x ) (11.31) \beta_i(x) = M_{i+1}\beta_{i+1}(x) \tag{11.31} βi(x)=Mi+1βi+1(x)(11.31)

β i ( y i ∣ x ) \beta_i(y_i|x) βi(yix)表示未知 i i i的标记为 y i y_i yi并且从 i + 1 i+1 i+1 n n n的后部分标记序列的非规范化概率。

注意 α i ( y i ∣ x ) \alpha_i(y_i|x) αi(yix) β i ( y i ∣ x ) \beta_i(y_i|x) βi(yix)都是累计向量,前者表示从 1 1 1 i i i的前部分标记序列的非规范化概率。

我们来看到 y 0 y_0 y0时是怎样的,假设此时已经计算出了从 y n + 1 y_{n+1} yn+1 y 1 y_1 y1的非规范化概率向量 β 1 ( x ) \beta_1(x) β1(x)。从图中可以看出,它是汇聚到了 y 0 = start y_0=\text{start} y0=start的结点上,得到的是一个标量。

根据 ( p 6 ) (p6) (p6)有:
Z ( x ) = ∑ y 1 M 1 ( y 0 = start , y 1 ∣ x ) ⋅ β 1 ( y 1 ∣ x ) = M 1 ( y 0 = start , y 1 = 1 ∣ x ) β 1 ( y 1 = 1 ∣ x ) + M 1 ( y 0 = start , y 1 = 2 ∣ x ) β 1 ( y 1 = 2 ∣ x ) + ⋯ + M 1 ( y 0 = start , y 1 = m ∣ x ) β 1 ( y 1 = m ∣ x ) \begin{aligned} Z(x) &= \sum_{y_1} M_1(y_0=\text{start},y_1|x) \cdot \beta_1(y_1|x) \\ &= M_1(y_0=\text{start},y_1=1|x) \beta_1(y_1=1|x) + M_1(y_0=\text{start},y_1=2|x) \beta_1(y_1=2|x) + \cdots + M_1(y_0=\text{start},y_1=m|x) \beta_1(y_1=m|x) \end{aligned} Z(x)=y1M1(y0=start,y1x)β1(y1x)=M1(y0=start,y1=1∣x)β1(y1=1∣x)+M1(y0=start,y1=2∣x)β1(y1=2∣x)++M1(y0=start,y1=mx)β1(y1=mx)
image-20230529100442422

所以,最终 Z ( x ) Z(x) Z(x)也可以写成向量化的形式:
Z ( x ) = 1 1 × m ⋅ β 1 ( x ) m × 1 Z(x) = \pmb {1}_{1 \times m} \cdot \beta_1(x)_{m \times 1} Z(x)=11×mβ1(x)m×1
这里的 1 \pmb 1 1是一个 1 × m 1 \times m 1×m的列向量。

概率计算

有了前向后向算法,我们就可以很容易地计算序列在位置 i i i的标记是 y i y_i yi的条件概率。这在路径图中是这样的,这里假设 y i = j y_i=j yi=j状态。

image-20230529103023760

P ( Y i = y i ∣ x ) = α i T ( y i ∣ x ) β i ( y i ∣ x ) Z ( x ) (11.32) P(Y_i=y_i|x) = \frac{ \alpha_i^T(y_i|x)\beta_i(y_i|x)}{Z(x)} \tag{11.32} P(Yi=yix)=Z(x)αiT(yix)βi(yix)(11.32)

也可以用公式推导证明,利用联合概率分布于边缘概率分布的关系有:
P ( Y i = y i ∣ x ) = 1 Z ( x ) ∑ y 1 ⋯ ∑ y i − 1 ∑ y i + 1 ⋯ ∑ y n ∏ i = 1 n + 1 M i ( y i − 1 , y i ∣ x ) = 1 Z ( x ) ( ∑ y 1 ⋯ ∑ y i − 1 M 1 ( y 0 , y 1 ∣ x ) M 2 ( y 1 , y 2 ∣ x ) ⋯ M i ( y i − 1 , y i ∣ x ) ) ( ∑ y i + 1 ⋯ ∑ y n M i + 1 ( y i , y i + 1 ∣ x ) M i + 2 ( y i + 1 , y i + 2 ∣ x ) ⋯ M n + 1 ( y n , y n + 1 ∣ x ) ) = α i T ( y i ∣ x ) β i ( y i ∣ x ) Z ( x ) \begin{aligned} P(Y_i=y_i|x) &= \frac{1}{Z(x)} \sum_{y_1} \cdots \sum_{y_{i-1}} \sum_{y_{i+1}} \cdots \sum_{y_n} \prod_{i=1}^{n+1} M_i(y_{i-1},y_i|x) \\ &= \frac{1}{Z(x)} \left(\sum_{y_1} \cdots \sum_{y_{i-1}} M_1(y_0,y_1|x) M_2(y_1,y_2|x) \cdots M_i(y_{i-1},y_i|x) \right) \left( \sum_{y_{i+1}} \cdots \sum_{y_n} M_{i+1}(y_{i},y_{i+1}|x) M_{i+2}(y_{i+1},y_{i+2}|x)\cdots M_{n+1}(y_n,y_{n+1}|x)\right) \\ &= \frac{\alpha_i^T(y_i|x)\beta_i(y_i|x)}{Z(x)} \end{aligned} P(Yi=yix)=Z(x)1y1yi1yi+1yni=1n+1Mi(yi1,yix)=Z(x)1(y1yi1M1(y0,y1x)M2(y1,y2x)Mi(yi1,yix))(yi+1ynMi+1(yi,yi+1x)Mi+2(yi+1,yi+2x)Mn+1(yn,yn+1x))=Z(x)αiT(yix)βi(yix)

下面计算标记是 y i − 1 y_{i-1} yi1 y i y_i yi的条件概率。

image-20230529113854136

这里固定了 y i − 1 y_{i-1} yi1 y i y_i yi的状态,类似上图所示,同理,我们可以得到这个概率:

P ( Y i − 1 = y i − 1 , Y i = y i ∣ x ) = α i − 1 T ( y i − 1 ∣ x ) M i ( y i − 1 , y i ∣ x ) β i ( y i ∣ x ) Z ( x ) (11.33) P(Y_{i-1}=y_{i-1},Y_i=y_i|x) = \frac{ \alpha_{i-1}^T(y_{i-1}|x)M_i(y_{i-1},y_i|x)\beta_i(y_i|x)}{Z(x)} \tag{11.33} P(Yi1=yi1,Yi=yix)=Z(x)αi1T(yi1x)Mi(yi1,yix)βi(yix)(11.33)

期望值的计算

利用前向-后向向量,可以计算特征函数关于联合分布 P ( X , Y ) P(X,Y) P(X,Y)和条件分布 P ( Y ∣ X ) P(Y|X) P(YX)的数学期望。

特征函数 f k f_k fk关于条件分布 P ( Y ∣ X ) P(Y|X) P(YX)的数学期望是
E P ( Y ∣ X ) [ f k ] = ∑ y P ( Y ∣ X ) f k ( y , x ) = ∑ i = 1 n + 1 ∑ y i − 1 , y i f k ( y i − 1 , y i , x , i ) α i − 1 T ( y i − 1 ∣ x ) M i ( y i − 1 , y i ∣ x ) β i ( y i ∣ x ) Z ( x ) (11.34) \begin{aligned} E_{P(Y|X)}[f_k] &= \sum_y P(Y|X) f_k(y,x) \\ &= \sum_{i=1}^{n+1} \sum_{y_{i-1},y_i} f_k(y_{i-1},y_i,x,i) \frac{ \alpha_{i-1}^T(y_{i-1}|x)M_i(y_{i-1},y_i|x)\beta_i(y_i|x)}{Z(x)} \end{aligned} \tag{11.34} EP(YX)[fk]=yP(YX)fk(y,x)=i=1n+1yi1,yifk(yi1,yi,x,i)Z(x)αi1T(yi1x)Mi(yi1,yix)βi(yix)(11.34)
其中, k = 1 , ⋯   , K k=1,\cdots,K k=1,,K

假设经验分布为 P ~ ( X ) \tilde P(X) P~(X),即用经验分布代替真实分布,那么特征函数 f k f_k fk关于联合分布 P ( X , Y ) P(X,Y) P(X,Y)的数学期望是
E P ( X , Y ) [ f k ] = ∑ x , y P ( x , y ) ∑ i = 1 n + 1 f k ( y i − 1 , y i , x , i ) = ∑ x , y P ( x ) P ( y ∣ x ) ∑ i = 1 n + 1 f k ( y i − 1 , y i , x , i ) = ∑ x P ~ ( x ) ∑ y P ( y ∣ x ) ∑ i = 1 n + 1 f k ( y i − 1 , y i , x , i ) = ∑ x P ~ ( x ) ∑ i = 1 n + 1 ∑ y i − 1 , y i f k ( y i − 1 , y i , x , i ) α i − 1 T ( y i − 1 ∣ x ) M i ( y i − 1 , y i ∣ x ) β i ( y i ∣ x ) Z ( x ) (11.35) \begin{aligned} E_{P(X,Y)} [f_k] &= \sum_{x,y} P(x,y) \sum_{i=1}^{n+1} f_k(y_{i-1},y_i,x,i) \\ &= \sum_{x,y} P(x) P(y|x) \sum_{i=1}^{n+1} f_k(y_{i-1},y_i,x,i) \\ &= \sum_x \tilde P(x) \sum_{y} P(y|x) \sum_{i=1}^{n+1} f_k(y_{i-1},y_i,x,i) \\ &= \sum_x \tilde P(x) \sum_{i=1}^{n+1} \sum_{y_{i-1},y_i} f_k(y_{i-1},y_i,x,i) \frac{ \alpha_{i-1}^T(y_{i-1}|x)M_i(y_{i-1},y_i|x)\beta_i(y_i|x)}{Z(x)} \end{aligned} \tag{11.35} EP(X,Y)[fk]=x,yP(x,y)i=1n+1fk(yi1,yi,x,i)=x,yP(x)P(yx)i=1n+1fk(yi1,yi,x,i)=xP~(x)yP(yx)i=1n+1fk(yi1,yi,x,i)=xP~(x)i=1n+1yi1,yifk(yi1,yi,x,i)Z(x)αi1T(yi1x)Mi(yi1,yix)βi(yix)(11.35)
其中, k = 1 , ⋯   , K k=1,\cdots,K k=1,,K

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么持续输入?

Python怎么持续输入? Python是一个高级编程语言,它的简单易用性让它成为程序员们心仪的语言之一。在Python编程中,输入是一个非常重要的环节。 在这篇文章中,我们将讨论Python如何进行持续输入。我们将介绍几种不同的方法&#…

计算机图形学与opengl C++版 学习笔记 第10章 增强表面细节

假设我们想要对不规则表面的物体进行建模,例如橘子凹凸的表皮、葡萄干褶皱的表面或月球的陨石坑表面。我们该怎么做?到目前为止,我们已经学会了两种可能的方法: (a)我们可以对整个不规则表面进行建模&…

【期末总复习】数字图像处理知识要点

【A卷】 【选择】 1、计算机器显示彩色图像的格式 2、灰度反转后(一副图像灰度级)的灰度值是几 3、灰度图像浅色背景下加圆环会导致什么后果 4、图像平滑的模板有哪些 5、γ矫正指的是什么数学变换 6、一阶锐化空间滤波器有哪些 7、图像复原、图像增强…

运维(SRE)成长之路-第1天 搭建虚拟机(图示)

1.Linux安装前准备 虚拟机:用软件(如:vmware,virtualbox等)模拟硬件,方便实验的灵活配置 虚拟化软件,建议使用 Vmware Workstation 虚拟硬件配置 CPU:2核或更多 内存:1G以上,推荐2…

chatgpt赋能python:Python中如何找出最小的2个值

Python中如何找出最小的2个值 Python作为一种高效可靠的编程语言,拥有出色的处理数据和算法的能力。在数据处理中,常常需要对数据进行排序并找出最小(或最大)的数值。本文将着重介绍如何在Python中找出最小的2个值。 方法1&…

编程比赛 (ACM竞赛)常用术语

比赛相关 AK:All-Killed 通常指在信息学竞赛中获得满分(即 AC 了所有题目)。 由于在中高级信息学竞赛中(如 IOI,NOI,NOIP,ACM),想要获得满分普遍较难,甚至根…

java三大特性之【继承】

概念 继承就是将多个类的共性抽取出来,提出继承的概念。就是在进行共性抽取,实现代码复用。 提高代码的复用性,方便进行子类,子功能的扩展,将所有共性的内容放在父类(基类),子类只…

裁剪lua5.3.4

在 Lua 5.3.4 中,有一些宏定义可以缩小 Lua 的资源占用,包括: LUA_COMPAT_5_2:该宏定义可以将 Lua 5.3 的行为与 Lua 5.2 兼容,缩小 Lua 的资源占用。例如,该宏定义可以禁用一些 Lua 5.3 中新增的语法特性&…

在线协同办公小程序开发搭建开发环境

目录 介绍 开发环境说明 虚拟机 原因 VirtualBox虚拟机 VMware虚拟机v15 安装MySQL数据库 安装步骤 导入EMOS系统数据库 安装MongoDB数据库 启动Navicat,选择创建MongoDB连接 创建用户 搭建Redis数据库 配置Maven 安装IDEA插件 Lombok插件 …

基于Java+SpringBoot+Vue实现前后端分离美术馆管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【哈佛积极心理学笔记】第15讲 完美主义

第15讲 完美主义 A person committed to excellence can still be as ambitious or more ambitious than a perfectionist. The difference between the two is just their approach toward the journey. There is no straight line toward success. Perfection vs Excellenc…

CMake入门(1)

背景 目前很多大型框架都是使用cmake去构建,如果看不懂cmake, 在实际修改框架,添加新的模块时候就会受制于人,为此需要了解cmake的相关基础支持,避免被某些装逼大佬卡脖子,同时也进一步提高自己的业务水平。 变量 c…

Hello算法学习笔记之数组与链表

一、数组 线性数据结构,其将相同类型元素(链表就不一定要存储相同类型的元素)存储在连续的内存空间中。。数组有Index 数组的优点:访问很高效,O(1) PS:元素长度是单个元素占用的内存空间&…

CSS基础学习--13 Display(显示) 与 Visibility(可见性)

一、定义 display属性设置一个元素应如何显示 visibility属性指定一个元素应可见还是隐藏 二、隐藏元素 - display:none或visibility:hidden 隐藏一个元素可以通过把display属性设置为"none",或把visibility属性设置为"hidden"。但是请注意&am…

Aprioi关联算法

国际权威的学术会议IEEE International Conference on Data Mining (ICDM) 评选出了数据挖掘领域的十大经典算法,他们分别是:C4.5、kMeans、SVM、Apriori、EM、PageRank、AdaBoost、KNN、Naive Bayes以及CART。今天就让我们共同探讨一下十大算法之一Apri…

红黑树的插入和删除

红黑树(C) 红黑树简述红黑树的概念红黑树的性质红黑树结点定义 一,红黑树的插入插入调整插入代码 二,红黑树的验证三,红黑树的删除待删除的结点只有一个子树删除结点颜色为红色删除结点颜色为黑色 删除的结点为叶子节点…

【OpenMMLab AI实战营二期笔记】第六天 MMDetection代码课

0. 环境检测和安装 # 安装 mmengine 和 mmcv 依赖 # 为了防止后续版本变更导致的代码无法运行,暂时锁死版本 pip install -U "openmim0.3.7" mim install "mmengine0.7.1" mim install "mmcv2.0.0"# Install mmdetection rm -rf mmd…

软考A计划-系统架构师-知识点汇总-上篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Python转行的一点心得

Python现在非常火,语法简单而且功能强大,很多同学都想学Python!最近陆陆续续有很多小伙伴问我,学Python到底应该做什么,从事哪种岗位。下面是我们工作圈里面一些同学的苦恼: 一转行要趁早 上面类似的问题群里还有很多…

华为HCIA备考 易错题整理

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…