FM/FFM原理

轉自https://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.htmlhtml

深刻FFM原理與實踐

del2z, 大龍 ·2016-03-03 09:00git

FM和FFM模型是最近幾年提出的模型,憑藉其在數據量比較大而且特徵稀疏的狀況下,仍然可以獲得優秀的性能和效果的特性,多次在各大公司舉辦的CTR預估比賽中得到不錯的戰績。美團點評技術團隊在搭建DSP的過程當中,探索並使用了FM和FFM模型進行CTR和CVR預估,而且取得了不錯的效果。本文旨在把咱們對FM和FFM原理的探索和應用的經驗介紹給有興趣的讀者。github

前言

在計算廣告領域,點擊率CTR(click-through rate)和轉化率CVR(conversion rate)是衡量廣告流量的兩個關鍵指標。準確的估計CTR、CVR對於提升流量的價值,增長廣告收入有重要的指導做用。預估CTR/CVR,業界經常使用的方法有人工特徵工程 + LR(Logistic Regression)、GBDT(Gradient Boosting Decision Tree) + LR[1][2][3]、FM(Factorization Machine)[2][7]和FFM(Field-aware Factorization Machine)[9]模型。在這些模型中,FM和FFM近年來表現突出,分別在由Criteo和Avazu舉辦的CTR預測競賽中奪得冠軍[4][5]算法

考慮到FFM模型在CTR預估比賽中的不俗戰績,美團點評技術團隊在搭建DSP(Demand Side Platform)[6]平臺時,在站內CTR/CVR的預估上使用了該模型,取得了不錯的效果。本文是基於對FFM模型的深度調研和使用經驗,從原理、實現和應用幾個方面對FFM進行探討,但願可以從原理上解釋FFM模型在點擊率預估上取得優秀效果的緣由。由於FFM是在FM的基礎上改進得來的,因此咱們首先引入FM模型,本文章節組織方式以下:編程

  1. 首先介紹FM的原理。
  2. 其次介紹FFM對FM的改進。
  3. 而後介紹FFM的實現細節。
  4. 最後介紹模型在DSP場景的應用。

FM原理

FM(Factorization Machine)是由Konstanz大學Steffen Rendle(現任職於Google)於2010年最先提出的,旨在解決稀疏數據下的特徵組合問題[7]。下面以一個示例引入FM模型。假設一個廣告分類的問題,根據用戶和廣告位相關的特徵,預測用戶是否點擊了廣告。源數據以下[8]windows

Clicked? Country Day Ad_type
1 USA 26/11/15 Movie
0 China 1/7/14 Game
1 China 19/2/15 Game

"Clicked?"是label,Country、Day、Ad_type是特徵。因爲三種特徵都是categorical類型的,須要通過獨熱編碼(One-Hot Encoding)轉換成數值型特徵。多線程

Clicked? Country=USA Country=China Day=26/11/15 Day=1/7/14 Day=19/2/15 Ad_type=Movie Ad_type=Game
1 1 0 1 0 0 1 0
0 0 1 0 1 0 0 1
1 0 1 0 0 1 0 1

由上表能夠看出,通過One-Hot編碼以後,大部分樣本數據特徵是比較稀疏的。上面的樣例中,每一個樣本有7維特徵,但平均僅有3維特徵具備非零值。實際上,這種狀況並非此例獨有的,在真實應用場景中這種狀況廣泛存在。例如,CTR/CVR預測時,用戶的性別、職業、教育水平、品類偏好,商品的品類等,通過One-Hot編碼轉換後都會致使樣本數據的稀疏性。特別是商品品類這種類型的特徵,如商品的末級品類約有550個,採用One-Hot編碼生成550個數值特徵,但每一個樣本的這550個特徵,有且僅有一個是有效的(非零)。因而可知,數據稀疏性是實際問題中不可避免的挑戰。ide

One-Hot編碼的另外一個特色就是致使特徵空間大。例如,商品品類有550維特徵,一個categorical特徵轉換爲550維數值特徵,特徵空間劇增。函數

同時經過觀察大量的樣本數據能夠發現,某些特徵通過關聯以後,與label之間的相關性就會提升。例如,「USA」與「Thanksgiving」、「China」與「Chinese New Year」這樣的關聯特徵,對用戶的點擊有着正向的影響。換句話說,來自「China」的用戶極可能會在「Chinese New Year」有大量的瀏覽、購買行爲,而在「Thanksgiving」卻不會有特別的消費行爲。這種關聯特徵與label的正向相關性在實際問題中是廣泛存在的,如「化妝品」類商品與「女」性,「球類運動配件」的商品與「男」性,「電影票」的商品與「電影」品類偏好等。所以,引入兩個特徵的組合是很是有意義的。性能

