(一)因式分解機(Factorization Machine,FM)原理及實踐
因子分解機(Factorization Machine),是由Konstanz大學(德國康斯坦茨大學)Steffen Rendle(現任職於Google)於2010年最早提出的,旨在解決大規模稀疏資料下的特徵組合問題。原論文見此。
不久後,FM的升級版模型場感知分解機(Field-aware Factorization Machine,簡稱FFM)由來自Yu-Chin Juan(阮毓欽,畢業於中國臺灣大學,現在美國Criteo工作)與其比賽隊員提出。通過引入field的概念,FFM把相同性質的特徵歸於同一個field。
本次系列部落格主要深入講解了FM和FFM的原理,並給出實踐。
本篇的主要內容是FM。FFM的內容稍後整理。
文章目錄
一、前言
FM旨在解決大規模稀疏資料下的特徵組合問題,那麼大規模稀疏資料是怎麼來的呢?在現實生活中,以使用者訪問某網站的日誌為例,我們可以發現許多特徵是類別特徵,如使用者訪問的是頻道(channel)資訊,如”news”, “auto”, “finance”等。
假設channel特徵有10個取值,分別為{“auto”,“finance”,“ent”,“news”,“sports”,“mil”,“weather”,“house”,“edu”,“games”}。部分訓練資料如下:
特徵ETL過程中,需要對categorical型特徵進行one-hot編碼(獨熱編碼),即將categorical型特徵轉化為數值型特徵。channel特徵轉化後的結果如下:
可以發現,由one-hot編碼帶來的資料稀疏性會導致特徵空間變大。上面的例子中,一維categorical特徵在經過one-hot編碼後變成了10維數值型特徵。真實應用場景中,未編碼前特徵總維度可能僅有數十維或者到數百維的categorical型特徵,經過one-hot編碼後,達到數千萬、數億甚至更高維度的數值特徵在業內都是常有的。
此外也能發現,特徵空間增長的維度取決於categorical型特徵的取值個數。在資料稀疏性的現實情況下,我們如何去利用這些特徵來提升learning performance?
或許在學習過程中考慮特徵之間的關聯資訊。針對特徵關聯,我們需要討論兩個問題:1. 為什麼要考慮特徵之間的關聯資訊?2. 如何表達特徵之間的關聯?
-
為什麼要考慮特徵之間的關聯資訊?
大量的研究和實際資料分析結果表明:某些特徵之間的關聯資訊(相關度)對事件結果的的發生會產生很大的影響。從實際業務線的廣告點選資料分析來看,也證實了這樣的結論。
-
如何表達特徵之間的關聯?
表示特徵之間的關聯,最直接的方法的是構造組合特徵。樣本中特徵之間的關聯資訊在one-hot編碼和淺層學習模型(如LR、SVM)是做不到的。目前工業界主要有兩種手段得到組合特徵:
①、人工特徵工程(資料分析+人工構造);
②、通過模型做組合特徵的學習(深度學習方法、FM/FFM方法)
FM就可以學習特徵之間的關聯。 表示特徵 和 的組合,當 和 都非零時,組合特徵 才有意義。
接下來,我們以二階多項式模型(degree=2時)為例,來分析和探討FM原理和引數學習過程。
二、FM模型表達
為了更好的介紹FM模型,我們先從多項式迴歸、交叉組合特徵說起,然後自然地過度到FM模型。
2.1 二階多項式迴歸模型
我們先看二階多項式模型的表示式:
其中, 表示樣本特徵維度,截距 為模型引數。
從公式(1)可知,交叉項中的組合特徵引數總共有 個。在這裡,任意兩個交叉項引數 都是獨立的。然而,在資料非常稀疏的實際應用場景中,交叉項引數的學習是很困難的。why?
因為我們知道,迴歸模型的引數 的學習結果就是從訓練樣本中計算充分統計量(凡是符合指數族分佈的模型都具有此性質),而在這裡交叉項的每一個引數 的學習過程需要大量的 、 同時非零的訓練樣本資料。由於樣本資料本來就很稀疏,能夠滿足“ 和 都非零”的樣本數就會更少。訓練樣本不充分,學到的引數 就不是充分統計量結果,導致引數 不準確,而這會嚴重影響模型預測的效果(performance)和穩定性。How to do it ?
那麼,如何在降低資料稀疏問題給模型效能帶來的重大影響的同時,有效地解決二階交叉項引數的學習問題呢?矩陣分解方法已經給出瞭解決思路。
根據矩陣分解的啟發,如果把多項式模型中二階交叉項引數 組成一個對稱矩陣 (對角元素設為正實數),那麼這個矩陣就可以分解為 , 稱為係數矩陣,其中第 行對應著第 維特徵的隱向量 。即,每一個特徵都有一個長度為 的隱變數替代。
**將每個交叉項引數 用隱向量的內積 表示,是FM模型的核心思想。**下面對FM模型表示式和引數求解過程,給出詳細解讀。
2.2 FM模型表達
這裡我們只討論二階FM模型(degree=2),其表示式為: