七度

挽救一些大脑想要驱逐的东西——一些黑泥,一些杂感,一些工作

0%

EM Algorithm in speech progressing

前言

最近准备东大IME项目面试,正在读Automatic Speech Recognition,在HMM的部分中遇到了一些比较复杂的数学过程,这里简单写一些笔记。

背景知识

前向概率:

αt(i)=P(qt=i,o1t),t=1,...,T\alpha_t(i)=P(q_t=i,o^t_1), t=1,...,T

后向概率:

βt(i)=P(ot+1Tqt=i),t=1,...,T1\beta_t(i)=P(o^T_{t+1}|q_t=i), t=1,...,T-1

其中oabo_a^b表示观测序列(oa,oa+1,...,ob)(o_a,o_{a+1},...,o_b)

利用前向和后向概率可以递推的计算马尔科夫链中的P(o1T)P(o_1^T),否则几乎其时间复杂度几乎不可接受。

其递推式为分别为

αt(j)=i=1Nαt1(i)aijbj(ot),t=2,3,...,T;j=1,2,...,N\alpha_t(j)=\sum^N_{i=1}\alpha_{t-1}(i)a_{ij}b_j(o_t), t=2,3,...,T; j=1,2,...,N

βt(i)=j=1Nβt+1(j)aijbj(ot+1),t=T1,T2,...;i=1,2,...,N\beta_t(i)=\sum^N_{j=1}\beta_{t+1}(j)a_{ij}b_j(o_{t+1}), t=T-1, T-2,...; i=1,2,...,N

另外,由定义我们不难得到初值。对于α\alpha,有

α1(i)=P(q1=i,o1)=P(q1=i)P(o1q1)=πibi(o1)\alpha_1(i) = P(q_1=i,o_1)=P(q_1=i)P(o_1|q_1)=\pi_ib_i(o_1)

对于β\beta,因为在定义域之外,我们选择βT(i)=1\beta_T(i)=1

其中,bi(o1)b_i(o_1)表示当前状态为ii时观测结果为o1o_1的概率,而πi\pi_i表示马尔科夫链的稳定分布(stationary distribution),即当tt\to \inftypi(t)p_i(t)的值

而定义了前向和后向概率后,我们可以将P(o1T)P(o_1^T)分解,有

P(qt=i,o1T)=P(qt=i,o1t,ot+1T)=P(qt=i,o1t)P(qt=i,ot+1To1t,qt=i)=P(qt=i,o1t)P(qt=i,ot+1T,qt=i)=αt(i)βt(i) \begin{aligned} P(q_t&=i,o_1^T)=P(q_t=i,o_1^t,o_{t+1}^T)\\ &=P(q_t=i,o_1^t)P(q_t=i,o^T_{t+1}|o_1^t,q_t=i)\\ &=P(q_t=i,o_1^t)P(q_t=i,o^T_{t+1},q_t=i)\\ &=\alpha_t(i)\beta_t(i) \end{aligned}

注意到第二行到第三行成立是因为在特定状态下观测是独立同分布(IID)的。

由此有

P(o1T)=i=1NP(qt=i,o1T)=i=1Nαt(i)βt(i)P(o_1^T)=\sum^N_{i=1}P(q_t=i,o^T_1)=\sum^N_{i=1}\alpha_t(i)\beta_t(i)

注意到这里的t,即α\alphaβ\beta的分断点是任意选择的,那么我们只要令t=Tt=T就有

P(o1T)=i=1NαT(i)P(o_1^T)=\sum^N_{i=1}\alpha_T(i)

EM算法

背景

考虑全数据y=o,hy={o,h},其中oo是观测到的数据,而hh是隐藏的变量。那么要找到参数θ\theta,我们需要最大化其对数似然函数logp(o;θ)log p(o;\theta),但是这个概率分布函数是相对难以计算的,因此EM算法试图迭代地处理全数据yy,再通过建立yyoo的映射o=g(y)o=g(y)来解决问题。而全数据的选择对于不同的问题通常具有其独特性。

而通过合理的选择隐数据hh,可以配合观测数据oo来构造全数据yy,这样可以简化似然估计的过程。

考虑以下条件期望

Q(θθ0)=Eho[logp(y;θ)o;θ0]=E[logp(o,h;θ)o;θ0]Q(\theta|\theta_0)=E_{h|o}[\log p(y;\theta)o;\theta_0] = E[\log p(o,h;\theta)|o;\theta_0]

hh在其所有的可能性上求和(如果是连续的则为积分)就可以得到似然函数的值。注意到这个似然函数的值是与θ0\theta_0相关的,相当于在初值θ0\theta_0的基础上计算得到了一个新的θ\theta,而可以保证θ\theta是收敛的,即$$Q(\theta|\theta_{k+1})\ge Q(\theta|\theta_k)$$,仅在θk\theta_k已是一个最大似然估计时取到等号。

Baum-Welch 算法

如在上一节中所述,对于EM算法我们需要一个观测数据和一个隐藏数据来构造全数据,对于HMM来说,分别为观测序列o1To^T_1和隐马尔科夫链状态序列q1Tq_1^T,代入公式则有

Q(θθ0)=E[logp(o1T,q1T;θ)o1T;θ0]Q(\theta|\theta_0)= E[\log p(o^T_1,q^T_1;\theta)|o^T_1;\theta_0]

E步骤

在E步骤中,需要将Q(θθ0)Q(\theta|\theta_0)化简到便于在M步骤中最大化的形式。将期望展开则有

Q(θθ0)=E[logp(o1T,q1T;θ)o1T;θ0]=q1TP(q1To1T,θ0)logP(o1T,q1Tθ) \begin{aligned} Q(\theta|\theta_0)&= E[\log p(o^T_1,q^T_1;\theta)|o^T_1;\theta_0]\\ &=\sum_{q_1^T}P(q_1^T|o_1^T,\theta_0)\log P(o_1^T,q_1^T|\theta) \end{aligned}

,其中θ\thetaθ0\theta_0表示当次和上一次迭代中的参数

由于在高斯混合HMM中,P(o1Tq1T)P(o_1^T|q_1^T)服从高斯分布,但其形式过于复杂,为了方便简写,我们令

Nt(i)=D2log(2π)12logΣi12(otμi)TΣ1i(otμi)N_t(i) = -\frac{D}{2}\log(2\pi)-\frac12\log|\Sigma_i|-\frac12(o_t-\mu_i)^\mathrm{T}\Sigma^-1_i(o_t-\mu_i)

logP(o1Tq1T)=t=1TNt(qt)\log P(o_1^T|q_1^T) = \sum_{t=1}^T N_t(q_t)

同时,由转移概率aija_{ij}的定义可以得到P(q1T)=t=1T1aqtqt+1P(q_1^T)=\prod_{t=1}^{T-1}a_{q_tq_{t+1}},因此有

logP(o1T,q1Tθ)=logP(o1Tq1T)P(q1T)=t=1TNt(qt)+t=1T1logaqtqt+1\log P(o_1^T,q_1^T|\theta) = \log P(o_1^T|q_1^T)P(q_1^T) = \sum_{t=1}^T N_t(q_t) + \sum_{t=1}^{T-1}\log a_{q_tq_{t+1}}

回代到QQ的定义式中有

Q(θθ0)=q1TP(q1To1T,θ0)t=1TNt(qt)+q1TP(q1To1T,θ0)t=1T1logaqtqt+1Q(\theta|\theta_0)=\sum_{q_1^T}P(q_1^T|o_1^T,\theta_0)\sum_{t=1}^T N_t(q_t) + \sum_{q_1^T}P(q_1^T|o_1^T,\theta_0)\sum_{t=1}^{T-1}\log a_{q_tq_{t+1}}

首先引入克罗内克δ\delta函数(Kronecker delta)

δij={1(i=j),0(ij)\delta_{ij} = \begin{cases} 1 & (i=j),\\ 0 & (i\neq j) \end{cases}

由于δ\delta仅在一个点上取到非00值,因此乘上它并不会改变函数的值。所以可以利用构造一个合适的δ\delta函数并调换乘项位置来化简QQ.

在本例中,对QQ的第一项有

Q1(θθ0)=i=1N{q1TP(q1To1T,θ0)t=1TNt(qt)}δqt,i=i=1N{q1TP(q1To1T,θ0)δqt,it=1TNt(qt)}=i=1Nt=1TP(qt=io1T,θ0)Nt(qt)\begin{aligned} Q_1(\theta|\theta_0)&=\sum^N_{i=1}\left\{\sum_{q^T_1}P(q_1^T|o_1^T,\theta_0)\sum^T_{t=1}N_t(q_t) \right\}\delta_{q_t,i}\\ &=\sum^N_{i=1}\left\{\sum_{q^T_1}P(q_1^T|o_1^T,\theta_0)\delta_{q_t,i}\sum^T_{t=1}N_t(q_t) \right\}\\ &=\sum^N_{i=1}\sum^T_{t=1}P(q_t=i|o_1^T,\theta_0)N_t(q_t)\\ \end{aligned}

同理,对QQ的第二项乘上δqt,iδqt+1,j\delta_{q_t,i}\delta_{q_{t+1},j}可得

Q2(θθ0)=i=1Nj=1Nt=1T1P(qt=i,qt+1=jo1T,θ0)logaijQ_2(\theta|\theta_0)=\sum^N_{i=1}\sum^N_{j=1}\sum^{T-1}_{t=1}P(q_t=i,q_{t+1}=j|o_1^T,\theta_0)\log a_{ij}

由此,不难注意到Q的两项分别只与高斯分布(Nt(I)N_t(I))和马尔科夫链(aija_{ij})有关,因此可以独立的最大化这两项。

Q1Q_1Q2Q_2中连加时使用的权分别为

γt(i)=P(qt=io1T,θ0)ξt(i,j)=P(qt=i,qt+1=jo1T,θ0)\begin{aligned} \gamma_t(i) &= P(q_t=i|o_1^T,\theta_0)\\ \xi_t(i,j) &= P(q_t=i, q_{t+1}=j|o_1^T,\theta_0) \end{aligned}

则由其定义,不难得出

ξt(i,j)=αt(i)βt+1(j)aijexp(Nt+1(j))P(o1Tθ0),t=1,2,...,T1.\xi_t(i,j) = \frac{\alpha_t(i)\beta_{t+1}(j)a_{ij}\exp(N_{t+1}(j))}{P(o_1^T|\theta_0)}, t=1,2,...,T-1.

由定义式,显然的,对ξt\xi_t在j上求和就可以得到γ\gamma

γt(i)=j=1Nξt(i,j),t=1,2,...,T1.\gamma_t(i)=\sum^N_{j=1}\xi_t(i,j), t=1,2,...,T-1.

又由定义可以直接得到

γT(i)=P(qT=io1T,θ0)=P(qt=i,o1Tθ0)P(o1Tθ0)=αT(i)P(o1Tθ0)\gamma_T(i)=P(q_T=i|o_1^T,\theta_0) = \frac{P(q_t=i,o_1^T|\theta_0)}{P(o_1^T|\theta_0)}=\frac{\alpha_T(i)}{P(o_1^T|\theta_0)}

由此将QQ化简为了只要对状态ii或状态对i,ji,j遍历的便于计算的形式,以在M步骤中处理。

M步骤

在M步骤中需要将E步骤中得到的Q1Q_1Q2Q_2的值在θ0\theta_0下最大化。对于Q2Q_2,令Q2aij=0\frac{\partial Q_2}{\partial a_{ij}}=0。由于有边界条件j=1Naij=1\sum^N_{j=1}a_{ij}=1,使用标准拉格朗日乘数法可以得到

a^=t=1T1ξt(i,j)t=1T1γt(i)\hat a=\frac{\sum^{T-1}_{t=1}\xi_t(i,j)}{\sum^{T-1}_{t=1}\gamma_t(i)}

具体计算步骤略去。

而对Q1Q_1,我们省掉与优化无关的常数项和常数系数后可以得到等价的目标函数

Q1(μi,Σi)=i=1Nt=1Trγt(i)(otμi)TΣ1i(otμi)12logΣiQ_1(\mu_i,\Sigma_i)=\sum^N_{i=1}\sum^{Tr}_{t=1}\gamma_t(i)(o_t-\mu_i)^\mathrm{T}\Sigma^-1_i(o_t-\mu_i)-\frac12\log|\Sigma_i|

省略的部分包括高斯分布中与Σ\Sigma无关的项,以及最后一项的系数(显然的有i=1Nγt(i)=1\sum^N_{i=1}\gamma_t(i)=1,那么再过一次求和之后仍然是常数,求导之后会被消去)

则相等于解

Q1Σi=0,i=1,2,...,N.\frac{\partial Q_1}{\partial\Sigma_i}=0, i=1,2,...,N.

K=Σ1K=\Sigma^-1,则对logΣi\log|\Sigma_i|项,klmk_{lm}的导数就是Σ\Sigma中对应的项,即σlm\sigma_{lm},于是单项的导数Q1klm=0\frac{\partial Q_1}{\partial k_{lm}}=0,即

t=1Tγt(i){12σlm12(otμi)l(otμi)m}=0\sum^T_{t=1}\gamma_t(i)\left\{\frac12\sigma_{lm}-\frac12(o_t-\mu_i)_l(o_t-\mu_i)_m\right\}=0

σlm\sigma_{lm}解出并写成矩阵形式有

Σ^i=t=1Tγt(i)(otμ^i)(otμ^i)Tt=1Tγt(i)\hat\Sigma_i = \frac{\sum^T_{t=1}\gamma_t(i)(o_t-\hat\mu_i)(o_t-\hat\mu_i)^\mathrm{T}}{\sum^T_{t=1}\gamma_t(i)}

从而有

μ^i=t=1Tγt(i)ott=1Tγ(i)\hat\mu_i=\frac{\sum^T_{t=1}\gamma_t(i)o_t}{\sum^T_{t=1}\gamma(i)}

Viterbi算法

Viterbi算法用于解码HMM状态,即,已知一个观测o1To_1^T,求出最可能的HMM状态序列q1Tq_1^T

其核心思想是动态规划,由于这个算法在OI中相当常见就不再赘述其背景了。

在Viterbi算法中,我们要最大化的量是

δi(t)=maxq1,q2,...,qt1P(o1t,q1t1,qt=i)\delta_i(t) = \mathop{max}\limits_{q1,q2,...,q_{t-1}} P(o_1^t,q_1^{t-1},q_t=i)

也就是对于观测序列o1to^t_1,假设t时刻之前的HMM状态序列为q1t1q_1^{t-1}的情况下,tt时刻状态为ii的概率。

而有了tt时刻的状态i的目标函数则可以简单的得到下一时刻状态j下的目标函数表达式,即

δj(t+1)=maxiδi(t)aijbj(ot+1)\delta_j(t+1) = \mathop{max}\limits_{i}\delta_i(t)a_{ij}b_j(o_{t+1})

这个式子的三项分别为:转移前的状态i的概率,从前状态i转移到该状态j的概率,以及对于相应的观测ot+1o_{t+1},该时刻处于状态j的概率。

由此迭代到T时刻就可以得到最大概率PP^*,以及所有时刻的状态路径q(t)q^*(t)

如果曾经有做过DP相关的题目这部分应该不难理解。

至此,利用EM算法和Viterbi算法,我们就完成了对HMM参数的估计以及隐参数HMM状态序列的解码。

欢迎关注我的其它发布渠道