HMM总结


概率图模型
code

4.HMM–>CRF

4.1 HMM–是个序列

在这里插入图片描述

  • x-观测到的
  • 条件独立
    • 给定yt
      • y t − 1 和 y t + 1 ( 所 有 的 过 去 和 未 来 也 都 独 立 ) y_{t-1}和y_{t+1}(所有的过去和未来也都独立) yt1yt+1(独立
      • x u 和 x s x_{u}和x_{s} xuxs独立
  • 表示
    • 状态分布: π i = p ( y 1 i = 1 ) \pi_i=p(y_1^i=1) πi=p(y1i=1)
    • 状态转移矩阵A,aij为转移概率
      • P ( y t + 1 j ∣ y t i = 1 ) P(y_{t+1}^j|y_t^i=1) P(yt+1jyti=1)
    • 发射概率 P ( x ∣ y ) P(x|y) P(xy)
    • 则联合概率 P ( x , y ) = p ( y 1 ) Π t = 1 T − 1 P ( y t + 1 j ∣ y t i ) Π t = 1 T P ( x t ∣ y t ) P(x,y)=p(y_1)\Pi_{t=1}^{T-1}P(y_{t+1}^j|y_t^i)\Pi_{t=1}^{T}P(x_t|y_t) P(x,y)=p(y1)Πt=1T1P(yt+1jyti)Πt=1TP(xtyt)
      • 参数化 P ( x , y ) = π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) P(x,y)=\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t) P(x,y)=πy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)
  • 三个基础问题
    1. 状态序列解码(推断)问题:
      • 给定 x , θ − − > y : p ( y ∣ x , θ ) x,\theta-->y:p(y|x,\theta) x,θ>y:p(yx,θ)
    2. 似然评估问题evaluate
      • 给定 x , θ − − > 似 然 函 数 P ( x ∣ θ ) x,\theta --> 似然函数P(x|\theta) x,θ>P(xθ)
    3. 参数估计问题(学习
      • 给定 x − − > θ = a r g m a x P ( x ∣ θ ) x --> \theta=argmax P(x|\theta) x>θ=argmaxP(xθ)

4.1.1 推断问题(evaluate)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • P ( x ) = Σ y 1 , y 2 , . . . , y T P ( x , y ) = Σ y 1 , y 2 , . . . , y T π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) = Σ y P ( x ∣ y ) p ( y ) = Σ y 1 Σ y 2 . . . Σ y T π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) P(x)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)\\=\Sigma_y P(x|y)p(y)\\=\Sigma_{y_1}\Sigma_{y_2}...\Sigma_{y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t) P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)=ΣyP(xy)p(y)=Σy1Σy2...ΣyTπy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)
    • y i = { q 1 , q 2 , . . . , q N } − − − O ( N T ) 太 y_i=\{q_1,q_2,...,q_N\}---O(N^T)太 yi={q1,q2,...,qN}O(NT)
    • 很多连乘,但是并不是跟所有的都有关,就可以往后推求和
  • P ( y t ∣ x ) = P ( x ∣ y t ) P ( y t ) P ( x ) = P ( x 1 , . . . , x t ∣ y t ) P ( x t + 1 , . . . , x n ∣ y t ) P ( y t ) P ( x ) P(y_t|x)=\frac{P(x|y_t)P(y_t)}{P(x)}=\frac{P(x1,...,x_t|y_t)P(x_{t+1},...,x_n|y_t)P(y_t)}{P(x)} P(ytx)=P(x)P(xyt)P(yt)=P(x)P(x1,...,xtyt)P(xt+1,...,xnyt)P(yt)
    • P ( y t ∣ x ) = γ ( y t ) = P ( x 1 , . . . , x t , y t ) P ( x t + 1 , . . . , x n ∣ y t ) P ( x ) = α ( y t ) β ( y t ) P ( x ) P(y_t|x)=\gamma(y_t)=\frac{P(x1,...,x_t,y_t)P(x_{t+1},...,x_n|y_t)}{P(x)}=\frac{\alpha(y_t)\beta(y_t)}{P(x)} P(ytx)=γ(yt)=P(x)P(x1,...,xt,yt)P(xt+1,...,xnyt)=P(x)α(yt)β(yt)
      • p ( x ) = Σ y t α ( y t ) β ( y t ) p(x)=\Sigma_{y_t}\alpha(y_t)\beta(y_t) p(x)=Σytα(yt)β(yt)
      • 其中𝛼(𝑦𝑡)是产生部分输出序列 𝑥1, ⋯ , 𝑥𝑡并结束于𝑦𝑡的概率
      • 其中β(𝑦𝑡)是从𝑦𝑡状态开始产生输出序列𝑥𝑡+1, ⋯ , 𝑥𝑇的概率
  • 递归的计算
    • α ( y t + 1 ) = Σ y t α ( y t ) a y t + 1 , y t P ( x t + 1 ∣ y t + 1 ) \alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1}) α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1yt+1)
      • 初始化 α ( y 0 ) = P ( x 0 , y 0 ) = p ( x 0 ∣ y 0 ) P ( y 0 ) = P ( x 0 ∣ y 0 ) π y 0 \alpha(y_0)=P(x_0,y_0)=p(x_0|y_0)P(y_0)=P(x_0|y_0)\pi_{y_0} α(y0)=P(x0,y0)=p(x0y0)P(y0)=P(x0y0)πy0
    • β ( y t ) = Σ y t + 1 β ( y t + 1 ) a y t + 1 , y t P ( x t + 1 ∣ y t + 1 ) \beta(y_{t})=\Sigma_{y_{t+1}}\beta(y_{t+1})a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1}) β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1yt+1)
      • 初始化 β ( y T ) = 1 就 行 了 \beta(y_T)=1就行了 β(yT)=1
        • 假 定 β ( y T ) 为 单 位 向 量 , 我 们 可 以 准 确 计 算 出 β y T − 1 假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}} β(yT)βyT1
          • P ( x ) = Σ i α ( y T i ) β ( y T i ) = Σ i α ( y T i ) = P ( x ) P(x)=\Sigma_i\alpha(y_T^i)\beta(y_T^i)=\Sigma_i \alpha(y_T^i)=P(x) P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)
    • 为了计算所有的yt的后验概率,需要为每一步计算alpha/beta—一次前向一次后向
    • ξ ( y t , y t + 1 ) = P ( y t , y t + 1 ∣ x ) = P ( x ∣ y t , y t + 1 ) P ( y t + 1 ∣ y t ) P ( y t ) p ( x ) = P ( x 1 , . . . x t ∣ y t ) P ( x t + 1 ∣ y t + 1 ) P ( x t + 2 , . . . x n ∣ y t + 1 ) P ( y t + 1 ∣ y t ) P ( y t ) p ( x ) = α ( y t ) P ( x t + 1 ∣ y t + 1 ) β ( y t + 1 ) a y t + 1 , y t p ( x ) \xi(y_t,y_{t+1})=P(y_t,y_{t+1}|x)\\=\frac{P(x|y_t,y_{t+1})P(y_{t+1}|y_t)P(y_t)}{p(x)}\\=\frac{P(x1,...x_t|y_t)P(x_{t+1}|y_{t+1})P(x_{t+2},...x_n|y_{t+1})P(y_{t+1}|y_t)P(y_t)}{p(x)}\\=\frac{\alpha(y_t)P(x_{t+1}|y_{t+1})\beta(y_{t+1})a_{y_{t+1},y_t}}{p(x)} ξ(yt,yt+1)=P(yt,yt+1x)=p(x)P(xyt,yt+1)P(yt+1yt)P(yt)=p(x)P(x1,...xtyt)P(xt+1yt+1)P(xt+2,...xnyt+1)P(yt+1yt)P(yt)=p(x)α(yt)P(xt+1yt+1)β(yt+1)ayt+1,yt
    • 似然函数–简单求和最终步的 α \alpha α可得到
    • 状态的后验概率– 再 使 用 β 递 归 再使用\beta递归 使β
    • –> P ( y t k = 1 ∣ x ) = α ( y t ) β ( y t ) P ( x ) P(y_t^k=1|x)=\frac{\alpha(y_t)\beta(y_t)}{P(x)} P(ytk=1x)=P(x)α(yt)β(yt)
    • –>如何得到整个序列的最大后验证概率

