推薦系統(tǒng)-重排序-CTR-FM模型及FFM等

1 概述

重排序模型中,特征主要使用離散one-hot編碼的特征。這是由任務本身特點與歷史發(fā)展以及模型特點決定的。
首先就任務本身來說,主要涉及到的特征分為用戶特征-物品特征-行為特征。這些特征往往都是離散的如用戶性別,用戶愛好,物品分類等
就歷史發(fā)展來說,是從人工規(guī)則--LR--GBDT+LR--FM--... 發(fā)展而來,這里都傾向于離散特征
而就整個發(fā)展過程中最關鍵以及工業(yè)應用中最常用的模型LR來講,離散特征更有優(yōu)勢
而one-hot編碼的離散特征,更容易引入非線性以及容易后續(xù)的特征組合,所以獨熱(one-hot)編碼的離散特征在推薦系統(tǒng)重排序以及CTR預測中都十分普遍。

1.1 特征與特征域(feature field)

例如我們有數(shù)據(jù):用戶性別,年齡,物品品牌,物品價格等特征,則可以做如下轉(zhuǎn)化
性別:[男,女]:[1,0] 表示男
年齡:[0-15歲,15-25歲,25-35歲,35-50歲,大于50歲]:[0,0,1,0,0] 表示用戶年齡在25-35之間
物品品牌:[李寧,特步,Nike,Adidas,匡威] : [0,0,0,1,0]表示Adidas
物品價格:[0-500元,500-1000元,1000-2000元,大2000元]:[0,1,0,0]則表示物品價格500-1000元

性別 年齡 品牌 價格
特征 15 25 35 50 >50 ln tb nike adi kw 500 1000 2000 >2000
樣本 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0

x=[1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0]表示一個樣本
y=1可以表示一個年齡25-35歲的男性購買或點擊了一個adi品牌價格500-1000之間的商品或其廣告
所以男女分別變成了特征通過01表示是否是該特征,而性別作為男女的抽象則變成了特征域。
這里其實對于域,并沒有嚴格的規(guī)定,從常識來講傾向于把域如此來分,但同樣,也可以根據(jù)具體樣本特征做分組。
其主旨是:相同類型的特征組成一個域

2 FM(Factorization Machine)

2.1 模型推導

一般線性模型
f_{line}(x)=w_0+\sum_{i=1}^{n}w_ix_i \tag{2.1}
注意此處x_i表示樣本的第i個特征,而不是第i個樣本。n表示每個樣本共n維特征。

LR
f_{LR}(x)=\frac{1}{1+exp(-f_{line}(x))}=\frac{1}{1+exp(-w_0-\sum_{i=1}^{n}w_ix_i)} \tag{2.2}
LR是線性模型的一個轉(zhuǎn)換。
但是從線性模型公式我們可以看出,線性模型只是使用了單個特征,沒有考慮不同特征之間交叉的因素。例如性別和品牌的交叉,組成新特征“男-Nike”,“女-Nike”,“男-李寧”,“女-李寧”等,這些同樣也是能夠提供信息的。
所以,可以設計一個新模型
f(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}w_{ij}x_ix_j \tag{2.3}
這相比于一般線性模型,就多了二元特征交叉的信息。當然,也可以繼續(xù)添加三元交叉,四元交叉等等
但是,這里又要考慮計算量的問題。首先要注意,對于CTR任務,n是很大的,因為獨熱編碼之后,域的展開就非常大。而當我們考慮二元交叉特征時,組合特征是n^2數(shù)量級的
這會造成參數(shù)數(shù)量呈指數(shù)增長,而樣本量m基本固定。這就導致添加三元等更高的特征交叉后,特征維度很容易超過樣本量m
當特征維度遠大于樣本量m時,每個參數(shù)就難以得到足夠的訓練,造成欠擬合
所以暫時只考慮二元特征交叉
而僅僅是二元特征交叉,其參數(shù)w_{ij}n^2級別的。而又由于x本身就稀疏,所以x_ix_j更加稀疏,在總體樣本上,很容易出現(xiàn)某個組合x_ix_j總為0的情況,這樣對應的w_{ij}就得不到訓練。
為了應對這個問題,就需要把參數(shù)數(shù)量降下來。

