fm是乙個不得不提的演算法,將部分筆記內容整理到部落格,內容文字不甚成系統,只作為記錄點撥之用。
從特徵組合說起:
對邏輯回歸最樸素的特徵組合就是二階笛卡爾積,但其中也有問題所在:
兩兩組合導致維度災難
組合後特徵並不見得都有效,通常大量無效特徵
組合後特徵樣本非常稀疏,如果樣本中不存在對應組合,則無法學習引數,該組合無意義
y = ω0 + σωixi + σσωijxixj
如公式,若沒有足夠樣本能夠學習到所有特徵組合的權重,那麼在**這樣組合的新樣本時,只能放棄,因為沒有合適的權重
針對這個問題,提出了因子分解機模型fm(factorization machine)。
fm模型:
1. 原理
fm在2023年被提出,因為邏輯回歸在特徵組合時由於樣本稀疏無法學習到很多組合的權重問題,因子分解機的提出者就想,能否對上面公式的ωij解耦,讓每乙個特徵學習乙個隱因子向量出來。
類似於之前提的lfm,為每個使用者和每個物品各自學習乙個隱因子向量一樣,只是把使用者與物品的組合變為特徵與特徵的組合。這樣一來,任何兩個特徵在使用時需要組合,那麼掏出各自攜帶的隱因子變數做乙個向量點積,就是兩者組合特徵的權重了。
y = ω0 + σωixi + σσxixj
這個公式和前面特徵組合公式相比,不再是用原來的ωij權重,而是利用兩個隱因子向量的點積代替
背後假設:其實是認為兩個特徵之間,即使沒有共同出現在一條樣本中,但也是有間接聯絡的。比如特徵a和特徵b曾在一些樣本中一起出現過,a和c也一起出現過,那麼特徵a和特徵c無論是否在樣本中一起出現過,都應該有某些聯絡
在實際**ctr時,特徵a和特徵c真的在一起出現了,如果用的是fm模型,這時**程式便從資料庫中調取特徵a和特徵c的隱因子向量,拿出來做乙個點積運算,就得到了a和c的特徵組合的權重
因子分解機先進之處就在此。也可以同樣的,做三階、四階的組合,但組合越多,計算複雜度陡增,因此在實際使用中,fm通常表演到二階特徵組合就夠了
2. 模型訓練
因子分解機的引數學習無特別之處,看目標函式,對於二分類問題,輸出需要經過sigmoid函式變換,依然可以用於lr同樣的交叉熵損失。
對這個交叉熵損失求梯度下降或sgd就可以得到模型引數,沒有區別。
注意損失函式還需要加正則項,控制偏差和方差
3. **階段
在實際計算中,fm的二階特徵組合點積的計算複雜度有點高。如果隱因子維度是k,特徵維度是n,那麼複雜度就是o(kn^2)。其中n^2表示特徵需要兩兩組合,k是每次組合需要計算k維向量的點積。因此需要稍微改造一下。
loop1:迴圈k次,k是隱因子向量的維度,其中,迴圈到第f次時:
loop2:迴圈n個特徵,第i次迴圈時:
從第i個特徵的隱因子向量中拿出第f維的值
計算兩個值:a是特徵是和f維的值相乘,b是a的平方
把n個a累加起來,並平方得到c,把n個b也累加起來,得到d
c - d得到e
最後把k次迴圈得到的k個e累加除以2
這就是因子分解機中,而結組合部分的實際計算方法,這樣做的計算複雜度只是o(kn)
4. 一網打盡其他模型
這裡說的一網打盡並不是打敗,而是說fm可以變形成其他模型
1、若樣本特徵只保留使用者id和電影id,fm模型變成:
y = ω0 + ωu + ωi +
在一條樣本中,各自都只有乙個維度為1,其他都是0,所以在一階部分沒有求和,二階部分也只剩下乙個1,其他為0。這就是帶有偏置資訊的svd矩陣分解
2、繼續若在樣本特徵加入使用者歷史評分過的電影id,再求隱因子向量,這就是svd++
因此,因子分解機是把矩陣分解一網打盡了,順便還幹起邏輯回歸的工作,也正因如此,因子分解機常常用來做模型融合,在推薦系統的排序階段肩負起對召回結果重排序的任務
ffm在fm的基礎上進行一些改進,改機的思路是,不但認為特徵和特徵之間潛藏著一些關係,還認為特徵和特徵型別之間潛藏著關係。
這個特徵型別,就是某些特徵實際上是來自資料的同乙個字段,比如使用者id,佔據了很多維度,變成了很多特徵,但他們都屬於同乙個型別,都叫使用者id。這個特徵型別就是字段,field。
之前的fm中,認為每個特徵由乙個隱因子向量,ffm改進的是二階組合部分,改進的模型認為每個特徵有f個隱因子向量,這裡的f便是特徵一共來自多少個field,二階部分變為σσxi xj
ffm模型也常用來做ctr預估,在fm和ffm實踐中,需要對樣本做歸一化處理。
總結:嚴格來說,因子分解機也算矩陣分解演算法的一種,因為它的學習結果也是隱因子向量,也是用過隱因子向量的點積代替原來的單個權重引數。
模型理解 對FM模型核心思想的理解
在 深入ffm原理與實踐 中提到 所有二次項引數 wij w wi j 可以組成乙個對稱陣 w ww,那麼這個矩陣就可以分解為w v tv w v tv w vtv,v vv 的第 j jj 列便是第 j jj 維特徵的隱向量。換句話說,每個引數 wij vi vj w left langle v ...
fm演算法詳解 fm演算法 基於fm推薦演算法
在簡單頻率調製中,兩個振盪器都只用正弦曲線 sinusoidal 的波形。不過,由於.這使得作曲家也不必用頻譜過於複雜的波形完成fm合成。事實上,如用乙個頻譜成分.豆瓣fm的推薦演算法沒有停止,反而是在不斷演進當中,伴隨著它成長的使用者,會慢慢發現越來越多的驚喜與滿意。豆瓣fm是中國網際網路實踐個性...
14 模型,又見模型 小結
1.bus type,device,device driver的關係?1 bus type有兩個kset成員,struct kset drivers struct kset devices 分別表示它連線在這個匯流排上的裝置列表和註冊在這個匯流排上的驅動列表。2 device有兩個成員 struct...