CTR預估系列(5)–阿里Deep Interest Network理論

1. 背景

Deep Interest Network(DIN)是蓋坤大神領導的阿里媽媽的精準定向檢索及基礎算法團隊,在2017年6月提出的。

它針對電子商務領域(e-commerce industry)的CTR預估,重點在於充分利用/挖掘用戶歷史行為數據中的信息

先給出結論: 針對互聯網電子商務領域,數據特點:Diversity、Local Activation。DIN給出瞭解決方案:

  • 使用用戶興趣分佈來表示用戶多種多樣的興趣愛好
  • 使用Attention機制來實現Local Activation
  • 針對模型訓練,提出了Dice激活函數,自適應正則,顯著提升了模型性能與收斂速度

1.1 名詞解釋

這兩個詞在論文中通篇出現,先把其表示的意思說清楚。

Diversity:

用戶在訪問電商網站時會對多種商品都感興趣。也就是用戶的興趣非常的廣泛。

Local Activation:

用戶是否會點擊推薦給他的商品,僅僅取決於歷史行為數據中的一小部分,而不是全部。

不明白?舉個例子:

CTR預估系列(5)–阿里Deep Interest Network理論

Diversity:一個年輕的母親,從他的歷史行為中,我們可以看到她的興趣非常廣泛:羊毛衫、手提袋、耳環、童裝、運動裝等等。

Local Activation:一個愛游泳的人,他之前購買過travel book、ice cream、potato chips、swimming cap。當前給他推薦的商品(或者說是廣告Ad)是goggle(護目鏡)。那麼他是否會點擊這次廣告,跟他之前是否購買過薯片、書籍、冰激凌一丁點關係也沒有!而是與他之前購買過游泳帽有關係。也就是說在這一次CTR預估中,部分歷史數據(swimming cap)起了決定作用,而其他的基本都沒啥用。

1.2 相關工作

CTR預估是一個比較窄的研究領域,但是模型性能一點點的提升,在實際應用中都非常關鍵,真金白銀毫不含糊。隨著深度學習在CV、NLP等領域取得突破性進展,一些研究也開始嘗試將DNN應用於CTR預估,比如:Wide&Deep, DeepFM等。

這些做法一般分為兩部分: 1. 在輸入上面加一層embeding層,把最原始高維度、稀疏的數據轉換為低維度的實值表示上(dense vector)。 2. 增加多個全連接層,學習特徵之間的非線性關係。 Sparse Features -> Embedding Vector -> MLPs -> Output

這些方法的優點在於:相比於原來的Logistic Regression方法,大大減少了人工特徵工程的工作量。

缺點:在電子商務領域中,用戶的歷史行為數據(User Behavior Data)中包含大量的用戶興趣信息,之前的研究並沒有針對Behavior data**特殊的結構(Diversity + Local Activation)**進行建模。

這就是DIN要改進的地方! DIN同時對Diversity和Local Activation進行建模。

針對Diversity:

針對用戶廣泛的興趣,DIN用an interest distribution去表示。

針對Local Activation:

DIN借鑑機器翻譯中的Attention機制,設計了一種attention-like network structure, 針對當前候選Ad,去局部的激活(Local Activate)相關的歷史興趣信息。和當前候選Ad相關性越高的歷史行為,會獲得更高的

attention score,從而會主導這一次預測。

當DNN深度比較深(參數非常多),輸入又非常稀疏的時候,很容易過擬合。DIN提出Adaptive regularizaion來防止過擬合,效果顯著。

論文還提出,DIN方法也可以應用於其他有豐富用戶行為數據的場景,比如:

  • 電子商務中的個性化推薦
  • 社交網絡中的信息推流排序(feeds ranking)

2. 系統總覽


CTR預估系列(5)–阿里Deep Interest Network理論

阿里推薦系統工作流程就像上圖所示:

  1. 檢查用戶歷史行為數據
  2. 使用matching module產生候選ads
  3. 通過ranking module得到候選ads的點擊概率,並根據概率排序得到推薦列表
  4. 記錄下用戶在當前展示廣告下的反應(點擊與否)

這是一個閉環的系統,對於用戶行為數據(User Behavior Data),系統自己生產並消費。

2.1 訓練數據

前面提到,電子商務領域,充分利用User Behavior Data非常關鍵,而它又有著非常顯著的特點:

  • Diversity. 興趣愛好非常廣泛
  • Local Activation. 歷史行為中部分數據主導是否會點擊候選廣告

還有的特點,就是CTR中輸入普遍存在的特點:

  • 高緯度
  • 非常稀疏

CTR中一旦涉及到用戶行為數據,還有一個特點:

  • 特徵往往都是multi-hot的稀疏ids。

