创建时间:2024-10-09
 首发时间:2024-10-12
 最后编辑时间:2024-10-12
 作者:Geeker_LStar
你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~
我是 Geeker_LStar,一名高一学生,热爱计算机和数学,我们一起加油~!
⭐(●’◡’●) ⭐
嗨!!这是隐马尔可夫模型 HMM 的第二篇~!在上一篇中,我讲了 HMM 的概念、适用任务以及它的 “三大问题” 中的评估问题。这一篇中来讲 “三大问题” 中的另外两个——评估问题和解码问题!
如果没有看过上一篇的话,可以去看一下,和这篇的联系还是蛮多的(比如 HMM 简介、notation 规定、评估问题等):
【高中生讲机器学习】20. 隐马尔可夫模型好难?看过来!(上篇)
话不多说,我们开始这篇吧!
文章目录
- 学习任务
- Baum-Welch 算法
 
- 标注任务
- 近似算法
- Viterbi 算法
 
- HMM 总结
学习任务
Baum-Welch 算法
上篇的介绍中说了,所谓学习任务,就是给定一个观测序列,学习使得这个观测序列出现概率最大的参数。同时,HMM 又是一个含有隐变量(状态序列)的模型,so,HMM 的学习问题实质上就是含有隐变量的模型的参数估计(极大似然估计)问题。
吼,这,这多熟悉呀!! 含有隐变量的模型的参数估计(极大似然估计)问题,这毫无疑问用 EM 算法呀!
关于极大似然估计和 EM 算法,可以参考我的这两篇文章:
【初中生讲机器学习】15. EM 算法一万字详解!一起来学!
 【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现
(可以说,HMM 的学习任务使用的就是 EM 算法,所以建议把 EM 好好看看!!(而 EM 的基础又是极大似然估计,so 可以开始《递归学习》了(((
嗯,我原本想在这里直接用 EM 算法的结论(Q 函数)来着的,但是我突然想到这篇的 notation 和 EM 那篇的 notation 还有挺多区别的,所以直接在这里再推一遍吧!!
注:这篇中所有的 notation 均沿用自上一篇,如果有不明白的 notation,可以去上一篇找~
我们记 HMM 的参数为 λ \lambda λ,即 λ = ( A , B , π ) \lambda=(A, B, \pi) λ=(A,B,π)。
我们设隐藏的状态序列  
     
      
       
       
         I 
        
       
      
        I 
       
      
    I 和已知的观测序列  
     
      
       
       
         O 
        
       
      
        O 
       
      
    O 的长度都为  
     
      
       
       
         T 
        
       
      
        T 
       
      
    T, 
     
      
       
       
         I 
        
       
      
        I 
       
      
    I 和  
     
      
       
       
         O 
        
       
      
        O 
       
      
    O 构成完全数据,即:
  
      
       
        
         
          
          
           
            
            
              I 
             
            
              = 
             
            
              ( 
             
             
             
               i 
              
             
               1 
              
             
            
              , 
             
             
             
               i 
              
             
               2 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               i 
              
             
               T 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
            
              O 
             
            
              = 
             
            
              ( 
             
             
             
               o 
              
             
               1 
              
             
            
              , 
             
             
             
               o 
              
             
               2 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               o 
              
             
               T 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} I = (i_1, i_2, ..., i_T) \\ O = (o_1, o_2, ..., o_T) \end{align} 
        
       
     I=(i1,i2,...,iT)O=(o1,o2,...,oT)
这样的话,根据极大似然估计那篇里面讲的,完全数据的对数似然函数就可以写为:
  
      
       
        
         
          
          
           
            
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              = 
             
            
              log  
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} L(\lambda) = \text{log} \ P(O|\lambda) \end{align} 
        
       
     L(λ)=log P(O∣λ)
then,根据 EM 算法的处理方式,我们把对数似然函数展开:
  
      
       
        
         
          
          
           
            
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              = 
             
            
              log  
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              I 
             
            
              , 
             
            
              λ 
             
            
              ) 
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} L(\lambda) = \text{log} \ \sum_I P(O|I,\lambda)P(I|\lambda) \end{align} 
        
       
     L(λ)=log I∑P(O∣I,λ)P(I∣λ)
这很好理解,相当于全概率公式。在参数 λ \lambda λ 下观测到观测序列 O O O 的概率就等于在参数 λ \lambda λ 下,所有可能的(隐藏)状态序列 I I I 下可能观测到 O O O 的概率之和。
豪德,我们继续。下面所有过程在 EM 算法那篇都说过,所以不再赘述,直接写推导过程(当然,会有简单的解释)。
参数估计要干什么,要极大化对数似然函数,对吧。但是现在的这个函数肯定没法算极大化啊(指通过偏导数求出解析解),log 里面套着 sigma,,,so 我们曲线救国,采用迭代的方式,逐步极大化!
嗯,所谓迭代极大化,就是每次增大一点嘛,那我们只需要算出每次迭代后比上一次的增量,然后让这个增量极大,就可以了呀。
好的,虽然但是我又把 EM 的主要思路讲了一遍。好吧那我收回前面那句 “不再赘述”,还是好好讲一下吧…(当然,更完整的版本还是在 EM 那一篇~
设上一次迭代中得到的参数为 λ ‾ \overline{\lambda} λ,则上一次迭代的对数似然函数为 L ( λ ‾ ) L(\overline{\lambda}) L(λ),注意这是我们已经算出来的。
那么,增量为:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              − 
             
            
              L 
             
            
              ( 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
            
              log  
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              I 
             
            
              , 
             
            
              λ 
             
            
              ) 
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
              − 
             
            
              log  
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & L(\lambda)-L(\overline{\lambda}) \\ & = \text{log} \ \sum_I P(O|I,\lambda)P(I|\lambda) - \text{log} \ P(O|\overline{\lambda}) \end{align} 
        
       
     L(λ)−L(λ)=log I∑P(O∣I,λ)P(I∣λ)−log P(O∣λ)
好的,但是现在这个东西还是没有办法丝滑地进行任何求导,这意味着我们还要进行变形,把 log 放到 sigma 里面去。
嗯,插一句,这里涉及到一个问题:为什么把 log  \log log 放在 sigma 里面(而不是外面,像现在这样)会更容易求导?关于这个问题,我会写一篇随记来说明。就不在这里展开讨论了,但是我们下面会用到这个点。
在处理同时含有  
     
      
       
       
         log 
        
       
      
        \text{log} 
       
      
    log 和  
     
      
       
       
         ∑ 
        
       
      
        \sum 
       
      
    ∑ 的式子,且希望把 log 放到里面的时候,我们考虑  
      
       
        
        
          J 
         
        
          e 
         
        
          n 
         
        
          s 
         
        
          e 
         
        
          n 
         
        
       
         Jensen 
        
       
     Jensen 不等式,如下:
  
      
       
        
         
          
          
           
            
            
              log 
             
            
               
             
             
             
               ∑ 
              
             
               j 
              
             
             
             
               λ 
              
             
               j 
              
             
             
             
               μ 
              
             
               j 
              
             
            
              ≥ 
             
             
             
               ∑ 
              
             
               j 
              
             
             
             
               λ 
              
             
               j 
              
             
            
              log 
             
            
               
             
             
             
               μ 
              
             
               j 
              
             
            
           
          
          
          
         
         
          
          
           
            
            
              s 
             
            
              . 
             
            
              t 
             
            
              . 
             
            
                
             
             
             
               λ 
              
             
               j 
              
             
            
              ≥ 
             
            
              0 
             
            
              , 
             
            
                
             
             
             
               ∑ 
              
             
               j 
              
             
             
             
               λ 
              
             
               j 
              
             
            
              = 
             
            
              1 
             
            
           
          
          
          
         
        
       
         \begin{align} \log\sum_j\lambda_j\mu_j \ge \sum_j\lambda_j\log\mu_j \\ s.t.\ \lambda_j \ge 0, \ \sum_j\lambda_j=1 \end{align} 
        
       
     logj∑λjμj≥j∑λjlogμjs.t. λj≥0, j∑λj=1
豪德,这个不等式为我们提供了灵感!它能够帮助我们把 log  \log log 放到 ∑ \sum ∑ 外面,进而简化计算!
so we continue.
我们需要关注这个约束条件, λ j ≥ 0 \lambda_j \ge 0 λj≥0 和 ∑ j λ j = 1 \sum_j\lambda_j=1 ∑jλj=1。这是我们使用 jensen 不等式的前提。
每一项大于 0,所有项的和为 1,这很难不让人想到概率分布诶。
so,我们构造一个概率分布,然后使用 jensen 不等式!
L ( λ ) = log  ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) = log  ∑ I P ( I ∣ O , λ ‾ ) P ( O ∣ I , λ ) P ( I ∣ λ ) P ( I ∣ O , λ ‾ ) ≥ ∑ I P ( I ∣ O , λ ‾ ) log  P ( O ∣ I , λ ) P ( I ∣ λ ) P ( I ∣ O , λ ‾ ) \begin{align} & L(\lambda)=\log \ \sum_I P(O|I,\lambda)P(I|\lambda) \\ & = \log \ \sum_I P(I|O, \overline{\lambda})\frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} \\ & \ge \sum_I P(I|O, \overline{\lambda})\log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} \\ \end{align} L(λ)=log I∑P(O∣I,λ)P(I∣λ)=log I∑P(I∣O,λ)P(I∣O,λ)P(O∣I,λ)P(I∣λ)≥I∑P(I∣O,λ)logP(I∣O,λ)P(O∣I,λ)P(I∣λ)
豪德,把这个结果带回去:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              − 
             
            
              L 
             
            
              ( 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
            
              log  
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              I 
             
            
              , 
             
            
              λ 
             
            
              ) 
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
              − 
             
            
              log 
             
            
               
             
            
                
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              ≥ 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
              − 
             
            
              log 
             
            
               
             
            
                
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & L(\lambda)-L(\overline{\lambda}) \\ & = \text{log} \ \sum_I P(O|I,\lambda)P(I|\lambda) - \log \ P(O|\overline{\lambda}) \\ & \ge \sum_I P(I|O, \overline{\lambda})\log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} -\log \ P(O|\overline{\lambda}) \\ \end{align} 
        
       
     L(λ)−L(λ)=log I∑P(O∣I,λ)P(I∣λ)−log P(O∣λ)≥I∑P(I∣O,λ)logP(I∣O,λ)P(O∣I,λ)P(I∣λ)−log P(O∣λ)