通過線性代數(shù)知識我們知道可以使用矩陣分解技術把矩陣W分解
W=VV^T
W是n*n維,V是n*k維,當令k<<n時,就可以把計算量從o(n^2)降到nk\approx o(n)
所以根據(jù)這樣的思想,我們可以對每個特征x_i構建一個向量v_i=(v_1,v_2...v_k),則w_{ij}=<v_i·v_j>
則式(2.3)可以轉(zhuǎn)換成
f(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}<v_i·v_j>x_ix_j \tag{2.4}
進一步轉(zhuǎn)化得
f(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}(\sum_{l=1}^{k}v_{il}v_{jl})x_ix_j \tag{2.5}
式(2.4)(2.5)就是FM模型,我們稱v_{i}為隱向量或者x_i的隱向量

2.2 優(yōu)化算法

我們對式(5)的最后一部分做進一步轉(zhuǎn)換^1(詳情見最后注釋)
\begin{alignedat}{2} \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}(\sum_{l=1}^{k}v_{il}v_{jl})x_ix_j&=\sum_{l=1}^{k}\bigg[\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}(v_{il}v_{jl})x_ix_j \bigg]\\ &=\sum_{l=1}^{k}\bigg[\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}(v_{il}x_i)(v_{jl}x_j) \bigg]\\ &=\sum_{l=1}^{k}\frac{1}{2}\bigg[(\sum_{i=1}^{n}v_{il}x_i)^2-\sum_{i=1}^{n}(v_{il}x_i)^2 \bigg] \end{alignedat}

對于此模型,設有損失函數(shù)
L(f(x),y)
可以是MAE,也可以是交叉熵損失函數(shù)
其根據(jù)鏈式法則梯度
\frac{\partial L}{\partial \theta}=\frac{\partial L}{\partial f(x)}·\frac{\partial f(x)}{\partial \theta}
即表示為損失函數(shù)對模型的導乘以模型對參數(shù)的導。
模型對參數(shù)的求導:
f(x)=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{l=1}^{k}\frac{1}{2}\bigg[(\sum_{i=1}^{n}v_{il}x_i)^2-\sum_{i=1}^{n}(v_{il}x_i)^2\bigg]

\frac{\partial f(x)}{\partial \theta}= \begin{cases}1,&\text{ if }\theta=w_0 \\ x_i, &\text{ if }\theta=w_i \\ x_i\sum_{j=1}^{n}v_{jl}x_j-v_{il}x_i^2, &\text{ if }\theta=v_{il} \end{cases}

面對這樣的情況,我們可以使用如下幾種優(yōu)化算法求解參數(shù)

  • 隨機梯度下降法(SGD)
  • 交替最小二乘法(ALS)
  • 馬爾科夫鏈蒙特卡羅法(MCMC)
隨機梯度下降法(SGD)

很容易理解,根據(jù)上述式子可以得出損失函數(shù)的梯度,得知梯度后就很方便的可以應用SGD

交替最小二乘法(ALS)

又稱坐標下降法
即每次只優(yōu)化一個參數(shù)。令導數(shù)=0,求解當前這個參數(shù)的最優(yōu)值。

馬爾科夫鏈蒙特卡羅法(MCMC)

不會不想查 :)

以上三種方法具體可移步參考鏈接

3 FFM(Field Factorization Machine)

3.1 模型推導

