背景
年初買了一份機器學習的課程,學了一半中斷了。半年過去了,想著不能半途而廢,而 AI 前途無量,還是要繼續學習的,七月中旬撿起來繼續。
學習 HMM 的計算問題及其解決演算法時,在沒有機率基礎知識的情況下,看得相當吃力。斷斷續續,反覆推導,終於搞清楚了公式的前因後果。這裡總結一下一些資料裡面省略掉的推導過程,而那些才是初學者理解過程的重要部分。
HMM 計算問題已知:HMM 的模型引數 λ =[A,B,π] 和觀測序列 Q={ q1,q2 , q3 ,…, qT }計算:模型引數 λ下觀測到序列 Q 出現的機率 P(Q|λ)
條件機率公式P(A|B)=P(AB)/P(B)條件機率是指事件 B 發生的條件下事件 A 發生的機率,即事件 AB 同時發生的機率佔事件 B 發生的機率比。
關聯案例:2017 年的一道軟考題目,假設某專案風險列表中,風險分為一、二、三級佔10%、30%、60%,專案經理小李隨機抽查一個風險等級情況,結果不是一級風險,則本次抽查到三級風險的機率是(2/3)。
解析:求此次抽到三級的機率,已知條件是此次抽到的不是一級,說明是三級和二級,那麼總機率就是 0.3+0.6,而三級在這個總的比例是 0.6/0.9 。
這個解釋比較清楚,但它並不是條件機率的直接應用,只是佔比分母的值跟條件機率的分母類似。並不是全機率 1 ,而是發生指定事件的機率。看條件機率的時候想起當年參加考試的這道題目了,順便分析了一下。
全機率公式全機率公式的定義為:
獨立事件 Bi 是一組事件,複雜事件 A ,被獨立事件 B 完整劃分。那麼可以將求事件 A 的機率轉換為求每個獨立事件 Bi 和 A 的聯合機率的累和。即:B1、B2、B3…Bn ,它構成一個一個完備的事件組,是一個全集。則對於任一事件 A ,有:P(A)=P(AB1)+P(AB2)…+P(ABn) = ∑P(ABi) ,i=1,2,…n 。
全機率公式,它是機率論中的重要公式,它將對複雜事件 A 的機率求解問題,轉化為在不同情況下發生的簡單事件 Bi 的機率和。即:我不知道事件 A 的機率,但是我知道所有事件 B 發生時 A 發生的機率,那麼累加就能間接得到事件 A 的機率了。
聯合機率公式聯合機率是指多個條件同時發生時的機率,可以轉換為條件機率,聯合機率的公式為:P(AB)=P(A)P(B|A)
即:A、B 事件同時發生的機率等於事件 A 發生的機率乘以 事件 A 發生的情況下 B 發生的條件機率。
那麼全機率公式就轉換為計算每個事件 Bi 發生時 A 發生的條件機率和:P(A)= ∑P(ABi)=∑P(Bi)P(A|Bi)
直接計算法直接計算法就是直接求解計算問題的條件機率 P(Q|λ) ,需要先根據全機率公式進行一下轉換。轉換過程的理論依據是:狀態序列事件 I={i1,i2,…,iT} ,由於所有的狀態序列構成了一個完整的事件,那麼求觀測序列的條件機率,就可以轉換為所有狀態序列 I 和觀測序列 Q 的聯合機率和。
即:P(Q) = ∑P(Q,I ) , 是所有的所有長度為 T 的狀態序列的聯合機率和。所以,P(Q|λ) = ∑P(Q,I |λ) = ∑P(Q| I,λ)P(I|λ),模型引數下狀態序列 I 發生的機率,乘以狀態序列 I 和 模型引數同時發生時觀察序列出現的機率。
前向機率公式及推導過程1.前向機率定義給定 λ,定義到時刻 t ,部分觀測序列為 q1,q2,…,qt 且狀態為 si 的機率為前向機率。記作: αt(i) = P(q1,q2,…qt,st=si | λ)。
2.前向機率的初始條件根據定義,第一個時刻的前向機率是 α1(i)=P(q1,s1=si| λ) ,給定觀察模型下,第一個時刻的狀態為 Si 且觀測結果為 q1 。這個值很容易用 HMM 的引數模型的計算出來:α1(i) = πi * bi(q1)。
即:“初始狀態為 Si 的機率 ” 乘以由狀態 i 得到觀察值 q1 的觀測轉義機率。
3.前向機率的遞推公式前向遞推,就是從第一個時刻 α1(i) 值,向前推導,計算出 αT(i) ,再將 T 時刻的所有狀態累加就得到 HMM 計算問題的解。
遞推的核心是根據 t 時刻的前向機率的定義,引入 t-1 時刻的狀態,再根據聯合機率和全機率計算公式,得到 t 時刻和 t-1 時刻的前向機率之間的遞推關係。
4.前向機率遞推過程這是我在簡書上看到的一個遞推計算公式,HMM 計算問題 原文只有黑色的公式,沒有每一步的縮減依據。
我們看下推導過程:
第一行,是公式的基本定義;第二行,是聯合條件的機率公式,N 個事件的聯合機率,轉換為前 N-1 個事件的聯合機率乘以前 N-1 個事件發生時,第 N 個事件發生的條件機率;第三行,是根據 HMM 的獨立觀測假設,消掉對 t 時刻的觀測結果無關的 q1-q2-…qt-1 個事件後的結果;第四行,是根據全機率公式,引入 t-1 時刻的狀態後,將原來的 t 時刻的前向機率就轉換為 t-1 時刻的所有狀態的聯合機率和;第五行本質上跟第二行用的原理是一樣的,聯合機率轉換為條件機率;中間消掉了對 t 時刻的狀態產生無關的條件 q1,q2…qt-1 ,最後得到一個簡略結果;第六行,就是再次根據前向機率的公式,以及 HMM 的模型引數的關係,最終得到 t 時刻和 t-1 時候的遞推關係。這樣的話,前向機率演算法就轉換為一個初始值和一個遞推公式,就可以用程式碼來實現這個過程了!
啟示錄這次學習經歷的感悟是:不能只結合一份資料進行學習,就相關關鍵字多蒐集一些補充資料、多看看,相互碰撞、取長補短,對於學習這些包含一些自己不知道的理論知識的內容,不失為一種可借鑑的方法。
購買的教程,有些過程描述的比較簡單,搜到一篇比較詳細的 HMM 計算問題,整整十頁紙,打印出來,對比教程一起學。算是搞清楚了理論知識!