標籤:

線性鏈條件隨機場-tutorial(二)

本篇文章內容大部分是根據上篇教程中的模型定義,對《統計學習方法》中相關內容的補充和改寫。

3. 條件隨機場的形式

一般來說特徵函數包括:轉移特徵,依賴於當前和前一個位置;狀態特徵,依賴於當前位置。這兩種特徵是由HMM中轉移概率和發射概率的概念變化推理而來,但實際上只要合理的特徵函數都是被允許的。

這裡我們將根據這兩種特徵,給出一般意義上更類似於HMM的線性鏈條件隨機場的參數化形式,並給出簡化形式及矩陣形式。

3.1 條件隨機場的參數化形式

根據式(2.11)和式(2.12),按照有轉移特徵和狀態特徵兩種特徵函數的情形,令 K = K_1+K_2K_1K_2 分別為轉移特徵和狀態特徵的數目。

此時可以將原來的參數 theta = { theta_k} in mathbb{R}^K 拆分,按照對應特徵函數寫成 theta = {lambda_k, mu_l} 兩部分,其中 1 le k le K_1, 1 le l le K_2 。另外,將不同的特徵函數按照實際類別,用符號區分得到:

 f_k(y_{t-1},y_t,mathbf{x},t) = left lbrace begin{matrix} t_k(y_{t-1},y_t,mathbf{x},t), & k=1,2,cdots,K_1  s_l(y_t,mathbf{x},t), & k=K_1+l;l=1,2,cdots,K_2 end{matrix} right. tag{3.1}

於是我們可以將(2.11)寫成:

P(mathbf{y}|mathbf{x}) = frac{1}{Z(mathbf{x})} prod_{t=1}^T exp left(sum_{k=1}^{K_1}lambda_k t_k(y_{t-1},y_t,mathbf{x},t) + sum_{l=1}^{K_2}mu_ls_l(y_t,mathbf{x},t) right)tag{3.2}

其中,

Z(mathbf{x})=sum_{mathbf{y}} left[ prod_{t=1}^T exp left(sum_{k=1}^{K_1}lambda_k t_k(y_{t-1},y_t,mathbf{x},t) + sum_{l=1}^{K_2}mu_ls_l(y_t,mathbf{x},t) right)right] tag{3.3}

式中, t_ks_l 是特徵函數, lambda_kmu_l 是對應的權值。 Z(mathbf{x}) 是規範化因子,求和是在所有可能的輸出序列上進行的。

式(3.2)和式(3.3)是線性鏈條件隨機場模型的基本形式,表示給定輸入序列mathbf{x},對輸出序列 mathbf{y} 預測的條件概率。式(3.2)和式(3.3)中 t_k 是定義在邊上的特徵函數,稱為轉移特徵,依賴於當前和前一個位置(對應HMM中的轉移概率); s_l 是定義在結點上的特徵函數,稱為狀態特徵,依賴於當前位置(對應HMM中的發射概率)。

t_ks_l 都依賴於位置,是局部特徵函數。通常,特徵函數 t_ks_l 取值為1或0(註:特徵函數可以是任意實值函數),當滿足特徵條件是取值為1,否則為0。

條件隨機場完全由特徵函數 t_ks_l 權值 lambda_kmu_l確定。線性鏈條件隨機場也是對數線性模型(log linear model)。下面看一個簡單的例子。

例1 設有一標註問題:輸入觀測序列為 mathbf{x}=(x_1,x_2,x_3) ,輸出標記序列為 mathbf{y}=(y_1,y_2,y_3)y_1,y_2,y_3 取值於 mathcal{Y}={1,2}

假設特徵 t_ks_l 和對應的權值 lambda_kmu_l 如下:

t_1=t_1(y_{t-1}=1,y_t=2,mathbf{x}, t),hspace{5mm} t=2,3, hspace{5mm}lambda_1=1

這裡只註明特徵取值為1的條件,取值為0的條件省略,即

