1. 程式人生 > >FM(因子分解機系列)

FM(因子分解機系列)

FM(Factorization Machine)

引子

機器學習的通常模式為學習輸入到輸出的變換,比如最常見的線性迴歸模型,輸入為X,輸出為Y,通常輸入為高維資料,X是一個向量,形式如下:

y=w1x1+w2x2+...+wnxn

線性迴歸是最簡單的線性模型,只能捕捉最簡單的一階線性關係,而且基於各特徵獨立同分布的假設。

實際中,各特徵x1,x2,...xn並不是相互對立的,一般有些特徵是相互影響的。此時就需要用多項式迴歸去建立模型,捕捉這些特徵之間的相互影響。

一般為了簡單,會只捕捉二階的關係,即特徵間兩兩相互影響的關係,如下:

y=w0+j=1pwjxj+j=1pi
=j
p
wj,ixjxi

這裡每兩個特徵有一個引數w要學習。

這裡仍有問題,對於二項式迴歸來說,如果有n個特徵,那麼要學習到兩兩之間的關係,有n(n1)/2個引數要去學習,對於實際中的複雜任務來說,n的值往往特別大,會造成要學習的引數特別多的問題。
同時,又由於實際資料會有稀疏性問題,有些特徵兩兩同時不為0的情況很少,當一個數據中任何一個特徵值為0的時候,那麼其他特徵與此特徵的相互關係將沒有辦法學習。

FM原理

受到矩陣分解的啟發,為了解決上述兩個問題,引入了因子分解機。

如果訓練的輸入資料有n個特徵,設i,j兩個特徵的相互關係用引數wi,j表示,那麼有wi,j=wj,i, 這樣所有w的引數值會形成一個對稱的矩陣,如下:
none w

1,2 w1,3 w1,4w1,n
w2,1 none w2,3 w2,4w2,n

wn,1 wn,2 wn,3wn,n1 none

缺失了對角線的矩陣,正因為如此,我們可以通過給對角線任意設定值來保證矩陣為半正定矩陣,自然想到了矩陣分解。

基於矩陣分解的思想,將以上矩陣分解為兩個低階矩陣的乘積,那麼在分解過程中,不僅僅減少了資料儲存的複雜度,而且多了一個特別神奇的功能,預測功能。

矩陣分解基於一個假設,即矩陣中的值等於學習到的兩個隱向量的乘積,即

wi,j=vivj
這裡vi,vj為學習到的隱向量。
那麼因子分解機的形式為:
y=w0+j=1
p
wjxj+j=1pi=j+1pxjxif=1kvj,fvi,f

其中,vj,f,vi,f分別為特徵i,j對應隱向量的一個隱因子。
通常,由於資料稀疏,本來wi,j是學習不到的,但是我們可以通過i特徵與其他特徵的資料,j特徵與其他特徵的資料,分別學習到i,j特徵的引數向量vi,vj,這樣wi,j通過vivj的乘積便可以預測wi,j的值,神奇地解決了資料稀疏帶來的問題。

而且,一般隱向量維度k遠遠小於特徵數量n,那麼分解後要學習的引數數量為:nk,對比多項式迴歸的引數數量n