4.1.2 viterbi decoding解码

  • y ∗ = a r g m a x y P ( y ∣ x ) = a r g m a x y P ( x , y ) y*=argmax_y P(y|x)=argmax_y P(x,y) y=argmaxyP(yx)=argmaxyP(x,y)
  • V t k = m a x y 1 , . . . , y t − 1 P ( x 1 , . . . , x t − 1 , y 1 , . . . , y t − 1 , x t , y t k = 1 ) V_t^k=max_{y_1,...,y_{t-1}} P(x_1,...,x_{t-1},y_1,...,y_{t-1},x_t,y_t^k=1) Vtk=maxy1,...,yt1P(x1,...,xt1,y1,...,yt1,xt,ytk=1)
    • 结尾为 y t = k y_t=k yt=k时,最可能状态序列的概率
    • 递归形式 V t k = p ( x t ∣ y t k = 1 ) m a x i V t − 1 i a i , k a i , k = p ( y i k ∣ y i ) : i − > k V_t^k=p(x_t|y_t^k=1)max_i V_{t-1}^ia_{i,k}\\a_{i,k}=p(y_ik|y_i):i->k Vtk=p(xtytk=1)maxiVt1iai,kai,k=p(yikyi):i>k
    • 动态规划(路径规划)问题:距离=1/p,使得cost最小
    • V t k : t 时 刻 , y t = k − − 到 达 q k 状 态 m a x y 1 , . . . , y t − 1 终 点 已 经 确 定 , 路 径 没 有 确 定 , 找 概 率 最 大 的 路 径 V_t^k:t时刻,y_t=k--到达q_k状态\\max_{y_1,...,y_{t-1}} 终点已经确定,路径没有确定,找概率最大的路径 Vtktyt=kqkmaxy1,...,yt1
      在这里插入图片描述

