机器学习 - 隐马尔科夫模型(3)- 学习算法
在隐马尔科夫模型的学习过程中,根据数据的完整性分为监督学习算法与无监督学习算法。
如果训练数据同时包含了观测序列和对应的状态序列,则可以使用监督学习方法,从数据中直接统计出来加以计算。
如果数据只包含观测序列,而没有状态序列,就需要使用无监督学习算法的 Baum-Welch 算法。
-
监督学习算法
假设已给训练数据包含 S 个长度相同的观测序列和对应的状态序列 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . , ( O S , I S ) } \{(O_1,I_1),(O_2,I_2),...,(O_S,I_S)\} {(O1,I1),(O2,I2),...,(OS,IS)},那么就可以使用极大似然估计法来估计 HMM 的参数。
-
初始状态概率向量 Π 的估计
统计所有样本中初始状态为 q i q_i qi 的频率,并赋予对应的 π i π_i πi。
-
状态转移概率的估计
设样本中时刻 t 处于状态 i,在时刻 t+1 转移到状态 j 的频数为 Aij,那么状态转移概率 aij 的估计值为:
a i j = A i j ∑ j = 1 N A i j , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N a_{ij}=\frac{A_{ij}}{\sum_{j=1}^NA_{ij}},i=1,2,...,N;j=1,2,...,N aij=∑j=1NAijAij,i=1,2,...,N;j=1,2,...,N
-
观测概率的估计
设样本中状态为 j j j 且观测值为 k k k 的频数是 Bjk,那么观测概率 bj(k) 的估计值为:
b j ( k ) = B j k ∑ j = 1 M B j k , k = 1 , 2 , . . . , M ; j = 1 , 2 , . . . , N b_j(k)=\frac{B_{jk}}{\sum_{j=1}^{M}}B_{jk},k=1,2,...,M;j=1,2,...,N bj(k)=∑j=1MBjkBjk,k=1,2,...,M;j=1,2,...,N
-
-
无监督 Baum-Welch 算法
监督学习需要使用训练数据,而人工标注训练数据非常的耗时耗力,成本很高,所以可以使用无监督学习。
HMM 算法中的无监督学习算法经典的是 Baum-Welch 算法,它的核心是 EM 算法,即对含有隐变量的概率模型进行极大似然估计。
-
Baum-Welch 算法推导
-
E 步:
对观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),状态序列 S = ( s 1 , s 2 , . . . , s T ) S=(s_1,s_2,...,s_T) S=(s1,s2,...,sT),那么数据的对数似然函数为 log P ( O , S ∣ λ ) \log{P(O,S|λ)} logP(O,S∣λ)
且 P ( O , S ∣ λ n e w ) = π s 1 b s 1 ( o 1 ) a s 1 s 2 b s 2 ( o 2 ) . . . a s T − 1 s T b s T ( o T ) P(O,S|λ^{new})=π_{s_1}b_{s_1}(o_1)a_{s_1s_2}b_{s_2}(o_2)...a_{s_{T-1}s_T}b_{s_T}(o_T) P(O,S∣λnew)=πs1bs1(o1)as1s2bs2(o2)...asT−1sTbsT(oT)
Q 函数为: Q ( λ n e w , λ o l d ) = ∑ S log P ( O , S ∣ λ n e w ) P ( S ∣ O , λ o l d ) = P ( S ∣ O , λ o l d ) ⟮ ∑ S log π s 1 + ∑ S ∑ t = 1 T − 1 log a s t s t + 1 + ∑ S ∑ t = 1 T log b s t ( o t ) ⟯ \begin{aligned} Q(λ^{new},λ^{old})=&\sum_{S}\log{P(O,S|λ^{new})}P(S|O,λ^{old})\\ =P(S|O,λ^{old})\lgroup&\sum_{S}\log{π_{s_1}}+\sum_{S}\sum_{t=1}^{T-1}\log a_{s_ts_{t+1}}+\sum_{S}\sum_{t=1}^{T}\log b_{s_t}(o_t)\rgroup \end{aligned} Q(λnew,λold)==P(S∣O,λold)⟮S∑logP(O,S∣λnew)P(S∣O,λold)S∑logπs1+S∑t=1∑T−1logastst+1+S∑t=1∑Tlogbst(ot)⟯
-
M 步:
极大化 Q 函数 Q ( λ n e w , λ o l d ) Q(λ^{new},λ^{old}) Q(λnew,λold) 求模型参数 A , B , Π A,B,Π A,B,Π
因为要极大化的参数分别独立存在于三项中,所以可以对各项分别极大化。
1)对于第一项
∑ S log π s 1 P ( S ∣ O , λ o l d ) = ∑ s = 1 N log π s 1 P ( s 1 = s ∣ O , λ o l d ) \sum_{S}\log{π_{s_1}}P(S|O,λ^{old})=\sum_{s=1}^{N}\log{π_{s_1}}P(s_1=s|O,λ^{old}) ∑Slogπs1P(S∣O,λold)=∑s=1Nlogπs1P(s1=s∣O,λold)
注意到 π s π_s πs 满足约束条件 ∑ s = 1 N log π s 1 = 1 \sum_{s=1}^{N}\log{π_{s_1}}=1 ∑s=1Nlogπs1=1,利用拉格朗日乘子法,写出拉格朗日函数:
∑ s = 1 N log π s 1 P ( s 1 = s ∣ O , λ o l d ) + γ ⟮ ∑ s = 1 N log π s 1 − 1 ⟯ \sum_{s=1}^{N}\log{π_{s_1}}P(s_1=s|O,λ^{old})+γ\lgroup\sum_{s=1}^{N}\log{π_{s_1}}-1\rgroup ∑s=1Nlogπs1P(s1=s∣O,λold)+γ⟮∑s=1Nlogπs1−1⟯
对其求偏导并令其等于 0,得: P ( s 1 = s ∣ O , λ o l d ) + γ π s = 0 P(s_1=s|O,λ^{old})+γπ_s=0 P(s1=s∣O,λold)+γπs=0
对 s 求和得到 γ = − P ( O ∣ λ o l d ) γ=-P(O|λ^{old}) γ=−P(O∣λold),将此结果代入原式可得:
π s = P ( s 1 = s ∣ λ o l d ) P ( O ∣ λ o l d ) π_s=\frac{P(s_1=s|λ^{old})}{P(O|λ^{old})} πs=P(O∣λold)P(s1=s∣λold)
2)对于第二项用同样方法可得
a s j = ∑ t = 1 T − 1 P ( O , ∣ s t = s , s t + 1 = j , λ o l d ) ∑ t = 1 T − 1 P ( O , s t = s ∣ λ o l d ) a_{sj}=\frac{\sum_{t=1}^{T-1}P(O,|s_t=s,s_{t+1}=j,λ^{old})}{\sum_{t=1}^{T-1}P(O,s_t=s|λ^{old})} asj=∑t=1T−1P(O,st=s∣λold)∑t=1T−1P(O,∣st=s,st+1=j,λold)
3)对于第三项,需要注意的是,只有在 0t = vk 时 bj(ot) 对 bj(k) 的偏导数才不为 0,以 I ( o t = v k ) I(o_t=v_k) I(ot=vk) 表示。接下来使用同样方法可得
b j ( k ) = ∑ t = 1 T P ( O ∣ s t = j , λ o l d ) I ( o t = v k ) ∑ t = 1 T P ( O ∣ s t = j , λ o l d ) b_j(k)=\frac{\sum_{t=1}^{T}P(O|s_t=j,λ^{old})I(o_t=v_k)}{\sum_{t=1}^{T}P(O|s_t=j,λ^{old})} bj(k)=∑t=1TP(O∣st=j,λold)∑t=1TP(O∣st=j,λold)I(ot=vk)
-
以上则将 λ 的各参数求出。
-