根据 jensen 不等式的约束条件,我们有:
  
      
       
        
         
          
          
           
            
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
            
              1 
             
            
           
          
          
          
         
        
       
         \begin{align} \sum_I P(I|O, \overline{\lambda})=1 \end{align} 
        
       
     I∑P(I∣O,λ)=1
所以,上面的式子可以进一步变形为:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
              − 
             
            
              log 
             
            
               
             
            
                
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
              − 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
                
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              [ 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
              − 
             
            
              log 
             
            
               
             
            
                
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              ] 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} & \sum_I P(I|O, \overline{\lambda})\log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} -\log \ P(O|\overline{\lambda}) \\ & = \sum_I P(I|O, \overline{\lambda})\log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} -\sum_IP(I|O, \overline{\lambda}) \log \ P(O|\overline{\lambda}) \\ & = \sum_I P(I|O, \overline{\lambda}) \bigg[\log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})} - \log \ P(O|\overline{\lambda})\bigg] \\ & = \sum_I P(I|O, \overline{\lambda}) \log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})P(O|\overline{\lambda})} \\ \end{align} 
        
       
     I∑P(I∣O,λ)logP(I∣O,λ)P(O∣I,λ)P(I∣λ)−log P(O∣λ)=I∑P(I∣O,λ)logP(I∣O,λ)P(O∣I,λ)P(I∣λ)−I∑P(I∣O,λ)log P(O∣λ)=I∑P(I∣O,λ)[logP(I∣O,λ)P(O∣I,λ)P(I∣λ)−log P(O∣λ)]=I∑P(I∣O,λ)logP(I∣O,λ)P(O∣λ)P(O∣I,λ)P(I∣λ)
豪德!现在我们得到了这个,但是,呃呃呃,这玩意最初是怎么算的来着。。?什么式子最终得到了它??
哦,原来是 L ( λ ) − L ( λ ‾ ) L(\lambda)-L(\overline{\lambda}) L(λ)−L(λ) 这个,当前的对数似然函数减去上一轮的对数似然函数。
最终,我们得到:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              − 
             
            
              L 
             
            
              ( 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              ≥ 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} & L(\lambda)-L(\overline{\lambda}) \\ & \ge \sum_I P(I|O, \overline{\lambda}) \log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})P(O|\overline{\lambda})} \\ \end{align} 
        
       
     L(λ)−L(λ)≥I∑P(I∣O,λ)logP(I∣O,λ)P(O∣λ)P(O∣I,λ)P(I∣λ)
也就是:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              ≥ 
             
            
              L 
             
            
              ( 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} & L(\lambda) \ge L(\overline{\lambda}) + \sum_I P(I|O, \overline{\lambda}) \log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})P(O|\overline{\lambda})} \\ \end{align} 
        
       
     L(λ)≥L(λ)+I∑P(I∣O,λ)logP(I∣O,λ)P(O∣λ)P(O∣I,λ)P(I∣λ)
还是按照 EM 算法,我们把不等号右边的部分记作  
     
      
       
       
         B 
        
       
         ( 
        
       
         λ 
        
       
         , 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
      
        B(\lambda, \overline{\lambda}) 
       
      
    B(λ,λ),那么我们有:
  
      
       
        
         
          
          
           
            
            
              L 
             
            
              ( 
             
            
              λ 
             
            
              ) 
             
            
              ≥ 
             
            
              B 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} L(\lambda) \ge B(\lambda, \overline{\lambda}) \end{align} 
        
       
     L(λ)≥B(λ,λ)