4.1.3 学习,参数估计

  • 极大似然估计:EM算法

    • 最大化 P ( x ∣ θ ) P(x|\theta) P(xθ)
    • 参数 A 、 π , 输 出 分 布 的 参 数 A、\pi,输出分布的参数 Aπ,
  • P ( x ∣ θ ) = Σ y 1 , y 2 , . . . , y T P ( x , y ) = Σ y 1 , y 2 , . . . , y T π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t , η ) P(x|\theta)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t,\eta) P(xθ)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T1ayt+1,ytΠt=1TP(xtyt,η)

  • 假 设 P ( x t ∣ y t , η ) = Π i = 1 M Π j = 1 L [ η i j ] y t i x t j 假设P(x_t|y_t,\eta)=\Pi_{i=1}^M \Pi_{j=1}^L[\eta_{ij}]^{y_t^ix_t^j} P(xtyt,η)=Πi=1MΠj=1L[ηij]ytixtj

  • M
    在这里插入图片描述

  • α ^ i j = m i j Σ k = 1 N m i k η ^ i j = n i j Σ k = 1 N n i k π ^ i = y 1 i \hat{\alpha}_{ij}=\frac{m_{ij}}{\Sigma_{k=1}^N m_{ik}}\\ \hat{\eta}_{ij}=\frac{n_{ij}}{\Sigma_{k=1}^N n_{ik}}\\ \hat{\pi}_i=y_1^i α^ij=Σk=1Nmikmijη^ij=Σk=1Nniknijπ^i=y1i

  • E步
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 缺点

    • 仅捕捉了状态之间和状态及其对应输出之间的关系(上下文)
    • 学习目标和预测目标不匹配
      • 我们只要p(y|x),但只知道p(x,y)—产生式模型

4.1.4计算实例

