詳細推導HMM算法+直觀例子+項目應用(二):forward算法與backward算法
HMM模型介紹
本文將幫您深入淺出的徹底理解HMM模型架構和其中用於參數估計的forward算法與backward算法,全文閱讀大約需要10分鐘,如果您希望親自手推公式,則總耗時約20分鐘。
本文爲HMM系列的第二篇,第一篇請見
RNN的開端!最詳細推導HMM算法推導+例子(一):維特比算法和模型建立
本文爲貪心學院課程的學習筆記,講師爲李文哲博士。
閱讀本文需要概率論中的概率相關與不相關的基礎知識。
HMM參數估計
在第一篇文章中,我們介紹瞭如何通過complete case,即已知所有參數的情況下,求解維特比算法,從而獲得隱藏狀態z的序列。
現在我們將介紹,如何通過incomplete case轉換成complete case,算法即是forward算法和backward算法,分別簡稱爲F算法和B算法。
FB算法的目標和拆分
Forward and Backward算法目標:計算P(|x)
拆分成兩個算法:
F算法:P()聯合概率
B算法:P(| )
接下來對這兩個概率進行一點處理:
- p(zk|x)正比於p(zk,x),只差常數項
- P(| ),希望知道條件獨立從而簡化P。條件獨立要求x1到k的全部信息全包含到了zk上,假設xk+1和x1到k條件獨立於zk。
根據D-seperation判斷出無關,則P(| )可做如下簡化:
同理P(zk|x)也可以做簡化:
實際項目應用:Change Detection
假設通過HMM,在風控裏關心組團記賬,風險的東西,那麼需要知道,在哪些時間節點裏,網絡結構經過了很大變化,變化的時候就存在風險
方法1:直接比較網絡圖之間的相似度,如果相似度小於某個閾值,那麼久說明網絡經過了很大的變化
方法2:HMM模型法,隱式變量無法觀測到,能觀察到的是網狀結構,現在想知道那些地方出現了很大的變化。現在未必計算相似度,而是計算不同狀態下,生成網狀圖的可能性,用0,1序列表示狀態,0表示好,1表示風險高
只要評估是否超過閾值,就能知道k到k+1是否發生了突變。爲了計算,可用FB算法
Forward算法詳解
在計算時,用遞歸的思想,想拆分成子問題乘以某個數。
則先邊緣化,再提取:
右邊的式子目前仍然比較複雜,希望進一步簡化
其中,p(zk|zk-1,x1:k-1)很好算,第三個式子很像生成概率,接下來只要確認條件獨立,進行拆分
考慮概率獨立性,判斷zk是否依賴於zk-1和前面x1:k-1?
顯然是的,zk和x1:k-1條件獨立,因爲x1:k-1已經把一切都傳給了zk-1,因此把x1:k-1劃掉
同理,一旦包含zk,沒必要包含zk-1和前面一系列x
分別是:子問題+A矩陣可算+B矩陣可算,則此刻可以遞歸計算
同時注意 base case,即初始是什麼
Forward算法結束
Backward算法詳解
目標:計算和F算法相反的p(xk+1:n|zk),同樣希望拆分成子問題
同樣進行展開和提取
仍然採用邊緣化性質,zk和zk+1之後的xk+1:n無關
與F算法相反,從後往前算
該算法的複雜度:O(n*m2)
至此,forward和backward算法結束,HMM模型中我們獲得了概率。