2023年google推出了wide&deep模型之後,基本上就成為了各大推薦系統的標配。該模型既能學習到低階的記憶性,又能學習到高階部分的泛化性,所以整體效果來說是比較好的。
但是它有個麻煩的地方,那就是wide部分需要較多的特徵工程工作。這一點對於人員緊張的小廠來說還是不太方便。而fm具有自動學習交叉特徵的能力,同時其使用的隱變數也可以跟deep部分一起共享。所以也就有了deepfm這個模型,用fm來代替wide部分。
詳細介紹見fm簡介
對比fm和wide&deep的wide部分:
優點:
缺點:儘管fm做了特徵交叉,但是整體而言還是屬於比較低階的特徵,模型學習到的主要還是特徵共現性,即記憶特徵。要想提高模型的泛化能力,還是需要加入deep部分。
端到端模型訓練,無需特徵工程和預訓練
同時捕捉到高階和低階特徵
deepfm的低階部分由fm組成。**的fm部分看起來像是個一層的神經網路,實際上yfm
y_yf
m還是用的fm傳統的計算trick公式得到的.(注意這層網路的名字叫fm layer)
deepfm的高階部分由mlp組成。假如我們有n個特徵(fm中的field概念),隱變數為k維,則deep部分的輸入即是把這n個k維的隱變數拼一起。[v1
,v2,
...v
n]
[v_1, v_2, ... v_n]
[v1,v
2,.
..vn
], 其中vi=
[vi1
,vi2
,...
vik]
v_i = [v_, v_, ... v_]
vi=[v
i1,
vi2
,...
vik
] 分別得到yfm
y_yf
m和y dn
ny_
ydnn
後,最終模型的輸出為: y^=
sigm
oid(
yfm+
ydnn
)\hat = sigmoid(y_ + y_)
y^=si
gmoi
d(yf
m+y
dnn
). 搭建模型的時候需要注意,k維的隱變數是fm和deep一起共享的。
模型實現:search-deeplearning/models/deepfmestimator
參考了chenglongchen/tensorflow-deepfm的實現,其中fm和mlp部分輸出的各自是乙個tensor,通過concate一起在餵入最後一層網路。
即:y ^=
sigm
oid(
w(fi
nal)
([yf
m,yd
nn])
+b(f
inal
))
\hat = sigmoid(w^([y_, y_]) + b^)
y^=si
gmoi
d(w(
fina
l)([
yfm
,ydn
n])
+b(f
inal
))
推薦系統CTR預估模型之DeepFM
deepfm是華為諾亞方舟實驗室和哈工大在2017年合作發表的一篇 思想和實現都很簡單,只是在wide deep的基礎上加乙個fm,其中fm和dnn共享原始的embedding特徵向量,由於fm計算的時間複雜度為o kn 其中k為field的個數,一般也很小,故deepfm實際計算的時間複雜度和dn...
CTR預估系列模型漫談
了解fm模型之前,需要先說一下lr帶入一下場景。lr作為早期ctr預估裡面的模型,其速度上有著無可比擬的優勢,而偏偏ctr場景下伴隨著有大量的離散特徵,高維稀疏特徵,這個很適合lr的場景。lr整個模型可以被描述為乙個公式 y w 0 sum w i x i lr的特點就是簡單高效速度快可解釋性強,但...
推薦系統CTR預估模型之Deep Cross
deep cross是google在2017年發表的一篇 其思想和wide deep基本一致,只是把wide deep中的wide部分變成cross層,來彌補dnn不能顯示的學習交叉特徵這一缺陷,一般情況下效果會好於wide deep,而且模型複雜度與與wide deep接近。模型結構如上圖,右邊的...