在这里插入图片描述* A:aij:i->j

  • 前向计算
    • 时间1:
      • α ( y 1 = 1 ) = P ( x 1 ∣ y 1 = 1 ) π y 1 = 1 = 0.5 ∗ 0.2 = 0.1 ( x 1 = 红 ) α ( y 1 = 2 ) = P ( x 1 ∣ y 1 = 2 ) π y 1 = 2 = 0.4 ∗ 0.4 = 0.16 α ( y 1 = 3 ) = P ( x 1 ∣ y 1 = 3 ) π y 1 = 3 = 0.7 ∗ 0.4 = 0.28 \alpha(y_1=1)=P(x_1|y_1=1)\pi_{y_1=1}=0.5*0.2=0.1\\(x1=红) \alpha(y_1=2)=P(x_1|y_1=2)\pi_{y_1=2}=0.4*0.4=0.16 \alpha(y_1=3)=P(x_1|y_1=3)\pi_{y_1=3}=0.7*0.4=0.28 α(y1=1)=P(x1y1=1)πy1=1=0.50.2=0.1x1=α(y1=2)=P(x1y1=2)πy1=2=0.40.4=0.16α(y1=3)=P(x1y1=3)πy1=3=0.70.4=0.28
    • 时间2:x2=白
      • α ( y 2 = 1 ) = ( Σ y 1 α ( y 1 ) P ( y 2 = 1 ∣ y 1 ) ) P ( x 2 ∣ y 2 ) = ( 0.1 ∗ 0.5 + 0.16 ∗ 0.3 + 0.28 ∗ 0.2 ) ∗ 0.5 = 0.077 α ( y 2 = 2 ) = ( α ( y 1 = 1 ) P ( y 2 = 2 ∣ y 1 = 1 ) + α ( y 1 = 2 ) P ( y 2 = 2 ∣ y 1 = 2 ) + α ( y 1 = 3 ) P ( y 2 = 2 ∣ y 1 = 3 ) ) ∗ P ( x 2 ∣ y 2 = 2 ) = ( 0.1 ∗ 0.2 + 0.16 ∗ 0.5 + 0.28 ∗ 0.3 ) ∗ 0.6 = 0.1104 α ( y 2 = 3 ) = ( 0.1 ∗ 0.3 + 0.16 ∗ 0.2 + 0.28 ∗ 0.5 ) ∗ 0.3 = 0.0606 \alpha(y_2=1)=(\Sigma_{y_1}\alpha(y_1)P(y_2=1|y_1))P(x_2|y_2)=(0.1*0.5+0.16*0.3+0.28*0.2)*0.5=0.077\\ \alpha(y_2=2)=(\alpha(y_1=1)P(y_2=2|y_1=1)+\alpha(y_1=2)P(y_2=2|y_1=2)+\alpha(y_1=3)P(y_2=2|y_1=3))*P(x_2|y_2=2)=(0.1*0.2+0.16*0.5+0.28*0.3)*0.6=0.1104\\ \alpha(y_2=3)=(0.1*0.3+0.16*0.2+0.28*0.5)*0.3=0.0606 α(y2=1)=(Σy1α(y1)P(y2=1y1))P(x2y2)=(0.10.5+0.160.3+0.280.2)0.5=0.077α(y2=2)=(α(y1=1)P(y2=2y1=1)+α(y1=2)P(y2=2y1=2)+α(y1=3)P(y2=2y1=3))P(x2y2=2)=(0.10.2+0.160.5+0.280.3)0.6=0.1104α(y2=3)=(0.10.3+0.160.2+0.280.5)0.3=0.0606
    • 时间3:x3=红
      • α ( y 3 = 1 ) = ( 0.077 ∗ 0.5 + 0.1104 ∗ 0.3 + 0.0606 ∗ 0.2 ) ∗ 0.5 = 0.4187 α ( y 3 = 2 ) = ( 0.077 ∗ 0.2 + 0.1104 ∗ 0.5 + 0.0606 ∗ 0.3 ) ∗ 0.4 = 0.03551 α ( y 3 = 3 ) = ( 0.077 ∗ 0.3 + 0.1104 ∗ 0.2 + 0.0606 ∗ 0.5 ) ∗ 0.7 = 0.05284 p ( x ) = Σ i α ( y T i ) = α ( y 3 = 1 ) + α ( y 3 = 2 ) + α ( y 3 = 3 ) = 0.13022 \alpha(y_3=1)=(0.077*0.5+0.1104*0.3+0.0606*0.2)*0.5=0.4187\\ \alpha(y_3=2)=(0.077*0.2+0.1104*0.5+0.0606*0.3)*0.4=0.03551\\ \alpha(y_3=3)=(0.077*0.3+0.1104*0.2+0.0606*0.5)*0.7=0.05284\\ p(x)=\Sigma_i \alpha(y_T^i)=\alpha(y_3=1)+\alpha(y_3=2)+\alpha(y_3=3)=0.13022 α(y3=1)=(0.0770.5+0.11040.3+0.06060.2)0.5=0.4187α(y3=2)=(0.0770.2+0.11040.5+0.06060.3)0.4=0.03551α(y3=3)=(0.0770.3+0.11040.2+0.06060.5)0.7=0.05284p(x)=Σiα(yTi)=α(y3=1)+α(y3=2)+α(y3=3)=0.13022
  • 后向计算:
    • β ( y 3 = 1 ) = 1 , β ( y 3 = 2 ) = 1 , β ( y 3 = 3 ) = 1 \beta(y_3=1)=1,\beta(y_3=2)=1,\beta(y_3=3)=1 β(y3=1)=1β(y3=2)=1β(y3=3)=1
    • 时间2
      • β ( y 2 ) = Σ y 3 β ( y 3 ) a y 3 , y 2 P ( x 3 ∣ y 3 ) = β ( y 3 = 1 ) a y 3 = 1 , y 2 P ( x 3 ∣ y 3 = 1 ) + β ( y 3 = 2 ) a y 3 = 2 , y 2 P ( x 3 ∣ y 3 = 2 ) + β ( y 3 = 3 ) a y 3 , y 2 P ( x 3 ∣ y 3 = 3 ) \beta(y_2)=\Sigma_{y_3}\beta(y_3)a_{y_3,y_2}P(x_3|y_3)\\ =\beta(y_3=1)a_{y_3=1,y_2}P(x_3|y_3=1)+\beta(y_3=2)a_{y_3=2,y_2}P(x_3|y_3=2)+\beta(y_3=3)a_{y_3,y_2}P(x_3|y_3=3) β(y2)=Σy3β(y3)ay3,y2P(x3y3)=β(y3=1)ay3=1,y2P(x3y3=1)+β(y3=2)ay3=2,y2P(x3y3=2)+β(y3=3)ay3,y2P(x3y3=3)
      • β ( y 2 = 1 ) = 1 ∗ 0.5 ∗ 0.5 + 1 ∗ 0.2 ∗ 0.4 + 1 ∗ 0.2 ∗ 0.7 = 0.47 \beta(y_2=1)=1*0.5*0.5+1*0.2*0.4+1*0.2*0.7=0.47 β(y2=1)=10.50.5+10.20.4+10.20.7=0.47
      • β ( y 2 = 2 ) = 1 ∗ 0.3 ∗ 0.5 + 1 ∗ 0.5 ∗ 0.4 + 1 ∗ 0.2 ∗ 0.7 = 0.49 \beta(y_2=2)=1*0.3*0.5+1*0.5*0.4+1*0.2*0.7=0.49 β(y2=2)=10.30.5+10.50.4+10.20.7=0.49
      • β ( y 2 = 3 ) = 1 ∗ 0.2 ∗ 0.5 + 1 ∗ 0.3 ∗ 0.4 + 1 ∗ 0.5 ∗ 0.7 = 0.57 \beta(y_2=3)=1*0.2*0.5+1*0.3*0.4+1*0.5*0.7=0.57 β(y2=3)=10.20.5+10.30.4+10.50.7=0.57
    • 时间1
      • β ( y 2 = 1 ) = 0.47 ∗ 0.5 ∗ 0.5 + 0.49 ∗ 0.2 ∗ 0.6 + 0.57 ∗ 0.2 ∗ 0.3 = 0.2105 \beta(y_2=1)=0.47*0.5*0.5+0.49*0.2*0.6+0.57*0.2*0.3=0.2105 β(y2=1)=0.470.50.5+0.490.20.6+0.570.20.3=0.2105
      • β ( y 2 = 2 ) = 0.47 ∗ 0.3 ∗ 0.5 + 0.49 ∗ 0.5 ∗ 0.6 + 0.57 ∗ 0.2 ∗ 0.3 = 0.2517 \beta(y_2=2)=0.47*0.3*0.5+0.49*0.5*0.6+0.57*0.2*0.3=0.2517 β(y2=2)=0.470.30.5+0.490.50.6+0.570.20.3=0.2517
      • β ( y 2 = 3 ) = 0.47 ∗ 0.2 ∗ 0.5 + 0.49 ∗ 0.3 ∗ 0.6 + 0.57 ∗ 0.5 ∗ 0.3 = 0.2207 \beta(y_2=3)=0.47*0.2*0.5+0.49*0.3*0.6+0.57*0.5*0.3=0.2207 β(y2=3)=0.470.20.5+0.490.30.6+0.570.50.3=0.2207

