FM與FFM深入解析


因子機的定義

機器學習中的建模問題可以歸納為從數據中學習一個函數,它將實值的特征向量映射到一個特定的集合中。例如,對於回歸問題,集合 T 就是實數集 R,對於二分類問題,這個集合可以是{+1,-1}。對於監督學習,通常有一標注的訓練樣本集合

線性函數是最簡單的建模函數,它假定這個函數可以用參數w來刻畫,

對於回歸問題,,而對於二分類問題,需要做對數幾率函數變換(邏輯回歸)

線性模型的缺點是無法學到模型之間的交互,而這在推薦和CTR預估中是比較關鍵的。例如,CTR預估中常將用戶id和廣告id onehot 編碼后作為特征向量的一部分。

為了學習特征間的交叉,SVM通過多項式核函數來實現特征的交叉,實際上和多項式模型是一樣的,這里以二階多項式模型為例

多項式模型的問題在於二階項的參數過多,設特征維數為n,那么二階項的參數數目為n(n-1)/2,對於廣告點擊率預估問題,由於存在大量id特征,導致n可能為107維,這樣一來,模型參數的 量級為1014,這比樣本量4x107多得多!這導致只有極少數的二階組合模式才能在樣本中找到, 而絕大多數模式在樣本中找不到,因而模型無法學出對應的權重。例如,對於某個wij樣本中找不到xi=1,xj=1(這里假定所有的特征都是離散的特征,只取0和1兩個值)這種樣本,那么wij的梯度恆為0,從而導致參數學習失敗!

很容易想到,可以對二階項參數施加某種限制,減少模型參數的自由度。FM 施加的限制是要求二階項系數矩陣是低秩的,能夠分解為低秩矩陣的乘積

這樣一來,就將參數個數減少到kn,可以設置較少的k值(一般設置在100以內,k<<n),極大地減少模型參數,增強模型泛化能力,這跟矩陣分解的方法是一樣的。向量vi可以解釋為第i個特征對應的隱因子或隱向量。 以user和item的推薦問題為例,如果該特征是user,可以解釋為用戶向量,如果是item,可以解釋為物品向量。

計算復雜度

因為引入和二階項,如果直接計算,時間復雜度將是O(n2),n是特征非零特征數目, 可以通過簡單的數學技巧將時間復雜度減少到線性時間復雜度。

基於一個基本的觀察,齊二次交叉項之和可以表達為平方和之差

上式左邊計算復雜度為O(n2),而右邊是O(n),根據上式,可以將原表達式中二次項化簡為

上式計算時間復雜度是O(n)

基於梯度的優化都需要計算目標函數對參數的梯度,對FM而言,目標函數對參數的梯度可以利用鏈式求導法則分解為目標函數對Φ的梯度和∂Φ/∂θ的乘積。前者依賴於具體任務,后者可以簡單的求得

優化方案

原論文中給出了三種優化方案,它們分別是

  1. 隨機梯度下降,這種方案收斂慢而且非常敏感,可以利用現代的一些trick,例如采用 AdaGrad 算法,采用自適應學習率,效果相對比較好,論文[6]對FFM就采用這種方案。
  2. 交替方向乘子(ALS),這種方案只適用於回歸問題,它每次優化一個參數,把其他參數固定,好處是每次都是一個最小二乘問題,有解析解。
  3. 基於蒙特卡羅馬爾科夫鏈的優化方案,論文中效果最好的方案,細節可以參考原文。

FFM

在實際預測任務中,特征往往包含多種id,如果不同id組合時采用不同的隱向量,那么這就是 FFM(Field Factorization Machine) 模型[6]。它將特征按照事先的規則分為多個場(Field),特征xi屬於某個特定的場f,每個特征將被映射為多個隱向量,每個隱向量對應一個場。當兩個特征xi,xj組合時,用對方對應的場對應的隱向量做內積!

fi,fj分別是特征xi,xj對應的場編號。FFM 由於引入了場,使得每兩組特征交叉的隱向量都是獨立的,可以取得更好的組合效果,但是使得計算復雜度無法通過優化變成線性時間復雜度,每個樣本預測的時間復雜度為O(n2 k),不過FFM的k值通常遠小於FM的k值。有論文對FFM在Criteo和Avazu兩個任務(Kaggle上的兩個CTR預估比賽)上進行了試驗,結果表明 FFM 的成績優於 FM。事實上,FM 可以看做只有一個場的 FFM。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM