序列比对(17)第二部分的小结

序列比对的系列文章第二部分主要介绍了HMM(隐马尔科夫模型),包含了八篇文章:
《序列比对(九)从掷骰子说起HMM》
《序列比对(十)viterbi算法求解最可能路径》
《序列比对(11)计算符号序列的全概率》
《序列比对(12):计算后验概率》
《序列比对(13)后验解码》
《序列比对(14)viterbi算法和后验解码的比较》
《序列比对(15)EM算法以及Baum-Welch算法的推导》
《序列比对(16)Baum-Welch算法估算HMM参数》

HMM模型最关键的一点就是在一个状态序列中,某一步状态的概率只与上一步的状态有关。也正是因为与前面一步状态有关,所以HMM模型天然地适用动态规划算法。

这几篇文章都是以掷骰子为例。

一、如何随机生成状态序列和符号序列:

假定要随机生成一个状态序列 π \pi π和一个符号序列 x x x,那么:
(1.1) P ( π i ∣ π 1 , π 2 , . . . , π i − 1 ) = P ( π i ∣ π i − 1 ) P(\pi_i|\pi_1,\pi_2,...,\pi_{i-1}) = P(\pi_i|\pi_{i-1}) \tag{1.1} P(πiπ1,π2,...,πi1)=P(πiπi1)(1.1)
(1.2) P ( x i ∣ x 1 , x 2 , . . . , x i − 1 , π 1 , π 2 , . . . , π i ) = P ( x i ∣ π i ) P(x_i|x_1,x_2,...,x_{i-1},\pi_1,\pi_2,...,\pi_i) = P(x_i|\pi_{i}) \tag{1.2} P(xix1,x2,...,xi1,π1,π2,...,πi)=P(xiπi)(1.2)

给出了转移概率发射概率的符号定义:
(1.3) a k l = P ( π i = l ∣ π i − 1 = k ) a_{kl} = P(\pi_i=l|\pi_{i-1}=k) \tag{1.3} akl=P(πi=lπi1=k)(1.3)
(1.4) e k ( b ) = P ( x i = b ∣ π i = k ) e_k(b) = P(x_i=b|\pi_i=k) \tag{1.4} ek(b)=P(xi=bπi=k)(1.4)

