推薦系統(tǒng)之DIN模型原理以及代碼實(shí)踐

簡(jiǎn)介

本文要介紹的Deep Interest Network(DIN)模型是阿里媽媽精準(zhǔn)定向檢索及基礎(chǔ)算法團(tuán)隊(duì)在2017年6月提出的。相比之前很多”學(xué)術(shù)風(fēng)“的深度學(xué)習(xí)模型,DIN模型更加具有業(yè)務(wù)氣息。它的應(yīng)用場(chǎng)景是阿里巴巴的電商廣告推薦,重點(diǎn)針對(duì)電子商務(wù)領(lǐng)域的CTR預(yù)估問(wèn)題,主要特點(diǎn)是充分利用、挖掘了用戶歷史行為數(shù)據(jù)中的信息,并且提出了兩項(xiàng)新穎的改進(jìn)措施來(lái)提升大規(guī)模稀疏數(shù)據(jù)下神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效率。

論文連接: Deep Interest Network for Click-Through Rate Prediction

背景知識(shí)

由于DIN是阿里巴巴針對(duì)其具體業(yè)務(wù)而提出的,所以有必要先介紹一下DIN的具體應(yīng)用場(chǎng)景。在電商網(wǎng)站中,廣告天然就是商品。所以DIN模型其實(shí)是根據(jù)用戶的歷史行為數(shù)據(jù)來(lái)向其投放廣告。比如在淘寶app中,app向用戶推薦的商品或者店鋪信息,其實(shí)這些都屬于廣告信息。下面的示意圖展示了這一過(guò)程:
淘寶推薦過(guò)程

在這個(gè)過(guò)程中,用戶的歷史行為數(shù)據(jù)起到很重要的作用。阿里巴巴的廣告展示過(guò)程可以分為兩步:

  1. 在匹配階段,根據(jù)用戶的歷史行為數(shù)據(jù),通過(guò)協(xié)同過(guò)濾等算法等為用戶產(chǎn)生一個(gè)候選廣告列表。
  2. 在排名階段,對(duì)于候選列表中的廣告,通過(guò)CTR算法來(lái)計(jì)算其分?jǐn)?shù),選取分?jǐn)?shù)最高的若干個(gè)廣告呈現(xiàn)給用戶。

對(duì)于阿里巴巴而言,每天都有數(shù)以百萬(wàn)的用戶訪問(wèn)網(wǎng)站,留下了海量的用戶行為數(shù)據(jù),這些數(shù)據(jù)可以幫助更好地完善廣告展示的匹配排名階段。值得注意的是,擁有海量行為數(shù)據(jù)的用戶群體的興趣是多樣化的。如何能夠從用戶行為數(shù)據(jù)中挖掘出最有價(jià)值的信息,并且精準(zhǔn)地進(jìn)行廣告展示,投其所好呢?
為此論文提出了DIN網(wǎng)絡(luò),對(duì)于不同的候選廣告,模型需要充分考慮該廣告與用戶歷史行為的相關(guān)性,以便自適應(yīng)地學(xué)習(xí)用戶興趣的特征表達(dá)。下面舉個(gè)例子詳細(xì)說(shuō)明一下??紤]一位年輕的母親最近瀏覽了呢子大衣、T恤、耳環(huán)、手提袋、皮革手提包、以及孩子的外套等。這些行為數(shù)據(jù)告訴了我們她的購(gòu)物興趣。當(dāng)她訪問(wèn)電商網(wǎng)站時(shí),系統(tǒng)會(huì)展示一些合適的廣告給她,比如,一個(gè)新的手提包。顯然,這個(gè)展示的廣告只匹配和激活了這個(gè)用戶的部分歷史行為數(shù)據(jù),即之前購(gòu)買過(guò)的手提袋、皮革手提包等。
總結(jié)一下,有兩點(diǎn)需要注意:

  1. 用戶可能購(gòu)買過(guò)很多中不同類型的商品,即用戶的興趣是多樣化的。
  2. 用戶是否會(huì)點(diǎn)擊系統(tǒng)推薦給她的商品,僅僅取決于其歷史行為數(shù)據(jù)中的部分。

特征表示

