聊聊因子分解機模型的基本形式和一些變化

2022-07-19 03:00:09 字數 1469 閱讀 9582

因子分解機(factorization machine, 簡稱fm)是一種不錯的ctr預估模型,也是我們現在在使用的廣告點選率預估模型,比起著名的logistic regression, fm能夠把握一些組合的高階特徵,因此擁有更強的表現力。

$$score = f(w_ * x_ + w_ * x_ + w_ * x_)$$

所以,對所有使用者--我們將得到相同的排序。

因此我們需要引入一些組合特徵作為輸入模型,然而僅二階特徵組合的可能性就是原始特徵的平方之多,但是由於很多特徵其實是相互獨立的,他們的組合並沒有什麼價值。fm就是一種能夠自動把握一些高階特徵的點選率預估模型,可以自動幫助使用者選擇合適的高階輸入。

我們先寫出帶有所有二階組合特徵的目標函式,其中矩陣w中有n^2個引數,求解非常複雜:

$$y(x) = w_0 + \sum_^ w_i x_i + \sum_^ \sum_^ w_ x_i x_j$$

我們都知道在矩陣分解的協同過濾中中,我們認為每個使用者可以表示成乙個k維的特徵向量$u_k$,每個物品也能表示成乙個高維向量$i_k$,這樣使用者與物品的相關性就可以用兩個向量的點選表示,所有使用者與所有物品的相關性就可以用兩個矩陣相乘的形式表示出來了。

其中矩陣w中代表了特徵的特徵向量的內積,既:$w_=v_i v_j$,所以,公式可以改寫為:

$$y(x) = w_0 + \sum_^ w_i x_i + \sum_^ \sum_^ v_ v_ x_i x_j$$

也就是:

$$y(x) = w_0 + \sum_^ w_i x_i + \sum_^ \sum_^ \sum_^ v_ v_ x_i x_j$$

可以看出,w中的引數現在只有nk個了,因為一般有k<$δy/δw_=1$

$δy/δw_=x_,i=1...n$

$δy/δv_=x_\sum v_x_$

fm的優化可以用sgd來做,不過這裡推薦帶動量(momentum)的min-batch sgd演算法,試驗中比普通的sgd效果似乎更好。帶momentum的sgd模擬了物品運動中的慣性。

在傳統的sgd中:$x_=x_t+δx_t,δx_t=-ŋg_t$ ,其中 $g_t$代表了梯度。而在momentum的sgd中:$δx_t=px_-ŋg_t$。

不過比起lr, fm有乙個缺點--目標函式是非凸的,雖然針對這個缺點也有一些研究比如一些凸函式形式的fm,不過在實踐中似乎這並不是乙個很嚴重的問題,合適的初始化方式和優化方法一般是能夠給出乙個可以接受的解的。

fm的另外乙個缺點是有點耗費記憶體,對於每個特徵都要用乙個k維的向量表示導致引數數量是lr的k倍,這方面也是有一些研究的,比如李沐針對這個問題提出的difacto就是乙個很好的能夠降低記憶體消耗的優化方案。

最後,還有一種著名的策略是ffm模型,ffm模型被稱為fm的公升級版,把同一類的特徵(比如一些用01向量編碼的的離散特徵)歸到乙個field裡去,然後要求每個特徵在每個field下都有乙個不同的k維表示方式,這一下把引數的數量從k變成了fk(f是field的數量),模型複雜度變的更高了。不過這樣做的效果確實不錯。

因子分解機 FM

人工方式的特徵工程,通常有兩個問題 針對上述兩個問題,廣度模型和深度模型提供了不同的解決思路。廣度模型包括fm ffm等大規模低秩 low rank 模型,fm ffm通過對特徵的低秩展開,為每個特徵構建隱式向量,並通過隱式向量的點乘結果來建模兩個特徵的組合關係實現對二階特徵組合的自動學習。作為另外...

特徵組合之因子分解機 FM

1.為什麼需要因子分解機?核心 對於因子分解機fm來說,最大的特點是對於稀疏的資料具有很好的學習能力。2.什麼是fm因子分解機?fm因式分解機是一種基於lr模型的高效的學習特徵間相互關係的模型。一般的線性回歸模型 度為2的因子分解機,這裡的度指的是特徵組合的度 與線性模型相比,因子分解機多了後面的特...

質因子的分解

1 所謂的質因子分解是指將乙個正整數n寫成乙個或多個質數的乘積的形式,例如 6 2 3,8 2 2 2.或者將其寫為指數形式,如 6 2 1 3 1,180 2 2 3 2 5 1 由於最後要歸結到若干不同指數的乘積,因此需要先將素數表列印出來。注意 1本身不是素數,因此他沒有質因子,一般就是討論大...