也就是:多值離散特徵。比如:用戶在YouTube上看的視頻和搜索過的視頻。無論是看過的還是搜索過的,都不止一個,但是相對於所有的視頻來說,看過和搜索過的數量都太小了(非常稀疏)。

在電子商務上的例子就是:用戶購買過的good_id有多個,購買過的shop_id也有多個,而這也直接導致了每個用戶的歷史行為id長度是不同的。

為了得到一個固定長度的Embedding Vector表示,原來的做法是在Embedding Layer後面增加一個Pooling Layer。Pooling可以用sum或average。最終得到一個固定長度的Embedding Vector,是用戶興趣的一個抽象表示,常被稱作User Representation。缺點是會損失一些信息。

DIN使用Attention機制來解決這個問題。Attention機制來源於Neural Machine Translation(NMT)。DIN使用Attention機制去更好的建模局部激活。在DIN場景中,針對不同的候選廣告需要自適應地調整User Representation。也就是說:在Embedding Layer -> Pooling Layer得到用戶興趣表示的時候,賦予不同的歷史行為不同的權重,實現局部激活。從最終反向訓練的角度來看,就是根據當前的候選廣告,來反向的激活用戶歷史的興趣愛好,賦予不同歷史行為不同的權重。

2.2 特徵處理

參考論文Learning piece-wise linear models from large scale data for ad click prediction中common feature trick,目的是降低空間開銷和計算開銷。大體的思想是:同一個用戶多條樣本,它們之間很多信息重複,比如用戶統計信息,昨天之前的統計信息等。針對這些重複信息只存儲一次,並建立索引。

另外,論文中作者把特徵分為四大類,並沒有進行特徵組合/交叉特徵。而是通過DNN去學習特徵間的交互信息。特徵如下:

CTR預估系列(5)–阿里Deep Interest Network理論

可以看到特徵主要包括:用戶特徵、用戶行為特徵、廣告特徵、上下文特徵。

其中,只有用戶行為特徵中會出現multi-hot,原因就是一個用戶會購買多個good_id,也會訪問多個shop_id,另一個表現就是這樣導致了每個用戶的樣本長度都是不同的。還記得我們是怎麼解決這個問題的嗎?

Embedding -> Pooling + Attention

聰明如你,一定答對了吧~

2.3 評價指標

評價標準是阿里自己提出的GAUC。並且實踐證明了GAUC相比於AUC更加穩定、可靠。

AUC表示正樣本得分比負樣本得分高的概率。在CTR實際應用場景中,CTR預測常被用於對每個用戶候選廣告的排序。但是不同用戶之間存在差異:有些用戶天生就是點擊率高。以往的評價指標對樣本不區分用戶地進行AUC的計算。論文采用的GAUC實現了用戶級別的AUC計算,在單個用戶AUC的基礎上,按照點擊次數或展示次數進行加權平均,消除了用戶偏差對模型的影響

,更準確的描述了模型的表現效果:

CTR預估系列(5)–阿里Deep Interest Network理論

其中權重w既可以是展示次數(impression)也可以是點擊次數(clicks)。n是用戶數量。

3. 原理

用戶訪問阿里巴巴的電商網站,看到推薦的廣告時,大部分人都是沒有一個明確的目標的,他自己也不知道要買什麼。所以,用一個高效的方法從用戶豐富的歷史行為數據中獲取用戶的興趣信息並進行推薦,就非常關鍵了。

3.1 Base Model


CTR預估系列(5)–阿里Deep Interest Network理論


CTR預估系列(5)–阿里Deep Interest Network理論

如上圖所示,Base Model主要由兩部分組成:

  1. 把稀疏的輸入(id特徵)轉換成embedding vector
  2. 增加MLPs得到最終的輸出

對於一個用戶,之前購買過的good_ids組成了一個user behavior sequence ids。針對不同的用戶,這個序列的長度是不同的(不同用戶購買的物品數量不同). 所以在Embedding Layer和MLPs中間,增加了一個Pooling Layer,使用的是sumoperation,把這些goods或shops的embedding vector相加,得到一個固定長度的向量作為MLPs的輸入。

這裡對multi-hot多值離散特徵進行Pooling操作,就是對Diversity的建模。Base Model中還沒有引入Attention機制。

Base Model上線後表現很好,現在也在承擔著阿里線上廣告展示系統的大部分流量。(論文發表時)

3.2 DIN Design

但是,仔細的研究下Base Model中Pooling Layer就會發現,Pooling操作損失了很多信息,所以有了後面DIN的完整模型。

這個圖太重要了,一定要仔細研究:

CTR預估系列(5)–阿里Deep Interest Network理論

先給出結論:

  1. Activation Unit實現Attention機制,對Local Activation建模
  2. Pooling(weighted sum)對Diversity建模