FM的核心是特征交叉,這里面最重要的就是隱向量。FM中,每個特征x_i都有且只有一個隱向量v_i
在特征交叉時,對應的隱向量點乘得到這個交叉特征的權重w_{ij}
然而,每個特征所代表的意義是不一樣的,例如在計算交叉特征:“男性-20到30歲”,“男性-Nike”時,用同一個男性隱向量v點乘20-30歲和nike的隱向量結果的區(qū)別度低。FFM認為,每個特征x_i的隱向量應該有多個,當該特征與不同類型(域field)的特征做交叉時,應該使用對應的隱向量,這樣可以做到更精細地刻畫交叉特征的權重。所以每個特征應該有和field數(shù)量相同的隱向量個數(shù)。
假設樣本共有l(wèi)個域(f_1,f_2,..f_l)
特征x_i,x_j分別屬于域f_I,f_J
x_i有l(wèi)個隱向量(v_{i1},v_{i2}...v_{il})分別對應l個域,v是一個k維向量
x_j有l(wèi)個隱向量(v_{j1},v_{j2}...v_{jl})分別對應l個域,v是一個k維向量
則當x_i,x_j做交叉時,
x_i應該選取x_j所在域?qū)碾[向量v_{iJ}
x_j應該選取x_i所在域?qū)碾[向量v_{jI}

<v_{iJ}·v_{jI}>x_ix_j
這樣更精準了,但是參數(shù)量多了l倍。所以實際應用中,F(xiàn)FM設置的隱向量長度k會比FM的k小很多以盡可能降低計算量。

3.2 優(yōu)化算法

同F(xiàn)M

4 總結

  • FM模型相比傳統(tǒng)LR模型,多了二元交叉特征組合。提高了模型表征能力。
    從根本上來說,F(xiàn)M之所以可以這么容易的拓展與組合,是因為任務使用的是獨熱編碼的離散化特征
    FM全稱Factorization Machine。其中Factorization是因式分解的意思。通過上面的介紹,我想很容易理解這個因式分解的意思。當出現(xiàn)特征交叉如x_i,x_j,必然會有這個交叉特征的參數(shù)w_{ij},而FM把這個參數(shù)分解成了兩個向量的點乘<v_i·v_j>。而這兩個向量可以看成是特征x_i,x_j的一種編碼。

  • 對隱向量的進一步探討
    對于onehot編碼來說,
    x_i特征對應著向量[0,0...1...0...0]其中第i位=1,其他=0;
    x_i特征對應著向量[0,0...0...1...0]其中第j位=1,其他=0;
    所以x_i的隱向量=v_i等價于[0,0...1...0...0]被編碼成v_i
    v_i=transform([0,0...1...0...0])
    x_i*x_j表示兩特征交叉,其權重w_{ij}則被FM表示成了兩隱向量的內(nèi)積<v_i·v_j>
    <v_i·v_j>x_i*x_j=transform([0,0...1...0...0])·transform([0,0...0...1...0])
    注意式子
    \sum_{i=1}^{n-1}\sum_{j=i+1}^{n}<v_i·v_j>x_ix_j \tag{4.1}
    雖然看似有o(n^2)的復雜度,但實際上x_ix_j絕大多數(shù)時候都=0,這表示對于每一個樣本,式(4.1)計算量遠達不到o(n^2)。對于一個特定的樣本,式(4.1)退化成
    \sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}<v_i·v_j>x_ix_j \tag{4.2}
    \overline{n}表示該樣本的稀疏特征中1的數(shù)量。

    \begin{alignedat}{2} \sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}<v_i·v_j>x_ix_j = \sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}transform([0,0...1...0...0])·transform([0,0...0...1...0]) \end{alignedat}
    請理解這段,這段在理解DeepFM中有用。

  • 參加過一個會議,會上有人說對于CTR預測或推薦系統(tǒng)重排序來說,最根本的是做特征組合
    因為獨熱編碼的特征,每一維表征的信息太少,需要通過組合來提高每一維的表征能力。
    同時,特征組合引入了非線性,可以提高擬合能力。

  • 其實GBDT+LR模型,也是一種特征組合。

  • FM實際上做了一個Embedding 工作,把稀疏的獨熱特征轉(zhuǎn)換成了稠密特征,這對于深度學習是友好的,所以后續(xù)有很多FM和神經(jīng)網(wǎng)絡結合的工作。

未完待續(xù)。。。

5 注釋

[1].此處應用平方和公式
(x_1+x_2+x_3)^2=x_1^2+x_2^2+x_3^2+2x_1x_2+2x_1x_3+2x_2x_3
x_1x_2+x_1x_3+x_2x_3=\frac{1}{2}((x_1+x_2+x_3)^2-(x_1^2+x_2^2+x_3^2))

\sum_{i=1}^{2}\sum_{j=i+1}^{3}x_ix_j=\frac{1}{2}\bigg[(\sum_{i=1}^{3}x_i)^2-\sum_{i=1}^{3}(x_i)^2\bigg]

參考

https://www.cnblogs.com/pinard/p/6370127.html
https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html
https://www.cnblogs.com/wkang/p/9788012.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容