同时,我们有  
     
      
       
       
         L 
        
       
         ( 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
         = 
        
       
         B 
        
       
         ( 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         , 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
      
        L(\overline{\lambda})=B(\overline{\lambda}, \overline{\lambda}) 
       
      
    L(λ)=B(λ,λ).
 (这就不解释了,把  
     
      
       
        
        
          λ 
         
        
          ‾ 
         
        
       
      
        \overline{\lambda} 
       
      
    λ 带进去算一下就好了,这真的是《注意到》((()
上面的推导说明什么?
 说明,只要我们能够使得  
     
      
       
       
         B 
        
       
         ( 
        
       
         λ 
        
       
         , 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
         ≥ 
        
       
         B 
        
       
         ( 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         , 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
      
        B(\lambda, \overline{\lambda}) \ge B(\overline{\lambda}, \overline{\lambda}) 
       
      
    B(λ,λ)≥B(λ,λ),也就是让这一轮迭代的  
      
       
        
        
          B 
         
        
       
         B 
        
       
     B 函数大于上一轮迭代的  
      
       
        
        
          B 
         
        
       
         B 
        
       
     B 函数,我们就实现了让对数似然函数  
     
      
       
       
         L 
        
       
      
        L 
       
      
    L 增大的需求!
yes,其实 B B B 函数可以看作 L ( λ ) L(\lambda) L(λ) 的一个下界,在 λ = λ ‾ \lambda=\overline{\lambda} λ=λ 的时候两者相等,在其它任何时候 L L L 均大于 B B B,所以只要我们能够让这一轮的 B B B 函数的值比上一轮的大,我们就实现了迭代更新对数似然函数的目标。
豪德,到这里总结一下。
 我们原先要最大化  
     
      
       
       
         L 
        
       
         ( 
        
       
         λ 
        
       
         ) 
        
       
      
        L(\lambda) 
       
      
    L(λ),但是因为不能直接求偏导(这就导致既不能直接算解析解,也不能梯度下降),所以我们通过迭代的方式,极大化这一轮的对数似然函数与上一轮的对数似然函数的差(就是每次让对数似然函数尽可能增加的多)。但这个差依然不能直接求偏导,所以我们使用了 jensen 不等式,构造出差的下界,并通过极大化这个下界的方式极大化差,进而达到极大化这一轮的对数似然函数的目标。
(嗯,关于 EM 算法的收敛性,这个之前还没有写过,在这里也不展开写了,可能会开一篇新的文章写,也可能在 EM 那篇的基础上补充。)
豪德!我们已经快成功了,现在还剩一点…
看看这个 B B B 函数,貌似这里面有一些项是常数,有没有这些项并不会影响最终的极大化结果,我们可以把它们略去,以简化计算。
所有包含  
     
      
       
        
        
          λ 
         
        
          ‾ 
         
        
       
      
        \overline{\lambda} 
       
      
    λ 的项都是常数,因为对于 HMM 来说,一旦它的参数确定了,所有的概率分布也就都确定了。
 但是注意,并不是所有含有  
     
      
       
        
        
          λ 
         
        
          ‾ 
         
        
       
      
        \overline{\lambda} 
       
      
    λ 的项都可以略去,作为系数的项比如  
     
      
       
       
         P 
        
       
         ( 
        
       
         I 
        
       
         ∣ 
        
       
         O 
        
       
         , 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
      
        P(I|O, \overline{\lambda}) 
       
      
    P(I∣O,λ) 会影响最终结果,所以不能略去。
所以,为了简洁,我们把这些对于极大化而言是常数且不会影响最终结果的项略去,得到最终需要极大化的式子,记作 Q Q Q 函数。
也就是说:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              B 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
            
              L 
             
            
              ( 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                I 
               
              
                , 
               
              
                λ 
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                I 
               
              
                ∣ 
               
              
                O 
               
              
                , 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              I 
             
            
              , 
             
            
              λ 
             
            
              ) 
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & B(\lambda, \overline{\lambda})=L(\overline{\lambda}) + \sum_I P(I|O, \overline{\lambda}) \log \frac{P(O|I,\lambda)P(I|\lambda)}{P(I|O, \overline{\lambda})P(O|\overline{\lambda})} \\ & Q(\lambda, \overline{\lambda})=\sum_I P(I|O, \overline{\lambda}) \log P(O|I,\lambda)P(I|\lambda) \end{align} 
        
       
     B(λ,λ)=L(λ)+I∑P(I∣O,λ)logP(I∣O,λ)P(O∣λ)P(O∣I,λ)P(I∣λ)Q(λ,λ)=I∑P(I∣O,λ)logP(O∣I,λ)P(I∣λ)
然后,我们再变形一下,条件概率和边缘概率相乘,得到联合概率,即:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
            
              I 
             
            
              , 
             
            
              λ 
             
            
              ) 
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & Q(\lambda, \overline{\lambda})=\sum_I P(I|O, \overline{\lambda}) \log P(O|I,\lambda)P(I|\lambda) \\ & = \sum_I P(I|O, \overline{\lambda}) \log P(O,I|\lambda) \\ \end{align} 
        
       
     Q(λ,λ)=I∑P(I∣O,λ)logP(O∣I,λ)P(I∣λ)=I∑P(I∣O,λ)logP(O,I∣λ)
这个式子还可以进一步变形,注意  
     
      
       
       
         ∑ 
        
       
      
        \sum 
       
      
    ∑ 后面的第一项,即没有  
     
      
       
       
         log 
        
       
          
        
       
      
        \log 
       
      
    log 的那一项。
 还是使用条件概率、联合概率和边缘概率之间的等式关系,我们有:
  
      
       
        
         
          
          
           
            
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
              
                I 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} P(I|O, \overline{\lambda})=\frac{P(O, I|\overline{\lambda})}{P(O|\overline{\lambda})} \end{align} 
        
       
     P(I∣O,λ)=P(O∣λ)P(O,I∣λ)
即条件概率等于联合概率除以边缘概率。
豪德,接下来把条件概率用联合概率和边缘概率的商表示,带进原式。
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              I 
             
            
              ∣ 
             
            
              O 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
              
                I 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & Q(\lambda, \overline{\lambda}) = \sum_I P(I|O, \overline{\lambda}) \log P(O,I|\lambda) \\ & = \sum_I \frac{P(O, I|\overline{\lambda})}{P(O|\overline{\lambda})} \log P(O,I|\lambda) \end{align} 
        
       
     Q(λ,λ)=I∑P(I∣O,λ)logP(O,I∣λ)=I∑P(O∣λ)P(O,I∣λ)logP(O,I∣λ)
不难发现,这里新出现的这个分母  
     
      
       
       
         P 
        
       
         ( 
        
       
         O 
        
       
         ∣ 
        
        
        
          λ 
         
        
          ‾ 
         
        
       
         ) 
        
       
      
        P(O|\overline{\lambda}) 
       
      
    P(O∣λ) 相对于  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数的优化而言只是一个常数,我们把它略去,得到最终的  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数。
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & Q(\lambda, \overline{\lambda}) = \sum_I P(O, I|\overline{\lambda}) \log P(O,I|\lambda) \\ \end{align} 
        
       
     Q(λ,λ)=I∑P(O,I∣λ)logP(O,I∣λ)
好的!通过这么——多——的变形,我们终于把原来的怎么算也不方便的对数似然函数变成了现在这个非常 nice 的形式!
我们最终要求的就是:
  
      
       
        
         
          
          
           
            
            
              λ 
             
            
              = 
             
             
              
              
                arg max 
               
              
                 
               
              
             
               λ 
              
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} \lambda = \argmax_\lambda Q(\lambda, \overline\lambda) \end{align} 
        
       
     λ=λargmaxQ(λ,λ)
也就是让 Q Q Q 函数(等价于原始的对数似然函数)极大化的参数 λ \lambda λ.
记住,HMM 的学习算法其实就是 EM 算法,没有任何区别,只不过换了个名字。核心思想就是迭代,迭代,迭代。
很好,现在我们已经得到了最终要极大化的 Q Q Q 函数,然而,现在这个函数中,代求的参数有三个,且这三个参数不能合在一个式子中表示,所以我们没有办法直接对这个 Q Q Q 函数求极大值。
(什么叫可以放在一个式子中表示呢?比如说,我们考虑,如果现在的参数  
     
      
       
       
         λ 
        
       
      
        \lambda 
       
      
    λ 是高斯分布的两个参数  
     
      
       
       
         μ 
        
       
      
        \mu 
       
      
    μ 和  
     
      
       
       
         σ 
        
       
      
        \sigma 
       
      
    σ,那么它们两个就可以一起放在高斯分布的式子中,如果后面要求解偏导,只需要让高斯分布的式子分别对它们两个求偏导就可以了。
 (但是在这里,我们的三个参数没有被统一到一个式子当中,也就是说我们现在还是没有办法求解偏导数。
en,那么接下来,我们可以开始进一步对  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数进行变形了,我们的目标是把三个参数拆解到三个式子中,再分别求解。
 我们看  
     
      
       
       
         log 
        
       
          
        
       
         P 
        
       
         ( 
        
       
         O 
        
       
         , 
        
       
         I 
        
       
         ∣ 
        
       
         λ 
        
       
         ) 
        
       
      
        \log P(O,I|\lambda) 
       
      
    logP(O,I∣λ) 这一项。
首先再回顾一下最开始规定的 notation:
  
      
       
        
         
          
          
           
            
            
              I 
             
            
              = 
             
            
              ( 
             
             
             
               i 
              
             
               1 
              
             
            
              , 
             
             
             
               i 
              
             
               2 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               i 
              
             
               T 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
            
              O 
             
            
              = 
             
            
              ( 
             
             
             
               o 
              
             
               1 
              
             
            
              , 
             
             
             
               o 
              
             
               2 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               o 
              
             
               T 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} I = (i_1, i_2, ..., i_T) \\ O = (o_1, o_2, ..., o_T) \end{align} 
        
       
     I=(i1,i2,...,iT)O=(o1,o2,...,oT)
其它的 notation(参数的)在上一篇。
我们有:
  
      
       
        
         
          
          
           
            
            
              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 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} P(O,I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_{T}) \end{align} 
        
       
     P(O,I∣λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
啊虽然这个式子很长,但是其实很好理解,上一篇里面提到了。
根据对数的运算性质  
     
      
       
       
         log 
        
       
          
        
       
         A 
        
       
         B 
        
       
         = 
        
       
         log 
        
       
          
        
       
         A 
        
       
         + 
        
       
         log 
        
       
          
        
       
         B 
        
       
      
        \log AB = \log A+ \log B 
       
      
    logAB=logA+logB,我们有:
  
      
       
        
         
          
          
           
            
            
              log 
             
            
               
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
              = 
             
            
              log 
             
            
               
             
             
             
               π 
              
              
              
                i 
               
              
                1 
               
              
             
            
              + 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
              
              
                T 
               
              
                − 
               
              
                1 
               
              
             
            
              log 
             
            
               
             
             
             
               a 
              
              
               
               
                 i 
                
               
                 t 
                
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
             
            
              + 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
             
               T 
              
             
            
              log 
             
            
               
             
             
             
               b 
              
              
              
                i 
               
              
                T 
               
              
             
            
              ( 
             
             
             
               O 
              
             
               t 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} \log P(O,I|\lambda)=\log \pi_{i_1}+\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}+\sum_{t=1}^{T}\log b_{i_T}(O_t) \end{align} 
        
       
     logP(O,I∣λ)=logπi1+t=1∑T−1logaitit+1+t=1∑TlogbiT(Ot)
很好,现在我们已经得到了最终的  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数,however,现在所有的参数被写在一起,我们没有
 okay,我们把这个带回式(31),得到:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              Q 
             
            
              ( 
             
            
              λ 
             
            
              , 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              [ 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              ( 
             
            
              log 
             
            
               
             
             
             
               π 
              
              
              
                i 
               
              
                1 
               
              
             
            
              + 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
              
              
                T 
               
              
                − 
               
              
                1 
               
              
             
            
              log 
             
            
               
             
             
             
               a 
              
              
               
               
                 i 
                
               
                 t 
                
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
             
            
              + 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
             
               T 
              
             
            
              log 
             
            
               
             
             
             
               b 
              
              
              
                i 
               
              
                T 
               
              
             
            
              ( 
             
             
             
               O 
              
             
               t 
              
             
            
              ) 
             
            
              ) 
             
            
              ] 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              [ 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
             
               π 
              
              
              
                i 
               
              
                1 
               
              
             
            
              + 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
              
              
                T 
               
              
                − 
               
              
                1 
               
              
             
            
              log 
             
            
               
             
             
             
               a 
              
              
               
               
                 i 
                
               
                 t 
                
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
             
            
              + 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
             
               T 
              
             
            
              log 
             
            
               
             
             
             
               b 
              
              
              
                i 
               
              
                T 
               
              
             
            
              ( 
             
             
             
               O 
              
             
               t 
              
             
            
              ) 
             
            
              ] 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              log 
             
            
               
             
             
             
               π 
              
              
              
                i 
               
              
                1 
               
              
             
            
              + 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
              
              
                T 
               
              
                − 
               
              
                1 
               
              
             
            
              log 
             
            
               
             
             
             
               a 
              
              
               
               
                 i 
                
               
                 t 
                
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
             
            
              + 
             
             
             
               ∑ 
              
             
               I 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
             
             
               ∑ 
              
              
              
                t 
               
              
                = 
               
              
                1 
               
              
             
               T 
              
             
            
              log 
             
            
               
             
             
             
               b 
              
              
              
                i 
               
              
                T 
               
              
             
            
              ( 
             
             
             
               O 
              
             
               t 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∑ 
              
             
               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 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & Q(\lambda, \overline{\lambda}) = \sum_I \bigg[P(O, I|\overline{\lambda}) (\log \pi_{i_1}+\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}+\sum_{t=1}^{T}\log b_{i_T}(O_t))\bigg] \\ &= \sum_I \bigg[P(O, I|\overline{\lambda}) \log \pi_{i_1}+P(O, I|\overline{\lambda})\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}+P(O, I|\overline{\lambda})\sum_{t=1}^{T}\log b_{i_T}(O_t) \bigg]\\ & =\sum_I P(O, I|\overline{\lambda}) \log \pi_{i_1}+\sum_IP(O, I|\overline{\lambda})\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}+\sum_IP(O, I|\overline{\lambda})\sum_{t=1}^{T}\log b_{i_T}(O_t) \\ & =\sum_I \log \pi_{i_1} P(O, I|\overline{\lambda}) +\sum_I\bigg(\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}\bigg)P(O, I|\overline{\lambda})+\sum_I\bigg(\sum_{t=1}^{T}\log b_{i_T}(O_t)\bigg)P(O, I|\overline{\lambda}) \\ \end{align} 
        
       
     Q(λ,λ)=I∑[P(O,I∣λ)(logπi1+t=1∑T−1logaitit+1+t=1∑TlogbiT(Ot))]=I∑[P(O,I∣λ)logπi1+P(O,I∣λ)t=1∑T−1logaitit+1+P(O,I∣λ)t=1∑TlogbiT(Ot)]=I∑P(O,I∣λ)logπi1+I∑P(O,I∣λ)t=1∑T−1logaitit+1+I∑P(O,I∣λ)t=1∑TlogbiT(Ot)=I∑logπi1P(O,I∣λ)+I∑(t=1∑T−1logaitit+1)P(O,I∣λ)+I∑(t=1∑TlogbiT(Ot))P(O,I∣λ)
看着很多,但其实只是把括号打开了而已,不涉及到任何其它的变形。
 式(39)和式(40)是一样的,只是把  
     
      
       
       
         ∑ 
        
       
      
        \sum 
       
      
    ∑ 放到了一起,看起来更清晰。
完美!现在我们把  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数表示成了三项之和的形式,要极大化  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数,只需要对这三项分别极大化就可以啦!!
 同时,回想一下我们刚才讲的,我们要求的是使得  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数极大化的参数  
     
      
       
       
         π 
        
       
         , 
        
       
         A 
        
       
         , 
        
       
         B 
        
       
      
        \pi, A, B 
       
      
    π,A,B,这种三项拆分的方式允许我们分别对这三项进行极大化,也就是分别找出要求的三个参数!
okay!! 那我们分别来看吧。
第一项是 ∑ I log  π i 1 P ( O , I ∣ λ ‾ ) \sum_I \log \pi_{i_1} P(O, I|\overline{\lambda}) ∑Ilogπi1P(O,I∣λ),但是我们发现, ∑ I \sum_I ∑I 就相当于 ∑ i = 1 N \sum_{i=1}^N ∑i=1N(一共有 N N N 种可能的状态),和全概率公式一个道理。
so,“等量代换”,我们得到:
  
      
       
        
         
          
          
           
            
             
             
               ∑ 
              
             
               I 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
              
              
                i 
               
              
                1 
               
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
            
              I 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
             
               i 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} \sum_I \log \pi_{i_1} P(O, I|\overline{\lambda})=\sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda}) \end{align} 
        
       
     I∑logπi1P(O,I∣λ)=i=1∑NlogπiP(O,i1=i∣λ)
wait,我们要求什么来着?要求出让这个式子极大化的参数  
     
      
       
       
         π 
        
       
      
        \pi 
       
      
    π 对吧,嗯…
 现在这个式子可以直接求偏导数,但是我们还要注意一个点, 
     
      
       
       
         π 
        
       
      
        \pi 
       
      
    π 是初始概率,所以所有可能的  
     
      
       
        
        
          π 
         
        
          i 
         
        
       
      
        \pi_i 
       
      
    πi 加起来应该等于 1,即我们有一个约束条件。
 所以,现在问题变成了一个约束最优化问题。
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              π 
             
            
              = 
             
             
              
              
                arg max 
               
              
                 
               
              
             
               π 
              
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
             
               i 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              s 
             
            
              . 
             
            
              t 
             
            
                
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
             
             
               π 
              
             
               i 
              
             
            
              = 
             
            
              1 
             
            
           
          
          
          
         
        
       
         \begin{align} & \pi = \argmax_\pi\sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda}) \\ & s.t \ \sum_{i=1}^N \pi_i = 1 \end{align} 
        
       
     π=πargmaxi=1∑NlogπiP(O,i1=i∣λ)s.t i=1∑Nπi=1
