CTR預估模型之DeepFM

2021-10-05 23:00:13 字數 1618 閱讀 9852

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接近。模型結構如上圖,右邊的...