CTR預(yù)估任務(wù)中的數(shù)據(jù)大部分以一種多分組的類別形式存在。舉個(gè)例子,[weekday=Friday, gender=Female,visited_cate_ids={Bag,Book}, ad_cate_id=Book],通常的做法是通過(guò)embedding技術(shù)對(duì)這些高維稀疏特征進(jìn)行編碼。常用的方式有one-hot編碼和multi-hot編碼。前面提到的例子包含了4個(gè)組,對(duì)每個(gè)組進(jìn)行編碼后可以得到:

可以看到這其中既包含了one-hot編碼,也包含了multi-hot編碼。

下面給出DIN模型的輸入數(shù)據(jù)格式,總共包含4個(gè)組,分別是用戶畫(huà)像特征、用戶行為特征、廣告特征、上下文特征,其中用戶行為是multi-hot編碼。
這其中并沒(méi)有組合特征,DIN使用深度神經(jīng)網(wǎng)絡(luò)來(lái)捕獲特征之間的交互。

Base Model

現(xiàn)有的DNN模型大部分遵循Embedding+MLP這一基礎(chǔ)架構(gòu),即先將原始高維稀疏的離散特征向量通過(guò)Embedding網(wǎng)絡(luò)映射到固定長(zhǎng)度的地位稠密向量,再對(duì)其進(jìn)行特征交叉等,并將其作為多個(gè)MLP層的輸入,來(lái)擬合高階的非線性關(guān)系,最后再通過(guò)sigmoid函數(shù)映射到0~1之間,用來(lái)表示CTR。相比傳統(tǒng)的LR、GBDT、FM模型等,這類的DNN模型能夠大大減少手工特征工程的工作量,并且可以學(xué)習(xí)到特征之間的非線性關(guān)系。Base Model的結(jié)構(gòu)如下:

紅藍(lán)粉三色節(jié)點(diǎn)分別表示商品 ID (Goods ID), 店鋪 ID (Shop ID), 類目 ID (Cate ID) 三種稀疏特征, 其他的輸入特征, 使用白色節(jié)點(diǎn)表示 (比如左邊的用戶特征, 比如用戶 ID; 還有右邊的上下文特征, 比如廣告位之類的特征)。注意 Goods 1 ~ Goods N 用來(lái)描述用戶的歷史行為,候選廣告 Candidate Ad 本身也是商品,也具有 Goods / Shop / Cate ID 三種特征。自底向上觀察BaseModel模型,可以看到包含3個(gè)部分,分別是Embedding層、池化層和聚合層以及MLP層。

  • Embedding層
    Embedding層的輸入是高維的二值化特征向量,將其轉(zhuǎn)換到低維的稠密特征向量表示。對(duì)于t_i中的第i個(gè)特征組,令W^i= [w_i^i,...,w_j^i,...w_{K_i}^i] \in \mathbb R^{D \times K_i}代表第i個(gè)Embedding字典,其中w_j^i \in \mathbb R^D代表embedding向量,維度為DK_ii代表第i個(gè)特征組的維度。其實(shí)embedding操作類似有查表操作,就是在W^i中找出對(duì)應(yīng)的embedding向量。這里要注意的是,對(duì)于one-hot和multi-hot編碼的特征,經(jīng)過(guò)embedding轉(zhuǎn)換之后,輸出的特征向量不一樣。

    • 如果t_i是one-hot編碼,并且第j個(gè)元素t_i[j]=1,那么t_i的embedding表示就是一個(gè)單個(gè)向量w_j^i。
    • 如果t_i是multi-hot編碼,并且第j個(gè)元素t_i[j]=1,并且j \in \{i_1, i_2,...,i_k\},那么t_i的embedding表示就是一個(gè)向量列表\{e_{i_1}, e_{i_1}, ...,e_{i_k}\} = \{w_{i_1}^i,w_{i_2}^i,...,w_{i_k}^i\}。
  • 池化層和聚合層
    由于不同的用戶擁有不同數(shù)量的行為數(shù)據(jù),而用戶行為數(shù)據(jù)是通過(guò)multi-hot進(jìn)行編碼的,這意味著不同用戶的歷史行為數(shù)據(jù)產(chǎn)生的Embedding列表\{e_{i_1}, e_{i_1}, ...,e_{i_k}\}長(zhǎng)度不同。而MLP層只能處理固定長(zhǎng)度的向量,因此通常的做法是將這些向量列表通過(guò)池化層來(lái)得到固定長(zhǎng)度的向量,如上圖中藍(lán)色陰影部分所示,具體表達(dá)如下:

    pooling
    一般有求和池化和平均池化兩種操作,都是通過(guò)逐元素的方式來(lái)對(duì)列表中的向量進(jìn)行求和或者取平均操作。

    embedding和pooling操作都是以一種分組的形式來(lái)講原始空間的稀疏特征向量轉(zhuǎn)換成多種固定長(zhǎng)度的向量表示。然后所有的向量被聚合起來(lái)以獲得總體的特征表示。這種方式有它本身的缺陷,這也是DIN著重要改進(jìn)的地方。

  • MLP層
    MLP的作用就是學(xué)習(xí)這些特征向量之間的高階非線性關(guān)系。

  • 損失函數(shù)
    基于深度學(xué)習(xí)的CTR模型廣泛使用的損失函數(shù)是 負(fù)對(duì)數(shù)似然函數(shù)(the negative log-likelihood function)Loglos,使用標(biāo)簽作為目標(biāo)項(xiàng)來(lái)監(jiān)督整體的預(yù)測(cè)。

    log損失函數(shù)