不用说了,拉格朗日乘子法启动,构造拉格朗日函数:
  
      
       
        
         
          
          
           
            
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
             
               i 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
            
              γ 
             
            
              ( 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
             
             
               π 
              
             
               i 
              
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} \sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda})+\gamma(\sum_{i=1}^N \pi_i-1) \end{align} 
        
       
     i=1∑NlogπiP(O,i1=i∣λ)+γ(i=1∑Nπi−1)
okay,这就是最终的函数,它的偏导就蛮好求了:
  
      
       
        
         
          
          
           
            
             
             
               ∂ 
              
              
              
                ∂ 
               
               
               
                 π 
                
               
                 i 
                
               
              
             
            
              [ 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
             
               i 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
            
              γ 
             
            
              ( 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
             
             
               π 
              
             
               i 
              
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
              ] 
             
            
              = 
             
            
              0 
             
            
           
          
          
          
         
        
       
         \begin{align} \frac{\partial}{\partial \pi_i}\bigg[\sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda})+\gamma(\sum_{i=1}^N \pi_i-1)\bigg]=0 \end{align} 
        
       
     ∂πi∂[i=1∑NlogπiP(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 
             
            
              ) 
             
            
              ] 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
             
               ∂ 
              
              
              
                ∂ 
               
               
               
                 π 
                
               
                 i 
                
               
              
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              log 
             
            
               
             
             
             
               π 
              
             
               i 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
             
             
               ∂ 
              
              
              
                ∂ 
               
               
               
                 π 
                
               
                 i 
                
               
              
             
            
              γ 
             
            
              ( 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
             
             
               π 
              
             
               i 
              
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & \frac{\partial}{\partial \pi_i}\bigg[\sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda})+\gamma(\sum_{i=1}^N \pi_i-1)\bigg] \\ & =\frac{\partial}{\partial \pi_i}\sum_{i=1}^N \log \pi_{i} P(O,i_1=i|\overline{\lambda}) + \frac{\partial}{\partial \pi_i}\gamma(\sum_{i=1}^N \pi_i-1) \end{align} 
        
       
     ∂πi∂[i=1∑NlogπiP(O,i1=i∣λ)+γ(i=1∑Nπi−1)]=∂πi∂i=1∑NlogπiP(O,i1=i∣λ)+∂πi∂γ(i=1∑Nπi−1)
