相比於 SVM,FM 模型如何學習交叉特徵?其如何優化?

在計算廣告和推薦系統中,CTR 預估是很是重要的一個環節,判斷物品是否進行推薦,須要根據 CTR 預估的點擊率排序決定。業界經常使用的方法有人工特徵 + LR,GBDT + LR,FM 和 FFM 等模型。函數

近幾年提出了不少基於 FM 改進的方法,如 DeepFM,FNN,PNN,DCN,xDeepFM 等,今天給你們分享 FM。性能

Factorization Machine (FM) 是由 Steffen Rendle 在 2010 年提出的,模型主要經過特徵組合來解決大規模稀疏數據的分類問題。學習

一、什麼是 Factorization Machine?

One-Hot 帶來的問題?

在面對 CTR 預估的問題的時候,咱們經常會轉化爲下面這種類型的二分類問題。優化

點擊 性別 國別
1 中國
0 美國
1 法國

因爲 性別,國別 等特徵都是類別特徵,因此在使用的時候經常採用 One-Hot Encoding 將其轉化爲數值類型。ui

點擊 性別 = 男 性別 = 女 國別 = 中國 國別 = 美國 國別 = 法國
1 1 0 1 0 0
0 0 1 0 1 0
1 0 1 0 0 1

image

上圖能夠看出,在通過 One-Hot 編碼以後,每一個樣本的特徵空間都變大了許多,特徵矩陣變得很是稀疏,在現實生活中,咱們經常能夠看見超過 10⁷ 維的特徵向量。編碼

若是咱們採用單一的線性模型來學習用戶的點擊,打分習慣,咱們很容易忽略特徵潛在的組合關係,好比:女性喜歡化妝品,男性喜歡打遊戲,買奶粉的用戶經常買尿不溼等。spa

二階多項式核 SVM

SVM 爲了學習交叉特徵,引入了核函數的概念,最簡單直接的作法就是爲兩兩的特徵組合分配一個權重參數。這些新的權重參數和原始特徵對應的參數同樣,交給模型去在訓練階段學習。如此一來就造成了以下的預測函數:設計

image

這實際上就是核函數選擇爲二階多項式核的 SVM 模型。這樣設計的模型看起來可以學到特徵的兩兩交叉帶來的信息,但這只是理論上的改進,可是模型在處理大量稀疏數據時,沒有很好的泛化能力。blog

因爲 $w_{i,j}$ 的取值徹底取決於 $x_i$ 和 $x_j$ 的乘積,在數據稀疏的場景下,可能存在訓練集中 $x_ix_j$ 始終爲零的狀況,這樣一來,模型就沒法有效的更新權重 $w_{i,j}$ 了,更進一步,在預測階段,模型遇到 $x_ix_j$ 不爲零的狀況就很難有效的泛化。排序

因子分解機模型

既然二階多項式核 SVM 泛化性能不足的緣由是 $w_{i,j}$ 的取值徹底取決於 $x_i$ 和 $x_j$ 的乘積,那麼最直接的辦法就是突破這一限制了。

FM 模型的解決辦法是爲每一個維度的特徵 ($x_i$) 學習一個表徵向量 ($v_i$, 其實能夠理解爲特徵 ID 的 Embedding 向量)。然後將 $x_i$ 和 $x_j$ 的乘積的權重設定爲各自表徵向量的點積,也就是有以下形式的預測函數:

image

顯然,FM 模型也具備二階多項式核 SVM 的優勢:可以學習到特徵兩兩交叉帶來的信息。

經過下面這個表達能夠看出,FM 很像是計算每一個通過 One-Hot 編碼變化的特徵 Embedding,而後學習不一樣特徵之間 Embedding 類似度對於最後預測結果的影響。因爲咱們能夠將上千萬維的稀疏向量壓縮爲幾十,或者幾百維的 Embedding,極大地減少了模型的參數數量級,從而加強模型的泛化能力,獲得更好的預測結果。

