1、背景
深度學(xué)習(xí)在CTR預(yù)估領(lǐng)域已經(jīng)有了廣泛的應(yīng)用,常見的算法比如Wide&Deep,DeepFM等。這些方法一般的思路是:通過Embedding層,將高維離散特征轉(zhuǎn)換為固定長(zhǎng)度的連續(xù)特征,然后通過多個(gè)全聯(lián)接層,最后通過一個(gè)sigmoid函數(shù)轉(zhuǎn)化為0-1值,代表點(diǎn)擊的概率。即Sparse Features -> Embedding Vector -> MLPs -> Sigmoid -> Output.
這種方法的優(yōu)點(diǎn)在于:通過神經(jīng)網(wǎng)絡(luò)可以擬合高階的非線性關(guān)系,同時(shí)減少了人工特征的工作量。
不過,阿里的研究者們通過觀察收集到的線上數(shù)據(jù),發(fā)現(xiàn)了用戶行為數(shù)據(jù)中有兩個(gè)很重要的特性:
Diversity:用戶在瀏覽電商網(wǎng)站的過程中顯示出的興趣是十分多樣性的。
Local activation: 由于用戶興趣的多樣性,只有部分歷史數(shù)據(jù)會(huì)影響到當(dāng)次推薦的物品是否被點(diǎn)擊,而不是所有的歷史記錄。
這兩種特性是密不可分的。
舉個(gè)簡(jiǎn)單的例子:
Diversity體現(xiàn)在年輕的母親的歷史記錄中體現(xiàn)的興趣十分廣泛,涵蓋羊毛衫、手提袋、耳環(huán)、童裝、運(yùn)動(dòng)裝等等。而愛好游泳的人同樣興趣廣泛,歷史記錄涉及浴裝、旅游手冊(cè)、踏水板、馬鈴薯、冰激凌、堅(jiān)果等等。
Local activation體現(xiàn)在,當(dāng)我們給愛好游泳的人推薦goggle(護(hù)目鏡)時(shí),跟他之前是否購(gòu)買過薯片、書籍、冰激凌的關(guān)系就不大了,而跟他游泳相關(guān)的歷史記錄如游泳帽的關(guān)系就比較密切。
針對(duì)上面提到的用戶行為中存在的兩種特性,阿里將其運(yùn)用于自身的推薦系統(tǒng)中,推出了深度興趣網(wǎng)路DIN,接下來,我們就一起來看一下模型的一些實(shí)現(xiàn)細(xì)節(jié),然后我們會(huì)給出一個(gè)簡(jiǎn)化版的tensorflow實(shí)現(xiàn)。
2、模型設(shè)計(jì)
整體框架
我們先來看一下推薦系統(tǒng)的整體框架:
整個(gè)流程可以描述為:
1.檢查用戶歷史行為數(shù)據(jù)
2.使用matching module產(chǎn)生候選ads。
3.通過ranking module做point-wise的排序,即得到每個(gè)候選ads的點(diǎn)擊概率,并根據(jù)概率排序得到推薦列表。
4.記錄下用戶在當(dāng)前展示廣告下的反應(yīng)(點(diǎn)擊與否),作為label。
特征設(shè)計(jì)
本文將所涉及到的特征分為四個(gè)部分:用戶特征、用戶行為特征、廣告特征、上下文特征,具體如下:
其中,用戶行為特征是multi-hot的,即多值離散特征。針對(duì)這種特征,由于每個(gè)涉及到的非0值個(gè)數(shù)是不一樣的,常見的做法就是將id轉(zhuǎn)換成embedding之后,加一層pooling層,比如average-pooling,sum-pooling,max-pooling。DIN中使用的是weighted-sum,其實(shí)就是加權(quán)的sum-pooling,權(quán)重經(jīng)過一個(gè)activation unit計(jì)算得到。這里我們后面還會(huì)再介紹到。
BaseModel
在介紹DIN之前,我們先來看一下一個(gè)基準(zhǔn)模型,結(jié)構(gòu)如下:
這里element-wise的意思其實(shí)就是元素級(jí)別的加減,同時(shí),可不要忽略廣播的存在喲。一個(gè)元素和一個(gè)向量相乘,也可以看作element-wise的,因?yàn)檫@個(gè)元素會(huì)廣播成和向量一樣的長(zhǎng)度嘛,嘻嘻。
可以看到,Base Model首先吧one-hot或multi-hot特征轉(zhuǎn)換為特定長(zhǎng)度的embedding,作為模型的輸入,然后經(jīng)過一個(gè)DNN的part,得到最終的預(yù)估值。特別地,針對(duì)multi-hot的特征,做了一次element-wise+的操作,這里其實(shí)就是sum-pooling,這樣,不管特征中有多少個(gè)非0值,經(jīng)過轉(zhuǎn)換之后的長(zhǎng)度都是一樣的!
Deep Interest Network
Base Model有一個(gè)很大的問題,它對(duì)用戶的歷史行為是同等對(duì)待的,沒有做任何處理,這顯然是不合理的。一個(gè)很顯然的例子,離現(xiàn)在越近的行為,越能反映你當(dāng)前的興趣。因此,對(duì)用戶歷史行為基于Attention機(jī)制進(jìn)行一個(gè)加權(quán),阿里提出了深度興趣網(wǎng)絡(luò)(Deep Interest Network),先來看一下模型結(jié)構(gòu):
Attention機(jī)制簡(jiǎn)單的理解就是,針對(duì)不同的廣告,用戶歷史行為與該廣告的權(quán)重是不同的。假設(shè)用戶有ABC三個(gè)歷史行為,對(duì)于廣告D,那么ABC的權(quán)重可能是0.8、0.1、0.1;對(duì)于廣告E,那么ABC的權(quán)重可能是0.3、0.6、0.1。這里的權(quán)重,就是Attention機(jī)制即上圖中的Activation Unit所需要學(xué)習(xí)的。
為什么要引入這一個(gè)機(jī)制呢?難道僅僅是通過觀察歷史數(shù)據(jù)拍腦袋決定的么?當(dāng)然不是,如果不用Local activation的話,將會(huì)出現(xiàn)下面的情況:假設(shè)用戶的興趣的Embedding是,候選廣告的Embedding是
,用戶興趣和候選的廣告的相關(guān)性可以寫作
。如果沒有Local activation機(jī)制的話,那么同一個(gè)用戶對(duì)于不同的廣告,
都是相同的。舉例來說,如果有兩個(gè)廣告A和B,用戶興趣和A,B的相似性都很高,那么在
和
連線上的廣告都會(huì)有很高的相似性。這樣的限制使得模型非常難學(xué)習(xí)到有效的用戶和廣告的embedidng表示。
在加入Activation Unit之后,用戶的興趣表示計(jì)算如下:
? ??????????????????
其中,表示behaviorI_id i的嵌入向量,比如good_id,shop_id等。
是所有behavior_ids的加權(quán)和,表示的是用戶興趣;
是候選廣告的嵌入向量;
是候選廣告影響著每個(gè)behavior_id的權(quán)重,也就是Local Activation。
通過Activation Unit計(jì)算得出,這一塊用函數(shù)去擬合,表示為
。
3、模型細(xì)節(jié)
3.1 評(píng)價(jià)指標(biāo)GAUC
模型使用的評(píng)價(jià)指標(biāo)是GAUC,我們先來看一下GAUC的計(jì)算公式:
? ??????????????????
我們首先要肯定的是,AUC是要分用戶看的,我們的模型的預(yù)測(cè)結(jié)果,只要能夠保證對(duì)每個(gè)用戶來說,他想要的結(jié)果排在前面就好了。
假設(shè)有兩個(gè)用戶A和B,每個(gè)用戶都有10個(gè)商品,10個(gè)商品中有5個(gè)是正樣本,我們分別用TA,TB,F(xiàn)A,F(xiàn)B來表示兩個(gè)用戶的正樣本和負(fù)樣本。也就是說,20個(gè)商品中有10個(gè)是正樣本。假設(shè)模型預(yù)測(cè)的結(jié)果大小排序依次為TA,F(xiàn)A,TB,F(xiàn)B。如果把兩個(gè)用戶的結(jié)果混起來看,AUC并不是很高,因?yàn)橛?個(gè)正樣本排在了后面,但是分開看的話,每個(gè)用戶的正樣本都排在了負(fù)樣本之前,AUC應(yīng)該是1。顯然,分開看更容易體現(xiàn)模型的效果,這樣消除了用戶本身的差異。
但是上文中所說的差異是在用戶點(diǎn)擊數(shù)即樣本數(shù)相同的情況下說的。還有一種差異是用戶的展示次數(shù)或者點(diǎn)擊數(shù),如果一個(gè)用戶有1個(gè)正樣本,10個(gè)負(fù)樣本,另一個(gè)用戶有5個(gè)正樣本,50個(gè)負(fù)樣本,這種差異同樣需要消除。那么GAUC的計(jì)算,不僅將每個(gè)用戶的AUC分開計(jì)算,同時(shí)根據(jù)用戶的展示數(shù)或者點(diǎn)擊數(shù)來對(duì)每個(gè)用戶的AUC進(jìn)行加權(quán)處理。進(jìn)一步消除了用戶偏差對(duì)模型的影響。通過實(shí)驗(yàn)證明,GAUC確實(shí)是一個(gè)更加合理的評(píng)價(jià)指標(biāo)。
3.2 Dice激活函數(shù)
從Relu到PRelu
Relu激活函數(shù)在值大于0時(shí)原樣輸出,小于0時(shí)輸出為0。這樣的話導(dǎo)致了許多網(wǎng)絡(luò)節(jié)點(diǎn)的更新緩慢。因此又了PRelu,也叫Leaky Relu,形式如下:
這樣,及時(shí)值小于0,網(wǎng)絡(luò)的參數(shù)也得以更新,加快了收斂速度。
從PReLU到Dice
盡管對(duì)Relu進(jìn)行了修正得到了PRelu,但是仍然有一個(gè)問題,即我們認(rèn)為分割點(diǎn)都是0,但實(shí)際上,分割點(diǎn)應(yīng)該由數(shù)據(jù)決定,因此文中提出了Dice激活函數(shù)
Dice激活函數(shù)的全稱是Data Dependent Activation Function,形式如下:
? ??????????????????
? ??????????????????
其中,期望和方差的計(jì)算如下:
? ??????????????????
? ??????????????![{V\alpha \tau [y_i]_{t+1}}^ {\prime} ={V\alpha \tau [y_i]_t}^{\prime} + \alpha {V\alpha \tau [y_i]}_{t+1}](https://math.jianshu.com/math?formula=%7BV%5Calpha%20%5Ctau%20%5By_i%5D_%7Bt%2B1%7D%7D%5E%20%7B%5Cprime%7D%20%3D%7BV%5Calpha%20%5Ctau%20%5By_i%5D_t%7D%5E%7B%5Cprime%7D%20%2B%20%5Calpha%20%7BV%5Calpha%20%5Ctau%20%5By_i%5D%7D_%7Bt%2B1%7D)
可也看到,每一個(gè)yi對(duì)應(yīng)了一個(gè)概率值pi。pi的計(jì)算主要分為兩步:將yi進(jìn)行標(biāo)準(zhǔn)化和進(jìn)行sigmoid變換。
3.3 自適應(yīng)正則 Adaptive Regularization
CTR中輸入稀疏而且維度高,通常的做法是加入L1、L2、Dropout等防止過擬合。但是論文中嘗試后效果都不是很好。用戶數(shù)據(jù)符合長(zhǎng)尾定律long-tail law,也就是說很多的feature id只出現(xiàn)了幾次,而一小部分feature id出現(xiàn)很多次。這在訓(xùn)練過程中增加了很多噪聲,并且加重了過擬合。
對(duì)于這個(gè)問題一個(gè)簡(jiǎn)單的處理辦法就是:直接去掉出現(xiàn)次數(shù)比較少的feature id。但是這樣就人為的丟掉了一些信息,導(dǎo)致模型更加容易過擬合,同時(shí)閾值的設(shè)定作為一個(gè)新的超參數(shù),也是需要大量的實(shí)驗(yàn)來選擇的。
因此,阿里提出了自適應(yīng)正則的做法,即:
1.針對(duì)feature id出現(xiàn)的頻率,來自適應(yīng)的調(diào)整他們正則化的強(qiáng)度;
2.對(duì)于出現(xiàn)頻率高的,給與較小的正則化強(qiáng)度;
3.對(duì)于出現(xiàn)頻率低的,給予較大的正則化強(qiáng)度。
計(jì)算公式如下:
? ??????????????????
? ??????????????????
4、效果展示
下圖是對(duì)Local Activation效果的一個(gè)展示,可以看到,對(duì)于候選的廣告是一件衣服的時(shí)候,用戶歷史行為中跟衣服相關(guān)的權(quán)重較高,而非衣服的部分,權(quán)重較低。
下圖是對(duì)使用不同正則項(xiàng)的結(jié)果進(jìn)行的展示,可以發(fā)現(xiàn),使用自適應(yīng)正則的情況下,模型的驗(yàn)證集誤差和驗(yàn)證集GAUC均是最好的。
下圖對(duì)比了Base Model和DIN的實(shí)驗(yàn)結(jié)果,可以看到,DIN模型在加入Dice激活函數(shù)以及自適應(yīng)正則之后,模型的效果有了一定的提升:
參考文獻(xiàn):
論文:Deep Interest Network for Click-Through Rate Prediction
推薦系統(tǒng)遇上深度學(xué)習(xí)(十八)--探秘阿里之深度興趣網(wǎng)絡(luò)(DIN)淺析及實(shí)現(xiàn)