先算第一项吧,我们是对 π i \pi_i πi 求偏导数,或者说,我们考虑每一个 π i \pi_i πi,并对它求偏导数。
∂ ∂ π i log  π i P ( O , i 1 = i ∣ λ ‾ ) = 1 π i P ( O , i 1 = i ∣ λ ‾ ) \begin{align} & \frac{\partial}{\partial \pi_i}\log \pi_{i} P(O,i_1=i|\overline{\lambda}) \\ & =\frac{1}{\pi_i}P(O,i_1=i|\overline{\lambda}) \end{align} ∂πi∂logπiP(O,i1=i∣λ)=πi1P(O,i1=i∣λ)
well,这里需要解释一下,为什么在求偏导数的时候,求和符号消失了?
其实这还算好想,可以把 ∑ \sum ∑ 看作一个 for 循环,也就是说,我们每次只是针对一个特定的 i i i 对应的 π i \pi_i πi 求偏导,那么其它的(和现在这个正在被计算的 i i i 不相等的) i i i 以及它们对应的 π i \pi_i πi 就都可以被看作常数。而对于偏导数来说,和当前变量无关的变量的都可以被看作常数,它们的偏导数是 0. so, ∑ \sum ∑ 中的其它部分就都可以被忽略了,也就是说,我们可以 “穿透”(忽略) ∑ \sum ∑,直接对它里面的部分求偏导。
然后再来看第二项,第二项也有  
     
      
       
       
         ∑ 
        
       
      
        \sum 
       
      
    ∑,对  
     
      
       
       
         ∑ 
        
       
      
        \sum 
       
      
    ∑ 的处理和第一项同理,so 我们有:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               ∂ 
              
              
              
                ∂ 
               
               
               
                 π 
                
               
                 i 
                
               
              
             
            
              γ 
             
            
              ( 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
             
             
               π 
              
             
               i 
              
             
            
              − 
             
            
              1 
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
            
              γ 
             
            
           
          
          
          
         
        
       
         \begin{align} & \frac{\partial}{\partial \pi_i}\gamma(\sum_{i=1}^N \pi_i-1) \\ & =\gamma \end{align} 
        
       
     ∂πi∂γ(i=1∑Nπi−1)=γ
豪德,最终把对两项的偏导加起来,得到最终的偏导:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               1 
              
              
              
                π 
               
              
                i 
               
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
            
              γ 
             
            
              = 
             
            
              0 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              → 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              + 
             
            
              γ 
             
             
             
               π 
              
             
               i 
              
             
            
              = 
             
            
              0 
             
            
           
          
          
          
         
        
       
         \begin{align} & \frac{1}{\pi_i}P(O,i_1=i|\overline{\lambda})+\gamma = 0 \\ & \to P(O,i_1=i|\overline{\lambda})+\gamma\pi_i=0 \end{align} 
        
       
     πi1P(O,i1=i∣λ)+γ=0→P(O,i1=i∣λ)+γπi=0
嗯,进一步变形:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
            
              − 
             
            
              γ 
             
             
             
               π 
              
             
               i 
              
             
            
           
          
          
          
         
        
       
         \begin{align} & P(O,i_1=i|\overline{\lambda})=-\gamma \pi_i \end{align} 
        
       
     P(O,i1=i∣λ)=−γπi
记住,现在我们一直是在对某一个  
     
      
       
        
        
          π 
         
        
          i 
         
        
       
      
        \pi_i 
       
      
    πi 求偏导,接下来我们把所有的  
     
      
       
        
        
          π 
         
        
          i 
         
        
       
      
        \pi_i 
       
      
    πi 求偏导的结果加起来。
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              = 
             
            
              i 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
             
             
               ∑ 
              
              
              
                i 
               
              
                = 
               
              
                1 
               
              
             
               N 
              
             
            
              − 
             
            
              γ 
             
             
             
               π 
              
             
               i 
              
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              → 
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
              = 
             
            
              − 
             
            
              γ 
             
            
           
          
          
          
         
        
       
         \begin{align} & \sum_{i=1}^NP(O,i_1=i|\overline{\lambda})=\sum_{i=1}^N-\gamma \pi_i \\ & \to P(O|\overline{\lambda})=-\gamma \end{align} 
        
       
     i=1∑NP(O,i1=i∣λ)=i=1∑N−γπi→P(O∣λ)=−γ
呃其实就相当于,我们最开始不是把 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 展开变成 ∑ I P ( O , I ∣ λ ) \sum_IP(O,I|\lambda) ∑IP(O,I∣λ) 了嘛,然后又把 ∑ I P ( O , I ∣ λ ) \sum_IP(O,I|\lambda) ∑IP(O,I∣λ) 变成了 ∑ i = 1 N P ( O , i 1 = i ∣ λ ‾ ) \sum_{i=1}^NP(O,i_1=i|\overline{\lambda}) ∑i=1NP(O,i1=i∣λ),所以现在我们干的事情只是又把这些一项项倒回原样了而已,就这么简单~
then,根据式(54),我们有:
  
      
       
        
         
          
          
           
            
             
             
               π 
              
             
               i 
              
             
            
              = 
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 1 
                
               
              
                = 
               
              
                i 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
              
              
                − 
               
              
                γ 
               
              
             
            
              = 
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 1 
                
               
              
                = 
               
              
                i 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} \pi_i=\frac{P(O,i_1=i|\overline{\lambda})}{-\gamma}=\frac{P(O,i_1=i|\overline{\lambda})}{P(O|\overline{\lambda})} \end{align} 
        
       
     πi=−γP(O,i1=i∣λ)=P(O∣λ)P(O,i1=i∣λ)
嘿!!!我们求出来了!!!
我们已经求出了三个参数之一的 π i \pi_i πi 的新值!!! 这个值就是这一轮迭代的最终结果~!
至于分子和分母的具体算法,就是上一篇中的评估问题讲的啦~~(已知参数和观测序列,求该观测序列出现的概率。
嗯,现在我们不妨换个视角,用更加 intuition 的方式看一看这个结果。
这个结果其实很符合直觉。
分子是在已知参数的情况下,对于一个给定的观测序列 O O O,某个特定的状态 i i i 作为第一个状态出现的概率;而分母是,在已知参数(和分子相同的参数)的情况下,一个特定的观测序列 O O O 出现的概率。分数的值恰好就是在上一轮迭代中,某个特定的状态 i i i 出现的频率。
经过如此复杂的推导,我们最终得到了一个非常符合直觉的结果,这非常 nice!!
其实在极大似然估计那一篇中我说过,极大似然估计的结果有些时候非常符合直觉,当时举了一个高斯分布参数估计的例子。
okay,我们来看看第二项。其实对于第二项也是同理。
首先还是全概率公式,换一个形式:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               ∑ 
              
             
               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 
                
               
                 t 
                
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
             
            
              P 
             
            
              ( 
             
            
              O 
             
            
              , 
             
             
             
               i 
              
             
               t 
              
             
            
              = 
             
            
              i 
             
            
              , 
             
             
             
               i 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              = 
             
            
              j 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & \sum_I\bigg(\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}}\bigg)P(O, I|\overline{\lambda}) \\ & = \sum_{i=1}^N \sum_{j=1}^N \sum_{t=1}^{T-1} \log a_{i_ti_{t+1}}P(O,i_t=i, i_{t+1}=j|\overline{\lambda}) \end{align} 
        
       
     I∑(t=1∑T−1logaitit+1)P(O,I∣λ)=i=1∑Nj=1∑Nt=1∑T−1logaitit+1P(O,it=i,it+1=j∣λ)
嗯,然后对于这个参数,我们的约束条件是 ∑ j = 1 N a i j = 1 \sum_{j=1}^N a_{ij}=1 ∑j=1Naij=1,还是一样的套路,构造拉格朗日函数,然后求解偏导。除了多套了一层 ∑ \sum ∑ 之外,别的地方没有任何区别。而且其实,我们前面说过,有 ∑ \sum ∑ 的求导可以直接忽略 ∑ \sum ∑,直接对 ∑ \sum ∑ 里面的东西求偏导,所以其实操作是一模一样的~!
最终结果:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               a 
              
              
              
                i 
               
              
                j 
               
              
             
            
              = 
             
             
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 t 
                
               
              
                = 
               
              
                i 
               
              
                , 
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  + 
                 
                
                  1 
                 
                
               
              
                = 
               
              
                j 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 t 
                
               
              
                = 
               
              
                i 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} & a_{ij}=\frac{P(O,i_t=i, i_{t+1}=j|\overline{\lambda})}{P(O,i_t=i|\overline{\lambda})} \end{align} 
        
       
     aij=P(O,it=i∣λ)P(O,it=i,it+1=j∣λ)
嗯!然后对于第三个参数  
     
      
       
        
        
          b 
         
        
          j 
         
        
       
         ( 
        
       
         k 
        
       
         ) 
        
       
      
        b_j(k) 
       
      
    bj(k) 也是一样的,还是先换个形式:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               ∑ 
              
             
               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 
             
            
              ∣ 
             
             
             
               λ 
              
             
               ‾ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} & \sum_I\bigg(\sum_{t=1}^{T}\log b_{i_T}(O_t)\bigg)P(O, I|\overline{\lambda}) \\ & = \sum_{j=1}^N\sum_{t=1}^{T}\log b_{j}(O_t)P(O, i_t=j|\overline{\lambda}) \end{align} 
        
       
     I∑(t=1∑TlogbiT(Ot))P(O,I∣λ)=j=1∑Nt=1∑Tlogbj(Ot)P(O,it=j∣λ)
解释一下这个形式。
 这个形式和之前的两个也都是一样的,按照全概率公式的思想,把所有的  
     
      
       
       
         I 
        
       
      
        I 
       
      
    I 分成了在  
     
      
       
       
         t 
        
       
      
        t 
       
      
    t 时间步状态为  
     
      
       
       
         j 
        
       
      
        j 
       
      
    j 的  
     
      
       
       
         N 
        
       
      
        N 
       
      
    N 个部分相加(因为状态  
     
      
       
       
         j 
        
       
      
        j 
       
      
    j 一共有  
     
      
       
       
         N 
        
       
      
        N 
       
      
    N 种可能的取值)。