代码

import torch
import torch.nn as nn
import torch.optim as optim
y_size=3;
x_size=2;
transition=torch.tensor([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]])
b=torch.tensor([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
pi=torch.tensor([[0.2],[0.4],[0.4]])
x=[0,1,0]
def alpha(x):#前向算法p(x1,x2,x3,...,xt,yt)
        alpha=(b[:,x[0]]*pi[:].reshape(y_size)).reshape(1,y_size)
        # print(alpha)
        for i in range(1,len(x)):
            alpha=torch.cat((alpha,(torch.matmul(alpha[i-1],transition)*b[:,x[i]]).reshape(1,y_size)),0)
        return alpha
alpha=alpha(x)
print(alpha)
"""
tensor([[0.1000, 0.1600, 0.2800],
        [0.0770, 0.1104, 0.0606],
        [0.0419, 0.0355, 0.0528]])
        """
def p(x,alpha):#p(x)
        # alpha=alpha(x);
        return torch.sum(alpha[len(x)-1])
p(x,alpha)
#tensor(0.1302)
def beta(x):
    beta=torch.ones(1,y_size)
    for i in range(len(x)-2,-1,-1):
        beta=torch.cat((torch.sum(beta[0]*transition*b[:,x[i+1]],axis=1).reshape(1,y_size),beta))
    return beta
beta=beta(x)
tensor([[0.2451, 0.2622, 0.2277],
        [0.5400, 0.4900, 0.5700],
        [1.0000, 1.0000, 1.0000]])
def gamma(alpha,beta,p_x):
        return alpha*beta/p_x
def xi(x,alpha,beta,p_x):
    # print(alpha_yt,b[y_t1,x_t1],beta_yt1,transition[y_t,y_t1])
    # return alpha_yt*b[y_t1,x_t1]*beta_yt1*transition[y_t,y_t1]/p_x
    xi=[]
    for t in range(0,len(x)-1):
        xi.append((alpha[t].reshape(y_size,1)*transition*b[:,x[t+1]]*beta[t+1]))
        # print(xi[t])
    return torch.cat(xi).reshape(len(xi),y_size,y_size)

在这里插入图片描述
在这里插入图片描述

  • 求最优路径(维特比,贪心)
    • δ ( y 1 ) = α ( y 1 ) = P ( x 1 ∣ y 1 ) π y 1 \delta(y_1)=\alpha(y_1)=P(x_1|y_1)\pi_{y_1} δ(y1)=α(y1)=P(x1y1)πy1
    • δ ( y t + 1 ) = m a x y 1 δ ( y 1 ) P ( y 2 = 1 ∣ y 1 ) ) P ( x 2 ∣ y 2 ) = m a x ( δ ( y 1 = 1 ) P ( y 2 = 2 ∣ y 1 = 1 ) , δ ( y 1 = 2 ) P ( y 2 = 2 ∣ y 1 = 2 ) , δ ( y 1 = 3 ) P ( y 2 = 2 ∣ y 1 = 3 ) ) ∗ P ( x 2 ∣ y 2 = 1 ) \delta(y_{t+1})=max_{y_1}\delta(y_1)P(y_2=1|y_1))P(x_2|y_2)=max(\delta(y_1=1)P(y_2=2|y_1=1),\delta(y_1=2)P(y_2=2|y_1=2),\delta(y_1=3)P(y_2=2|y_1=3))*P(x_2|y_2=1) δ(yt+1)=maxy1δ(y1)P(y2=1y1))P(x2y2)=max(δ(y1=1)P(y2=2y1=1),δ(y1=2)P(y2=2y1=2),δ(y1=3)P(y2=2y1=3))P(x2y2=1)
  • HMM(x–O)
    • 则联合概率 P ( x , y ) = p ( y 1 ) Π t = 1 T − 1 P ( y t + 1 j ∣ y t i ) Π t = 1 T P ( x t ∣ y t ) P(x,y)=p(y_1)\Pi_{t=1}^{T-1}P(y_{t+1}^j|y_t^i)\Pi_{t=1}^{T}P(x_t|y_t) P(x,y)=p(y1)Πt=1T1P(yt+1jyti)Πt=1TP(xtyt)
      • 参数化 P ( x , y ) = π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) P(x,y)=\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t) P(x,y)=πy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)
    • P ( x ) = Σ y 1 , y 2 , . . . , y T P ( x , y ) = Σ y 1 , y 2 , . . . , y T π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) = Σ y P ( x ∣ y ) p ( y ) = Σ y 1 Σ y 2 . . . Σ y T π y 1 Π t = 1 T − 1 a y t + 1 , y t Π t = 1 T P ( x t ∣ y t ) P(x)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)\\=\Sigma_y P(x|y)p(y)\\=\Sigma_{y_1}\Sigma_{y_2}...\Sigma_{y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t) P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)=ΣyP(xy)p(y)=Σy1Σy2...ΣyTπy1Πt=1T1ayt+1,ytΠt=1TP(xtyt)
    • P ( y t ∣ x ) = γ ( y t ) = P ( x 1 , . . . , x t , y t ) P ( x t + 1 , . . . , x n ∣ y t ) P ( x ) = α ( y t ) β ( y t ) P ( x ) P(y_t|x)=\gamma(y_t)=\frac{P(x1,...,x_t,y_t)P(x_{t+1},...,x_n|y_t)}{P(x)}=\frac{\alpha(y_t)\beta(y_t)}{P(x)} P(ytx)=γ(yt)=P(x)P(x1,...,xt,yt)P(xt+1,...,xnyt)=P(x)α(yt)β(yt)
    • 递归的计算
      • α ( y t + 1 ) = Σ y t α ( y t ) a y t + 1 , y t P ( x t + 1 ∣ y t + 1 ) \alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1}) α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1yt+1)
        • 初始化 α ( y 0 ) = P ( x 0 , y 0 ) = p ( x 0 ∣ y 0 ) P ( y 0 ) = P ( x 0 ∣ y 0 ) π y 0 \alpha(y_0)=P(x_0,y_0)=p(x_0|y_0)P(y_0)=P(x_0|y_0)\pi_{y_0} α(y0)=P(x0,y0)=p(x0y0)P(y0)=P(x0y0)πy0
      • β ( y t ) = Σ y t + 1 β ( y t + 1 ) a y t + 1 , y t P ( x t + 1 ∣ y t + 1 ) \beta(y_{t})=\Sigma_{y_{t+1}}\beta(y_{t+1})a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1}) β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1yt+1)
        • 初始化 β ( y T ) = 1 就 行 了 \beta(y_T)=1就行了 β(yT)=1
          • 假 定 β ( y T ) 为 单 位 向 量 , 我 们 可 以 准 确 计 算 出 β y T − 1 假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}} β(yT)βyT1
            • P ( x ) = Σ i α ( y T i ) β ( y T i ) = Σ i α ( y T i ) = P ( x ) P(x)=\Sigma_i\alpha(y_T^i)\beta(y_T^i)=\Sigma_i \alpha(y_T^i)=P(x) P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)
