因子分解機 FM

2022-02-11 03:18:56 字數 3731 閱讀 8543

人工方式的特徵工程,通常有兩個問題:

針對上述兩個問題,廣度模型和深度模型提供了不同的解決思路。

廣度模型包括fm/ffm等大規模低秩(low-rank)模型,fm/ffm通過對特徵的低秩展開,為每個特徵構建隱式向量,並通過隱式向量的點乘結果來建模兩個特徵的組合關係實現對二階特徵組合的自動學習。作為另外一種模型,poly-2模型則直接對2階特徵組合建模來學習它們的權重。fm/ffm相比於poly-2模型,優勢為以下兩點。第一,fm/ffm模型所需要的引數個數遠少於poly-2模型:fm/ffm模型為每個特徵構建乙個隱式向量,所需要的引數個數為 \(o(km)\),其中k為隱式向量維度,m為特徵個數;poly-2模型為每個2階特徵組合設定乙個引數來表示這個2階特徵組合的權重,所需要的引數個數為 \(o(m^2)\)。第二,相比於poly-2模型,fm/ffm模型能更有效地學習引數:當乙個2階特徵組合沒有出現在訓練集時,poly-2模型則無法學習該特徵組合的權重;但是fm/ffm卻依然可以學習,因為該特徵組合的權重是由這2個特徵的隱式向量點乘得到的,而這2個特徵的隱式向量可以由別的特徵組合學習得到。總體來說,fm/ffm是一種非常有效地對二階特徵組合進行自動學習的模型。

\[y(x)=w_0+\sum_^nw_ix_i+\sum_^n\sum_^nw_x_ix_j

\]從這個公式可以看出,組合特徵的引數一共有\(n(n−1)\over 2\)個,任意兩個引數都是獨立的。當組合特徵的樣本數不充足時, 學習到的引數將不準確, 從而會嚴重影響模型**的效果(performance)和穩定性。

那麼,如何解決二次項引數的訓練問題呢?矩陣分解提供了一種解決思路。在model-based的協同過濾中,乙個rating矩陣可以分解為user矩陣和item矩陣,每個user和item都可以採用乙個隱向量表示。矩陣w就可以分解為 \(w=v^tv\),v 的第j列便是第 j 維特徵的隱向量。每個引數 \(w_=⟨v_i,v_j⟩\),這就是fm模型的核心思想。因此,fm的模型方程為

\[y(x)=w_0+\sum _^nw_ix_i+\sum_^n\sum_^n⟨vi,vj⟩x_ix_j \\

⟨v_i,v_j⟩=\sum_^kv_·v_

\]隱向量的長度為k(k當前的fm公式的複雜度是\(\mathcal o(kn^2)\),但是,通過下面的等價轉換,可以將fm的二次項化簡,其複雜度可以優化到\(\mathcal o(kn)\),即:

\[\sum_^n\sum_^n⟨v_i,v_j⟩x_i,x_j=\frac\sum_^k[(\sum_^nv_x_i)^2-\sum_^nv_^2x_i^2]

\]詳細推導:

\[\begin

&\sum_^n\sum_^n⟨v_i,v_j⟩x_ix_j \\

=&\frac\sum_^n\sum_^n⟨v_i,v_j⟩x_ix_j-\frac\sum_^n⟨v_i,v_i⟩x_ix_i \\

=&\frac(\sum_^n\sum_^n\sum_^kv_v_x_ix_j-\sum_^n\sum_^kv_v_x_ix_i) \\

=&\frac\sum_^k[(\sum_^nv_x_i)·(\sum_^nv_x_j)-\sum_^nv_^2x_i^2] \\

=&\frac\sum_^k[(\sum_^nv_x_i)^2- \sum_^nv_^2x_i^2]

\end

\]fm模型的核心作用可以概括為以下三個:

fm降低了交叉項引數學習不充分的影響:one-hot編碼後的樣本資料非常稀疏,組合特徵更是如此。為了解決交叉項引數學習不充分、導致模型有偏或不穩定的問題。作者借鑑矩陣分解的思路:每一維特徵用k維的隱向量表示,交叉項的引數\(w_\)用對應特徵隱向量的內積表示,即\(⟨v_i,v_j⟩\)。這樣引數學習由之前學習交叉項引數\(w_\)的過程,轉變為學習n個單特徵對應k維隱向量的過程。

fm提公升了模型預估能力。可以用於預估訓練集中沒有出現過的特徵組合項.

fm提公升了引數學習效率:是在多項式模型基礎上對引數的計算做了調整,成為線性複雜度. 從互動項的角度看,fm僅僅是乙個可以表示特徵之間互動關係的函式表法式,可以推廣到更高階形式,即將多個互異特徵分量之間的關聯資訊考慮進來。例如在廣告業務場景中,如果考慮user-ad-context三個維度特徵之間的關係,在fm模型中對應的degree為3。

與其他模型相比,它的優勢如下:

fm的缺點: 由於需要兩兩組合特徵, 這樣任意兩個交叉特徵之間都有了直接或者間接的關聯, 因此任意兩組特徵交叉組合的隱向量都是相關的, 這實際上限制了模型的複雜度. 但是如果使得任意一對特徵組合都是完全獨立的, 這與通過核函式計算特徵交叉類似, 有著極高的複雜性和自由度, 模型計算十分複雜. ffm正好介於這兩者之間.

ffm引入特徵組(field)的概念來優化此問題. ffm把相同性質的特徵歸於同乙個field, 按照級別分別計算當前特徵與其它field的特徵組合時的特徵向量, 這樣特徵組合的數量將大大減少.

假設樣本的 n 個特徵屬於 f 個field,那麼ffm的二次項有 nf個隱向量。而在fm模型中,每一維特徵的隱向量只有乙個。fm可以看作ffm的特例,是把所有特徵都歸屬到乙個field時的ffm模型。ffm模型方程如下:

\[y(x)=w_0+\sum_^nw_ix_i+\sum_^n\sum_^n⟨v_,v_⟩x_ix_j \\

\]如果隱向量長度為k, 那麼ffm的二次項引數就有nfk個,遠多餘fm的nk個.

由於ffm的任意兩組交叉特徵的隱向量都是獨立的, 可以取得更好的組合效果, 這也使得ffm二次項並不能夠化簡,其複雜度為\(\mathcal o(kn^2)\)。

權重求解:

libffm的實現中採用的是adagrad隨機梯度下降方法. 並且在ffm公式中省略了常數項和一次項,模型方程如下:

\[ϕ(w,x)=\sum_⟨w_,w_⟩x_x_

\]其中,c2是非零特徵的二元組合,j1是特徵,屬於field f1,\(w_\)是特徵 j1對field f2 的隱向量。此ffm模型採用logistic loss作為損失函式,和l2懲罰項,因此只能用於二元分類問題。

\[\underset\sum_^n\log(1+\exp)+\frac‖w‖^2

\]ffm相當於在fm的基礎上考慮了不同域的特徵之間的互動強度。但是ffm的引數過多,在離線優化以及線上使用時,效能較為一般。fwfm同ffm一樣,也是在fm的基礎上考慮不同域之間的互動強度關係,但做法不同。fwfm中對不同域之間的互動強度賦予乙個統一的權重

\[\phi_(v,e,r) = w_0 + \sum_^m x_i\langle e_i,v_\rangle + \sum_^m \sum_^m x_ix_j\langle e_i,e_j\rangle r_,}

\]fwfm與ffm的效果比較接近(可能略差一點),能夠實現**效果和效能的平衡。

參考**:field-weighted factorization machines for click-through rate prediction in display advertising。

deepfm模型結合了廣度和深度模型的優點,聯合訓練fm模型和dnn模型,來同時學習低階特徵組合和高階特徵組合。此外,deepfm模型的deep部分和fm部分共享embedding層輸入,這樣embedding層的隱式向量在(殘差反向傳播)訓練時可以同時接受到兩部分的資訊,從而使embedding層的資訊表達更加準確。deepfm相對於現有的廣度模型、深度模型以及wide & deep模型的優勢在於:

deepfm模型同時對低階特徵組合和高階特徵組合建模,從而能夠學習到各階特徵之間的組合關係;

deepfm模型是乙個端到端的模型,不需要額外的人工特徵工程。

參考

特徵組合之因子分解機 FM

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

因子分解機FM原理及SGD訓練

目錄 背景模型 用途交叉項係數 sgd求解引數 steffen rendle於2010年提出factorization machines 下面簡稱fm 並發布開源工具libfm。fm的提出主要對比物件是svm,與svm相比,有如下幾個優勢 1 對於輸入資料是非常稀疏 比如自動推薦系統 fm可以,而s...

質因子分解

今天沒事做,我們來寫個部落格,混混等級!我們以求數的質因子的個數為例來講解。對於質因子分解最簡單最純粹的暴力我相信大家都會的。int getnum int x return ans 但是當處理的資料比較多,而且範圍也比較大的時候顯然這種方式就不再那麼適合了。既然我們是分解質因子,那麼我們就可以先預處...