今天是2020年6月14號星期日。從這篇開始,釋出時間就正常了。前邊的文章是在寒假寫好的,後來因為趕進度和整理小論文,沒有及時整理。3月到6月,兩個半月的時間做了些什麼?真的好怕浪費了時間~《統計學習方法》這本書(第二版),大概在四月底就看個差不多了,半生不熟的好歹是通篇過了一遍,當然不止一遍,除了潛在狄利克雷分配。期間夾雜著手撕程式碼的過程,因為腦容量有限的原因,寫程式碼的時候,又要把書面內容重新過一遍。就連發布,也要重新過一遍,把重要的地方加上不同顏色...於是這個假期,《統計學習方法》這本書的每個章節,不知道反反覆覆的過了多少遍,肯定不超過十遍...也就是看的多,不代表學的多...但是看了總歸是看了,也比不看強...
CRF條件隨機場~本節說難,挺難;說簡單,也簡單。為什麼我覺得CRF和LR很像呢?可能有很多人在應用場景上反駁我,LR做資料分類問題,CRF是針對序列標註問題。我覺得像,提供一下幾個觀點(遞進著看):
1.LR和CRF都是判別模型。這句話要從計算方式上來理解:LR是通過線性函式,對特徵向量擬合不同的權值,最後加和的線性函式值作為sigmoid函式的輸入,轉換為概率值(對數機率)。CRF在公式(11.10)中,不,在更明顯的公式(11.15)中,wkfk(y,x)對1->K加和。個人膚淺的理解:公式(11.15)就是對各個特徵擬合不同的權值wk,加和的線性函式值作為某個“求概率公式”的輸入。
2.從觀點1出發,思考一下“特徵”。在LR中,“特徵”很明顯,就是特徵向量的各個分量,相當於一個分量一個特徵。LR擬合的w,其實就是看看每個特徵分量對分類結果佔什麼樣的貢獻。在CRF中,“特徵”是定義在最大團上的,拋去“最大團”“勢函式”“特徵函式”這些抽象概念,CRF的“特徵”其實不就是定義在相互聯絡的兩個節點上嘛?相當於“成對”構成一個特徵。轉移特徵也好,狀態特徵也罷,線性鏈條件隨機場不就限定了“特徵”要產生在“成對”的關聯關係上。然後,公式(11.15)告訴我,[權值×特徵==》加和],CRF和LR計算線性函式值的方式沒區別啊(區別在特徵的定義上)。
3.從觀點1出發,思考一下“概率的計算”。不知道大家有沒有仔細思考LR中,第六章公式(6.6)分母位置的1是怎麼計算的,或者為什麼要在分母新增這一項。是不是可以理解為exp(0*wx)=1,這樣能夠把分母作為歸一化項Z(x)看待。分母的1+exp(wx)看作Z(x)=exp(0*wx)+exp(1*wx),P(Y=1|x)=exp(1*wx)/Z(x),另一個類別Y=0的概率P(Y=0|x)=exp(0*wx)/Z(x),怎麼樣,香不香?這裡不就是兩個項的線性函式值進行了指數歸一化。在這個角度上,看CRF的概率計算方式,公式(11.15)和公式(11.16)不就是多了幾項嘛...多個項(K項)進行了歸一化,把數值轉換成了概率值,這這這,和softmax()指數歸一化不就是一回事嘛...然後再考慮考慮為什麼CRF中勢函式是嚴格正的...
暫時先這三點,實際上都是圍繞[判別模型]提出的。
GitHub:https://github.com/wangzycloud/statistical-learning-method
條件隨機場
引入
書中對條件隨機場CRF的描述是:給定一組輸入隨機變數條件下另一組輸出隨機變數的條件概率分佈模型,其特點是假設輸出隨機變數構成馬爾可夫隨機場。先拋去“輸出隨機變數構成馬爾可夫隨機場”這個限定條件不看,該模型是條件概率模型,並且是一組隨機變數,在另外一組隨機變數條件下的條件概率模型。
組這個概念,限定了模型中發生作用的因素要產生在多個隨機變數上。類似這樣,形象不(僅代表個人理解哈~不能保證正確):
像示意圖中表示的,如果一組隨機變數之間,關係是散亂無序的,我們該怎樣求解呢?各個組上隨機變數的關係都發現不了,何談尋找A組在B組條件下的條件概率分佈?因此,考慮對輸出組的隨機變數施加限定條件。人類最常做的就是發現規律,總結經驗。比如說,讓輸出組的隨機變數兩兩之間產生聯絡,會不會簡化問題?
於是,模型變成了這樣。又或者,讓輸入組隨機變數和輸出組隨機變數,都變成序列關係。這時,問題變成了由輸入序列對輸出序列預測的判別模型。具體的,讓輸出組隨機變數構成馬爾可夫隨機場。需要的知識包括圖與無向圖、馬爾可夫性、無向圖模型的因子分解、團與最大團...
概率無向圖
概率無向圖模型,又稱為馬爾可夫隨機場,是一個可以由無向圖表示的聯合概率分佈。“馬爾可夫隨機場”正式出場了,簡單講它是一個聯合概率分佈,是由無向圖表示的。想象無向圖的樣子,由結點和邊構成,且邊沒有方向(無箭頭)。深入一點,一個結點表示一個隨機變數,如果兩個結點之間有邊關聯,就認為這兩個結點具有關聯關係,並且是“相互關聯”(無向邊),相互產生影響。
可以看到,“有向變無向”這個操作,讓限定條件變的更寬泛了,也就是讓CRF的應用場景增多。當然,無向圖不只是上圖的線性序列關係。根據馬爾可夫性的不同,概率無向圖模型也有很多種類。接下來由圖開始,具體介紹一下模型的定義。
看一下馬爾可夫性,我的理解是這樣:在無向圖G上給定Cs(與集合C有關的一堆結點),As和Bs條件獨立。As和Bs之間沒有邊關聯,就算利用Cs作為結點把As和Bs連線了起來,兩者仍然保持獨立關係。
有三種型別,分別是成對馬爾可夫性、區域性馬爾可夫性、全域性馬爾可夫性,具體定義較晦澀。如下:
由以上馬爾可夫性,概率無向圖模型定義為:
有了概率無向圖的定義,實際上我們更關心的是如何求解各個隨機變數的聯合概率分佈。那麼,對給定的概率無向圖模型,我們能不能找到將整體的聯合概率寫成若干個子聯合概率的乘積的方法?也就是將聯合概率進行因子分解(類似:6=2×3,整數6可以分解成因子2乘以因子3),就能方便模型的學習與計算了。事實上,概率無向圖模型最大的特點就是易於因子分解。這裡留幾個疑問,“整體的”變成若干個“子聯合概率的”這句話,子聯合概率我不是可以理解成“子集”的,這個子集要如何劃分?我們知道,圖結構動不動就會像漁網一樣,橫七豎八的全是連線邊。
另外,聯合概率的因子分解,不僅要能解決無向圖上劃分小子集的問題,還要保證各個小子集乘積的聯合概率要等於整體的聯合概率。
這裡劃分小子集的問題,由無向圖上的“最大團”解決的,定義如下:
例子中描述的,應該是挺清楚的,最大團中的任何兩個結點均有邊連線。於是,概率無向圖模型的聯合概率分佈可以表示為其最大團上的隨機變數的函式的乘積,這種操作稱為概率無向圖模型的因子分解。接下來,考慮聯合概率如何計算。
不管整體的聯合概率也好,子集的聯合概率也好,無非是表示一大撮和一小撮隨機變數的區別。問題在於,這個東西它是概率啊。怎麼在圖結構上體現概率啊...公式(11.15)和公式(11.16)給出了答案,對每個Yi(N個狀態序列中的一個序列Yi)求分值,將各個“得分”歸一化後的結果作為該無向圖Yi的聯合概率。實際上也就是每一個無向圖Yi是所有狀態序列中的一種情況,這個Yi的得分佔所有情況的比例,就認為是Yi的聯合概率。
這裡Yi的得分,是如何反映的呢?可以從公式(11.15)看出,圖中所有最大團上各個最大團勢函式的乘積,作為Yi的得分。
串到CRF特徵抓取的過程中,我認為這裡的勢函式,就是抓取最大團集合中的結點特徵,並且是各個結點之間的關聯特徵。由於訓練過程中擬合引數wk,所以這裡只需要將每個特徵作為正的“量”就可以了。勢函式僅作標示“特徵”的度量(metric),擬合的wk決定該特徵對“得分”影響的正負、大小程度(對應開頭的觀點3)。
現在利用的這種方式,不是空穴來風,是有定理來保證的:
條件隨機場的定義與形式
條件隨機場是給定隨機變數X條件下,隨機變數Y的馬爾可夫隨機場。我們要用到的CRF指的是定義線上性鏈上的特殊的條件隨機場,稱為線性鏈條件隨機場。一般情況下,在條件概率模型P(Y|X)中,Y是輸出變數,表示標記序列;X是輸入變數,表示觀測序列。這裡,我們也把標記序列稱為狀態序列。在學習時,利用訓練資料通過極大似然估計或正則化的極大似然估計得到條件概率模型;預測時,對於給定的輸入序列x,求出條件概率模型最大的輸出序列y。
我認為在給定輸入序列X的條件下,計算輸出序列Y的條件概率(且序列Y構成線性鏈條件隨機場)的場景是與圖11.4相符合的。文中描述的,現實中一般假設X和Y有相同的圖結構,形如圖11.5這樣,這就好像對模型進行了簡化,讓模型更容易實現。換一個角度看,圖11.4中的X表達的是輸入序列整體對輸出序列Y的影響,具體到如何產生影響,如圖11.5表達的這樣,輸入序列X的每個分量Xi,與相同時刻的Yi相互影響。
這裡留兩個疑問,(Xi,Yi)的相互影響關係,會不會傳遞到t時刻?與時刻t有沒有關係?
看一下線性鏈條件隨機場的具體定義:
圖示如下,公式(11.9)實際上表達了:馬爾可夫性規定Yi(Y3)只與相鄰的結點有關聯關係(藍框代表等式左側,紅框代表等式右側)。
根據定理11.1,可以給出線性鏈條件隨機場P(Y|X)的因子分解式,各因子是定義在相鄰兩個結點(最大團)上的勢函式。兩個疑問的解答,相信後面部分的描述中可以找到答案。接下來看一下條件隨機場的三種形式。
1)條件隨機場的引數化形式
該基本形式,表示給定輸入序列x,對輸出序列y預測的條件概率。實際上現在的具體定義,就是把最大團、勢函式、概率求解等概念落實下來,變成可以量化的東西。公式(11.11)為歸一化項,相當於把Y的每種情況(各種Y序列)考慮到,作為求概率時的分母(每種情況下,各個得分加和)。在某個情況Y下,計算該Y的概率,需要先得到所有勢函式構成的特徵和,也就是“得分分值”。
這裡的特徵來自兩部分,yi-1與yi橫向上的轉移特徵tk(·)和yi與x豎向上的狀態特徵sl(·)。
看一下具體定義:
這裡tk和sl的取值,類似於最大熵模型中特徵函式的定義。我的理解,取1或者0,是標記這個特徵有還是沒有。至於此時該特徵的貢獻是大是小,是正是負,這取決於模型訓練時擬合的引數情況(λ、μ)。
舉個例子,看下計算時的具體過程:
該標記序列y=(y1,y2,y3)的非規範化概率,實際上就是通過存在的特徵×對應權重,然後加和。符合[權值×特徵==》加和]這個方式。
2)條件隨機場的簡化形式
注意到條件隨機場公式(11.10)中同一個特徵在各個位置都有定義,可以對同一個特徵在各個位置求和,從而將區域性特徵轉化為一個全域性特徵函式。這樣就可以將條件隨機場寫成權值向量和特徵向量的內積形式,也就是現在要描述的簡化形式。實際上,這更進一步貼近了[權值×特徵==》加和]這種方式。
如上圖所示,假設每個位置i都有這個區域性特徵(沒有該特徵的話,特徵值為0),每個i都要針對這一個區域性特徵求一個引數,這個工作量似乎有點大,並且重複。那麼,是不是可以把該區域性變數上升到全域性特徵,每個區域性位置特徵值加和,讓這一個特徵在全域性上學習一個權重引數。一來減少沒必要的引數估計,二來可以把重點放在“特徵”的增加和估計上。
這裡公式(11.13)表明了全域性特徵是通過各個位置i的區域性特徵加和得到的。
接下來,用向量形式進行表示:
這樣就得到了條件隨機場的簡化形式。經過知識點細化,再抽象,看CRF公式(11.19)和公式(11.20)和LR中的公式(6.5)和公式(6.6)多像。各個特徵的線性函式值(得分),通過指數歸一化轉化成概率,學習的過程擬合各個引數。
3)條件隨機場的矩陣形式
先看定義:
這裡先記一個要點,對每個標記序列引進特殊的起點和終點狀態標記,這時標註序列的概率Pw(y|x)可以通過矩陣形式表示並有效計算。劃重點:引進特殊起點和重點標記之後,才可以通過矩陣形式計算。
不知道怎麼分析這個地方,現在從以下幾個問題開始:
①公式(11.21)中Mi的下標i和yi的下標i是否表示同一個意思?
我認為這兩個下標i指的不是同一個意思,yi的i表示該矩陣中狀態的取值;Mi中的i表示第i個矩陣,實際上每個位置都有對應的矩陣。同時矩陣的維度是M×M維的,因為yi可以取到M個狀態(yi有M個狀態,yi-1的某個狀態可以轉移到M箇中任意一個,yi-1有M個狀態,所以轉移有M×M種)。例M2(1,3)表示在狀態序列的第2個位置上(t=2),由t=1時刻的“狀態1”轉移到t=2的“狀態3”的非規範化概率。
②Mi中的元素是怎麼計算的,是什麼?
計算方式見公式(11.22)和公式(11.23)。我先想到的是,Mi矩陣為yi-1到yi的轉移矩陣,每個時刻yi都是M種狀態,轉移也都是yi-1到yi這些轉移方式,計算方式都由公式(11.23)計算。那麼,不同的Mi之間的區別是什麼呢。我的理解是針對不同的時刻t、不同的x,特徵函式是否存在和相應的權值大小,決定了Mi不同。
③公式(11.24)的分子部分n+1個矩陣的適當元素的乘積,是什麼?
仔細看一下CRF的簡化形式中公式(11.15)的分子部分,利用公式(11.13)對i進行展開,有:
是不是就變成了公式(11.24)的分子部分n+1個矩陣的適當元素乘積的形式。也就是說,CRF的矩陣形式來源於簡化形式,至於為什麼會有這種方式,我覺得是便於計算吧,下邊前後向演算法會用到這種形式。
④公式(11.25)規範化因子,是什麼?
看上去是對所有序列的非規範化概率的總和。其實追根究底④這個問題是想知道矩陣運算在這裡計算的是什麼。
綜上,條件隨機場矩陣形式的要點有:
以2×2的Mi矩陣為例(例11.2),具體表示如下:
看一下例11.2:
以狀態序列(1,2,1)為例:
解析如下:
接下來看一下求規範化因子的過程:
上面提到的問題④,n+1個矩陣連乘後,得到的結果仍然是M×M維的。但第1行第1列的元素,正好是所有路徑上的非規範化概率之和。
瞭解完概率無向圖、條件隨機場的定義和各種表示方法之後,與隱馬爾可夫模型類似的,接下來介紹條件隨機場的3個基本問題:概率計算問題、學習問題、預測問題。
條件隨機場的概率計算問題
與隱馬爾可夫模型類似,引進前向-後向向量,遞迴的計算概率(遞迴的計算過程是非常不同的)。
先看前向計算過程。注意CRF作為無向圖模型,拋去了HMM的方向性,我們要從矩陣乘法的角度進行分析。仔細看一下公式(11.28),轉換成矩陣語言如下(以m=5為例,這裡將時刻的下標標記為t,用來區分yi的狀態和時刻t:αi->αt,Mi->Mt):
具體到轉換過程中(考慮矩陣乘法的過程):
可以看到,α1t的得出,是結合了t-1時刻各個αi的結果。再來理解一下“αt(yi|x)表示在位置t的標記是yi並且從1到t的前部分標記序列的非規範化概率”這句話,見下圖:
實際上,t時刻α向量中的某一個分量,αi可以視作終點狀態取yi時的非規範化概率,並且這個概率是1->t時刻的整個過程中,所有可能序列的非規範化概率之和(從start到stop所有路徑上的非規範化概率之和)。如圖中,α1t也就是從start=y1到stop=y1過程中,所有可能序列的非規範化概率之和。因此,每個αi是start=y1到stop=yi的規範化因子Zi。這樣就能看出與HMM特別不同了,一個應用矩陣乘法,一個應用條件概率公式。
我理解的大概就是這個樣子,不知道能不能寫清楚,接下來看下後向演算法的計算過程。從公式(11.31)開始:
具體到轉換過程中(考慮矩陣乘法的過程):
於是,βt(yi|x)可以表示從t時刻yt:start=y1到yn+1:stop=y1,所有路徑上的非規範化概率之和(共T-t個結點狀態的序列)。前向演算法也好,後向演算法也好,這裡的箭頭指向僅表示乘的方向,不是有向圖結構。
與HMM類似的,接下來看幾個概率計算。
公式(11.32)和公式(11.33)還是好理解的,看一下示意圖:
通過示意圖,先來看一下Z(X),Z(X)既可以通過前向向量,又可以通過後向向量來求。實際上,不管前向向量αn也好,後向向量β1也好,Z(X)的計算矩陣過程,實際上是把m個值加和,也就是得到所有狀態序列的規範化因子。
分開看公式(11.32)分子部分,我覺得是兩個值(α、β)進行了相乘。第一個α值,代表了從0時刻start=y1到t時刻stop=yi的非規範化概率;第二個β值,代表了從t時刻start=yi到n+1時刻stop=y1的非規範化概率。公式(11.33)是類似分析方法。
再來看一下幾個期望的計算,就不具體分析了:
條件隨機場的學習問題
學習問題實際上討論的是在給定訓練資料集上估計模型引數的問題。條件隨機場模型實際上定義在時序資料上的對數線性模型(是不是與LR像),學習方法包括極大似然估計等,具體的有改進的迭代尺度法IIS、梯度下降法及擬牛頓法。
具體的方法目前先不弄了(有大概瞭解,但瞭解的程度,不足以寫出來),趕趕刷題的進度去了...等找著工作了,準備畢業的時候再把這些方法整理上~
話說這章的程式碼沒寫,因為不會...不知道從什麼地方下手。
條件隨機場的預測問題
同HMM,大名鼎鼎的維特比演算法。
PASS