昨天剛剛解決了 logistic regression 之后今天又來了個有趣的家伙。 logistic regression 很強大,但是也有它的弱點。它最大的弱點就是只能告訴你是或者不是,而無法告訴你 XX is YY.這對於追求人工智能來說,只能是走出了一小步。在解決 YES/NO 的問題之后,我們還需要解決 WHAT 這個問題。 聰明的計算機科學家(也許是數學家)又設計了一種新的模型,這種模型可以告訴我們 WHAT。也就是 log-linear 模型。
——離真正的人工智能還很遠,或許它是一個科學問題而不是一個工程問題,記我學習 Mechine Learning 的第二天
1、Log-linear
如果要計算機告訴我們WHAT,按照之前的思路,還是應該從概率入手。應該是找到某個模型,模型的輸入是一些信息,模型的輸出是the label在已知信息下的可能性。這個模型里有參數,不同的label對應不同的參數。對於測試目標,我們只要比較它-->model(the para) 后得到的概率,就可以推斷它和哪個label比較配。label應該是有限的。接下來的任務就是找the label 對應的參數。
這組參數應該使 p(y|x;w)達到最大,其中 y 是what:洗衣機,台燈,冰箱、、、、x 是樣本:顏色,形狀,大小,重量,價格,材質......
概念我們有了,接下來就只有一個問題:這個模型長什么樣。既然是個概率模型,那我覺得首先有兩個重要特征:
1.它應該不只一項,最好每項都能表達 <label - 維度> ,樣本有d個維度,這個方程應該有 d 項,畢竟我們總是希望我們的各種樣本維度在計算時不是耦合的。
2.它的取值范圍應該在0~1之間,因為它是概率。
接下來我們就要設計一個有着優良數學性質的模型,畢竟我們還要對參數求導算梯度呢。。。。搞個很復雜的東西怎么行。。。。
首先,這次的方程不再是x一個人的事情,因為y也是多樣的:那么對於某一項應該表示成: Fij(x_i,y_1).
其次,這些項應該是相加關系,我們用權重來控制這一項對 p(y_j|x)的貢獻, 也就是說,這些項的“合成效果”應該表達成 :Wij是各個項的權重.
i = 1:d j=1
∑Wij*Fij(x_i,y_j)
接下來,上面那一堆和的結果都不一定是正的,所以我們首先要保證它大於0,老辦法取指數: exp(∑Wij*Fij(x_i,y_j))
最后,如果再想辦法讓整個東西小於1,那它就基本符合我們的要求了,怎么搞? 顯然,把所有詞性都算一遍再求和,就會大於單個詞性。
實際上,我們拼出來的就是log-linear模型。
那么在給定一個訓練集時,我們要使得the label判斷最准確,應該讓p盡量大。本質上就是讓分子盡量大,我們就有了訓練的目標:
於是乎還剩下最后一個問題,如何確定 F
2.特征方程 F
F 被稱為特征方程,它一共有 C*d個,C是標簽數,d是樣本維度。也就是說,每個維度都是和特征有關的。
i=1~d, c=1~C
也就是說,Fj對應了所有的label,每個label 有d個F. 是不同的。這樣可以自動生成需要的所有Fj(洗衣機對應1~d號的話,電吹風會自動對應d+1~2d號。。。),上述是一種Naive的Fj設置方法,它認為只有當y取某個特定標簽時,才使用Fj中的某些項,當y取其他標簽時,這組權重是被屏蔽的。例如:我們在討論某個物體是不是洗衣機時,電吹風的訓練權重就被屏蔽了。這本質上就是很多很多logistic regression 並聯在一起。
為了方便使用,做以下設計:F--->0/1。很好理解,某個標簽和某個樣本維度要么有關要么無關,至於最后會是多少由權重調節。
這里是為一個詞進行詞性判別,A1~A4是和名詞判別有關的Function這里的B(名詞)就應該全部取1,選通A1~A4,屏蔽其他
A5~A8可能會是和動詞有關的判別了,如果y=動詞 被選通,則屏蔽和名詞,形容詞等有關的判別。