CTR深度学习模型之 DeepFM 模型解读
CTR 系列文章:
上一篇文章講了一些比較經(jīng)典的 CTR 模型:CTR經(jīng)典模型串講:FM / FFM / 雙線性 FFM 相關(guān)推導(dǎo)與理解,從這一篇文章開(kāi)始將會(huì)陸續(xù)介紹一些使用深度學(xué)習(xí)完成CTR預(yù)估的模型,本文主要講的是DeepFM模型。
之前講的 FM、FFM、Bi-FFM 本質(zhì)上都是要學(xué)習(xí)戶點(diǎn)擊行為背后隱含的特征組合,不過(guò)這些經(jīng)典模型主要是進(jìn)行二階特征組合。理論上也可以進(jìn)行更高階的特征組合,但是會(huì)造成特征維度指數(shù)級(jí)增長(zhǎng)以及數(shù)據(jù)稀疏等問(wèn)題。對(duì)于高階特征組合問(wèn)題不難想到可以用多層的神經(jīng)網(wǎng)絡(luò)解決。
DeepFM 的整體結(jié)構(gòu)
對(duì)于類別變量,需要進(jìn)行onehot編碼后輸入到DNN中,但是常規(guī)的做法會(huì)導(dǎo)致網(wǎng)絡(luò)參數(shù)過(guò)多:
為了減少參數(shù)數(shù)量,可以借鑒FFM的思想,將特征劃分為不同的 field:
然后再接上幾個(gè)全連接層完成高階特征組合:
當(dāng)然,我們也可以單獨(dú)進(jìn)行低階特征組合,然后和高級(jí)特征融合,即將DNN與FM進(jìn)行融合。具體的形式有兩種,一是串行結(jié)構(gòu),二是并行結(jié)構(gòu):
DeepFM 是并行結(jié)構(gòu)的代表,具體結(jié)構(gòu)如下:
此模型主要分為左邊的FM模塊與右邊的DNN模塊,最終的預(yù)測(cè)由兩部分的輸出相加得到:
y^=sigmoid(yFM+yDNN)\hat{y}=sigmoid(y_{FM}+y_{DNN}) y^?=sigmoid(yFM?+yDNN?)
DeepFM 中的 FM 模塊
FM模塊如下圖所示:
此部分實(shí)現(xiàn)的功能是:
yFM=?w,x?+∑i=1d∑j=i+1d?Vi,Vj?xi?xjy_{FM}=\langle w, x \rangle + \sum_{i=1}^d \sum_{j=i+1}^d \langle V_i, V_j \rangle x_i \cdot x_j yFM?=?w,x?+i=1∑d?j=i+1∑d??Vi?,Vj??xi??xj?
首先看看式子的第一項(xiàng) <w,x><w, x><w,x> 的計(jì)算是由下圖中黃色實(shí)心圓表示的每個(gè)field的非零值相以及綠色箭頭都代表的權(quán)重 w 相乘后累加而得。
接下來(lái)介紹FM式子中的二次項(xiàng)計(jì)算過(guò)程。首先理解下圖中的 Dense Embeddings 層,如果對(duì)輸入層和embedding層展開(kāi)后可以得到下面的圖:
看到圖中的 V11,V12,VikV_{11}, V_{12}, V_{ik}V11?,V12?,Vik?是不是很熟悉?由于CTR的輸入層一般是很稀疏的向量,因此需要隱藏層之前,先按照不同的 field 進(jìn)行 embedding 操作將高維稀疏壓縮向量到低維稠密向量。這個(gè) embedding 過(guò)程有兩個(gè)特點(diǎn):
1,不同的 field 的輸入可能不同,但是在embedding之后向量的長(zhǎng)度均為K
2,在 FM 里得到的隱變量 VikV_{ik}Vik? 現(xiàn)在作為了嵌入層網(wǎng)絡(luò)的權(quán)重
舉個(gè)例子,假設(shè) embedding 后的維度 k=5,則對(duì)于每個(gè) field 的輸入,只有一個(gè)輸入節(jié)點(diǎn) xix_ixi? 為1,例如 x2=1x_2 = 1x2?=1,此時(shí)輸入層與對(duì)應(yīng)的 filed 層中,僅有五條帶有權(quán)重的線與 embedding 層相連,這五條線上的權(quán)重 V21,V22,V23,V24,V25V_{21}, V_{22}, V_{23}, V_{24}, V_{25}V21?,V22?,V23?,V24?,V25? 的組合即為 FM 公式第二項(xiàng)中的 V2V_2V2?,如下圖綠色箭頭所示:
同理,我們可以得到 V1,V3....VnV_1, V_3....V_nV1?,V3?....Vn?,然后在 FM 層中對(duì)不同 Vi,VjV_i, V_jVi?,Vj?的組合進(jìn)行內(nèi)積計(jì)算,例如下圖中綠色箭頭所示:
最后,在最上層使用 sigmoid 激活函數(shù)得到該 FM 模塊的輸出值。
DeepFM 中的 DNN 模塊
首先看看這個(gè)模塊的整體結(jié)構(gòu):
此模塊使用多層前饋神經(jīng)網(wǎng)絡(luò),用于學(xué)習(xí)高階交叉特征。具體過(guò)程是:得到了 Embedding 層的輸出后,連接一些隱藏層,然后在最上面的輸出層使用 sigmoid 函數(shù)得到最后的輸出值。
需要注意的是,隱藏層的輸入是 Embedding 層,這個(gè)嵌入層是 FM 模塊與 DNN 模塊所共享的。這帶來(lái)兩個(gè)好處:
1,可以從原始特征中學(xué)習(xí)到低階和高階特征
2,不需要專業(yè)的特征工程
到此為止,DeepFM 模型相關(guān)的解釋說(shuō)明就結(jié)束了,后續(xù)可能會(huì)有文章講解 tensorflow2 的相關(guān)代碼實(shí)現(xiàn)。
參考文章:
DeepFM技術(shù)細(xì)節(jié)
推薦系統(tǒng)遇上深度學(xué)習(xí)(三)–DeepFM模型理論和實(shí)踐
總結(jié)
以上是生活随笔為你收集整理的CTR深度学习模型之 DeepFM 模型解读的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GB50174-2017机房标准_机房建
- 下一篇: Flash如何制作旋转的三棱锥