多項式模型是包含特徵組合的最直觀的模型。在多項式模型中,特徵 xixi 和 xjxj 的組合採用 xixjxixj 表示,即 xixi 和 xjxj 都非零時,組合特徵 xixjxixj 纔有意義。從對比的角度,本文只討論二階多項式模型。模型的表達式以下

 

y(x)=w0+i=1nwixi+i=1nj=i+1nwijxixj(1)(1)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj

 

其中,nn 表明樣本的特徵數量,xixi 是第 ii 個特徵的值,w0w0、wiwi、wijwij 是模型參數。

從公式(1)(1)能夠看出,組合特徵的參數一共有 n(n1)2n(n−1)2 個,任意兩個參數都是獨立的。然而,在數據稀疏性廣泛存在的實際應用場景中,二次項參數的訓練是很困難的。其緣由是,每一個參數 wijwij 的訓練須要大量 xixi 和 xjxj 都非零的樣本;因爲樣本數據原本就比較稀疏,知足「xixi 和 xjxj 都非零」的樣本將會很是少。訓練樣本的不足,很容易致使參數 wijwij 不許確,最終將嚴重影響模型的性能。

那麼,如何解決二次項參數的訓練問題呢?矩陣分解提供了一種解決思路。在model-based的協同過濾中,一個rating矩陣能夠分解爲user矩陣和item矩陣,每一個user和item均可以採用一個隱向量表示[8]。好比在下圖中的例子中,咱們把每一個user表示成一個二維向量,同時把每一個item表示成一個二維向量,兩個向量的點積就是矩陣中user對item的打分。

相似地,全部二次項參數 wijwij 能夠組成一個對稱陣 WW(爲了方便說明FM的由來,對角元素能夠設置爲正實數),那麼這個矩陣就能夠分解爲 W=VTVW=VTV,VV 的第 jj 列即是第 jj 維特徵的隱向量。換句話說,每一個參數 wij=vi,vjwij=⟨vi,vj⟩,這就是FM模型的核心思想。所以,FM的模型方程爲(本文不討論FM的高階形式)

 

y(x)=w0+i=1nwixi+i=1nj=i+1nvi,vjxixj(2)(2)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,vj⟩xixj

 

其中,vivi 是第 ii 維特徵的隱向量,,⟨⋅,⋅⟩ 表明向量點積。隱向量的長度爲 kk(k<<nk<<n),包含 kk 個描述特徵的因子。根據公式(2)(2),二次項的參數數量減小爲 knkn個,遠少於多項式模型的參數數量。另外,參數因子化使得 xhxixhxi 的參數和 xixjxixj 的參數再也不是相互獨立的,所以咱們能夠在樣本稀疏的狀況下相對合理地估計FM的二次項參數。具體來講,xhxixhxi 和 xixjxixj 的係數分別爲 vh,vi⟨vh,vi⟩ 和 vi,vj⟨vi,vj⟩,它們之間有共同項 vivi。也就是說,全部包含「xixi 的非零組合特徵」(存在某個 jij≠i,使得 xixj0xixj≠0)的樣本均可以用來學習隱向量 vivi,這很大程度上避免了數據稀疏性形成的影響。而在多項式模型中,whiwhi 和 wijwij 是相互獨立的。

顯而易見,公式(2)(2)是一個通用的擬合方程,能夠採用不一樣的損失函數用於解決迴歸、二元分類等問題,好比能夠採用MSE(Mean Square Error)損失函數來求解迴歸問題,也能夠採用Hinge/Cross-Entropy損失來求解分類問題。固然,在進行二元分類時,FM的輸出須要通過sigmoid變換,這與Logistic迴歸是同樣的。直觀上看,FM的複雜度是 O(kn2)O(kn2)。可是,經過公式(3)(3)的等式,FM的二次項能夠化簡,其複雜度能夠優化到 O(kn)O(kn)[7]。因而可知,FM能夠在線性時間對新樣本做出預測。

 

i=1nj=i+1nvi,vjxixj=12f=1k⎛⎝⎜⎜(i=1nvi,fxi)2i=1nv2i,fx2i⎞⎠⎟⎟(3)(3)∑i=1n∑j=i+1n⟨vi,vj⟩xixj=12∑f=1k((∑i=1nvi,fxi)2−∑i=1nvi,f2xi2)

 

咱們再來看一下FM的訓練複雜度,利用SGD(Stochastic Gradient Descent)訓練模型。模型各個參數的梯度以下

 

θy(x)=⎧⎩⎨⎪⎪1,xi,xinj=1vj,fxjvi,fx2i,ifθisw0ifθiswiifθisvi,f∂∂θy(x)={1,ifθisw0xi,ifθiswixi∑j=1nvj,fxj−vi,fxi2,ifθisvi,f

 

其中,vj,fvj,f 是隱向量 vjvj 的第 ff 個元素。因爲 nj=1vj,fxj∑j=1nvj,fxj 只與 ff 有關,而與 ii 無關,在每次迭代過程當中,只需計算一次全部 ff 的 nj=1vj,fxj∑j=1nvj,fxj,就可以方便地獲得全部 vi,fvi,f 的梯度。顯然,計算全部 ff 的 nj=1vj,fxj∑j=1nvj,fxj 的複雜度是 O(kn)O(kn);已知 nj=1vj,fxj∑j=1nvj,fxj 時,計算每一個參數梯度的複雜度是 O(1)O(1);獲得梯度後,更新每一個參數的複雜度是 O(1)O(1);模型參數一共有 nk+n+1nk+n+1 個。所以,FM參數訓練的複雜度也是 O(kn)O(kn)。綜上可知,FM能夠在線性時間訓練和預測,是一種很是高效的模型。

FM與其餘模型的對比

FM是一種比較靈活的模型,經過合適的特徵變換方式,FM能夠模擬二階多項式核的SVM模型、MF模型、SVD++模型等[7]

相比SVM的二階多項式核而言,FM在樣本稀疏的狀況下是有優點的;並且,FM的訓練/預測複雜度是線性的,而二項多項式核SVM須要計算核矩陣,核矩陣複雜度就是N平方。

相比MF而言,咱們把MF中每一項的rating分改寫爲 ruiβu+γi+xTuyirui∼βu+γi+xuTyi,從公式(2)(2)中能夠看出,這至關於只有兩類特徵 uu 和 ii 的FM模型。對於FM而言,咱們能夠加任意多的特徵,好比user的歷史購買平均值,item的歷史購買平均值等,可是MF只能侷限在兩類特徵。SVD++與MF相似,在特徵的擴展性上都不如FM,在此再也不贅述。

FFM原理

FFM(Field-aware Factorization Machine)最初的概念來自Yu-Chin Juan(阮毓欽,畢業於中國臺灣大學,如今美國Criteo工做)與其比賽隊員,是他們借鑑了來自Michael Jahrer的論文[14]中的field概念提出了FM的升級版模型。經過引入field的概念,FFM把相同性質的特徵歸於同一個field。以上面的廣告分類爲例,「Day=26/11/15」、「Day=1/7/14」、「Day=19/2/15」這三個特徵都是表明日期的,能夠放到同一個field中。同理,商品的末級品類編碼生成了550個特徵,這550個特徵都是說明商品所屬的品類,所以它們也能夠放到同一個field中。簡單來講,同一個categorical特徵通過One-Hot編碼生成的數值特徵均可以放到同一個field,包括用戶性別、職業、品類偏好等。在FFM中,每一維特徵 xixi,針對其它特徵的每一種field fjfj,都會學習一個隱向量 vi,fjvi,fj。所以,隱向量不只與特徵相關,也與field相關。也就是說,「Day=26/11/15」這個特徵與「Country」特徵和「Ad_type"特徵進行關聯的時候使用不一樣的隱向量,這與「Country」和「Ad_type」的內在差別相符,也是FFM中「field-aware」的由來。

假設樣本的 nn 個特徵屬於 ff 個field,那麼FFM的二次項有 nfnf個隱向量。而在FM模型中,每一維特徵的隱向量只有一個。FM能夠看做FFM的特例,是把全部特徵都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,能夠導出其模型方程。

 

y(x)=w0+i=1nwixi+i=1nj=i+1nvi,fj,vj,fixixj(4)(4)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,fj,vj,fi⟩xixj

 

其中,fjfj 是第 jj 個特徵所屬的field。若是隱向量的長度爲 kk,那麼FFM的二次參數有 nfknfk 個,遠多於FM模型的 nknk 個。此外,因爲隱向量與field相關,FFM二次項並不可以化簡,其預測複雜度是 O(kn2)O(kn2)。

下面以一個例子簡單說明FFM的特徵組合方式[9]。輸入記錄以下

User Movie Genre Price
YuChin 3Idiots Comedy, Drama $9.99

這條記錄能夠編碼成5個特徵,其中「Genre=Comedy」和「Genre=Drama」屬於同一個field,「Price」是數值型,不用One-Hot編碼轉換。爲了方便說明FFM的樣本格式,咱們將全部的特徵和對應的field映射成整數編號。

Field name Field index Feature name Feature index
User 1 User=YuChin 1
Movie 2 Movie=3Idiots 2
Genre 3 Genre=Comedy 3
Price 4 Genre=Drama 4
    Price 5

那麼,FFM的組合特徵有10項,以下圖所示。

v1,2,v2,111+v1,3,v3,111+v1,3,v4,111+v1,4,v5,119.99+v2,3,v3,211+v2,3,v4,211+v2,4,v5,219.99+v3,3,v4,311+v3,4,v5,319.99+v4,4,v5,319.99⟨v1,2,v2,1⟩⋅1⋅1+⟨v1,3,v3,1⟩⋅1⋅1+⟨v1,3,v4,1⟩⋅1⋅1+⟨v1,4,v5,1⟩⋅1⋅9.99+⟨v2,3,v3,2⟩⋅1⋅1+⟨v2,3,v4,2⟩⋅1⋅1+⟨v2,4,v5,2⟩⋅1⋅9.99+⟨v3,3,v4,3⟩⋅1⋅1+⟨v3,4,v5,3⟩⋅1⋅9.99+⟨v4,4,v5,3⟩⋅1⋅9.99

 

其中,紅色是field編號,藍色是特徵編號,綠色是此樣本的特徵取值。二次項的係數是經過與特徵field相關的隱向量點積獲得的,二次項共有 n(n1)2n(n−1)2 個。

FFM實現

Yu-Chin Juan實現了一個C++版的FFM模型,源碼可從Github下載[10]。這個版本的FFM省略了常數項和一次項,模型方程以下。

 

ϕ(w,x)=j1,j22wj1,f2,wj2,f1xj1xj2(5)(5)ϕ(w,x)=∑j1,j2∈C2⟨wj1,f2,wj2,f1⟩xj1xj2

 

其中,2C2 是非零特徵的二元組合,j1j1 是特徵,屬於field f1f1,wj1,f2wj1,f2 是特徵 j1j1 對field f2f2 的隱向量。此FFM模型採用logistic loss做爲損失函數,和L2懲罰項,所以只能用於二元分類問題。

 

minwi=1Llog(1+exp{yiϕ(w,xi)})+λ2w2minw∑i=1Llog⁡(1+exp⁡{−yiϕ(w,xi)})+λ2‖w‖2

 

其中,yi{1,1}yi∈{−1,1} 是第 ii 個樣本的label,LL 是訓練樣本數量,λλ 是懲罰項係數。模型採用SGD優化,優化流程以下。

參考 Algorithm1Algorithm1, 下面簡單解釋一下FFM的SGD優化過程。
算法的輸入 trtr、vava、papa 分別是訓練樣本集、驗證樣本集和訓練參數設置。

  1. 根據樣本特徵數量(tr.ntr.n)、field的個數(tr.mtr.m)和訓練參數(papa),生成初始化模型,即隨機生成模型的參數;
  2. 若是歸一化參數 pa.normpa.norm 爲真,計算訓練和驗證樣本的歸一化係數,樣本 ii 的歸一化係數爲
    R[i]=1X[i]R[i]=1‖X[i]‖
  3. 對每一輪迭代,若是隨機更新參數 pa.randpa.rand 爲真,隨機打亂訓練樣本的順序;
  4. 對每個訓練樣本,執行以下操做
    • 計算每個樣本的FFM項,即公式(5)(5)中的輸出 ϕϕ;
    • 計算每個樣本的訓練偏差,如算法所示,這裏採用的是交叉熵損失函數 log(1+eϕ)log⁡(1+eϕ);
    • 利用單個樣本的損失函數計算梯度 gΦgΦ,再根據梯度更新模型參數;
  5. 對每個驗證樣本,計算樣本的FFM輸出,計算驗證偏差;
  6. 重複步驟3~5,直到迭代結束或驗證偏差達到最小。

在SGD尋優時,代碼採用了一些小技巧,對於提高計算效率是很是有效的。

第一,梯度分步計算。採用SGD訓練FFM模型時,只採用單個樣本的損失函數來計算模型參數的梯度。

 

=err+reg=log(1+exp{yiϕ(w,xi)})+λ2w2L=Lerr+Lreg=log⁡(1+exp⁡{−yiϕ(w,xi)})+λ2‖w‖2

 

 

w=errϕϕw+regw∂L∂w=∂Lerr∂ϕ⋅∂ϕ∂w+∂Lreg∂w

 

上面的公式代表,errϕ∂Lerr∂ϕ 與具體的模型參數無關。所以,每次更新模型時,只需計算一次,以後直接調用 errϕ∂Lerr∂ϕ 的值便可。對於更新 nfknfk 個模型參數,這種方式可以極大提高運算效率。

第二,自適應學習率。此版本的FFM實現沒有采用經常使用的指數遞減的學習率更新策略,而是利用 nfknfk 個浮點數的臨時空間,自適應地更新學習率。學習率是參考AdaGrad算法計算的[11],按以下方式更新

 

wj1,f2=wj1,f2η1+t(gtwj1,f2)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾√gwj1,f2wj1,f2′=wj1,f2−η1+∑t(gwj1,f2t)2⋅gwj1,f2

 

其中,wj1,f2wj1,f2 是特徵 j1j1 對field f2f2 隱向量的一個元素,元素下標未標出;gwj1,f2gwj1,f2 是損失函數對參數 wj1,f2wj1,f2 的梯度;gtwj1,f2gwj1,f2t 是第 tt 次迭代的梯度;ηη 是初始學習率。能夠看出,隨着迭代的進行,每一個參數的歷史梯度會慢慢累加,致使每一個參數的學習率逐漸減少。另外,每一個參數的學習率更新速度是不一樣的,與其歷史梯度有關,根據AdaGrad的特色,對於樣本比較稀疏的特徵,學習率高於樣本比較密集的特徵,所以每一個參數既能夠比較快速達到最優,也不會致使驗證偏差出現很大的震盪。

第三,OpenMP多核並行計算。OpenMP是用於共享內存並行系統的多處理器程序設計的編譯方案,便於移植和多核擴展[12]。FFM的源碼採用了OpenMP的API,對參數訓練過程SGD進行了多線程擴展,支持多線程編譯。所以,OpenMP技術極大地提升了FFM的訓練效率和多核CPU的利用率。在訓練模型時,輸入的訓練參數ns_threads指定了線程數量,通常設定爲CPU的核心數,便於徹底利用CPU資源。

第四,SSE3指令並行編程。SSE3全稱爲數據流單指令多數據擴展指令集3,是CPU對數據層並行的關鍵指令,主要用於多媒體和遊戲的應用程序中[13]。SSE3指令採用128位的寄存器,同時操做4個單精度浮點數或整數。SSE3指令的功能很是相似於向量運算。例如,aa 和 bb 採用SSE3指令相加(aa 和 bb 分別包含4個數據),其功能是 aa 中的4個元素與 bb 中4個元素對應相加,獲得4個相加後的值。採用SSE3指令後,向量運算的速度更加快捷,這對包含大量向量運算的FFM模型是很是有利的。

除了上面的技巧以外,FFM的實現中還有不少調優技巧須要探索。例如,代碼是按field和特徵的編號申請參數空間的,若是選取了非連續或過大的編號,就會形成大量的內存浪費;在每一個樣本中加入值爲1的新特徵,至關於引入了因子化的一次項,避免了缺乏一次項帶來的模型誤差等。

FFM應用

在DSP的場景中,FFM主要用來預估站內的CTR和CVR,即一個用戶對一個商品的潛在點擊率和點擊後的轉化率。

CTR和CVR預估模型都是在線下訓練,而後用於線上預測。兩個模型採用的特徵大同小異,主要有三類:用戶相關的特徵、商品相關的特徵、以及用戶-商品匹配特徵。用戶相關的特徵包括年齡、性別、職業、興趣、品類偏好、瀏覽/購買品類等基本信息,以及用戶近期點擊量、購買量、消費額等統計信息。商品相關的特徵包括所屬品類、銷量、價格、評分、歷史CTR/CVR等信息。用戶-商品匹配特徵主要有瀏覽/購買品類匹配、瀏覽/購買商家匹配、興趣偏好匹配等幾個維度。

爲了使用FFM方法,全部的特徵必須轉換成「field_id:feat_id:value」格式,field_id表明特徵所屬field的編號,feat_id是特徵編號,value是特徵的值。數值型的特徵比較容易處理,只需分配單獨的field編號,如用戶評論得分、商品的歷史CTR/CVR等。categorical特徵須要通過One-Hot編碼成數值型,編碼產生的全部特徵同屬於一個field,而特徵的值只能是0或1,如用戶的性別、年齡段,商品的品類id等。除此以外,還有第三類特徵,如用戶瀏覽/購買品類,有多個品類id且用一個數值衡量用戶瀏覽或購買每一個品類商品的數量。這類特徵按照categorical特徵處理,不一樣的只是特徵的值不是0或1,而是表明用戶瀏覽或購買數量的數值。按前述方法獲得field_id以後,再對轉換後特徵順序編號,獲得feat_id,特徵的值也能夠按照以前的方法得到。

CTR、CVR預估樣本的類別是按不一樣方式獲取的。CTR預估的正樣本是站內點擊的用戶-商品記錄,負樣本是展示但未點擊的記錄;CVR預估的正樣本是站內支付(發生轉化)的用戶-商品記錄,負樣本是點擊但未支付的記錄。構建出樣本數據後,採用FFM訓練預估模型,並測試模型的性能。

  #(field) #(feature) AUC Logloss
站內CTR 39 2456 0.77 0.38
站內CVR 67 2441 0.92 0.13

因爲模型是按天訓練的,天天的性能指標可能會有些波動,但變化幅度不是很大。這個表的結果說明,站內CTR/CVR預估模型是很是有效的。

在訓練FFM的過程當中,有許多小細節值得特別關注。

第一,樣本歸一化。FFM默認是進行樣本數據的歸一化,即 pa.normpa.norm 爲真;若此參數設置爲假,很容易形成數據inf溢出,進而引發梯度計算的nan錯誤。所以,樣本層面的數據是推薦進行歸一化的。

第二,特徵歸一化。CTR/CVR模型採用了多種類型的源特徵,包括數值型和categorical類型等。可是,categorical類編碼後的特徵取值只有0或1,較大的數值型特徵會形成樣本歸一化後categorical類生成特徵的值很是小,沒有區分性。例如,一條用戶-商品記錄,用戶爲「男」性,商品的銷量是5000個(假設其它特徵的值爲零),那麼歸一化後特徵「sex=male」(性別爲男)的值略小於0.0002,而「volume」(銷量)的值近似爲1。特徵「sex=male」在這個樣本中的做用幾乎能夠忽略不計,這是至關不合理的。所以,將源數值型特徵的值歸一化到 [0,1][0,1] 是很是必要的。

第三,省略零值特徵。從FFM模型的表達式(4)(4)能夠看出,零值特徵對模型徹底沒有貢獻。包含零值特徵的一次項和組合項均爲零,對於訓練模型參數或者目標值預估是沒有做用的。所以,能夠省去零值特徵,提升FFM模型訓練和預測的速度,這也是稀疏樣本採用FFM的顯著優點。

後記

本文主要介紹了FFM的思路來源和理論原理,並結合源碼說明FFM的實際應用和一些小細節。從理論上分析,FFM的參數因子化方式具備一些顯著的優點,特別適合處理樣本稀疏性問題,且確保了較好的性能;從應用結果來看,站內CTR/CVR預估採用FFM是很是合理的,各項指標都說明了FFM在點擊率預估方面的卓越表現。固然,FFM不必定適用於全部場景且具備超越其餘模型的性能,合適的應用場景才能成就FFM的「威名」。

參考文獻

    1. http://blog.csdn.net/lilyth_lilyth/article/details/48032119
    2. http://www.cnblogs.com/Matrix_Yao/p/4773221.html
    3. http://www.herbrich.me/papers/adclicksfacebook.pdf
    4. https://www.kaggle.com/c/criteo-display-ad-challenge
    5. https://www.kaggle.com/c/avazu-ctr-prediction
    6. https://en.wikipedia.org/wiki/Demand-side_platform
    7. http://www.algo.uni-konstanz.de/members/rendle/pdf/Rendle2010FM.pdf
    8. http://www.cs.cmu.edu/~wcohen/10-605/2015-guest-lecture/FM.pdf
    9. http://www.csie.ntu.edu.tw/~r01922136/slides/ffm.pdf
    10. https://github.com/guestwalk/libffm
    11. https://en.wikipedia.org/wiki/Stochastic_gradient_descent#AdaGrad
    12. http://openmp.org/wp/openmp-specifications/
    13. http://blog.csdn.net/gengshenghong/article/details/7008704
    14. https://kaggle2.blob.core.windows.net/competitions/kddcup2012/2748/media/Opera.pdf
相關文章
相關標籤/搜索