然后使用完全一样的方法,不过这次的约束条件变成了  
     
      
       
        
        
          ∑ 
         
         
         
           k 
          
         
           = 
          
         
           1 
          
         
        
          M 
         
        
        
        
          b 
         
        
          j 
         
        
       
         ( 
        
       
         k 
        
       
         ) 
        
       
         = 
        
       
         1 
        
       
      
        \sum_{k=1}^M b_j(k)=1 
       
      
    ∑k=1Mbj(k)=1,构造拉格朗日函数,求解偏导,得到:
  
      
       
        
         
          
          
           
            
             
             
               b 
              
             
               j 
              
             
            
              ( 
             
            
              k 
             
            
              ) 
             
            
              = 
             
             
              
               
               
                 ∑ 
                
                
                
                  t 
                 
                
                  = 
                 
                
                  1 
                 
                
               
                 T 
                
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 t 
                
               
              
                = 
               
              
                j 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
                I 
               
              
                ( 
               
               
               
                 o 
                
               
                 t 
                
               
              
                = 
               
              
                k 
               
              
                ) 
               
              
              
               
               
                 ∑ 
                
                
                
                  t 
                 
                
                  = 
                 
                
                  1 
                 
                
               
                 T 
                
               
              
                P 
               
              
                ( 
               
              
                O 
               
              
                , 
               
               
               
                 i 
                
               
                 t 
                
               
              
                = 
               
              
                j 
               
              
                ∣ 
               
               
               
                 λ 
                
               
                 ‾ 
                
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} b_j(k)=\frac{\sum_{t=1}^TP(O, i_t=j|\overline{\lambda})I(o_t=k)}{\sum_{t=1}^TP(O, i_t=j|\overline{\lambda})} \end{align} 
        
       
     bj(k)=∑t=1TP(O,it=j∣λ)∑t=1TP(O,it=j∣λ)I(ot=k)
其中 I I I 是指示函数,即如果 o t = k o_t=k ot=k 成立,则 I I I 值为 1,否则为 0
耶!!! 我们已经使用相似的方法,求出了新一轮迭代的参数的结果!
总结一下,对于 HMM 的学习任务,即给定一个观测序列 O O O,求这个观测序列最有可能对应的参数,或者说求使得这个观测序列出现概率最大的参数,我们有一套严谨的流程。
我们的目标是极大化对数似然函数,但是对数似然函数的形式复杂,无法直接极大化。所以我们利用 jensen 不等式构造对数似然函数的下界,得到  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数,将极大化对数似然函数的问题转换为极大化  
      
       
        
        
          Q 
         
        
       
         Q 
        
       
     Q 函数的问题。
 随后,我们将  
     
      
       
       
         Q 
        
       
      
        Q 
       
      
    Q 函数拆解为三项,每一项都是一个约束最优化问题,包含一个待求的参数。利用拉格朗日乘子法构建拉格朗日函数,并让拉格朗日函数的偏导数为 0,求得最终的结果。
再简单一点,HMM 的学习算法的内核其实就是 EM 算法,通过多轮迭代逐步极大化对数似然函数,只是后面的计算上有一点 specific 的地方。
豪德!!那学习任务就到这里吧~~已经 1w 多字了诶(感觉又把 EM 重新推了一遍哈哈哈哈哈),我们继续!下一个,标注任务!
标注任务
(前置:标注任务相对于学习任务来说简单不少,没有那么多公式,但是算法本身比较 impressive~!)
HMM 的标注任务,即给定参数 λ \lambda λ 和观测序列 O O O,求使得这个观测序列出现概率最大的状态序列 I I I。
呃当然,你可以说,我只需要找出所有可能的状态序列,然后分别计算  
     
      
       
       
         P 
        
       
         ( 
        
       
         I 
        
       
         ∣ 
        
       
         O 
        
       
         , 
        
       
         λ 
        
       
         ) 
        
       
      
        P(I|O,\lambda) 
       
      
    P(I∣O,λ),最后选取使得这个概率最大的  
     
      
       
       
         I 
        
       
      
        I 
       
      
    I 就可以了()
 好吧()暴力计算当然是可以的,但,,,,但但但,,(
 但你要考虑时间复杂度的a!
so,除了暴力计算以外,对于标注任务,有两个算法——类似于“贪心算法”的近似算法,和使用动态规划的 viterbi 算法,vertibi 算法比较巧妙~!(或者说 dp 本来就是个巧妙的东西()dp 系列的算法很多都很巧妙(((
近似算法
en,近似算法和贪心算法很像,它不考虑全局最优,它在每一步都只考虑在这一步最可能出现的状态。
在上一篇的评估问题中,我们已经计算出了一个 P ( O , i t = i ∣ λ ) P(O, i_t=i|\lambda) P(O,it=i∣λ)。即在给定参数 λ \lambda λ 和观测序列 O O O 的情况下,在时刻 t t t 处于状态 i i i 的概率。
那么,对于一个时间步的每一个状态,我们都可以通过上面的公式,计算在给定参数的观测序列的情况下,在这个时间步处于这个状态的概率。
 沿用上一篇的表达,我们有:
  
      
       
        
         
          
          
           
            
             
             
               γ 
              
             
               t 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
               
               
                 α 
                
               
                 t 
                
               
              
                ( 
               
              
                i 
               
              
                ) 
               
               
               
                 β 
                
               
                 t 
                
               
              
                ( 
               
              
                i 
               
              
                ) 
               
              
              
              
                P 
               
              
                ( 
               
              
                O 
               
              
                ∣ 
               
              
                λ 
               
              
                ) 
               
              
             
            
              = 
             
             
              
               
               
                 α 
                
               
                 t 
                
               
              
                ( 
               
              
                i 
               
              
                ) 
               
               
               
                 β 
                
               
                 t 
                
               
              
                ( 
               
              
                i 
               
              
                ) 
               
              
              
               
               
                 ∑ 
                
                
                
                  j 
                 
                
                  = 
                 
                
                  1 
                 
                
               
                 N 
                
               
               
               
                 α 
                
               
                 t 
                
               
              
                ( 
               
              
                j 
               
              
                ) 
               
               
               
                 β 
                
               
                 t 
                
               
              
                ( 
               
              
                j 
               
              
                ) 
               
              
             
            
           
          
          
          
         
        
       
         \begin{align} \gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)}=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)} \end{align} 
        
       
     γt(i)=P(O∣λ)αt(i)βt(i)=∑j=1Nαt(j)βt(j)αt(i)βt(i)
嗯,然后就很简单啦,对于每个时间步,我们都选择出在这个时间步处于这个状态的概率最大的那个状态,即:
i t ∗ = arg max  1 ≤ i ≤ N [ δ t ( i ) ] , t = 1 , 2 , . . . , T i^*_t=\argmax_{1 \le i \le N}[\delta_t(i)], \ t=1,2,...,T it∗=1≤i≤Nargmax[δt(i)], t=1,2,...,T
i t ∗ i^*_t it∗ 代表在第 t t t 个时间步被选出来的状态,下文同。
嗯!那这样的话,我们就得到了最终的状态序列 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*, i_2^*, ..., i^*_T) I∗=(i1∗,i2∗,...,iT∗).
emm 但是,这个算法简单是简单,但是和众多的贪心算法一样,它不能保证找到全局最优解。
如果想要找到全局最优解,那还得是 dp 出场呀,so 我们请出 viterbi 算法吧!!
Viterbi 算法
well,近似算法在每一步都尝试找到那一步的最优解,但这并不一定能保证找到整个序列的最优解。
 so,viterbi 算法出现了!它是一种动态规划方法,通过前向递归的方式保证最终找到的序列是全局最优的序列。