DIN

Base Model通過(guò)神經(jīng)網(wǎng)絡(luò)來(lái)擬合高階非線性關(guān)系,減少了人工特征的工作量。但是它也有一些缺點(diǎn),其中最明顯的就是Base Model的池化層和聚合層的操作。在對(duì)用戶歷史行為數(shù)據(jù)進(jìn)行處理時(shí), 由于每個(gè)用戶的歷史點(diǎn)擊個(gè)數(shù)是不相等的, 包含了許多興趣信息,由于MLP層只能接收固定的輸入,因此Base Model通過(guò)pooling操作將它們編碼成一個(gè)固定長(zhǎng)為K維的向量。而K維度向量最多只能表達(dá)K個(gè)獨(dú)立的興趣,而用戶的興趣可能不止K。K的大小會(huì)對(duì)計(jì)算量產(chǎn)生明顯影響,一般用大的K效果會(huì)更好,即擴(kuò)展向量的維度,但這樣會(huì)增加學(xué)習(xí)的參數(shù)和在有限的數(shù)據(jù)中有過(guò)擬合的風(fēng)險(xiǎn)。
為了優(yōu)雅地解決這個(gè)問(wèn)題,作者提出DIN模型。相比于Base Model,DIN的創(chuàng)新之處在于它引入了一個(gè)局部激活單元(local activation unit),即保持了Base Model的整體架構(gòu)不變,又解決了Base Model針對(duì)不同廣告,對(duì)用戶歷史行為數(shù)據(jù)都同等對(duì)待的問(wèn)題。DIN模型如下:

DIN模型
可以看到,DIN跟Base Model的區(qū)別不是很大,主要是SUM Pooling層的前面做了些文章。對(duì)于用戶歷史行為數(shù)據(jù),DIN不再是對(duì)其進(jìn)行sum pooling或者average pooling操作,而是引入了一個(gè)激活單元來(lái)學(xué)習(xí)用戶歷史行為數(shù)據(jù)e_j和給定廣告v_A之間的關(guān)系。用公式表達(dá)如下:
其中\{ e_1,e_2,..,e_H\}代表用戶U的行為數(shù)據(jù)的embedding向量列表,v_A是廣告A的embedding向量。v_{U}(A)代表用戶U對(duì)特定廣告A的感興趣程度,可以看到v_{U}(A)因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=A" alt="A" mathimg="1">的不同而不同。a(\cdot)代表一個(gè)前向神經(jīng)網(wǎng)絡(luò),它的輸出就是激活權(quán)重。如上圖右上角所示。
Activation Unit的輸入包括用戶歷史商品和候選廣告的embedding向量,將這兩者以及它們之間的外積連接起來(lái),再通過(guò)激活函數(shù)和線性層得到歷史商品e_i和候選廣告A在embedding空間的關(guān)系權(quán)重。計(jì)算出每個(gè)歷史行為數(shù)據(jù)e_i的權(quán)重w_i之后,執(zhí)行一個(gè)帶權(quán)重的sum pooling即可??芍?,DIN和Base Model的主要區(qū)別就在于是否使用了帶權(quán)重的poolng操作,而這個(gè)改進(jìn)取得了不俗的表現(xiàn)。