def Viterbi(x):#贪婪
        V=b[:,x[0]]*pi[:].reshape(y_size);
        list=[]
        print("V0:",V)
        # 前向计算各部分概率
        for t in range(1,len(x)):
            # max,indices=torch.max(V[t - 1].reshape(y_size, 1) * transition, axis=0)
            # list.append(indices)
            # V=torch.cat((V,(b[:,x[t]]*max).reshape(1,y_size)),axis=0)
            max, indices = torch.max(V.reshape(y_size,1) * transition, axis=0)
            list.append(indices)
            V=b[:,x[t]]*max
            print("V",t,V)
        #后向寻找路径
        print("max-pathchoice",list)
        max,indices=torch.max(V,axis=0)
        path=indices.reshape(1)
        print(indices)
        for i in range(len(list)-1,-1,-1):
            path=torch.cat((list[0][path[0]].reshape(1),path))
        return path;#y1=path0,y2=path1

print("path",Viterbi(x))
V0: tensor([0.1000, 0.1600, 0.2800])
V 1 tensor([0.0280, 0.0504, 0.0420])
V 2 tensor([0.0076, 0.0101, 0.0147])
max-pathchoice [tensor([2, 2, 2]), tensor([1, 1, 2])]
tensor(2)
path tensor([2, 2, 2])

4.1.5 EM(baum-welch算法)的上溢出和下溢出

通过放缩 α , β \alpha,\beta α,β解决
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值