我們模型的目標:基於用戶歷史行為,充分挖掘用戶興趣和候選廣告之間的關係。用戶是否點擊某個廣告往往是基於他之前的部分興趣,這是應用Attention機制的基礎。Attention機制簡單的理解就是對於不同的特徵有不同的權重,這樣某些特徵就會主導這一次的預測,就好像模型對某些特徵pay attention。但是,

DIN中並不能直接用attention機制。因為對於不同的候選廣告,用戶興趣表示(embedding vector)應該是不同的。也就是說用戶針對不同的廣告表現出不同的興趣表示,即時歷史興趣行為相同,但是各個行為的權重不同。這不就是Local Activation的含義嗎?

這該怎麼理解那?下面我們給出兩種解釋,從兩個角度來解釋:

1.核心是: 到Embedding後的空間中思考。

無論是用戶興趣行為,還是候選廣告都會被映射到Embedding空間中。他們兩者的關係,是在Embedding空間中學習的。

現在有用戶U和兩個候選廣告 A,B。在Embedding空間中,U和A,U和B的相關性都比較高。假設我們使用內積來計算用戶和廣告之間的相關性。廣告A和B嵌入後的向量分別為Va, Vb,那麼就要求對於Va Vb終點連線上的任何一個廣告,用戶U都要有很高的相關性。

這樣的限制使得模型非常難學習到有效的用戶和廣告的embedidng表示。當然,如果增大embedding的大小,也許能行。但是會極大的增加模型參數數量。

2.用戶的興趣分佈是一個多峰的函數,隨著候選廣告的變化而變化,表現出局部激活的特性

用戶Embedding Vector的維度為k,它最多表示k個相互獨立的興趣愛好。但是用戶的興趣愛好遠遠不止k個,怎麼辦?DIN給出的方案是:用戶興趣不再是一個點,而是一個一個分佈,一個多峰的函數。這樣即使在低維空間,也可以獲得幾乎無限強的表達能力。

用戶的興趣不是一個點,而是一個多峰的函數。一個峰就表示一個興趣,峰值的大小表示興趣強度。那麼針對不同的候選廣告,用戶的興趣強度是不同的,也就是說隨著候選廣告的變化,用戶的興趣強度不斷在變化。

換句話說:假定用戶興趣表示的Embedding Vector是Vu,候選廣告的是Va,那麼Vu是Va的函數。 也就是說,同意用戶針對不同的廣告有不同的用戶興趣表示(嵌入向量不同)。

公式如下:

CTR預估系列(5)–阿里Deep Interest Network理論

其中,Vi表示behavior id i的嵌入向量,比如good_id,shop_id等。Vu是所有behavior ids的加權和,表示的是用戶興趣。候選廣告影響著每個behavior id的權重,也就是Local Activation。權重表示的是:每一個behavior id針對當前的候選廣告Va,對總的用戶興趣表示的Embedding Vector的貢獻大小。在實際實現中,權重用激活函數Dice的輸出來表示,輸入是Vi和Va。

3.3 Dice: Data Dependent Activation Function

PReLU其實是ReLU的改良版,ReLU可以看作是x*Max(x,0),相當於輸出x經過了一個在0點的階躍整流器。由於ReLU在x小於0的時候,梯度為0,可能導致網絡停止更新,PReLU對整流器的左半部分形式進行了修改,使得x小於0時輸出不為0。

研究表明,PReLU能提高準確率但是也稍微增加了過擬合的風險。PReLU形式如下:

CTR預估系列(5)–阿里Deep Interest Network理論

無論是ReLU還是PReLU突變點都在0,論文裡認為,對於所有輸入不應該都選擇0點為突變點而是應該依賴於數據的。於是提出了一種

data dependent的方法:Dice激活函數。形式如下:

CTR預估系列(5)–阿里Deep Interest Network理論

可以看出,pi是一個概率值,這個概率值決定著輸出是取yi或者是alpha_i * yi,pi也起到了一個整流器的作用。

pi的計算分為兩步:

  1. 首先,對x進行均值歸一化處理,這使得整流點是在數據的均值處,實現了data dependent的想法;
  2. 其次,經過一個sigmoid函數的計算,得到了一個0到1的概率值。巧合的是最近google提出的Swish函數形式為x*sigmoid(x) 在多個實驗上證明了比ReLU函數x*Max(x,0)表現更優。

另外,期望和方差使用每次訓練的mini batch data直接計算,並類似於Momentum使用了指數加權平均

CTR預估系列(5)–阿里Deep Interest Network理論

alpha是一個超參數,推薦值為0.99

3.4 Adaptive Regularization

由於深度模型比較複雜,輸入又非常稀疏,導致參數非常多,不出意外的過擬合了。

CTR中輸入稀疏而且維度高,已有的L1 L2 Dropout防止過擬合的辦法,論文中嘗試後效果都不是很好。用戶數據符合 長尾定律long-tail law,也就是說很多的feature id只出現了幾次,而一小部分feature id出現很多次。這在訓練過程中增加了很多噪聲,並且加重了過擬合。