若是给初始状态0和初始符号 x 0 x_0 x0建模,则有:
(1.5) e 0 ( b ) = { 0 , if  b ≠ x 0 1 , if  b = x 0 e_0(b) = \begin{cases} 0, & \text{if $b \neq x_0$} \\ 1, & \text{if $b = x_0$} \end{cases} \tag{1.5} e0(b)={0,1,if b̸=x0if b=x0(1.5)

若是给结束状态0建模,我们假定:
(1.6) a k 0 = 1 ,     for each possible  k ≠ 0 a_{k0} = 1, \ \ \ \text{for each possible $k \neq 0$} \tag{1.6} ak0=1,   for each possible k̸=0(1.6)

二、Viterbi算法求解最可能路径

一条路径就是一个状态序列。在符号序列已知的情况下,如何猜出来最有可能的路径 π ∗ \pi^* π。即

(2.1) π ∗ = a r g m a x π   P ( x , π ) \pi^* = \underset{\pi}{\mathrm{argmax}} \, P(x, \pi) \tag{2.1} π=πargmaxP(x,π)(2.1)

这个可以用Viterbi算法求解。Viterbi算法是一种动态规划算法。假设 v k ( i ) v_k(i) vk(i)是以状态 k k k以及符号 x i x_i xi结束的所有序列中概率的最大值。那么
Viterbi算法的初始条件是:
(2.2) v k ( 0 ) = { 0 , if  k ≠ 0 1 , if  k = 0 v_k(0) = \begin{cases} 0, & \text{if $k \neq 0$} \\ 1, & \text{if $k = 0$} \end{cases} \tag{2.2} vk(0)={0,1,if k̸=0if k=0(2.2)

迭代公式是:
(2.3) v l ( i + 1 ) = e l ( x i + 1 ) max ⁡ k [ v k ( i ) a k l ] p t r i + 1 ( l ) = a r g m a x k [ v k ( i ) a k l ] v_l(i+1) = e_l(x_{i+1}) \underset{k}{\max} \big[ v_k(i)a_{kl} \big] \\ \mathrm{ptr}_{i+1}(l) = \underset{k}{\mathrm{argmax}} \big[ v_k(i)a_{kl} \big] \tag{2.3} vl(i+1)=el(xi+1)kmax[vk(i)akl]ptri+1(l)=kargmax[vk(i)akl](2.3)

终止条件是:
(2.4) P ( x , π ∗ ) = max ⁡ k   v k ( L ) π L ∗ = a r g m a x k   v k ( L ) P(x,\pi^*) = \underset{k}{\max} \, v_k(L) \\ \pi_L^* = \underset{k}{\mathrm{argmax}} \, v_k(L) \tag{2.4} P(x,π)=kmaxvk(L)πL=kargmaxvk(L)(2.4)

回溯公式是:
(2.5) π i ∗ = p t r i + 1 ( π i + 1 ∗ ) \pi_i^* = \mathrm{ptr}_{i+1}(\pi_{i+1}^*) \tag{2.5} πi=ptri+1(πi+1)(2.5)

三、前向算法和后向算法计算符号序列的全概率

假设符号序列 x x x已知,而路径 π \pi π未知,那么符号序列的全概率 P ( x ) P(x) P(x)如何计算?就是
(3.1) P ( x ) = ∑ π P ( x , π ) P(x) = \sum_{\pi} P(x, \pi) \tag{3.1} P(x)=πP(x,π)(3.1)

具体计算仍然使用动态规划迭代计算,按照序列迭代的方向可分为前向算法和后向算法。

所谓前向算法,就是从序列头部开始迭代,直至序列尾部。其初始条件是:
(3.2) f k ( i ) = P ( x 1 , x 2 , . . . , x i , π i = k ) f k ( 0 ) = { 0 , if  k ≠ 0 1 , if  k = 0 f_k(i) = P(x_1,x_2,...,x_i,\pi_i=k) \\ f_k(0) = \begin{cases} 0, & \text{if $k \neq 0$} \\ 1, & \text{if $k = 0$} \end{cases} \tag{3.2} fk(i)=P(x1,x2,...,xi,πi=k)fk(0)={0,1,if k̸=0if k=0(3.2)

迭代公式是:
(3.3) f l ( i + 1 ) = e l ( x i + 1 ) ∑ k f k ( i ) a k l f_l(i+1) = e_l(x_{i+1}) \sum_k f_k(i)a_{kl} \tag{3.3} fl(i+1)=el(xi+1)kfk(i)akl(3.3)

终止条件是:
(3.4) P ( x ) = ∑ k f k ( L ) P(x) = \sum_k f_k(L) \tag{3.4} P(x)=kfk(L)(3.4)

所谓后向算法,就是从序列尾部开始迭代,直至序列头部。其初始条件是:
(3.5) b k ( i ) = P ( x i + 1 , x i + 2 , . . . , x L ∣ π i = k ) b k ( L ) = 1 ,       for each possible  k > 0 b_k(i) = P(x_{i+1},x_{i+2},...,x_L|\pi_i=k) \\ b_k(L) = 1, \ \ \ \ \ \text{for each possible $k > 0$}\tag{3.5} bk(i)=P(xi+1,xi+2,...,xLπi=k)bk(L)=1,     for each possible k>0(3.5)

迭代公式是:
(3.6) b k ( i ) = ∑ l a k l e l ( x i + 1 ) b l ( i + 1 ) b_k(i) = \sum_l a_{kl}e_l(x_{i+1})b_l(i+1) \tag{3.6} bk(i)=laklel(xi+1)bl(i+1)(3.6)

终止条件是:
(3.7) P ( x ) = b 0 ( 0 ) P(x) = b_0(0) \tag{3.7} P(x)=b0(0)(3.7)

在实际的计算中,为了解决多个概率相乘可能导致的下溢问题,要对概率进行适当的缩放。我们选择了缩放因子这一方法。我们首先定义缩放后的概率:
(3.8) f ~ l ( i ) = f l ( i ) ∏ j = 1 i s j b ~ l ( i ) = b l ( i ) ∏ j = i L s j \tilde{f}_l(i) = \frac{f_l(i)}{\displaystyle \prod_{j=1}^i s_j} \\ \tilde{b}_l(i) = \frac{b_l(i)}{\displaystyle \prod_{j=i}^L s_j} \tag{3.8} f~l(i)=j=1isjfl(i)b~l(i)=j=iLsjbl(i)(3.8)

缩放因子 s i s_i si的计算方法是:
(3.9) s i + 1 = ∑ l e l ( x i + 1 ) ∑ k f ~ k ( i ) a k l ,     when  ∑ l f ~ l ( i ) = 1 s_{i+1} = \sum_l e_l(x_{i+1}) \sum_k \tilde{f}_k(i)a_{kl}, \ \ \ \text{when $\sum_l \tilde{f}_l(i) = 1$} \tag{3.9} si+1=lel(xi+1)kf~k(i)akl,   when lf~l(i)=1(3.9)

并且有:
(3.10) P ( x ) = ∏ j = 1 L s j P(x) = \prod_{j=1}^L s_j \tag{3.10} P(x)=j=1Lsj(3.10)

用缩放后的概率表示前向算法:
(3.11) f ~ k ( 0 ) = { 0 , if  k ≠ 0 1 , if  k = 0 s i + 1 = ∑ l e l ( x i + 1 ) ∑ k f ~ k ( i ) a k l f ~ l ( i + 1 ) = 1 s i + 1 e l ( x i + 1 ) ∑ k f ~ l ( i ) a k l \tilde{f}_k(0) = \begin{cases} 0, & \text{if $k \neq 0$} \\ 1, & \text{if $k = 0$} \end{cases} \\ s_{i+1} = \sum_l e_l(x_{i+1}) \sum_k \tilde{f}_k(i)a_{kl} \\ \tilde{f}_l(i+1) = \frac{1}{s_{i+1}} e_l(x_{i+1}) \sum_k \tilde{f}_l(i) a_{kl} \tag{3.11} f~k(0)={0,1,if k̸=0if k=0si+1=lel(xi+1)kf~k(i)aklf~l(i+1)=si+11el(xi+1)kf~l(i)akl(3.11)

用缩放后的概率表示后向算法:
(3.12) b ~ k ( L ) = 1 s L b ~ k ( i ) = 1 s i ∑ l a k l b ~ l ( i + 1 ) e l ( x i + 1 ) \tilde{b}_k(L) = \frac{1}{s_L}\\ \tilde{b}_k(i) = \frac{1}{s_i} \sum_l a_{kl} \tilde{b}_l(i+1)e_l(x_{i+1}) \tag{3.12} b~k(L)=sL1b~k(i)=si1laklb~l(i+1)el(xi+1)(3.12)

四、后验概率的计算与后验解码

当符号序列已知而路径未知时,我们除了关心最可能路径外,也对某一位置状态的概率$ P(\pi_i=k|x) $感兴趣。很明显,这是一个后验概率,通过推导,可以通过下面的公式计算:
(4.1) P ( π i = k ∣ x ) = f k ( i ) b k ( i ) P ( x ) P(\pi_i=k|x) = \frac{f_k(i)b_k(i)}{P(x)} \tag{4.1} P(πi=kx)=P(x)fk(i)bk(i)(4.1)

如果利用缩放后的概率计算,上述公式变为:
(4.2) P ( π i = k ∣ x ) = f ~ k ( i ) b ~ k ( i ) s i P(\pi_i=k|x) = \tilde{f}_k(i) \tilde{b}_k(i) s_i \tag{4.2} P(πi=kx)=f~k(i)b~k(i)si(4.2)

所谓后验解码,就是对每一个位置,计算得到该位置最有可能的状态。即
(4.3) π ^ i = a r g m a x k   P ( π i = k ∣ x ) = a r g m a x k   f ~ k ( i ) b ~ k ( i ) \begin{aligned} \hat{\pi}_i & = \underset{k}{\mathrm{argmax}} \, P(\pi_i=k|x) \\ & = \underset{k}{\mathrm{argmax}} \, \tilde{f}_k(i) \tilde{b}_k(i) \tag{4.3} \end{aligned} π^i=kargmaxP(πi=kx)=kargmaxf~k(i)b~k(i)(4.3)

五、Baum-Welch算法估算HMM模型参数

EM算法是一种在有缺失数据的情况下利用最大似然法最大对数似然法估算概率模型参数的迭代方法。
(5.1) θ ^ = a r g m a x θ   P ( x ∣ θ ) θ ^ = a r g m a x θ   log ⁡ P ( x ∣ θ ) \hat{\theta} = \underset{\theta}{\mathrm{argmax}} \, P(x|\theta) \\ \hat{\theta} = \underset{\theta}{\mathrm{argmax}} \, \log P(x|\theta) \tag{5.1} θ^=θargmaxP(xθ)θ^=θargmaxlogP(xθ)(5.1)

假设缺失数据是 y y y,那么EM算法的步骤就是:
E步骤(Expectation)要计算 Q Q Q函数:
(5.2) Q ( θ ∣ θ t ) = ∑ y P ( y ∣ x , θ t ) log ⁡ P ( x , y ∣ θ ) Q(\theta|\theta^t) = \sum_y P(y|x,\theta^t) \log P(x,y|\theta) \tag{5.2} Q(θθt)=yP(yx,θt)logP(x,yθ)(5.2)

M步骤(Maximization)根据步骤 t t t的结果计算得到步骤 t + 1 t+1 t+1的参数:
(5.3) θ t + 1 = a r g m a x θ   Q ( θ ∣ θ t ) \theta^{t+1} = \underset{\theta}{\mathrm{argmax}} \, Q(\theta|\theta^t) \tag{5.3} θt+1=θargmaxQ(θθt)(5.3)

终止条件就是当(对数)似然值变化小于一个阈值 T T T或者迭代次数超过最大迭代次数 M a x I t e r MaxIter MaxIter,即:
(5.4) P ( x ∣ θ t + 1 ) − P ( x ∣ θ t ) &lt; T or     log ⁡ P ( x ∣ θ t + 1 ) − log ⁡ P ( x ∣ θ t ) &lt; T or     t &gt; M a x I t e r \begin{aligned} &amp; P(x|\theta^{t+1}) - P(x|\theta^t) &lt; T \\ &amp; \text{\textbf{or}} \ \ \ \log P(x|\theta^{t+1}) - \log P(x|\theta^t) &lt; T \\ &amp; \text{\textbf{or}} \ \ \ t &gt; MaxIter \tag{5.4} \end{aligned} P(xθt+1)P(xθt)<Tor   logP(xθt+1)logP(xθt)<Tor   t>MaxIter(5.4)

Baum-Welch算法是EM算法的一个特例。当符号序列已知而路径未知时,可以用Baum-Welch算法来估算HMM模型的参数。这时,缺失数据就是路径 π \pi π。那么,Baum-Welch算法的 Q Q Q函数变为:
(5.5) Q ( θ ∣ θ t ) = ∑ π P ( π ∣ x , θ t ) log ⁡ P ( x , π ∣ θ ) Q(\theta|\theta^t) = \sum_{\pi} P(\pi|x,\theta^t) \log P(x,\pi|\theta) \tag{5.5} Q(θθt)=πP(πx,θt)logP(x,πθ)(5.5)

HMM模型的参数主要是转移概率 a k l a_{kl} akl以及发射概率 e k ( b ) e_k(b) ek(b),可以证明,当Baum-Welch算法采用如下迭代方式计算参数时,可以让对数似然取到局部最大值:
(5.6) a k l t + 1 = A k l t + r k l ∑ l ′ [ A k l ′ t + r k l ′ ] e k t + 1 ( b ) = E k t + 1 ( b ) + r k ( b ) ∑ b ′ [ E k t + 1 ( b ′ ) + r k ( b ′ ) ] a_{kl}^{t+1} = \frac{A_{kl}^t + r_{kl}}{\displaystyle \sum_{l&#x27;} \Big[A_{kl&#x27;}^t + r_{kl&#x27;} \Big]} \\ e^{t+1}_k(b) = \frac{E^{t+1}_k(b) + r_k(b)}{\displaystyle \sum_{b&#x27;} \Big[E^{t+1}_k(b&#x27;) + r_k(b&#x27;) \Big]} \tag{5.6} aklt+1=l[Aklt+rkl]Aklt+rklekt+1(b)=b[Ekt+1(b)+rk(b)]Ekt+1(b)+rk(b)(5.6)

其中, t t t表示迭代的次数, A k l A_{kl} Akl a k l a_{kl} akl在所有训练序列中发生的期望次数, E k ( b ) E_k(b) Ek(b) e k ( b ) e_k(b) ek(b)在所有训练序列中发生的期望次数。即
(5.7) A k l = ∑ j ∑ π P ( π j ∣ x j , θ ) A k l ( π j ) = ∑ j ∑ i P ( π i j = k , π i + 1 j = l ∣ x j , θ ) \begin{aligned} \displaystyle A_{kl} &amp; = \sum_{j} \sum_{\pi} P(\pi^j|x^j,\theta) A_{kl}(\pi^j) \\ &amp; = \sum_{j} \sum_i P(\pi_i^j=k, \pi_{i+1}^j=l|x^j,\theta) \tag{5.7} \end{aligned} Akl=jπP(πjxj,θ)Akl(πj)=jiP(πij=k,πi+1j=lxj,θ)(5.7)

(5.8) E k ( b ) = ∑ j ∑ π P ( π j ∣ x j , θ ) E k ( b , π j ) = ∑ j ∑ i P ( π i j = k , x i j = b ∣ x j , θ ) = ∑ j ∑ { i ∣ x i j = b } P ( π i j = k ∣ x j , θ ) \begin{aligned} \displaystyle E_k(b) &amp; = \sum_j \sum_\pi P(\pi^j|x^j, \theta) E_k(b, \pi^j) \\ &amp; = \sum_{j} \sum_i P(\pi_i^j=k, x_i^j=b|x^j,\theta) \\ &amp; = \sum_{j} \sum_{\{i|x_i^j=b\}} P(\pi_i^j=k|x^j,\theta) \tag{5.8} \end{aligned} Ek(b)=jπP(πjxj,θ)Ek(b,πj)=jiP(πij=k,xij=bxj,θ)=j{ixij=b}P(πij=kxj,θ)(5.8)

如果用前向算法和后向算法中的符号表示的话,我们可以推导得到:
(5.9) A k l = ∑ j 1 P ( x j ∣ θ ) ∑ i f k j ( i ) b l j ( i + 1 ) a k l e l ( x i + 1 j ) = ∑ j ∑ i f ~ k j ( i ) a k l e l ( x i + 1 j ) b ~ l j ( i + 1 ) \begin{aligned} \displaystyle A_{kl} &amp; = \sum_j \frac {1} {P(x^j|\theta)} \sum_i f^j_k(i) b^j_l(i+1) a_{kl} e_l(x^j_{i+1}) \\ &amp; = \sum_j \sum_i \tilde{f}^j_k(i) a_{kl} e_l(x^j_{i+1}) \tilde{b}^j_l(i+1) \tag{5.9} \end{aligned} Akl=jP(xjθ)1ifkj(i)blj(i+1)aklel(xi+1j)=jif~kj(i)aklel(xi+1j)b~lj(i+1)(5.9)

(5.10) E k ( b ) = ∑ j 1 P ( x j ∣ θ ) ∑ { i ∣ x i j = b } f k j ( i ) b k j ( i ) = ∑ j ∑ { i ∣ x i j = b } f ~ k j ( i ) b ~ k j ( i ) s i j \begin{aligned} \displaystyle E_k(b) &amp; = \sum_{j} \frac {1} {P(x^j|\theta)} \sum_{\{i|x_i^j=b\}} f^j_k(i) b_k^j(i)\\ &amp; = \sum_{j} \sum_{\{i|x_i^j=b\}} \tilde{f}^j_k(i) \tilde{b}^j_k(i) s^j_i \tag{5.10} \end{aligned} Ek(b)=jP(xjθ)1{ixij=b}fkj(i)bkj(i)=j{ixij=b}f~kj(i)b~kj(i)sij(5.10)

伪计数之和反映了我们?认为先验知识的可靠程度。如果伪计数之和较大,则我们认为先验概率比较可靠,需要用更多的数据?取改变它。反之不太可靠。最开始的概率参数可以用随机数?。?只要保证相应的概率和为1即可。

至此,序列比对系列文章已经介绍了“第一部分:二序列比对的常见问题和相应算法”以及“第二部分:HMM模型及相关算法简介”。在学习“将HMM模型应用到序列比对(或序列发现)”之前,我们接下来准备先学习一下多序列比对的常见问题和相关算法。

(公众号:生信了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值