CTR預估專欄 | 一文搞懂阿里Deep Interest Network

AI前線發表於2019-03-04
CTR預估專欄 | 一文搞懂阿里Deep Interest Network
作者 | 李寧寧
來源 | 機器學習薦貨情報局(ID:ML_CIA)
編輯 | Vincent
AI 前線導讀:Deep Interest Network(DIN) 是蓋坤大神領導的阿里媽媽的精準定向檢索及基礎演算法團隊,在 2017 年 6 月提出的。它針對 電子商務領域 (e-commerce industry)的 CTR 預估,重點在於 充分利用 / 挖掘使用者歷史行為資料中的資訊。本文將對 DIN 理論進行深入淺出的解讀,千萬不要錯過哦!

更多幹貨內容請關注微信公眾號“AI 前線”,(ID:ai-front)

CTR預估專欄 | 一文搞懂阿里Deep Interest Network

1. 背景

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

它針對 電子商務領域 (e-commerce industry) 的 CTR 預估,重點在於 充分利用 / 挖掘使用者歷史行為資料中的資訊

先給出結論:

針對網際網路電子商務領域,資料特點:Diversity、Local Activation。DIN 給出瞭解決方案:

  1. 使用 使用者興趣分佈 來表示使用者多種多樣的興趣愛好

  2. 使用 Attention 機制 來實現 Local Activation

  3. 針對模型訓練,提出了 Dice 啟用函式,自適應正則,顯著提升了模型效能與收斂速度

1.1 名詞解釋

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

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

Local Activation: 使用者是否會點選推薦給他的商品,僅僅取決於歷史行為資料中的一小部分,而不是全部。

不明白?舉個例子:

CTR預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里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 predictioncommon feature trick,目的是降低空間開銷和計算開銷。大體的思想是:同一個使用者多條樣本,它們之間很多資訊重複,比如使用者統計資訊,昨天之前的統計資訊等。針對這些重複資訊只儲存一次,並建立索引。

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

CTR預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里Deep Interest Network

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

3. 原理

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

3.1 Base Model

CTR預估專欄 | 一文搞懂阿里Deep Interest Network

CTR預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里Deep Interest Network

無論是 ReLU 還是 PReLU 突變點都在 0,論文裡認為,對於所有輸入不應該都選擇 0 點為突變點而是應該依賴於資料的。於是提出了一種 data dependent 的方法:Dice 啟用函式。形式如下:

CTR預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里Deep Interest Network

CTR預估專欄 | 一文搞懂阿里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預估專欄 | 一文搞懂阿里Deep Interest Network

4.3 Common Feature Trick

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

CTR預估專欄 | 一文搞懂阿里Deep Interest Network

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

4.4 結果展示

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

CTR預估專欄 | 一文搞懂阿里Deep Interest Network

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

CTR預估專欄 | 一文搞懂阿里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 啟用函式自適應正則 ,顯著的提升了模型效能與收斂速度。

參考資料

  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

相關文章