咱們回到上一小節舉的例子:訓練集中 $x_ix_j$ 始終爲零。在二階多項式核 SVM 中,因爲參數權重 $w_{i,j}$ 得不到更新,模型沒法學到 $x_i$ 和 $x_j$ 交叉帶來的信息。可是在 FM 中,$x_i$ 和 $x_j$ 的參數並不徹底由 $x_i$ 和 $x_j$ 的乘積決定。具體來講,每一維特徵的表徵向量由該維特徵與其它全部維度特徵的交叉共同決定。因而,只要存在某個 $k$ 使得 $x_i$ 和 $x_k$ 的乘積不老是爲零,那麼第 i 維特徵的表徵向量 $v_i^→$ 就可以學到有效的信息——同理對 $v_j^→$ 也有一樣的結論。因而乎,哪怕在訓練集中,$x_ix_j$ 始終爲零,其參數 $⟨v_i^→,v_j^→⟩$ 也是通過了學習更新的,所以可以表現出很好的泛化性能。

FM 和矩陣分解

image

基於矩陣分解的協同過濾是推薦系統中經常使用的一種推薦方案,從歷史數據中收集 user 對 item的 評分,能夠是顯式的打分,也能夠是用戶的隱式反饋計算的得分。因爲 user 和 item 數量很是多,有過打分的 user 和 item 對一般是十分稀少的,基於矩陣分解的協同過濾是來預測那些沒有過行爲的 user 對 item 的打分,其實是一個評分預測問題。

矩陣分解的方法假設 user 對 item 的打分 R 由 User Embedding 和 Item Embedding 類似性以及用戶,物品的偏見決定。

這些參數能夠經過最小化經驗偏差獲得:

$min_{p,q,b}\sum_{(u,i)∈K}(r_{ui}-\overline{r}_{ui})^2+λ(||p_u||^2+||q_i||^2+b_u^2+b_i^2)$

從上面的敘述來看,FM 的二階矩陣也用了矩陣分解的技巧,那麼基於矩陣分解的協同過濾和 FM 是什麼關係呢?以 user 對 item 評分預測問題爲例,基於矩陣分解的協同過濾能夠看作 FM的一個特殊例子,對於每個樣本,FM 能夠看作特徵只有 userid 和 itemid 的 onehot 編碼後的向量鏈接而成的向量。另外,FM 能夠採用更多的特徵,學習更多的組合模式,這是單個矩陣分解的模型所作不到的!所以,FM 比矩陣分解的方法更具廣泛性!事實上,如今能用矩陣分解的方法作的方案都直接上 FM 了!

image

效率問題

考慮到 FM 模型會對特徵進行二階組合,在有 n 個原始特徵時,交叉特徵就會有 $(n^2-n)/2$ 個。所以,若是不作任何優化,FM 模型的複雜度會是 $O(n2)$,具體來講是 $O(kn^2)$(其中 k 是表徵向量的長度)。在特徵規模很是大的場景中,這是不可接受的。

那麼問題來了,是否有辦法將複雜度下降到 $O(kn)$ 呢?答案是能夠的,咱們來看針對特徵交叉項的一系列變換。

image

能夠看到這時的時間複雜度爲 $O(kn)$。

參數學習

從上面的描述能夠知道FM能夠在線性的時間內進行預測。所以模型的參數能夠經過梯度降低的方法(例如隨機梯度降低)來學習,對於各類的損失函數。FM模型的梯度是:

image

因爲 $\sum_{j=1}^nv_{j,f}x_j$ 只與 $f$ 有關,與 $i$ 是獨立的,能夠提早計算出來,而且每次梯度更新能夠在常數時間複雜度內完成,所以 FM 參數訓練的複雜度也是 $O(kn)$ 。綜上可知,FM能夠在線性時間訓練和預測,是一種很是高效的模型。

總結

FM模型有兩個優點:

  1. 在高度稀疏的狀況下特徵之間的交叉仍然可以估計,並且能夠泛化到未被觀察的交叉
  2. 參數的學習和模型的預測的時間複雜度是線性的

FM模型的優化點:

  1. 特徵爲全交叉,耗費資源,一般 user 與 user,item 與 item 內部的交叉的做用要小於 user 與 item 的交叉。
  2. 使用矩陣計算,而不是 for 循環計算。
  3. 高階交叉特徵的構造。

若是以爲文章對你有幫助,歡迎點贊,轉發,收藏。

原創不易,你的支持是我創做的動力!

image

相關文章
相關標籤/搜索