Deep Interest Network(DIN) 是蓋坤大神領導的阿里媽媽的精準定向檢索及基礎算法團隊,在 2017 年 6 月提出的。html
它針對 電子商務領域 (e-commerce industry) 的 CTR 預估,重點在於 充分利用 / 挖掘用戶歷史行爲數據中的信息。算法
先給出結論:後端
針對互聯網電子商務領域,數據特色:Diversity、Local Activation。DIN 給出瞭解決方案:微信
使用 用戶興趣分佈 來表示用戶多種多樣的興趣愛好網絡
使用 Attention 機制 來實現 Local Activation架構
針對模型訓練,提出了 Dice 激活函數,自適應正則,顯著提高了模型性能與收斂速度框架
這兩個詞在論文中通篇出現,先把其表示的意思說清楚。iphone
Diversity: 用戶在訪問電商網站時會對多種商品都感興趣。也就是用戶的興趣很是的普遍。機器學習
Local Activation: 用戶是否會點擊推薦給他的商品,僅僅取決於歷史行爲數據中的一小部分,而不是所有。ide
不明白?舉個例子:
Diversity:一個年輕的母親,從他的歷史行爲中,咱們能夠看到她的興趣很是普遍:羊毛衫、手提袋、耳環、童裝、運動裝等等。
Local Activation:一個愛游泳的人,他以前購買過 travel book、ice cream、potato chips、swimming cap。當前給他推薦的商品 (或者說是廣告 Ad) 是 goggle(護目鏡)。那麼他是否會點擊此次廣告,跟他以前是否購買過薯片、書籍、冰激凌一丁點關係也沒有!而是與他以前購買過游泳帽有關係。也就是說在這一次 CTR 預估中,部分歷史數據 (swimming cap) 起了決定做用,而其餘的基本都沒啥用。
CTR 預估是一個比較窄的研究領域,可是模型性能一點點的提高,在實際應用中都很是關鍵,真金白銀絕不含糊。隨着深度學習在 CV、NLP 等領域取得突破性進展,一些研究也開始嘗試將 DNN 應用於 CTR 預估,好比:Wide&Deep, DeepFM 等。
這些作法通常分爲兩部分:
在輸入上面加一層 embeding 層,把最原始高維度、稀疏的數據轉換爲低維度的實值表示上 (dense vector)。
增長多個全鏈接層,學習特徵之間的非線性關係。
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)
阿里推薦系統工做流程就像上圖所示:
檢查用戶歷史行爲數據
使用 matching module 產生候選 ads
經過 ranking module 獲得候選 ads 的點擊機率,並根據機率排序獲得推薦列表
記錄下用戶在當前展現廣告下的反應 (點擊與否)
這是一個閉環的系統,對於用戶行爲數據 (User Behavior Data),系統本身生產並消費。
前面提到,電子商務領域,充分利用 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
獲得用戶興趣表示的時候,賦予不一樣的歷史行爲不一樣的權重,實現局部激活。從最終反向訓練的角度來看,就是根據當前的候選廣告,來反向的激活用戶歷史的興趣愛好,賦予不一樣歷史行爲不一樣的權重。
參考論文Learning piece-wise linear models from large scale data for ad click prediction
中 common feature trick,目的是下降空間開銷和計算開銷。大致的思想是:同一個用戶多條樣本,它們之間不少信息重複,好比用戶統計信息,昨天以前的統計信息等。針對這些重複信息只存儲一次,並創建索引。
另外,論文中做者把特徵分爲四大類,並 沒有進行特徵組合 / 交叉特徵。而是經過 DNN 去學習特徵間的交互信息。特徵以下:
能夠看到特徵主要包括:用戶特徵、用戶行爲特徵、廣告特徵、上下文特徵。
其中,只有 用戶行爲特徵 中會出現multi-hot
,緣由就是一個用戶會購買多個 good_id, 也會訪問多個 shop_id,另外一個表現就是這樣致使了每一個用戶的樣本長度都是不一樣的。還記得咱們是怎麼解決這個問題的嗎?
Embedding -> Pooling
+ Attention
聰明如你,必定答對了吧~
評價標準是阿里本身提出的 GAUC。而且實踐證實了 GAUC 相比於 AUC 更加穩定、可靠。
AUC 表示正樣本得分比負樣本得分高的機率。在 CTR 實際應用場景中,CTR 預測常被用於對每一個用戶候選廣告的排序。可是不一樣用戶之間存在差別:有些用戶天生就是點擊率高。以往的評價指標對樣本不區分用戶地進行 AUC 的計算。論文采用的 GAUC 實現了用戶級別的 AUC 計算,在單個用戶 AUC 的基礎上,按照點擊次數或展現次數進行加權平均,消除了用戶誤差對模型的影響,更準確的描述了模型的表現效果:
其中權重 w 既能夠是展現次數 (impression) 也能夠是點擊次數 (clicks)。n 是用戶數量。
用戶訪問阿里巴巴的電商網站,看到推薦的廣告時,大部分人都是沒有一個明確的目標的,他本身也不知道要買什麼。因此,用一個高效的方法從用戶豐富的歷史行爲數據中獲取用戶的興趣信息並進行推薦,就很是關鍵了。
如上圖所示,Base Model 主要由兩部分組成:
把稀疏的輸入 (id 特徵) 轉換成 embedding vector
增長 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 上線後表現很好,如今也在承擔着阿里線上廣告展現系統的大部分流量。(論文發表時)
可是,仔細的研究下 Base Model 中 Pooling Layer 就會發現,Pooling 操做損失了不少信息,因此有了後面 DIN 的完整模型。
這個圖過重要了,必定要仔細研究:
先給出結論:
Activation Unit 實現 Attention 機制,對 Local Activation 建模
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 的函數。 也就是說,贊成用戶針對不一樣的廣告有不一樣的用戶興趣表示 (嵌入向量不一樣)。
公式以下:
其中,Vi 表示 behavior id i 的嵌入向量,好比 good_id,shop_id 等。Vu 是全部 behavior ids 的加權和,表示的是用戶興趣。候選廣告影響着每一個 behavior id 的權重,也就是 Local Activation。權重表示的是:每個 behavior id 針對當前的候選廣告 Va,對總的用戶興趣表示的 Embedding Vector 的貢獻大小。在實際實現中,權重用激活函數 Dice 的輸出來表示,輸入是 Vi 和 Va。
PReLU 實際上是 ReLU 的改良版,ReLU 能夠看做是x*Max(x,0)
,至關於輸出 x 通過了一個在 0 點的階躍整流器。因爲 ReLU 在 x 小於 0 的時候,梯度爲 0,可能致使網絡中止更新,PReLU 對整流器的左半部分形式進行了修改,使得 x 小於 0 時輸出不爲 0。
研究代表,PReLU 能提升準確率可是也稍微增長了過擬合的風險。PReLU 形式以下:
不管是 ReLU 仍是 PReLU 突變點都在 0,論文裏認爲,對於全部輸入不該該都選擇 0 點爲突變點而是應該依賴於數據的。因而提出了一種 data dependent 的方法:Dice 激活函數。形式以下:
能夠看出,pi 是一個機率值,這個機率值決定着輸出是取 yi 或者是 alpha_i * yi,pi 也起到了一個整流器的做用。
pi 的計算分爲兩步:
首先,對 x 進行均值歸一化處理,這使得整流點是在數據的均值處,實現了 data dependent 的想法;
其次,通過一個 sigmoid 函數的計算,獲得了一個 0 到 1 的機率值。巧合的是最近 google 提出的 Swish 函數形式爲x*sigmoid(x)
在多個實驗上證實了比 ReLU 函數x*Max(x,0)
表現更優。
另外,指望和方差使用每次訓練的 mini batch data 直接計算,並相似於 Momentum 使用了 指數加權平均:
alpha 是一個超參數,推薦值爲 0.99
因爲深度模型比較複雜,輸入又很是稀疏,致使參數很是多,不出意外的過擬合了。
CTR 中輸入稀疏並且維度高,已有的 L1 L2 Dropout 防止過擬合的辦法,論文中嘗試後效果都不是很好。用戶數據符合 長尾定律long-tail law
,也就是說不少的 feature id 只出現了幾回,而一小部分 feature id 出現不少次。這在訓練過程當中增長了不少噪聲,而且加劇了過擬合。
對於這個問題一個簡單的處理辦法就是:人工的去掉出現次數比較少的 feature id。缺點是:損失的信息很差評估;閾值的設定很是的粗糙。
DIN 給出的解決方案是:
針對 feature id 出現的頻率,來自適應的調整他們正則化的強度;
對於出現頻率高的,給與較小的正則化強度;
對於出現頻率低的,給予較大的正則化強度。
B 是 mini batch 樣本,大小爲 b;ni 是出現頻率;Ii 表示咱們考慮特徵非零的樣本。
這樣作的緣由是,做者實踐發現出現頻率高的物品不管是在模型評估仍是線上收入中都有較大影響。
我我的的感受是:
這僅僅是因爲出現頻率高的商品更符合大衆的興趣,而現有的模型還不能實現真正的千人千面推薦,因此使得熱度高的商品重要性依舊很是大,不這樣作的話模型性能就降低。
這就比如最簡單的推薦系統:給全部人都推薦最熱的商品。當技術還不夠成熟,模型效果沒那麼好的時候,咱們增長對熱點商品的權重 (極端就是給全部人都推薦熱點商品),從最終的指標來看多半能提高模型效果,畢竟這符合大多數人興趣愛好。可是這並非咱們想要的千人千面的推薦。
DIN 在阿里內部的實現,使用了多個 GPU。並行化是基於 模型並行化、數據並行化。命名爲 X-Deep Learning(XDL)。
由三部分組成:
Distributed Embedding Layer。模型並行化部分,Embedding Layer 的參數分佈在多個 GPU 上,完成前向後向傳播計算。
Local Backend。單獨的模塊,用來在處理網絡的訓練。使用了開源的 deep learning 框架,好比 tf,mxnet,theano 等。做爲一個後端支撐,良好的接口封裝方便集成或切換各個開源框架。
Communication Component。基礎模塊,用來幫助 embedding layer 和 backend 來實現並行化。使用 MPI 實現。
分爲 模型並行化、數據並行化。
對於一個用戶,一次 pageview 中假設展現了 200 個商品。那麼每一個商品就對應一條樣本。可是,這 200 條樣本中是有不少Common Feature
的。因此 DIN 的實現中並無把用戶都展開,相似於下圖:
對於不少靜態的不變的特徵,好比性別、年齡、昨天之前的行爲等只計算一次、存儲一次。以後利用索引與其餘特徵關聯,大幅度的壓縮了樣本的存儲,加快了模型的訓練。最終實驗僅用了 1/3 的資源,得到了 12 倍的加速。
下圖展現了用戶興趣分佈:顏色越暖表示用戶興趣越高,能夠看到用戶的興趣分佈有多個峯。
利用候選的廣告,反向激活歷史興趣。不一樣的歷史興趣愛好對於當前候選廣告的權重不一樣,作到了 local activation,以下圖:
用戶有多個興趣愛好,訪問了多個 good_id,shop_id。爲了下降緯度並使得商品店鋪間的算術運算有意義,咱們先對其進行 Embedding 嵌入。那麼咱們如何對用戶多種多樣的興趣建模那?使用 Pooling 對 Embedding Vector 求和或者求平均。同時這也解決了不一樣用戶輸入長度不一樣的問題,獲得了一個固定長度的向量。這個向量就是用戶表示,是用戶興趣的表明。
可是,直接求 sum 或 average 損失了不少信息。因此稍加改進,針對不一樣的 behavior id 賦予不一樣的權重,這個權重是由當前 behavior id 和候選廣告共同決定的。這就是 Attention 機制,實現了 Local Activation。
DIN 使用 activation unit 來捕獲 local activation 的特徵,使用 weighted sum pooling 來捕獲 diversity 結構。
在模型學習優化上,DIN 提出了 Dice 激活函數、自適應正則 ,顯著的提高了模型性能與收斂速度。
參考資料
Deep Interest Network for Click-Through Rate Prediction
Learning piece-wise linear models from large scale data for ad click prediction
https://www.leiphone.com/news/201707/t0AT4sIgyWS2QWVU.html
https://www.leiphone.com/news/201706/pDfOAoMYp8mqNKEC.html
蓋坤的分享視頻 http://www.itdks.com/dakalive/detail/3166