深度學(xué)習(xí)在 CTR 中應(yīng)用
一. Wide&&Deep 模型
首先給出Wide && Deep [1] 網(wǎng)絡(luò)結(jié)構(gòu):
本質(zhì)上是線性模型(左邊部分, Wide model)和DNN的融合(右邊部分,Deep Model)。
推薦系統(tǒng)需要解決兩個問題:
記憶性: 比如通過歷史數(shù)據(jù)知道”麻雀會飛”,”鴿子會飛”
泛化性: 推斷在歷史數(shù)據(jù)中從未見過的情形,”帶翅膀的動物會飛”
WideDeep是怎么解決這兩個問題呢?
Wide模型:
比如現(xiàn)在有一個點(diǎn)餐推薦APP,我輸入炸雞(query),那么會給我進(jìn)行推薦其他相關(guān)的食物(item),那么模型目地就是為了希望知道給定了query, 消費(fèi)item的概率, 即: P(消費(fèi)| query, item). 那我們就可以通過構(gòu)建出一系列(query, item)的cross 特征, 通過LR去學(xué)習(xí)到這些不同的cross特征與target = 消費(fèi) 的相關(guān)性。比如(query = “炸雞”, item = “啤酒”) 與target = 消費(fèi) ,通過歷史數(shù)據(jù)學(xué)習(xí)到有很強(qiáng)的相關(guān)性,那么就推薦給炸雞。
Deep模型:
現(xiàn)在我厭倦了推薦的結(jié)果,希望推一些讓我驚喜的食物,上面的wide模型,我們構(gòu)建的cross特征也是有限的,不能面面俱到,cross特征或許可以是三個類別,四個類別。所以,需要deep模型自動幫我們做一些特征。每個特征可以映射到一個低維空間去,學(xué)習(xí)到一個低維dense的表達(dá)(embedding vector)。 那么給定一個query, 我們可以在embedding space中找距離相近的item, 認(rèn)為是潛在喜歡的item
Wide模型與Deep模型的結(jié)合,目的是為了平衡記憶性和泛化性的結(jié)果.
二. FNN,SNN 模型
和wide deep出發(fā)點(diǎn)一樣, 一些線性模型LR很難學(xué)到非線性表達(dá), 非線性模型比如FM, GBDT又很難學(xué)到所有的特征組合方式。那么,如何利用DNN去自動學(xué)習(xí)到特征表達(dá),自動去學(xué)習(xí)到特征之間的交叉呢?
FNN模型結(jié)構(gòu):
首先需要對category特征進(jìn)行一個one-hot編碼。
l1, l2層都是隱藏層,那么, dense real layer 就可以看作一個embedding層, 每個field 分別 對應(yīng)一個embedding的過程。通常,使用FM去初始化這些參數(shù)往往能夠更快地收斂,***限制避免訓(xùn)練過程中陷入局部最小,以及得到更好的結(jié)果。可以看到,F(xiàn)NN其實(shí)就是widedeep模型的deep部分,但是FNN有用FM進(jìn)行一個參數(shù)初始化的過程。
SNN模型結(jié)構(gòu)
SNN和FNN模型區(qū)別于***層的訓(xùn)練方法, FNN***層先用FM初始化,可以看到,SNN***層是全連接的,不區(qū)分不同的field。 初始化采用RBM(限制玻爾茲曼機(jī)) 和 DAE(自動編碼機(jī))。
訓(xùn)練過程中,沒有每輪迭代都會用到所有的特征,對為0的單元進(jìn)行一個下采樣操作,圖中黑色的單元即是沒有被選取到,不參與參數(shù)迭代。計算復(fù)雜度得到大量的減少。
文章在iPinYou數(shù)據(jù)集上進(jìn)行評測,可以看到FNN效果優(yōu)于FM,LR。
文章對調(diào)參也給出了一些經(jīng)驗(yàn)
網(wǎng)絡(luò)結(jié)構(gòu),通常,鉆石型的網(wǎng)絡(luò)結(jié)構(gòu)往往優(yōu)于其他結(jié)構(gòu)
隱藏層單元數(shù)不是越高越好,中間有一個臨界值達(dá)到***.
Dropout在數(shù)據(jù)量本來就很稀疏的情況下盡量不用,不同的數(shù)據(jù)集dropout表現(xiàn)差距比較大。
三. PNN 模型
PNN的網(wǎng)絡(luò)結(jié)構(gòu):
PNN的結(jié)構(gòu)的思想相比于WideDeep模型核心改動地方在對于embedding后的dense feature,增加了兩兩交叉的功能,widedeep是embedding feature全部輸入到隱藏層了。不同field經(jīng)過Embedding后的特征做點(diǎn)擊運(yùn)算其實(shí)就相當(dāng)于FM,那么PNN認(rèn)為首先需要確保學(xué)習(xí)到這些交叉特征,再去額外交給DNN去學(xué)習(xí)更復(fù)雜的交叉特征。那么PNN結(jié)構(gòu)其實(shí)相當(dāng)于FM+DEEP。
再說下網(wǎng)絡(luò)細(xì)節(jié): Embedding layer 和Wide Deep模型是一樣的, 不同field特征映射到了一個embedding的空間上,這時,不是所有的特征直接送到一個NN網(wǎng)絡(luò)里面去,這里分成兩個部分z 和p。 z部分直接就是原始的embedding特征不變; P部分是embedding特征兩兩做內(nèi)積運(yùn)算,達(dá)到FM的效果,接下來z和p拼接成一個vector, 送到一個NN網(wǎng)絡(luò)里面,***softmax輸出概率值。
四. DeepFM 模型
DeepFM的網(wǎng)絡(luò)結(jié)構(gòu):
可以看到,很像PNN結(jié)構(gòu),只是在這里FM沒有和原始特征一起送到NN中去訓(xùn)練,而是單獨(dú)拿出來類似于WIDE模型。其實(shí)就是WideDeep模型中Wide側(cè)替換為FM。
五. NFM 模型
NFM模型的網(wǎng)絡(luò)結(jié)構(gòu):
首先,也是經(jīng)過全連接得到embedding層,輸入是
分別是不同特征對應(yīng)的相同維數(shù)的embedding向量。接下來,這些embedding向量兩兩做element-wise的相乘運(yùn)算得到B-interaction layer。(element-wide運(yùn)算舉例: (1,2,3)element-wide相乘(4,5,6)結(jié)果是(4,10,18)。)
該B-interaction Layer 得到的是一個和embedding維數(shù)相同的向量。然后后面接幾個隱藏層輸出結(jié)果。
為什么這么做呢?首先看如果B-interaction layer后面不接隱藏層,直接把向量的元素相加輸出結(jié)果(對應(yīng)下面的公式h=(1,1,1,...,1)) , 就是一個FM, 就好比一個線性模型,權(quán)重都是1 :
現(xiàn)在后面增加了隱藏層,相當(dāng)于做了更高階的FM,更加增強(qiáng)了非線性表達(dá)能力。
六. AFM 模型
AFM模型[6]的網(wǎng)絡(luò)結(jié)構(gòu):
AFM是NFM模型的一個改進(jìn), 在傳統(tǒng)FM模型中,使用二階交叉特征得到非線性表達(dá)能力,但是不是所有的特征交叉都會有預(yù)測能力,很多無用的特征交叉加入后反而會相當(dāng)于加入了噪聲。
因此,在這個模型中,加入了Attention Net 機(jī)制,aij表示特征i,j交叉的權(quán)重。計算方式如下: 經(jīng)過一個attention net的隱藏層,得到該特征交叉的權(quán)重
***的預(yù)測方式和NFM類似, 當(dāng)P=(1,1,1,...,1),是加了權(quán)重的FM, 后面也可以和NFM一樣增加隱藏層,得到更高階特征的表達(dá)能力。
結(jié)語: 沒有***的模型,針對不同的業(yè)務(wù)可能需要選擇不同的模型,比如如果需要解釋能力強(qiáng)的,那么不妨選擇AFM模型, Wide Deep實(shí)際中應(yīng)用比較廣,效果也可以,但是很難定位問題,也難分析Deep側(cè)的特征重要性。同時網(wǎng)絡(luò)結(jié)構(gòu)需要不斷嘗試,或許我們都可以embedding到一個固定的維數(shù)后,可以把這個embedding特征當(dāng)作圖像來做,做卷積,pooling, 說不定有驚喜,達(dá)到去噪聲的目的。
原文鏈接:http://t.cn/RpvIs3Q
【本文是51CTO專欄作者“騰訊云技術(shù)社區(qū)”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系原作者獲取授權(quán)】