對於這個問題一個簡單的處理辦法就是:人工的去掉出現次數比較少的feature id。缺點是:損失的信息不好評估;閾值的設定非常的粗糙。

DIN給出的解決方案是:

  1. 針對feature id出現的頻率,來自適應的調整他們正則化的強度;
  2. 對於出現頻率高的,給與較小的正則化強度;
  3. 對於出現頻率低的,給予較大的正則化強度。


CTR預估系列(5)–阿里Deep Interest Network理論


CTR預估系列(5)–阿里Deep Interest Network理論

B是mini batch樣本,大小為b;ni是出現頻率;Ii表示我們考慮特徵非零的樣本。

這樣做的原因是,作者實踐發現出現頻率高的物品無論是在模型評估還是線上收入中都有較大影響。

我個人的感覺是:

這僅僅是由於出現頻率高的商品更符合大眾的興趣,而現有的模型還不能實現真正的千人千面推薦,所以使得熱度高的商品重要性依舊非常大,不這樣做的話模型性能就下降。

這就好比最簡單的推薦系統:給所有人都推薦最熱的商品。當技術還不夠成熟,模型效果沒那麼好的時候,我們增加對熱點商品的權重(極端就是給所有人都推薦熱點商品),從最終的指標來看多半能提升模型效果,畢竟這符合大多數人興趣愛好。但是這並不是我們想要的千人千面的推薦。

4. 實現

DIN在阿里內部的實現,使用了多個GPU。並行化是基於模型並行化、數據並行化。命名為

X-Deep Learning(XDL)

4.1 組成部分

由三部分組成:

  1. Distributed Embedding Layer。模型並行化部分,Embedding Layer的參數分佈在多個GPU上,完成前向後向傳播計算。
  2. Local Backend。單獨的模塊,用來在處理網絡的訓練。使用了開源的deep learning框架,比如tf,mxnet,theano等。作為一個後端支撐,良好的接口封裝方便集成或切換各個開源框架。
  3. Communication Component。基礎模塊,用來幫助embedding layer和backend來實現並行化。使用MPI實現。

4.2 架構圖

分為模型並行化、數據並行化

CTR預估系列(5)–阿里Deep Interest Network理論

4.3 Common Feature Trick

對於一個用戶,一次pageview中假設展示了200個商品。那麼每個商品就對應一條樣本。但是,這200條樣本中是有很多Common Feature的。所以DIN的實現中並沒有把用戶都展開,類似於下圖:

CTR預估系列(5)–阿里Deep Interest Network理論

對於很多靜態的不變的特徵,比如性別、年齡、昨天以前的行為等只計算一次、存儲一次。之後利用索引與其他特徵關聯,大幅度的壓縮了樣本的存儲,加快了模型的訓練。最終實驗僅用了1/3的資源,獲得了12倍的加速。

4.4 結果展示

下圖展示了用戶興趣分佈:顏色越暖表示用戶興趣越高,可以看到用戶的興趣分佈有多個峰。

CTR預估系列(5)–阿里Deep Interest Network理論

利用候選的廣告,反向激活歷史興趣。不同的歷史興趣愛好對於當前候選廣告的權重不同,做到了local activation,如下圖:

CTR預估系列(5)–阿里Deep Interest Network理論

5. 總結

  1. 用戶有多個興趣愛好,訪問了多個good_id,shop_id。為了降低緯度並使得商品店鋪間的算術運算有意義,我們先對其進行Embedding嵌入。那麼我們如何對用戶多種多樣的興趣建模那?使用Pooling對Embedding Vector求和或者求平均。同時這也解決了不同用戶輸入長度不同的問題,得到了一個固定長度的向量。這個向量就是用戶表示,是用戶興趣的代表。
  2. 但是,直接求sum或average損失了很多信息。所以稍加改進,針對不同的behavior id賦予不同的權重,這個權重是由當前behavior id和候選廣告共同決定的。這就是Attention機制,實現了Local Activation。
  3. DIN使用activation unit來捕獲local activation的特徵,使用weighted sum pooling來捕獲diversity結構。
  4. 在模型學習優化上,DIN提出了Dice激活函數自適應正則 ,顯著的提升了模型性能與收斂速度。

6. Reference

  1. Deep Interest Network for Click-Through Rate Prediction
  2. Learning piece-wise linear models from large scale data for ad click prediction
  3. https://www.leiphone.com/news/201707/t0AT4sIgyWS2QWVU.html
  4. https://www.leiphone.com/news/201706/pDfOAoMYp8mqNKEC.html
  5. 蓋坤的分享視頻 http://www.itdks.com/dakalive/detail/3166


分享到:


相關文章: