深入理解FFM原理与实践
原文:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
深入理解FFM原理與實踐
del2z, 大龍?·2016-03-03 09:00
FM和FFM模型是最近幾年提出的模型,憑借其在數據量比較大并且特征稀疏的情況下,仍然能夠得到優秀的性能和效果的特性,屢次在各大公司舉辦的CTR預估比賽中獲得不錯的戰績。美團點評技術團隊在搭建DSP的過程中,探索并使用了FM和FFM模型進行CTR和CVR預估,并且取得了不錯的效果。本文旨在把我們對FM和FFM原理的探索和應用的經驗介紹給有興趣的讀者。
前言
在計算廣告領域,點擊率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模型,本文章節組織方式如下:
FM原理
FM(Factorization Machine)是由Konstanz大學Steffen Rendle(現任職于Google)于2010年最早提出的,旨在解決稀疏數據下的特征組合問題[7]。下面以一個示例引入FM模型。假設一個廣告分類的問題,根據用戶和廣告位相關的特征,預測用戶是否點擊了廣告。源數據如下[8]
| 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)轉換成數值型特征。
| 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個特征,有且僅有一個是有效的(非零)。由此可見,數據稀疏性是實際問題中不可避免的挑戰。
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=1n∑j=i+1nwijxixj(1)(1)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj?
其中,nn?代表樣本的特征數量,xixi?是第?ii?個特征的值,w0w0、wiwi、wijwij?是模型參數。
從公式(1)(1)可以看出,組合特征的參數一共有?n(n?1)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,vj?wij=?vi,vj?,這就是FM模型的核心思想。因此,FM的模型方程為(本文不討論FM的高階形式)
?
y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n?vi,vj?xixj(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?的非零組合特征”(存在某個?j≠ij≠i,使得?xixj≠0xixj≠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=1n∑j=i+1n?vi,vj?xixj=12∑f=1k??(∑i=1nvi,fxi)2?∑i=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,xi∑nj=1vj,fxj?vi,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=1n∑j=i+1n?vi,fj,vj,fi?xixj(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]。輸入記錄如下
| YuChin | 3Idiots | Comedy, Drama | $9.99 |
這條記錄可以編碼成5個特征,其中“Genre=Comedy”和“Genre=Drama”屬于同一個field,“Price”是數值型,不用One-Hot編碼轉換。為了方便說明FFM的樣本格式,我們將所有的特征和對應的field映射成整數編號。
| 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,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,轉載于:https://www.cnblogs.com/zhizhan/p/5238415.html
總結
以上是生活随笔為你收集整理的深入理解FFM原理与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七天学会ASP.NET MVC (五)—
- 下一篇: 《Build your own Angu