HMM——参数学习问题(求解参数)

        首先,如果我们知道观测序列以及其对应的状态序列 \left \{ \left (o _{1},i_{1} \right ),\left (o _{2},i_{2} \right ),...,\left (o _{T},i_{T} \right ) \right \},则可以直接通过频率计算初始状态概率 (π),状态转移概率 (A) ,以及生成观测概率 (B):

a_{ij}=\frac{A_{ij}}{\sum_{N}^{n=1}A_{in}}

b_{i}\left ( x \right )=\frac{B_{i}\left ( x \right )}{\sum_{m=1}^{M}B_{i}\left ( m \right )}

        以 a_{ij} 为例,统计状态序列中由状态 i 转换为 j 的个数 A_{ij} ,除以所有状态转移个数的和\sum_{N}^{n=1}A_{in}即可得到相应状态转移概率。

        但是在语音识别的HMM模型中,我们往往没有观测状态对应的隐藏状态序列,此时应该如何求解参数\lambda =\left ( \pi ,A,B \right )呢?

        有两种方法:Viterbi学习算法(硬对齐)、Baum-Welch学习算法(软对齐)

         给定观测序列O=\left (o _{1},o _{2},...,o _{T} \right ),求解参数\lambda =\left ( \pi ,A,B \right )使得P\left ( O|\lambda \right )最大

        此时相较于文章开始的问题,状态序列未知,相当于是一个含有隐含变量的参数估计问题,这就需要EM算法了。

        EM算法全称Expectation Maximization算法,即期望最大化算法。EM算法是机器学习十大方法之一, 由Arthur P. Dempster,Nan Laird和Donald Rubin 1977年正式提出,是一种在已知部分相关变量的情况下,估计未知变量的迭代算法。

EM的算法流程相对而言比较简单,其步骤如下:

step1 :初始化分布参数

step2 :重复E、M步骤直到收敛:

a) E步骤-期望值计算:根据参数的假设值,给出未知变量的期望估计,应用于缺失值。

b) M步骤-最大化计算:根据未知变量的估计值,给出当前的参数的极大似然估计。

1.Viterbi学习算法(硬对齐)

        首先需要初始化一个HMM初始模型参数\lambda =\left ( \pi ,A,B \right )。  

        算法步骤:

        1)通过Viterbi算法求解最优路径。(硬对齐)

        2)此时获得一个新的观测序列以及其对应的状态序列\left \{ \left (o _{1},i_{1} \right ),\left (o _{2},i_{2} \right ),...,\left (o _{T},i_{T} \right ) \right \},则可以计算得到新的模型参数\lambda =\left ( \pi ,A,B \right )

        3)重复1)2)直至收敛。

2.Baum-Welch学习算法(软对齐)

        对于给定的隐藏状态 I 和观测状态 O ,求参数 \lambda 的对数极大似然估计函数为:

L\left ( \lambda \right ) = logP\left ( I,O|\lambda \right )

        给定模型 \lambda 和观测变量 O,出现隐藏状态 I 的条件概率为:

P=P\left ( I|O,\lambda \right )

        则定义:Q函数是完全数据的对数似然函数关于给定模型参数和观测变量的前提下对隐变量的条件概率分布期望(E-step),接下来只需要对它极大化。

        Q\left ( \lambda, \overline{\lambda } \right )=\sum_{I}^{}logP\left ( O,I|\lambda \right )P\left ( I|O,\overline{\lambda } \right )

        第一个 \lambda 表示要求的极大化参数, 第二个 \overline{\lambda 表示参数当前的估计值,每一次的迭代都是在求 Q函数的极大值。

        其中后半部分:

        P\left ( I|O,\overline{\lambda } \right )=\frac{P\left ( I,O|\overline{\lambda } \right )}{P\left ( O|\overline{\lambda } \right )}

        在这里,对于估计参数来说分母就是常量了。

        新的Q函数:

       Q\left ( \lambda, \overline{\lambda } \right )=\sum_{I}^{}logP\left ( O,I|\lambda \right )P\left ( I,O|\overline{\lambda } \right )

        其中:

        P\left ( O,I|\lambda \right )=\pi _{i_{1}}\prod_{t=1}^{T-1}a_{i_{t}i_{t+1}}\prod_{t=1}^{T-1}b_{i_{t}}\left ( o_{t} \right )

        对Q函数进行对数展开得:

        Q\left ( \lambda, \overline{\lambda } \right )= \sum_{I}^{}\left (log\pi _{i}+\sum_{t=1}^{T-1}loga_{i_{t}i_{t+1}}+\sum_{t=1}^{T}logb_{i_{t}}\left ( o_{t} \right ) \right )P\left ( I,O|\overline{\lambda } \right )

        观察即可发现,括号内的三项即为我们想要求解的参数,其互相之间为加法,故求总体极大值,只需要分别最大化就可以了 (M-step) 。

        以第一项为例:

        \sum_{I}^{}log\pi _{i}P\left ( I,O|\overline{\lambda } \right )=\sum_{n=1}^{N}log\pi _{i}P\left ( O,i_{1}=n| \overline{\lambda }\right ),\sum_{n=1}^{N}\pi _{i}=1

        在条件下求极值,拉格朗日乘子法!

        再将求得参数带回Q函数迭代计算,参数变化很小时,结束迭代,返回参数\lambda =\left ( \pi ,A,B \right )

        Viterbi学习算法称为硬对齐是因为在EM过程中,状态序列非0即1(即计算出的序列是固定的)。而Baum-Welch学习算法并未确定某一个具体的状态,而是计算其极大似然,一帧以一定的概率归属于某一状态,故称为软对齐。

猜你喜欢

转载自blog.csdn.net/weixin_43284996/article/details/127336621