首页 > 编程语言 >Baum-Welch 算法

Baum-Welch 算法

时间:2024-12-05 20:59:06浏览次数:6  
标签:log i1 Baum sum 算法 Welch pi hat lambda

Baum-Welch 算法

假设给定训练数据只包含 S S S 个长度为 T T T 的观测序列 { O 1 , O 2 , ⋯   , O S } \{O_1, O_2, \cdots, O_S\} {O1​,O2​,⋯,OS​} 而没有对应的状态序列,目标是学习隐马尔可夫模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π) 的参数。我们将观测序列看作在观测数据 O O O ,状态序列数据看作不可观测的隐数据 I I I,那么隐马尔可夫模型事实上是一个含有隐变量的概率模型:

P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) (10.32) P(O|\lambda) = \sum_{I} P(O, I|\lambda) \tag{10.32} P(O∣λ)=I∑​P(O,I∣λ)(10.32)

它的参数学习可以由 EM 算法实现。

  1. 确定完全数据的对数似然函数

    所有观测数据写成 O = ( o 1 , o 2 , ⋯   , o T ) O = (o_1, o_2, \cdots, o_T) O=(o1​,o2​,⋯,oT​),所有隐数据写成 I = ( i 1 , i 2 , ⋯   , i T ) I = (i_1, i_2, \cdots, i_T) I=(i1​,i2​,⋯,iT​),完全数据是 ( O , I ) = ( o 1 , o 2 , ⋯   , o T , i 1 , i 2 , ⋯   , i T ) (O, I) = (o_1, o_2, \cdots, o_T, i_1, i_2, \cdots, i_T) (O,I)=(o1​,o2​,⋯,oT​,i1​,i2​,⋯,iT​)。完全数据的对数似然函数是 log ⁡ P ( O , I ∣ λ ) \log P(O, I|\lambda) logP(O,I∣λ)

  2. EM 算法的 E 步:求 Q Q Q 函数 Q ( λ , λ ^ ) Q(\lambda, \hat{\lambda}) Q(λ,λ^)

    Q ( λ , λ ^ ) = ∑ I log ⁡ P ( O , I ∣ λ ) P ( I ∣ λ ^ ) (10.33) Q(\lambda, \hat{\lambda}) = \sum_{I} \log P(O, I|\lambda)P(I|\hat{\lambda}) \tag{10.33} Q(λ,λ^)=I∑​logP(O,I∣λ)P(I∣λ^)(10.33)

    其中, λ ^ \hat{\lambda} λ^ 是隐马尔可夫模型参数的当前估计值, λ \lambda λ 是要极大化的隐马尔可夫模型参数。

    P ( O , I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) ⋯ a i T − 1 i T b i T ( o T ) P(O, I|\lambda) = \pi_{i_1} b_{i_1}(o_1) a_{i_1i_2} b_{i_2}(o_2) \cdots a_{i_{T-1}i_T} b_{i_T}(o_T) P(O,I∣λ)=πi1​​bi1​​(o1​)ai1​i2​​bi2​​(o2​)⋯aiT−1​iT​​biT​​(oT​)

    于是函数 Q ( λ , λ ^ ) Q(\lambda, \hat{\lambda}) Q(λ,λ^) 可以写成
    Q ( λ , λ ^ ) = ∑ I log ⁡ π i 1 P ( O , I ∣ λ ^ ) + ∑ I ( ∑ t = 1 T − 1 log ⁡ a i t i t + 1 ) P ( O , I ∣ λ ^ ) + ∑ I ( ∑ t = 1 T log ⁡ b i t ( o t ) ) P ( O , I ∣ λ ^ ) (10.34) Q(\lambda, \hat{\lambda}) = \sum_{I} \log \pi_{i_1} P(O, I|\hat{\lambda}) + \sum_{I} \left(\sum_{t=1}^{T-1} \log a_{i_t i_{t+1}}\right) P(O, I|\hat{\lambda}) + \sum_{I} \left(\sum_{t=1}^{T} \log b_{i_t}(o_t)\right) P(O, I|\hat{\lambda}) \tag{10.34} Q(λ,λ^)=I∑​logπi1​​P(O,I∣λ^)+I∑​(t=1∑T−1​logait​it+1​​)P(O,I∣λ^)+I∑​(t=1∑T​logbit​​(ot​))P(O,I∣λ^)(10.34)

    式中求和都是对所有数据的序列总长度 T T T 进行的。

  3. EM 算法的 M 步:极大化 Q Q Q 函数 Q ( λ , λ ^ ) Q(\lambda, \hat{\lambda}) Q(λ,λ^) 求模型参数 A , B , π A, B, \pi A,B,π

    由于要极大化的参数在式 (10.34) 中单独地出现在 3 个项中,所以只需将各项分别极大化。

    (1) 式 (10.34) 的第 1 项可以写成

    ∑ I log ⁡ π i 1 P ( O , I ∣ λ ^ ) = ∑ i = 1 N log ⁡ π i P ( O , i 1 = i ∣ λ ^ ) \sum_{I} \log \pi_{i_1} P(O, I|\hat{\lambda}) = \sum_{i=1}^{N} \log \pi_i P(O, i_1 = i|\hat{\lambda}) I∑​logπi1​​P(O,I∣λ^)=i=1∑N​logπi​P(O,i1​=i∣λ^)

    注意 π i \pi_i πi​ 满足约束条件 ∑ i = 1 N π i = 1 \sum_{i=1}^{N} \pi_i = 1 ∑i=1N​πi​=1,利用拉格朗日乘子法,写出拉格朗日函数:
    ∑ i = 1 N log ⁡ π i P ( O , i 1 = i ∣ λ ^ ) + γ ( ∑ i = 1 N π i − 1 ) \sum_{i=1}^{N} \log \pi_i P(O, i_1 = i|\hat{\lambda}) + \gamma \left(\sum_{i=1}^{N} \pi_i - 1\right) i=1∑N​logπi​P(O,i1​=i∣λ^)+γ(i=1∑N​πi​−1)

    对其求偏导数并令结果等于0:
    ∂ ∂ π i [ ∑ i = 1 N log ⁡ π i P ( O , i 1 = i ∣ λ ^ ) + γ ( ∑ i = 1 N π i − 1 ) ] = 0 (10.35) \frac{\partial}{\partial \pi_i} \left[ \sum_{i=1}^{N} \log \pi_i P(O, i_1 = i|\hat{\lambda}) + \gamma \left(\sum_{i=1}^{N} \pi_i - 1\right) \right] = 0 \tag{10.35} ∂πi​∂​[i=1∑N​logπi​P(O,i1​=i∣λ^)+γ(i=1∑N​πi​−1)]=0(10.35)

    得:

    P ( O , i 1 = i ∣ λ ^ ) + γ π i = 0 P(O, i_1 = i|\hat{\lambda}) + \gamma \pi_i = 0 P(O,i1​=i∣λ^)+γπi​=0

    对 i i i 求和得到 γ \gamma γ:

    γ = − P ( O ∣ λ ^ ) \gamma = -P(O|\hat{\lambda}) γ=−P(O∣λ^)

    代入式 (10.35) 即得:

    π i = P ( O , i 1 = i ∣ λ ^ ) P ( O ∣ λ ^ ) (10.36) \pi_i = \frac{P(O, i_1 = i|\hat{\lambda})}{P(O|\hat{\lambda})} \tag{10.36} πi​=P(O∣λ^)P(O,i1​=i∣λ^)​(10.36)

    (2) 式 (10.34) 的第 2 项可以写成

    ∑ I ( ∑ t = 1 T − 1 log ⁡ a i t i t + 1 ) P ( O , I ∣ λ ^ ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 log ⁡ a i j P ( O , i t = i , i t + 1 = j ∣ λ ^ ) \sum_{I} \left(\sum_{t=1}^{T-1} \log a_{i_t i_{t+1}}\right) P(O, I|\hat{\lambda}) = \sum_{i=1}^{N} \sum_{j=1}^{N} \sum_{t=1}^{T-1} \log a_{ij} P(O, i_t = i, i_{t+1} = j|\hat{\lambda}) I∑​(t=1∑T−1​logait​it+1​​)P(O,I∣λ^)=i=1∑N​j=1∑N​t=1∑T−1​logaij​P(O,it​=i,it+1​=j∣λ^)

    类似第 1 项,应用具有约束条件 ∑ j = 1 N a i j = 1 \sum_{j=1}^{N} a_{ij} = 1 ∑j=1N​aij​=1 的拉格朗日乘子法可以求出:

    a i j = ∑ t = 1 T − 1 P ( O , i t = i , i t + 1 = j ∣ λ ^ ) ∑ t = 1 T − 1 P ( O , i t = i ∣ λ ^ ) (10.37) a_{ij} = \frac{\sum_{t=1}^{T-1} P(O, i_t = i, i_{t+1} = j|\hat{\lambda})}{\sum_{t=1}^{T-1} P(O, i_t = i|\hat{\lambda})} \tag{10.37} aij​=∑t=1T−1​P(O,it​=i∣λ^)∑t=1T−1​P(O,it​=i,it+1​=j∣λ^)​(10.37)

    (3) 式 (10.34) 的第 3 项为

    ∑ I ( ∑ t = 1 T log ⁡ b i t ( o t ) ) P ( O , I ∣ λ ^ ) = ∑ j = 1 N ∑ t = 1 T log ⁡ b j ( o t ) P ( O , i t = j ∣ λ ^ ) \sum_{I} \left(\sum_{t=1}^{T} \log b_{i_t}(o_t)\right) P(O, I|\hat{\lambda}) = \sum_{j=1}^{N} \sum_{t=1}^{T} \log b_j(o_t) P(O, i_t = j|\hat{\lambda}) I∑​(t=1∑T​logbit​​(ot​))P(O,I∣λ^)=j=1∑N​t=1∑T​logbj​(ot​)P(O,it​=j∣λ^)

    同样用拉格朗日乘子法,约束条件是 ∑ k = 1 M b j ( k ) = 1 \sum_{k=1}^{M} b_j(k) = 1 ∑k=1M​bj​(k)=1。注意,只有在 o t = v k o_t = v_k ot​=vk​ 时 b j ( o t ) b_j(o_t) bj​(ot​) 对 b j ( k ) b_j(k) bj​(k) 的偏导数才不为 0,以 I ( o t = v k ) I(o_t = v_k) I(ot​=vk​) 表示。求得:

    b j ( k ) = ∑ t = 1 T P ( O , i t = j ∣ λ ^ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = j ∣ λ ^ ) (10.38) b_j(k) = \frac{\sum_{t=1}^{T} P(O, i_t = j|\hat{\lambda}) I(o_t = v_k)}{\sum_{t=1}^{T} P(O, i_t = j|\hat{\lambda})} \tag{10.38} bj​(k)=∑t=1T​P(O,it​=j∣λ^)∑t=1T​P(O,it​=j∣λ^)I(ot​=vk​)​(10.38)

标签:log,i1,Baum,sum,算法,Welch,pi,hat,lambda
From: https://blog.csdn.net/u013172930/article/details/144275391

相关文章

  • C++算法练习-day62——491.非递减子序列
    题目来源:.-力扣(LeetCode)题目思路分析这个问题要求找出数组 nums 中的所有非严格递增子序列,其中每个子序列至少包含两个元素。非严格递增子序列意味着子序列中的元素可以相等,但不允许递减。为了解决这个问题,可以使用回溯法。回溯法是一种通过探索所有可能的候选解来找出......
  • C++算法练习-day61——90.子集2
    题目来源:.-力扣(LeetCode)题目思路分析题目要求找出给定数组的所有子集(幂集),但数组可能包含重复元素,要求结果中的子集是唯一的(不包含重复的子集)。为了解决这个问题,我们可以先对数组进行排序,然后在回溯过程中跳过重复的元素,以确保生成的每个子集都是唯一的。代码:#include<v......
  • C++算法练习-day60——78.子集问题
    题目来源:.-力扣(LeetCode)题目思路分析题目要求找出给定数组的所有子集(幂集)。子集是指原数组中任意元素组合形成的数组,包括空集和原数组本身。这个问题可以通过回溯算法(Backtracking)来解决。回溯算法是一种通过探索所有可能的候选解来找出所有解的算法。对于子集问题,我们可以......
  • 算法之旅:二叉树的删除、验证与插入(98,700,701,450)
    ......
  • [原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测 (多输入单输出) M
    [原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测(多输入单输出)Matlab代码目录[原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测(多输入单输出)Matlab代码预测结果评价指标基本介绍程序设计参考资料预测结果评价指标......
  • 一文搞懂基于Raft算法的领头选举过程
    基于Raft算法的领头选举(LeaderElection)是Raft共识算法中确保分布式系统中只有一个领导者(Leader)的关键过程。以下是Raft算法中领头选举的详细介绍:节点状态:Raft算法中,节点可以处于三种状态:Follower、Candidate和Leader。Follower是普通节点,接收并处理来自Leader的消息;Candi......
  • 智慧工地算法视频分析服务器区域入侵检测:如何确保算法在恶劣天气下也能准确识别?
    在现代视频监控系统中,算法的准确性和稳定性至关重要,尤其是在面对恶劣天气条件时。恶劣天气如雨、雪、雾等,往往会对图像质量造成严重影响,从而降低监控系统的效能。为了确保在这些条件下算法依然能够准确识别目标,采取一系列先进的技术和策略显得尤为重要。本文将介绍几种提高算法在......
  • ECDH秘钥交换算法——使用流程
    目录DH、ECDH和ECDHE的关系FlowchartReference背景:对称加解密算法都需要一把秘钥,但是很多情况下,互联网环境不适合传输这把对称密码,有被中间人拦截的风险。为了解决这个问题,我们看看ECDH秘钥交换算法是怎么做的?DH、ECDH和ECDHE的关系DH、ECDHE不是本文的重点,知道即......
  • 【RAS非对称加密算法】DEMO原理与示例
    fromCrypto.PublicKeyimportRSAfromCrypto.CipherimportPKCS1_OAEP#生成RSA密钥对defgenerate_rsa_keys():"""公钥是通过特定算法从私钥导出的,可以安全地公开。公钥用于加密数据或验证签名。私钥用于解密数据或生成签名。""......
  • 算法网关视频分析网关摄像机实时接入分析平台:P2P远程访问不了如何排查?云端服务平台的
    在现代视频监控系统中,P2P远程访问因其便捷性和高效性而广受欢迎。然而,当遇到P2P远程访问无法成功连接的问题时,有效的排查方法和对云服务*台的理解变得至关重要。本文将为您提供云端服务*台在处理P2P远程访问问题时的排查思路,帮助您更好地理解P2P云功能,并快速定位问题所在。通过深......