先举个例子说明一下 viterbi 算法的核心思想。
先不管概率,就按照最简单的寻找最短路径的方式来看。
看下面这个图,部分连接的长度已经标注在图上了(不过后面不会用到,所以没关系)。我们现在想找出从起点 S S S 到终点 E E E 的最短路径。当然前面已经说过了,不能用暴力计算(((

嗯,,,我们不妨来举个例子。我们计算从起点到  
     
      
       
        
        
          B 
         
        
          1 
         
        
       
      
        B_1 
       
      
    B1 的长度。
 我们一共有三条到达  
     
      
       
        
        
          B 
         
        
          1 
         
        
       
      
        B_1 
       
      
    B1 的线路: 
     
      
       
       
         S 
        
       
         − 
        
        
        
          A 
         
        
          1 
         
        
       
         − 
        
        
        
          B 
         
        
          1 
         
        
       
         , 
        
       
         S 
        
       
         − 
        
        
        
          A 
         
        
          2 
         
        
       
         − 
        
        
        
          B 
         
        
          1 
         
        
       
         , 
        
       
         S 
        
       
         − 
        
        
        
          A 
         
        
          3 
         
        
       
         − 
        
        
        
          B 
         
        
          1 
         
        
       
      
        S-A_1-B_1, S-A_2-B_1, S-A_3-B_1 
       
      
    S−A1−B1,S−A2−B1,S−A3−B1,如下图。

不难发现,当三条线路都汇集到 B 1 B_1 B1 之后,它们的长度被计算出来,then,它们在后续被处理的方式都是一样的——都会以 fully connection 的方式向前连接,继续计算长度,直到终点。
关于相同的处理方式,这里还是举个例子。
 这三条线路到达  
     
      
       
        
        
          B 
         
        
          1 
         
        
       
      
        B_1 
       
      
    B1 后,都会继续被 “传送” 到  
     
      
       
        
        
          C 
         
        
          1 
         
        
       
      
        C_1 
       
      
    C1,也就是说, 
     
      
       
        
        
          B 
         
        
          1 
         
        
       
      
        B_1 
       
      
    B1 到  
     
      
       
        
        
          C 
         
        
          1 
         
        
       
      
        C_1 
       
      
    C1 的长度会被加到原来的三条线路上。
但是,我们转念一想…
在三个已知的数( S S S 分别经过 A 1 , A 2 , A 3 A_1, A_2, A_3 A1,A2,A3 到达 B 1 B_1 B1 的长度)上加上同一个数( B 1 B_1 B1 到达 C 1 C_1 C1 的长度),并不会改变原来的三个已知的数之间的大小关系呀。
再回头看我们最开始的目标——找出最短的那条路径。
嗯。。既然在原有的三个路径上加上 B 1 B_1 B1 到 C 1 C_1 C1 的长度,并不会影响这三条路径的大小关系,再向前推一步,并不会影响最终的结果,那我们为什么不能直接选择 S − A 1 − B 1 , S − A 2 − B 1 , S − A 3 − B 1 S-A_1-B_1, S-A_2-B_1, S-A_3-B_1 S−A1−B1,S−A2−B1,S−A3−B1 这三个路径里最短的一个,再向前计算呢?反正它们的大小关系已经确定了呀,后面的计算并不会改变它们之间的大小关系。
okay,不过注意一下,这里只是以 B 1 B_1 B1 作为例子,对于 B 2 B_2 B2 和 B 3 B_3 B3,也是同理。
嗯,按照上面的说法,在第二个时间步的时候,最终只会有三条路径被留下, 
     
      
       
        
        
          B 
         
        
          1 
         
        
       
         , 
        
        
        
          B 
         
        
          2 
         
        
       
         , 
        
        
        
          B 
         
        
          3 
         
        
       
      
        B_1, B_2, B_3 
       
      
    B1,B2,B3 各对应一条。比如:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
            
              S 
             
            
              − 
             
             
             
               A 
              
             
               3 
              
             
            
              − 
             
             
             
               B 
              
             
               1 
              
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              S 
             
            
              − 
             
             
             
               A 
              
             
               2 
              
             
            
              − 
             
             
             
               B 
              
             
               2 
              
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              S 
             
            
              − 
             
             
             
               A 
              
             
               2 
              
             
            
              − 
             
             
             
               B 
              
             
               3 
              
             
            
           
          
          
          
         
        
       
         \begin{align} & S-A_3-B_1\\ & S-A_2-B_2\\ & S-A_2-B_3 \end{align} 
        
       
     S−A3−B1S−A2−B2S−A2−B3
路径的筛选规则前面已经讲的很完善啦,被选出来的这三条将会继续向前递推,并在第三个时间步的每个点( C 1 , 2 , 3 C_{1,2,3} C1,2,3) 执行相同的路经筛选操作。
也就是说,viterbi 算法的核心思想就是,在从第二步开始的每一步都删掉那些不可能成为答案的路径,这些路径在后续的计算中不再被考虑;而那些可能成为答案的路径则会被继续计算(有点类似于把可能的路径递归向前计算),直到它成为不可能成为答案的路径,或它成为答案。
那么,了解了 viterbi 算法,把它应用到 HMM 中也就简单了呀。我们只需要把上面例子中的【让路径之和最小】改成【让每一个时间步的概率之积最大】就可以了呀。
豪德,我们来具体看看 viterbi 算法在 HMM 解码问题中的应用。
首先,对于时间步  
     
      
       
       
         t 
        
       
           
        
       
         ( 
        
       
         t 
        
       
         ≥ 
        
       
         2 
        
       
         ) 
        
       
      
        t \ (t \ge 2) 
       
      
    t (t≥2) 的任意一个状态  
     
      
       
       
         i 
        
       
      
        i 
       
      
    i,按照上面说的那套流程,我们计算从头开始到时间步  
     
      
       
       
         t 
        
       
      
        t 
       
      
    t 状态  
     
      
       
       
         i 
        
       
      
        i 
       
      
    i 的概率最大值,如下:
  
      
       
        
         
          
          
           
            
             
             
               δ 
              
             
               t 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
              
                max 
               
              
                 
               
              
              
               
               
                 i 
                
               
                 1 
                
               
              
                , 
               
               
               
                 i 
                
               
                 2 
                
               
              
                , 
               
              
                . 
               
              
                . 
               
              
                , 
               
               
               
                 i 
                
                
                
                  t 
                 
                
                  − 
                 
                
                  1 
                 
                
               
              
             
            
              P 
             
            
              ( 
             
             
             
               i 
              
             
               t 
              
             
            
              = 
             
            
              i 
             
            
              , 
             
             
             
               i 
              
              
              
                t 
               
              
                − 
               
              
                1 
               
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              , 
             
             
             
               o 
              
             
               t 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               o 
              
             
               1 
              
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
        
       
         \begin{align} \delta_t(i) = \max_{i_1,i_2, .., i_{t-1}}P(i_t=i, i_{t-1}, ..., i_1, o_t, ..., o_1|\lambda), \ i=1, 2, ... N \end{align} 
        
       
     δt(i)=i1,i2,..,it−1maxP(it=i,it−1,...,i1,ot,...,o1∣λ), i=1,2,...N
嗯,这样的话,我们就得到了变量  
     
      
       
       
         δ 
        
       
      
        \delta 
       
      
    δ 的递推公式,其实就是从时间步  
     
      
       
       
         t 
        
       
      
        t 
       
      
    t 推到时间步  
     
      
       
       
         t 
        
       
         + 
        
       
         1 
        
       
      
        t+1 
       
      
    t+1 的公式,如下:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               δ 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
              
                max 
               
              
                 
               
              
              
               
               
                 i 
                
               
                 1 
                
               
              
                , 
               
               
               
                 i 
                
               
                 2 
                
               
              
                , 
               
              
                . 
               
              
                . 
               
              
                , 
               
               
               
                 i 
                
               
                 t 
                
               
              
             
            
              P 
             
            
              ( 
             
             
             
               i 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              = 
             
            
              i 
             
            
              , 
             
             
             
               i 
              
             
               t 
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               i 
              
             
               1 
              
             
            
              , 
             
             
             
               o 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
             
             
               o 
              
             
               1 
              
             
            
              ∣ 
             
            
              λ 
             
            
              ) 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
            
              = 
             
             
              
              
                max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                j 
               
              
                ≤ 
               
              
                N 
               
              
             
            
              [ 
             
             
             
               δ 
              
             
               t 
              
             
            
              ( 
             
            
              j 
             
            
              ) 
             
             
             
               a 
              
              
              
                j 
               
              
                i 
               
              
             
            
              ] 
             
             
             
               b 
              
             
               i 
              
             
            
              ( 
             
             
             
               o 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              ) 
             
            
              , 
             
            
                 
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
            
              N 
             
            
              ; 
             
            
                
             
            
              t 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              , 
             
            
              T 
             
            
              − 
             
            
              1 
             
            
           
          
          
          
         
        
       
         \begin{align} & \delta_{t+1}(i) = \max_{i_1,i_2, .., i_{t}}P(i_{t+1}=i, i_{t}, ..., i_1, o_{t+1}, ..., o_1|\lambda), \ i=1, 2, ... N \\ & = \max_{1\le j \le N}[\delta_t(j)a_{ji}]b_i(o_{t+1}), \ \ i=1,2, ..., N; \ t=1,2,..., T-1 \end{align} 
        
       
     δt+1(i)=i1,i2,..,itmaxP(it+1=i,it,...,i1,ot+1,...,o1∣λ), i=1,2,...N=1≤j≤Nmax[δt(j)aji]bi(ot+1),  i=1,2,...,N; t=1,2,...,T−1
a,这其实和我们在上面讲的完全就是一个东西呀,对于每一个时间步的每一个点,选择到这个点的时候概率最大的序列。
嗷,不过现在还有一个问题——我们怎么记录完整的路径?
好吧,这也好办,既然是递推,那我们就记录 t t t 时间步状态 i i i 对应的概率最大的序列的上一个状态(在 t − 1 t-1 t−1 时间步的状态)是什么,就可以了。这样每一步的最优序列的状态都会递推地给到后一步,最终等到全部序列确定以后再回溯就可以了。
嗯,按照这个定义,我们用  
     
      
       
        
        
          ψ 
         
        
          t 
         
        
       
         ( 
        
       
         i 
        
       
         ) 
        
       
      
        \psi_t(i) 
       
      
    ψt(i) 来存储在时间步  
     
      
       
       
         t 
        
       
      
        t 
       
      
    t 的时候状态  
     
      
       
       
         i 
        
       
      
        i 
       
      
    i 对应的概率最大的路径的上一个节点(就是  
     
      
       
       
         t 
        
       
         − 
        
       
         1 
        
       
      
        t-1 
       
      
    t−1 时刻对应的节点):
  
      
       
        
         
          
          
           
            
             
             
               ψ 
              
             
               t 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
              
                arg max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                j 
               
              
                ≤ 
               
              
                N 
               
              
             
            
              [ 
             
             
             
               δ 
              
              
              
                t 
               
              
                − 
               
              
                1 
               
              
             
            
              ( 
             
            
              j 
             
            
              ) 
             
             
             
               a 
              
              
              
                j 
               
              
                i 
               
              
             
            
              ] 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
        
       
         \begin{align} \psi_t(i)=\argmax_{1\le j \le N} [\delta_{t-1}(j)a_{ji}], \ i=1,2,...N \end{align} 
        
       
     ψt(i)=1≤j≤Nargmax[δt−1(j)aji], i=1,2,...N
这里我们不需要考虑 b i ( o t + 1 ) b_i(o_{t+1}) bi(ot+1),因为对于所有的 j j j,这个值都是一样的。
嗯!那么这样的话,我们就可以完整地写一遍 HMM 中的 viterbi 算法啦!
首先,我们需要初始化,或者说单独考虑一下第一个时间步的每个状态的情况。
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               δ 
              
             
               1 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
             
               π 
              
             
               i 
              
             
             
             
               b 
              
             
               i 
              
             
            
              ( 
             
             
             
               o 
              
             
               1 
              
             
            
              ) 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
             
             
               ψ 
              
             
               1 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
            
              0 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
        
       
         \begin{align} & \delta_1(i)=\pi_i b_i(o_1), \ i=1,2,...N \\ & \psi_1(i)=0, \ i=1,2,...N \\ \end{align} 
        
       
     δ1(i)=πibi(o1), i=1,2,...Nψ1(i)=0, i=1,2,...N
then,从第二个时间步开始,一直到第  
     
      
       
       
         T 
        
       
      
        T 
       
      
    T 个也就是最后一个时间步,我们按照上面的两个递推式子进行递推:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               δ 
              
             
               t 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
              
                max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                j 
               
              
                ≤ 
               
              
                N 
               
              
             
            
              [ 
             
             
             
               δ 
              
              
              
                t 
               
              
                − 
               
              
                1 
               
              
             
            
              ( 
             
            
              j 
             
            
              ) 
             
             
             
               a 
              
              
              
                j 
               
              
                i 
               
              
             
            
              ] 
             
             
             
               b 
              
             
               i 
              
             
            
              ( 
             
             
             
               o 
              
             
               t 
              
             
            
              ) 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
             
             
               ψ 
              
             
               t 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              = 
             
             
              
              
                arg max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                j 
               
              
                ≤ 
               
              
                N 
               
              
             
            
              [ 
             
             
             
               δ 
              
              
              
                t 
               
              
                − 
               
              
                1 
               
              
             
            
              ( 
             
            
              j 
             
            
              ) 
             
             
             
               a 
              
              
              
                j 
               
              
                i 
               
              
             
            
              ] 
             
            
              , 
             
            
                
             
            
              i 
             
            
              = 
             
            
              1 
             
            
              , 
             
            
              2 
             
            
              , 
             
            
              . 
             
            
              . 
             
            
              . 
             
            
              N 
             
            
           
          
          
          
         
        
       
         \begin{align} & \delta_t(i)=\max_{1\le j \le N}[\delta_{t-1}(j)a_{ji}]b_i(o_t), \ i=1,2,...N \\ & \psi_t(i)=\argmax_{1\le j \le N} [\delta_{t-1}(j)a_{ji}], \ i=1,2,...N \end{align} 
        
       
     δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot), i=1,2,...Nψt(i)=1≤j≤Nargmax[δt−1(j)aji], i=1,2,...N
在第  
     
      
       
       
         T 
        
       
      
        T 
       
      
    T 个时间步,终止,其实就是在最后一步递推出来的  
     
      
       
       
         N 
        
       
      
        N 
       
      
    N 个状态对应的  
     
      
       
       
         N 
        
       
      
        N 
       
      
    N 个路径中选择了概率最大的一个:
  
      
       
        
         
          
          
           
            
           
          
          
           
            
             
             
             
               P 
              
             
               ∗ 
              
             
            
              = 
             
             
              
              
                max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                i 
               
              
                ≤ 
               
              
                N 
               
              
             
             
             
               δ 
              
             
               T 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
           
          
          
          
         
         
          
          
           
            
           
          
          
           
            
             
             
             
               i 
              
             
               T 
              
             
               ∗ 
              
             
            
              = 
             
             
              
              
                arg max 
               
              
                 
               
              
              
              
                1 
               
              
                ≤ 
               
              
                i 
               
              
                ≤ 
               
              
                N 
               
              
             
            
              [ 
             
             
             
               δ 
              
             
               T 
              
             
            
              ( 
             
            
              i 
             
            
              ) 
             
            
              ] 
             
            
           
          
          
          
         
        
       
         \begin{align} & P^*=\max_{1\le i\le N}\delta_T(i) \\ & i_T^*=\argmax_{1\le i \le N}[\delta_T(i)] \\ \end{align} 
        
       
     P∗=1≤i≤NmaxδT(i)iT∗=1≤i≤Nargmax[δT(i)]
豪德,最后回溯一下:
  
      
       
        
         
          
          
           
            
             
             
               i 
              
             
               t 
              
             
               ∗ 
              
             
            
              = 
             
             
             
               ψ 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
            
              ( 
             
             
             
               i 
              
              
              
                t 
               
              
                + 
               
              
                1 
               
              
             
               ∗ 
              
             
            
              ) 
             
            
           
          
          
          
         
        
       
         \begin{align} i^*_t = \psi_{t+1}(i^*_{t+1}) \end{align} 
        
       
     it∗=ψt+1(it+1∗)
呃这个回溯关系也很好理解,因为 ψ t + 1 ( i ) \psi_{t+1}(i) ψt+1(i) 记录的是第 t + 1 t+1 t+1 个时间步的第 i i i 个状态对应的最优序列在上一个(也就是第 t t t 个)时间步的状态,所以 ψ t + 1 ( i t + 1 ∗ ) \psi_{t+1}(i^*_{t+1}) ψt+1(it+1∗) 就可以一直回溯上一个状态,直到第一个状态。
okaaaaaaaaay!! 以上就是 HMM 中的解码问题!
记住这句话:viterbi 算法在 HMM 解码问题中的应用,实质就是对于第二个时间步及后面的每一个时间步的每一个点(可能的状态)来说,选择到达这个点(状态)的多个路径中概率最大的一个,并删掉其它的。对于这个被选出来的路径,再进行后面的计算。
 至于可以这么做的原因,是因为对于一个点(状态)来说,各条路径汇集到它这里的长度就是这条路径从第一个点开始到这个点的【整条路径】的长度,而各条路径汇集到它之后,后面要进行的计算都是一样的(因为既然都汇集到这里了,就说明在这个时间步的状态是一样的,那么在下一个时间步参与的计算也就都会是一样的)。
然后这样,在每一个时间步的每一个点,都进行这样的筛选和删除,直到最后一个时间步。
好耶!!我们已经把 HMM 的标注任务讲完啦!!(撒花~! ★,°:.☆( ̄▽ ̄)/$:.°★ 。
这样的话,整个 HMM 就都讲完啦~!oye!
HMM 总结
小小总结,HMM 用于含有隐藏状态的时间序列数据相关的问题,主要有三个问题:
- 评估问题:已知参数和观测序列,求观测序列出现的概率,使用前向后向算法
- 学习问题:已知观测序列,求使观测序列出现概率最大的参数,使用 EM 算法
- 解码问题:已知参数和挂测序列,求观测序列最有可能对应的状态序列,使用 viterbi 算法
其中前向后向算法和 viterbi 算法的基本思想都是递推,EM 算法的基本思想是迭代。
那,HMM 就到这里啦~!
okay! 那这篇就到这里啦!我们下篇再见!(啊啊啊啊下篇可能就是期中考试以后了 errrr(
这篇文章讲解了 HMM 中的学习问题和解码问题,并给出了完整的数学推导,希望对你有所帮助!⭐
欢迎三连!!一起加油!🎇
——Geeker_LStar



















