FM 原理與特點(diǎn)
適用場(chǎng)景
FM模型可以用于回歸任務(wù)、二分類任務(wù)摆碉、排名任務(wù)亿笤,特別是在數(shù)據(jù)稀疏場(chǎng)景下,效果明顯符匾,廣泛應(yīng)用于推薦系統(tǒng)、廣告系統(tǒng)等領(lǐng)域瘩例。
-
針對(duì)問(wèn)題:
FM(Factorization Machine)主要是為了解決數(shù)據(jù)稀疏的情況下啊胶,特征怎樣組合的問(wèn)題。
不同特征之間非獨(dú)立假設(shè)垛贤。
這個(gè)是它的原式焰坪,對(duì)于這個(gè)式子來(lái)說(shuō),前面兩項(xiàng)的復(fù)雜度是O(n)聘惦,我們可以先忽略某饰,重點(diǎn)來(lái)看最后一項(xiàng)。我們要做的就是通過(guò)數(shù)學(xué)公式的變形來(lái)對(duì)這一項(xiàng)進(jìn)行化簡(jiǎn):
-
求解
-
多維擴(kuò)展
> 2特征之間交互部凑。
不好優(yōu)化露乏,三重特征交叉過(guò)度稀疏,意義不大涂邀。 FM 實(shí)現(xiàn)
libfm-C++的 自己看 懶得記瘟仿。
http://www.libfm.org/
FFM
就是在FM模型上加field,效果優(yōu)于FM比勉,但是參數(shù)量太大劳较,一般情況下不建議使用這種笨重的模型驹止。
FFM是FM的一個(gè)特例,它更細(xì)致地刻畫了這個(gè)特征观蜗。首先它做了任意兩個(gè)特征組合臊恋,但是區(qū)別在于,怎么刻劃這個(gè)特征墓捻?FM只有一個(gè)向量抖仅,但FFM現(xiàn)在有兩個(gè)向量,也就意味著同一個(gè)特征砖第,要和不同的fields進(jìn)行組合的時(shí)候撤卢,會(huì)用不同的embedding去組合,它的參數(shù)量更多梧兼。對(duì)于一個(gè)特征來(lái)說(shuō)放吩,原先是一個(gè)vector,現(xiàn)在會(huì)拓成F個(gè)vector羽杰,F(xiàn)是特征fields的個(gè)數(shù)渡紫,只要有跟其它特征的任意組合,就有一個(gè)vector來(lái)代表考赛,這就是FFM的基本思想惕澎。
為了改進(jìn)FFM參數(shù)量巨大不適合線上訓(xùn)練的特點(diǎn),雙線性改進(jìn)應(yīng)運(yùn)而生颜骤。
原理:共享參數(shù)矩陣W集灌。
三種組合W
最優(yōu)效果為組合方式。張俊林老師實(shí)驗(yàn)結(jié)果顯示复哆,隨著參數(shù)逐漸增多,雙線性FFM效果逐漸接近甚至趕超F(xiàn)FM腌零。
結(jié)論與猜想:
- 共享參數(shù)矩陣梯找,可以有效降低FFM的海量參數(shù),提升模型效率益涧。
- 隨著共享矩陣參數(shù)逐漸復(fù)雜锈锤,模型效果提升就接近飽和,猜想可能存在一個(gè)共享參數(shù)矩陣的最優(yōu)邊界闲询。
兩條演進(jìn)路線:
一種久免,設(shè)計(jì)有效的FM新func使得有效捕捉二姐特征組合,第二種扭弧,討論高階特征阎姥。一般應(yīng)用中,第一種方式的收益鸽捻,對(duì)于大多數(shù)場(chǎng)景呼巴,要優(yōu)于第二種泽腮,不是高階特征就一定有收益,除非高階特征的組合衣赶,對(duì)目標(biāo)預(yù)測(cè)的效果有正向收益诊赊,否則,一般來(lái)說(shuō)二階特征組合已經(jīng)滿足所需要的精度府瞄,且適合于實(shí)踐與部署碧磅。
DeepFM
基礎(chǔ)架構(gòu),基于W&D遵馆,LR替換為FM由人工交叉走向特征自動(dòng)交叉鲸郊。
FM部分:
sparsefeature做addition,共享的embedding之后的特征做隱向量點(diǎn)積团搞。
Deep部分:
稀疏特征轉(zhuǎn)換為低維稠密向量严望。通常隨機(jī)初始化,
DeepCTR的方式逻恐,通過(guò)logistic loss function分別訓(xùn)練像吻,合并輸出。
實(shí)際上由三部分構(gòu)成:linear+Second-order Interaction+DNN
xDeepFM 與特征交叉三巨頭
特征交叉三巨頭
理論上复隆,XDeepFM更接近于DCN的模型結(jié)構(gòu)拨匆,是DCN模型結(jié)構(gòu)的改進(jìn),模型由三部分組成:linear+DNN+CIN
解決元素級(jí)特征交互中bit-wise方式挽拂,模型訓(xùn)練域概念丟失問(wèn)題惭每,如圖所示
DCN的cross方式,先將field 的向量橫向 concat亏栈,作為一個(gè)輸入向量 x0台腥,然后每層特征都會(huì)與 x0做內(nèi)積,得到更高一階的特征交互(DCN的Xl層輸出與Xl+1層輸出進(jìn)行殘差擬合)绒北。
如何改進(jìn)黎侈?
CIN:
CIN與corss的主要差異:
- 采用vector-wise的方式使同field特征權(quán)重得以保持一致。
- 在第l層闷游,cross包含從1~l+1層的所有特征組合峻汉,而CIN只包含l+1層的特征組合,每層輸出中間結(jié)果脐往,然后X0再與每層做Hadamard乘積休吠。
- 幾個(gè)問(wèn)題
- CIN與FM的關(guān)系?
FM為CIN單層且壓縮矩陣W恒為1的特殊情況CIN业簿。 -
W這個(gè)鬼東西貌似是關(guān)鍵瘤礁?怎么求?
求解方式:一維卷積辖源,deepctr里面實(shí)現(xiàn)可以去看類CIN下的call蔚携。
核心思想就是利用H^k+1 個(gè)尺寸為 m*H^k 的卷積核生成下一層隱層的狀態(tài),將三維矩陣壓縮為二維希太。
curr_out的大小是 Batch * Embedding Size * Layer size。然后把curr_out按照direct或者非direct的方式作為下一個(gè)隱層向量的輸入酝蜒。filters采用默認(rèn)glorot_uniform_initializer初始化誊辉。
純屬學(xué)習(xí) 不涉利益
ref:
https://zhuanlan.zhihu.com/p/343174108
*https://zhuanlan.zhihu.com/p/145436595
https://zhuanlan.zhihu.com/p/35526715
https://zhuanlan.zhihu.com/p/61096338
https://zhuanlan.zhihu.com/p/83784018
https://zhuanlan.zhihu.com/p/371849616
https://zhuanlan.zhihu.com/p/67795161
https://arxiv.org/pdf/1703.04247.pdf
https://zhuanlan.zhihu.com/p/154591869
https://zhuanlan.zhihu.com/p/109933924
https://zhuanlan.zhihu.com/p/45450361
https://www.cnblogs.com/talkaudiodev/p/14287562.html