在這種計(jì)算方式下,最終的用戶U的興趣向量會(huì)根據(jù)不同的廣告A而變化。這就是“用戶興趣的千物千面”。比如,一個(gè)用戶之前買過(guò)奶粉與泳衣,當(dāng)展示給她泳鏡時(shí),顯然更會(huì)喚起她買過(guò)的泳衣的記憶;而當(dāng)展示給她尿不濕時(shí),顯然更喚起她買過(guò)的奶粉的記憶。

這其實(shí)就是Attention在DIN中的使用了。一般來(lái)說(shuō),做Attention的時(shí)候,需要對(duì)所有的分?jǐn)?shù)通過(guò)softmax做歸一化,這樣做有兩個(gè)好處,一是保證權(quán)重非負(fù),二是保證權(quán)重之和為1。但是在DIN的論文中強(qiáng)調(diào),不對(duì)點(diǎn)擊序列的attention分?jǐn)?shù)做歸一化,直接將分?jǐn)?shù)與對(duì)應(yīng)商品的embedding向量做加權(quán)和,目的在于保留用戶的興趣強(qiáng)度。例如,用戶的點(diǎn)擊序列中90%是衣服,10%是電子產(chǎn)品,有一件T恤和一部手機(jī)需要預(yù)測(cè)CTR,那么T恤會(huì)激活大部分的用戶行為,使得根據(jù)T恤計(jì)算出來(lái)的用戶行為向量在數(shù)值上更大。

訓(xùn)練技巧

Mini-batch Aware Regularization

考慮有g(shù)oods_id特征的大規(guī)模神經(jīng)網(wǎng)絡(luò)容易過(guò)擬合,因此加入正則化是必須的。mini-batch中只有輸入稀疏特征不為0對(duì)應(yīng)的參數(shù)才更新,但加入L2正則就會(huì)導(dǎo)致每個(gè)mini-batch都會(huì)計(jì)算全部參數(shù)的L2-norm,這是不可接受的。本文提出mini-batch中instance的原始feature第j維不為0,才會(huì)計(jì)算相應(yīng)w_j的L2-norm,最后近似為至少有一個(gè)instance其j維不為0才計(jì)算一次。公式推導(dǎo)如下(主要的參數(shù)來(lái)自embedding字典,統(tǒng)稱為W。下面為在所有sample上的L2正則計(jì)算):

有了上式之后,loss的形式就確定了,因此參數(shù)更新公式如下:

Data Adaptive Activation Function

作者對(duì)傳統(tǒng)的激活函數(shù)ReLU做了改進(jìn),提出了Dice激活函數(shù),過(guò)程如下:

  • ReLU和PReLU

    上圖左邊是ReLU激活函數(shù),其在值大于0時(shí)候原樣輸出,小于0時(shí)輸出為0。這樣可以有效避免梯度消失等問(wèn)題,但同時(shí)也會(huì)導(dǎo)致許多網(wǎng)絡(luò)節(jié)點(diǎn)更新緩慢。右邊是PReLU激活函數(shù),唯一的區(qū)別就是在值小于0時(shí),梯度依然存在,網(wǎng)絡(luò)的參數(shù)可以更新,加快了網(wǎng)絡(luò)的收斂速度。

  • PReLU和Dice
    盡管對(duì) ReLU進(jìn)行了修正得到了PRelu,但是仍然有一個(gè)問(wèn)題:即我們認(rèn)為分割點(diǎn)都是 0。但實(shí)際上,分割點(diǎn)應(yīng)該由數(shù)據(jù)決定。因此,論文中提出了 Dice 激活函數(shù),Dice 激活函數(shù)的全稱是 Data Dependent Activation Function,其形式如下:
    其中控制函數(shù)p的變化如下:
    論文認(rèn)為采用 PReLU作為激活函數(shù)時(shí),它的rectified point 固定為 0,這在每一層的輸入分布發(fā)生變化時(shí)是不適用的。所以,論文針對(duì)該激活函數(shù)進(jìn)行了改進(jìn),一方面平滑了激活函數(shù)在 rectified point 附近的曲線,另一方面激活函數(shù)會(huì)根據(jù)每層輸入數(shù)據(jù)的分布來(lái)自適應(yīng)調(diào)整 rectified point 的位置,從而對(duì)模型參數(shù)的更新和收斂起到一定的加速作用。

代碼實(shí)踐

待補(bǔ)充

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容