t_1(y_{t-1},y_t, mathbf{x}, t)=left{ begin{matrix} 1 & y_{t-1}=1,y_t=2, mathbf{x},(t=2,3) 0 & text{其他} end{matrix}right.

下同。

begin{align*} t_2 &= t_2(y_1=1,y_2=1, mathbf{x},2) & lambda_2=0.5  t_3 &= t_3(y_2=2,y_3=1, mathbf{x},3) & lambda_3=1.0  t_4 &= t_4(y_1=2,y_2=1, mathbf{x},2) & lambda_4=1.0  t_5 &= t_5(y_2=2,y_3=2, mathbf{x},3) & lambda_5=0.2  s_1 &= s_1(y_1=1, mathbf{x},1) &mu_1=1.0 s_2 &= s_2(y_t=2, mathbf{x},t),t=1,2 & mu_2=0.5  s_3 &= s_3(y_t=1, mathbf{x},t),t=2,3 & mu_3=0.8  s_4 &= s_4(y_3=2, mathbf{x},3) & mu_4=0.5 end{align*}

求對給定的觀測序列 mathbf{x} ,求標記序列為 mathbf{y}=(y_1,y_2,y_3)=(1,2,2) 的非規範化條件概率(即沒有除以規範化因子的條件概率)。

由式(2.13),線性鏈條件隨機場模型為

P( mathbf{y}| mathbf{x})proptoexp left[ sum_{k=1}^5lambda_ksum_{t=2}^3t_k(y_{t-1},y_t, mathbf{x},t) + sum_{l=1}^4mu_lsum_{t=1}^3s_l(y_t, mathbf{x},t) right]

對給定的觀測序列 mathbf{x} ,標記序列 mathbf{y}=(1,2,2) 的非規範化條件概率為:

begin{align*} P(y_1=1,y_2=2,y_3=2| mathbf{x}) &= expleft[ (lambda_1+lambda_5)+(mu_1+mu_2+mu_4)right] &propto exp(3.2) end{align*}

3.2 條件隨機場的簡化形式(Optional)

這一小節的內容更進一步簡化了條件隨機場的形式,但實際的用處不大。閱讀時注意觀察求和的順序變換,加深對特徵函數的理解。

在第2.2.2節中我們給出了線性鏈條件隨機場的定義,式(2.11)與式(3.2)相比算是一種簡化形式的定義了。但仔細觀察式(2.11),其實還可以進一步進行簡化。

根據式(2.11),將按序列長度連續相乘的符號寫進exp函數內,可得:

begin{align*} p(mathbf{y}|mathbf{x}) &= frac{1}{Z(mathbf{x})} prod_{t=1}^T exp left[ sum_{k = 1}^Ktheta_k f_k(y_{t-1},y_t,mathbf{x},t)right]  &= frac{1}{Z(mathbf{x})} exp left[ sum_{t = 1}^T sum_{k = 1}^Ktheta_k f_k(y_{t-1},y_t,mathbf{x},t)right]  &= frac{1}{Z(mathbf{x})} exp sum_{k = 1}^Kleft[ theta_k cdot sum_{t = 1}^Tf_k(y_{t-1},y_t,mathbf{x},t)right] end{align*} tag{3.4}

對式(3.4)中的指數部分進行簡化,令

f_k(mathbf{y}, mathbf{x}) = sum_{t = 1}^Tf_k(y_{t-1},y_t,mathbf{x},t) tag{3.5}

F(mathbf{y}, mathbf{x}) = (f_1(mathbf{y}, mathbf{x}),f_2(mathbf{y}, mathbf{x}),dots, f_K(mathbf{y}, mathbf{x}))^Ttag{3.6}

由之前的定義,將參數寫成向量形式,即:

theta = (theta_1, theta_2, dots, theta_K) tag{3.7}

於是,條件隨機場(2.11)~(2.12)可表示為

P(mathbf{y}|mathbf{x})=frac{1}{Z_{theta}(mathbf{x})} exp left(theta cdot F(mathbf{y}|mathbf{x}) right)tag{3.8}

Z_{theta}(mathbf{x})=sum_{mathbf{y}} exp left(theta cdot F(mathbf{y}|mathbf{x}) right)tag{3.9}

式(3.8)、式(3.9)即為條件隨機場的簡化形式。如果將式(3.4)中的求和順序調換,最終也可以得到相同形式的簡化版定義,但中間的過程會麻煩一些。

3.3 條件隨機場的矩陣形式

條件隨機場的矩陣形式其實就是一種模型按時序展開,分步計算的形式。類似於對輸入觀測序列 mathbf{x} 的每一個 x_t

  1. 計算出所有的可能情況(根據不同的假設 y_{t-1}y_t 組合情況,計算激活的特徵函數與權值乘積的和),按照一定的順序組成矩陣;
  2. 在所有矩陣計算完成之後,利用這些矩陣可以完成最優序列的求解、 Z(mathbf{x}) 的計算。

假設現有一個線性鏈條件隨機場形式如式(2.11)、式(2.12),用於求給定觀測序列 mathbf{x} ,相應的標記序列 mathbf{y} 的條件概率。引進特殊的起點和終點狀態標記 y_0 = start, y_{T+1} = stop ,這時條件隨機場可以通過矩陣形式表示。

對觀測序列的每一個位置 t=1,2,cdots,T+1 上,定義一個 m 階矩陣( m 是標記的取值個數,包括 startstop ,沒有正式名字,以下我簡稱為單步矩陣

M_t(mathbf{x})=[M_i(y_{t-1},y_t|mathbf{x})] tag{3.10}

M_t(y_{t-1},y_t|mathbf{x}) = exp(W_t(y_{t-1},y_t|mathbf{x}))tag{3.11}

W_t(y_{t-1},y_t|mathbf{x}) = sum_{k=1}^K theta_k f_k(y_{t-1},y_t,mathbf{x},t)tag{3.12}

這樣,給於定觀測序列 mathbf{x} ,某個標記序列 mathbf{y} 的非規範化概率可以通過T+1個矩陣的乘積表示,則該序列的條件概率 p(mathbf{y}|mathbf{x}) 是:

P(mathbf{y}|mathbf{x})=frac{1}{Z_theta(mathbf{x})}prod_{t=1}^{T+1}M_t(y_{t-1},y_t|mathbf{x})tag{3.13}

其中, Z_{theta}(mathbf{x}) 為規範化因子,是T+1個單步矩陣的乘積的 (start,stop) 元素:

Z_theta(mathbf{x})=left( prod_{t=1}^{T+1}M_t(mathbf{x})right)_{start,stop} tag{3.14}

根據特殊定義的起止標記的index的不同,規範化因子可能出現在不同的位置。如《統計學習方法》中,最終得到的矩陣第0行、第0列的元素為規範化因子,而下面這個例子卻不同。

例2 給定如下圖所示的線性鏈條件隨機場,

觀測序列 mathbf{x} ,狀態序列 mathbf{y}t=1,2,3T=3 ,標記 y_t in mathcal{Y} = {1,2} ,假設 y_0=start=0, y_4=stop=3 ,各個位置的單步矩陣 M_1(mathbf{x}), M_2(mathbf{x}),M_3(mathbf{x}),M_4(mathbf{x}) 分別為是

M_1(mathbf{x}) = begin{bmatrix} 0 & a_{01} & a_{02} & 0 0 & 0 & 0 & 0 0 & 0 & 0 & 0 0 & 0 & 0 & 0 end{bmatrix}, ~~~ M_2(mathbf{x}) = begin{bmatrix} 0 & 0 & 0 & 0 0 & b_{11} & b_{12} & 0 0 & b_{21} & b_{22} & 0 0 & 0 & 0 & 0 end{bmatrix}

M_3(mathbf{x}) = begin{bmatrix} 0 & 0 & 0 & 0 0 & c_{11} & c_{12} & 0 0 & c_{21} & c_{22} & 0 0 & 0 & 0 & 0 end{bmatrix}, ~~~~~~ M_4(mathbf{x}) = begin{bmatrix} 0 & 0 & 0 & 0 0 & 0 & 0 & 1 0 & 0 & 0 & 1 0 & 0 & 0 & 0 end{bmatrix}

試求狀態序列 mathbf{y}start 為起點到 stop 為終點的所有路徑的非規範化概率及規範化因子。

: 各個路徑對應的非規範化概率分別是

begin{matrix} & a_{01}b_{11}c_{11},& a_{01}b_{11}c_{12}, & a_{01}b_{12}c_{21}, & a_{01}b_{12}c_{22}  & a_{02}b_{21}c_{11},& a_{02}b_{21}c_{12}, & a_{02}b_{22}c_{21}, & a_{02}b_{22}c_{22} end{matrix}

顯然, a_{01}b_{11}c_{11} 表示的序列為 mathbf{y}_1 = {1,1,1} ,其餘序列可按照按同樣的理解。

而規範化因子,直接利用給定的公式可得:

begin{align*} M(mathbf{x}) &= M_1(mathbf{x})cdot M_2(mathbf{x}) cdot M_3(mathbf{x}) cdot M_4(mathbf{x})  &= begin{bmatrix} 0 & 0 & 0 & Z_theta(mathbf{x}) 0 & 0 & 0 & 0 0 & 0 & 0 & 0 0 & 0 & 0 & 0 end{bmatrix} end{align*}

其中

begin{align*} Z_theta(mathbf{x}) = & a_{01}b_{11}c_{11}+a_{01}b_{11}c_{12}+a_{01}b_{12}c_{21}+a_{01}b_{12}c_{22} &+ a_{02}b_{21}c_{11}+a_{02}b_{21}c_{12}+a_{02}b_{22}c_{21}+a_{02}b_{22}c_{22} end{align*}

具體計算過程可以自行按照給出的單步矩陣,手算得出(算一遍吧,不會失望的)。

推薦閱讀:

台灣大學林軒田機器學習技法課程學習筆記3 -- Kernel Support Vector Machine
通過DARPA項目看看晶元世界的「遠方」- 自動化工具和開源硬體
為什麼現在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上調整的?
需要做聚類、分類、時間序列分析,用什麼工具比較好?

TAG:CRFs | 机器学习 |