机器学习 —— 概率图模型(Homework: CRF Learning)
概率圖模型的作業(yè)越往后變得越來越有趣了。當(dāng)然,難度也是指數(shù)級別的上漲啊,以至于我用了兩個周末才完成秋名山神秘車牌的尋找,啊不,CRF模型的訓(xùn)練。
條件隨機(jī)場是一種強(qiáng)大的PGM,其可以對各種特征進(jìn)行建模,同時可以使用隨機(jī)梯度下降算法進(jìn)行訓(xùn)練,訓(xùn)練的結(jié)果就是PGM中那些定義變量交互方式的參數(shù)。
1、LR模型的訓(xùn)練
LR模型可以看作是CRF模型的低配版,在完全不定義隨機(jī)變量交互,只考慮P(Y|X)的情況下,得到的就是LR模型。其數(shù)學(xué)表達(dá)如下:
這里theta是參數(shù),X是特征也是像素值,該形式成為Logistic Regression。訓(xùn)練的本質(zhì)是針對theta在訓(xùn)練集上進(jìn)行優(yōu)化,使得 P_trainSet 的概率達(dá)到最大,P_trainSet = P_data1*P_data2.......*P_datan,用公式表達(dá)可以寫作:
這里連乘的形式并不利于我們分析,所以可以對目標(biāo)方程取負(fù)對數(shù)——nll。同時將最大化問題轉(zhuǎn)為最小化問題。
函數(shù)求最小值只要沿起梯度方向改變自變量即可,所以這里使用梯度下降法來求取目標(biāo)函數(shù)的最小值。所以,使用梯度下降法來訓(xùn)練核心有就是——找到梯度的表達(dá)式??
對于LR模型來說,其梯度有著非常優(yōu)雅的解析解,見之前博客。
解決了梯度表達(dá)式之后,還有一個核心問題就是過擬合,這里可以用L2-norm來強(qiáng)迫參數(shù)趨近于0.參數(shù)趨近于0就代表弱化特征作用。特征被弱化了模型就無法貼近YLabel了。L2-norm的參數(shù)Lamda是詩出來的。此時使用的是矯正集,不能使用訓(xùn)練集。
LR模型只是小小的熱身。關(guān)鍵是CRF的建模與訓(xùn)練。
2、CRF的訓(xùn)練
拿到CRF的訓(xùn)練對象的時候我是一臉濛逼的。既沒有概率圖,也沒有團(tuán)樹圖。只有模型參數(shù)和訓(xùn)練集。CRF的數(shù)學(xué)表達(dá)見之前博客。從程序設(shè)計的角度,要做的是由CRF模型參數(shù)生成FeatureSet.模型參數(shù)如下:
1、隱性節(jié)點的狀態(tài)card;2、觀測節(jié)點的狀態(tài)card。 除了模型參數(shù)之外,還需要定義模型交互方式(PGM factors),以O(shè)CR為例,模型有三種交互方式:1、Yi-Yi:表達(dá)了每個標(biāo)簽本身的概率。2、Yi-xi:對于給定像素位置Yi的概率。3、Yi-Yi+1:相鄰標(biāo)簽各取某值的概率。由此可針對訓(xùn)練集中的每個數(shù)據(jù)生成CRF模型。雖然不同數(shù)據(jù)的模型是相似的(共享theta),但是其本身結(jié)構(gòu)存在差異(單詞長度不同)。
實際上,每個feature的本質(zhì)是 最終的table CPD 里的一個assignment. 而每個exp( fi*theta ),則是其中的val。所以 ? feature -- theta 和 table CPD 是聯(lián)系在一起的。 所以這里也很好理解為什么一個theta可以對應(yīng)多個feature. 因為CPD在概率圖節(jié)點之間是復(fù)制的!(回憶一下遺傳模型,遺傳模式就是CPD,遺傳模式在所有變量(人)之間不斷復(fù)制....)CPD的復(fù)制就相當(dāng)與feature的theta share.?
這里假設(shè)L2-norm的lamda是已知的。并且模型采用L2-norm。所以,核心的任務(wù)就是針對訓(xùn)練集中的每對數(shù)據(jù),找到grad,然后整個模型按照grad下降尋找最合適的一組theta.求grad的理論分析不贅述,這里只從算法實現(xiàn)的角度來研究。為獲得grad和cost,我們一共有5個量需要求:
2.1 LogZ
LogZ的計算是全局最難的。其數(shù)學(xué)表達(dá)如下:
其需要對所有Y的取值求和。這代表要對 x 對應(yīng)的所有可能的標(biāo)簽求和。換言之,要對最終聯(lián)合分布CPD的val進(jìn)行求和。如果是一個長度為7的單詞,那就是26^7個數(shù)據(jù)求和。這顯然是不現(xiàn)實的此數(shù)目多過太陽系里所有的星球。。。這里的第一個trick是利用團(tuán)樹標(biāo)定算法求取Z.
exp(XXXX)求的是整體概率(每個exp(fi*theta)是一個val),連乘是聯(lián)合分布。團(tuán)樹算法中,每個消息 u 都是對之前變量進(jìn)行邊際化之后得到的。假設(shè)有一個3節(jié)點的團(tuán)樹鏈,團(tuán)中分別有變量x1x2 ,x2x3, x3x4. 那么消息傳遞可以有以下形式:
u12?=?Σ1Φ1?? ?
u23?=?Σ2Φ2?*??u12? ?= ?Σ2Φ2?*?Σ1Φ1 ?=?Σ12 ?Φ2?Φ1?
u32?=?Σ4Φ3??
重點在于?Σ3 u32*u23?=?Σ1234 Φ2?Φ2?Φ1? = Z
從定性上而言,消息攜帶了兩邊全部的信息,所以一條邊上兩個方向的消息攜帶了整個概率圖中的信息。注意,這里的消息不能歸一化,而團(tuán)樹標(biāo)定中,消息必須歸一化才能傳遞。
2.2 Model Expected feature Count
第二個難點在于模型feature count的計算。
對于每次梯度計算,我們手上都有一套完整的模型。模型的特征是一個指示函數(shù),只要模型里有該特征,f取值都是1。ΣP*f 表達(dá)了當(dāng)前模型對這些特征的肯定程度。f 是 table CPD的一個assignment,所以其 var , assignment 會對應(yīng)一個特定的概率,也就是P。這里要算概率,似乎又要求那個26^7的聯(lián)合分布了,然而并不是。由于特征本質(zhì)是一個factor的assignment,而之前我們已經(jīng)得到了標(biāo)定好的團(tuán)樹模型,只需要在單個團(tuán)樹里求取Y'assignment對應(yīng)的概率即可。因為clqiue的scope肯定要比feature大!!!
這里比較trick的是,形式上,一個特征不止出現(xiàn)一次(意義不同)。比如說相鄰的兩個Y,取值分別為ab,這本質(zhì)上是一個特征,只對應(yīng)一個theta。但是這里的theta是share的。所以計算時必須把所有對應(yīng)相同theta的f 都算進(jìn)來。其數(shù)學(xué)表達(dá)式應(yīng)該修正為:
2.3 Data Count
Data Count 則是一個和數(shù)據(jù)有關(guān)的量了,表達(dá)了特征(shared)在當(dāng)前數(shù)據(jù)中是否出現(xiàn),是則置1,否則置0.
3、總結(jié)
條件隨機(jī)場的訓(xùn)練中真的充滿了trick,通過此次作業(yè),我加深了對Representation, Inference, Learning 的理解。
最后,今天是母親節(jié)~~親愛的老媽節(jié)日快樂~
轉(zhuǎn)載于:https://www.cnblogs.com/ironstark/p/5471387.html
總結(jié)
以上是生活随笔為你收集整理的机器学习 —— 概率图模型(Homework: CRF Learning)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Davinci及U-boot的一些介绍
- 下一篇: 软件开发之文档的重要性