1. 程式人生 > >[論文閱讀]阿里DIN深度興趣網路之總體解讀

[論文閱讀]阿里DIN深度興趣網路之總體解讀

# [論文閱讀]阿里DIN深度興趣網路之總體解讀 [toc] ## 0x00 摘要 Deep Interest Network(DIN)是阿里媽媽精準定向檢索及基礎演算法團隊在2017年6月提出的。其針對電子商務領域(e-commerce industry)的CTR預估,重點在於充分利用/挖掘使用者歷史行為資料中的資訊。 本系列文章會解讀論文以及原始碼,順便梳理一些深度學習相關概念和TensorFlow的實現。 本文是系列第一篇 :論文解讀。參考了大量文章,衷心感謝各位的分享,具體請參見文末連結。 ## 0x01 論文概要 ### 1.1 概括 Deep Interest Network(DIN)是阿里媽媽精準定向檢索及基礎演算法團隊在2017年6月提出的。其針對電子商務領域(e-commerce industry)的CTR預估,重點在於充分利用/挖掘使用者歷史行為資料中的資訊。 DIN通過引入attention機制,針對不同的廣告構造不同的使用者抽象表示,從而實現了在資料維度一定的情況下,更精準地捕捉使用者當前的興趣。 核心思想是 :使用者的興趣是多元化的(**diversity**),並且對於特定的廣告,使用者不同的興趣會產生不同的影響(**local activation**)。 ### 1.2 文章資訊 - 論文標題: Deep Interest Network for Click-Through Rate Prediction - 論文地址: https://arxiv.org/abs/1706.06978 - 程式碼地址: https://github.com/zhougr1993/DeepInterestNetwork,另外作者在 README 中推薦看 https://github.com/mouna99/dien 中的實現 ### 1.3 核心觀點 文章介紹了現有的點選率 (CTR) 預估模型大都滿足相同的模式: - 先將大量的稀疏類別特徵 (Categorical Features) 通過 Embedding 技術對映到低維空間; - 再將這些特徵的低維表達按照特徵的類別進行組合與變換 (文中採用 in a group-wise manner 來描述),以形成固定長度的向量(比如常用的 sum pooling / mean pooling); - 最後將這些向量 concatenate 起來輸入到一個 MLP (Multi-Layer Perceptron)中,從而學習這些特徵間的非線性關係; 這個模式存在一個問題。比如在電商場景下,使用者興趣可以使用使用者的歷史行為來描述 (比如使用者訪問過的商品,店鋪或者類目),然而如果按照現有的處理模式,對於不同的候選廣告,使用者的興趣始終被對映為同一個固定長度的向量來表示,這極大的限制了模型的表達能力,畢竟使用者的興趣是多樣的。 Embedding&MLP模型的瓶頸就是表達使用者多樣的興趣,維度受限的使用者表示向量將成為表達使用者多樣化興趣的瓶頸。 為了解決這個問題,論文中提出了 DIN 網路。對於不同的候選廣告,考慮該廣告和使用者歷史行為的相關性,以便自適應地學習使用者興趣的特徵表達。具體來說,文章介紹了 local activation unit 模組,其基於 Attention 機制,對使用者歷史行為進行加權來表示使用者興趣,其中權重引數是通過候選廣告和歷史行為互動來進行學習的
。 另外,本文還介紹了 Mini-batch Aware Regularization 與 Dice 啟用函式兩種技術,以幫助訓練大型的網路。 ### 1.4 名詞解釋 **Diversity:** 使用者在訪問電商網站時會對多種商品都感興趣。也就是使用者的興趣非常的廣泛。比如一個年輕的母親,從她的歷史行為中,我們可以看到她的興趣非常廣泛:羊毛衫、手提袋、耳環、童裝、運動裝等等。 **Local Activation:** 使用者是否會點選推薦給他的商品,僅僅取決於歷史行為資料中的一小部分,而不是全部。歷史行為中部分資料主導是否會點選候選廣告。比如一個愛游泳的人,他之前購買過travel book、ice cream、potato chips、swimming cap。當前給他推薦的商品(或者說是廣告Ad)是goggle(護目鏡)。那麼他是否會點選這次廣告,跟他之前是否購買過薯片、書籍、冰激凌一丁點關係也沒有!而是與他之前購買過游泳帽有關係。也就是說在這一次CTR預估中,部分歷史資料(swimming cap)起了決定作用,而其他的基本沒啥用。 ## 0x02 解讀思路 本節主要摘錄:[用NumPy手工打造 Wide & Deep](https://zhuanlan.zhihu.com/p/53110408)。 ### 2.1 Memorization 和 Generalization 推薦系統的主要挑戰之一,是同時解決Memorization和Generalization
。Memorization根據歷史行為資料,推薦通常和使用者已有行為的物品直接相關的物品。而Generalization會學習新的特徵組合,提高推薦物品的多樣性。 DeepFM 中 Wide & Deep 分別對應 Memorization & Generalization。 #### 2.1.1 Memorization 面對擁有大規模離散sparse特徵的CTR預估問題時,將特徵進行非線性轉換,然後再使用線性模型是在業界非常普遍的做法,最流行的即「LR+特徵叉乘」。Memorization 通過一系列**人工的特徵叉乘(cross-product)**來構造這些非線性特徵,捕捉sparse特徵之間的高階相關性,即 “記憶” 歷史資料中曾共同出現過的特徵對
。 例如 ```java 特徵1——專業: {計算機、人文、其他}, 特徵2——下載過音樂《消愁》:{是、否}, ``` 這兩個特徵one-hot後的特徵維度分別為3維與2維,對應的叉乘結果是 ```java 特徵3——專業☓下載過音樂《消愁》: {計算機∧是,計算機∧否,人文∧是,人文∧否,其他∧是,其他∧否}。 ``` 典型代表是LR模型,使用大量的原始sparse特徵和**叉乘特徵**作為輸入,很多原始的dense特徵通常也會被分桶離散化構造為sparse特徵。這種做法的優點是模型可解釋高,實現快速高效,特徵重要度易於分析,在工業界已被證明是很有效的。 Memorization的缺點是: - 需要更多的人工設計; - 可能出現過擬合。可以這樣理解:如果將所有特徵叉乘起來,那麼幾乎相當於純粹記住每個訓練樣本,這個極端情況是最細粒度的叉乘,我們可以通過構造更粗粒度的特徵叉乘來增強泛化性; - 無法捕捉訓練資料中未曾出現過的特徵對。例如上面的例子中,如果每個專業的人都沒有下載過《消愁》,那麼這兩個特徵共同出現的頻次是0,模型訓練後的對應權重也將是0; #### 2.1.2 Generalization Generalization 為sparse特徵學習低維的dense embeddings 來捕獲特徵相關性,學習到的embeddings 本身帶有一定的語義資訊。可以聯想到NLP中的詞向量,不同詞的詞向量有相關性,因此Generalization是基於相關性之間的傳遞。這類模型的代表是DNN和FM。 Generalization的優點是更少的人工參與,對歷史上沒有出現的特徵組合有更好的泛化性 。 在推薦系統中,當user-item matrix非常稀疏時,例如有和獨特愛好的users以及很小眾的items,NN很難為users和items學習到有效的embedding。這種情況下,大部分user-item應該是沒有關聯的,但dense embedding 的方法還是可以得到對所有 user-item pair 的非零預測,因此*導致 over-generalize並推薦不怎麼相關的物品*。此時Memorization就展示了優勢,它可以“記住”這些特殊的特徵組合。 ### 2.2 發展脈絡 各種NN與FM看似繁雜,實際上,只要把握住它們的發展脈絡,即**“如何兼顧記憶與擴充套件”、“如何處理高維、稀疏的類別特徵”、“如何實現特徵交叉”**,你就會發現各種高大上的新演算法不過是沿著這條脈絡,在某個枝叉上的修補。這樣一來,各種NN與FM,在你腦中,就不再是一個個獨立的縮寫,而能夠編織成網,融會貫通。 相比於實數型特徵,**稀疏的類別/ID類特徵,才是推薦、搜尋領域的“一等公民”**,被研究得更多。即使有一些實數值特徵,比如歷史曝光次數、點選次數、CTR之類的,也往往通過bucket的方式,變成categorical特徵,才喂進模型。 但是,稀疏的categorical/ID類特徵,也有著**單個特徵表達能力弱、特徵組合爆炸、分佈不均勻導致受訓程度不均勻**的缺點。為此,一系列的新技術被開發出來。 單個categorical/ID特徵表達能力是極弱的,因此必須做特徵交叉,以增強categorical特徵的表達能力。而圍繞著如何做特徵交叉,衍生出各種演算法。 **深度神經網路(DNN)**先將categorical/id特徵通過embedding對映成稠密向量,再喂入DNN,讓DNN自動學習到這些特徵之間的**深層交叉**,以增強擴充套件能力。 ## 0x03 DNN ### 3.1 深度模型思路 準確的CTR預估需要精細化權衡使用者、廣告主、平臺三方利益。經過多年的技術更新迭代與發展,CTR預估技術經歷了從 LR/FM 到 融合模型(RF/GBDT/XGBoost) 到 深度CTR預估模型(FNN/PNN/WDL/DeepFM/DIN)的過程,而貫穿其中的主線是**如何讓模型自動地進行組合特徵的挖掘?** 比如: - Wide&Deep、DeepFM:採用高階和低階特徵的聯合來提高模型的表達能力; - PNN:在MLP之前引入一個乘積層(內積和外積),強調了特徵Embedding向量之間的交叉方式,讓模型更容易捕獲特徵的交叉資訊; 也可以看看阿里思路的出發點: > 我們第一考慮到的是降維,在降維的基礎上,進一步考慮特徵的組合。所以DNN很自然進入了我們的考慮範圍。再考慮的是如果把使用者行為序列建模起來,我們希望是使用者開啟手淘後,先在有好貨點了一個商品,再在猜你希望點了一個商品,最後進入搜尋後會受到之前的行為的影響,當然有很多類似的方法可以間接實現這樣的想法。但直接建模的話,LR這類的模型,很難有能力來支援這類特徵,所以很容易就想到了RNN模型。 ### 3.2 DNN模型 DNN模型大多遵從 **Embedding + MLP**這一基礎網路架構,即將原始高維的不同的離散特徵對映為固定長度的低維embedding向量,並將embedding向量作為多個全連線層的輸入,擬合高階的非線性關係,最後通過Sigmoid等手段將輸出值歸一到0~1,表示點選概率。相比於傳統的LR、GBDT、FM等模型,這類DNN的模型能減少大量的人工構造特徵過程,並且能學習特徵之間的非線性關係。 通常流程是: ```java Sparse Features -> Embedding Vector -> pooling layer -> MLPs -> Sigmoid -> Output ``` ### 3.3 工作機制 下圖的 Base Model, 是現有的大多數 CTR 模型採用的模式 ![](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011102721490-1806968429.png) 紅藍粉三色節點分別表示商品 ID (Goods ID), 店鋪 ID (Shop ID), 類目 ID (Cate ID) 三種稀疏特徵, 其他的輸入特徵, 使用白色節點表示 (比如左邊的使用者特徵, 比如使用者 ID; 還有右邊的上下文特徵, 比如廣告位之類的特徵). 注意 Goods 1 ~ Goods N 用來描述使用者的歷史行為. 候選廣告 Candidate Ad 本身也是商品, 也具有 Goods / Shop / Cate ID 三種特徵. 自底向上觀測 Base Model 的工作機制: - 第一模組:特徵表示。 - 可將特徵大致分為四類:user profile、user behavior、ad 以及 context 部分。 - 將廣告設為目標。 - 每一類特徵包含多個field,使用者資訊包含性別、年齡等等;使用者行為包含使用者訪問過的物品編號;廣告包含廣告id,商店id等;上下文包含設計型別id,時間等等。 - 有的特徵可以被編碼成one-hot表示,例如女性可以被編碼成[0,1]。有的特徵可以進行 multi-hot 編碼,與 one-hot 編碼不同,multi-hot 編碼中,一個向量可能存在多個 1。 - 在CTR序列模型中,值得注意的是每個欄位都包含一個行為列表,每個行為對應一個one-hot向量。 - 第二模組:嵌入層。 - 學習特徵的低維向量表示,將維數較大的稀疏特徵矩陣轉換成低維稠密特徵矩陣。 - 每一個field都有一個獨立的 embedding matrix。 - 值得注意的是,由於每個使用者的歷史行為資料各不相同,因此 e 的列數是不確定的。相應地也就不能直接與其他field的嵌入向量首尾相接 作為MLP層的輸入。 - 第三模組:pooling層。 - 由於不同的使用者有不同個數的行為資料,導致embedding矩陣的向量大小不一致,而全連線層只能處理固定維度的資料,因此利用Pooling Layer得到一個固定長度的向量。 - 本層對 e 進行sum pooling,即將一個類別的embedding向量輸入進池化操作,轉化為一個固定長度的向量,解決維度不定的問題。 - 第四模組:連結層。 - 經過embedding layer和pooling layer後,原始稀疏特徵被轉換成多個固定長度的使用者興趣的抽象表示向量。 - 然後利用concat layer聚合抽象表示向量,輸出該使用者興趣的唯一抽象表示向量;作為 MLP 層的輸入 。 - 第五模組:MLP 層,將concat layer輸出的抽象表示向量作為MLP的輸入,自動學習資料之間的高階交叉特徵。 - 損失函式 :基於深度學習的CTR模型廣泛使用的損失函式是 負對數似然函式(the negative log-likelihood function)Loglos,使用標籤作為目標項來監督整體的預測。 ### 3.4 模型特點 **優點**: - 通過神經網路可以擬合高階的非線性關係, 同時減少了人工特徵的工作量。 **缺點**: - 表示使用者的興趣多樣性有限制 (這是最大的瓶頸) 。在對使用者歷史行為資料進行處理時, 每個使用者的歷史點選個數是不相等的, 包含了許多興趣資訊,如何對使用者多種多樣的興趣建模?我們要把它們編碼成一個固定長的向量(這個向量就是使用者表示,是使用者興趣的代表),需要做pooling (sum or average), 會損失資訊。比如: - K維向量,最多隻能表達K個獨立的興趣,而使用者的興趣可能不止K; - K的大小會對計算量產生明顯影響,一般用大的K效果會更好,即擴充套件向量的維度,但這樣會增加學習的引數和在有限的資料中有過擬合的風險; - 沒有考慮使用者與廣告之間的關係。在電子商務領域中,使用者的歷史行為資料(User Behavior Data)中包含大量的使用者興趣資訊,之前的研究並沒有針對Behavior data**特殊的結構(Diversity + Local Activation)**進行建模。比如 對於同一個使用者, 如果候選廣告 (Candidate Ad) 發生了變化, 使用者的興趣卻依然是同一個向量來表達, 顯然這限制了模型的表達能力, 畢竟使用者的興趣是豐富的/變化的。 - 忽略隱式特徵的挖掘和表示。DNN模型直接將使用者的行為視作使用者的興趣。行為是興趣的載體,能反映興趣,但若直接用行為表示興趣則略有不妥。因為,行為是序列化產生的,如果像大部分現有的模型那樣直接採用行為即興趣的做法,會忽略行為之間的依賴關係。此外,當前時刻的興趣往往直接導致了下一行為的發生。 - 忽略興趣的變化。如之前所講,使用者的興趣是不斷變化的。例如使用者對衣服的喜好,會隨季節、時尚風潮以及個人品味的變化而變化,呈現一種連續的變遷趨勢。但在淘寶平臺中,使用者的興趣是豐富多樣的,且每個興趣的演變基本互不影響。此外,影響最終行為的僅僅是與目標商品相關的興趣。 - 不必將某個使用者所有的興趣【使用者的歷史購買記錄】全部壓縮到向量中,因為只有使用者部分的興趣會影響當前行為(對候選廣告點選或不點選)。例如,一位女游泳運動員會點選推薦的護目鏡,這主要是由於購買了泳衣而不是上週購物清單中的鞋子。 ## 0x04 DIN 針對DNN模型的問題,阿里提出了DIN模型。其核心思想:使用者的興趣是多元化的(**diversity**),並且對於特定的廣告,使用者不同的興趣會產生不同的影響(**local activation**)。DIN同時對Diversity和Local Activation進行建模。 DIN 不會通過使用同一向量來表達所有使用者的不同興趣,而是通過考慮**歷史行為的相關性**來自適應地計算使用者興趣的表示向量(對於給定的廣告)。 **該表示向量隨不同廣告而變化**。DIN 通過考慮【給定的候選廣告】和【使用者的歷史行為】的相關性,來計算使用者興趣的表示向量。具體來說就是通過引入區域性啟用單元,通過軟搜尋歷史行為的相關部分來關注相關的使用者興趣,並採用加權和來獲得有關候選廣告的使用者興趣的表示。與候選廣告相關性較高的行為會獲得較高的啟用權重,並支配著使用者興趣。該表示向量在不同廣告上有所不同,大大提高了模型的表達能力。 ### 4.1 創新 Deep Interest NetWork有以下幾點創新: - **針對Diversity:** 針對使用者廣泛的興趣,DIN用*an interest distribution*去表示,即用 Pooling(weighted sum)對Diversity建模(對使用者多種多樣的興趣建模)。 - **針對Local Activation**: - DNN 直接求sum或average損失了很多資訊。所以 DIN 稍加改進,利用attention機制實現 Local Activation,從使用者歷史行為中動態學習使用者興趣的embedding向量,針對不同的廣告構造不同的使用者抽象表示,從而實現了在資料維度一定的情況下,更精準地捕捉使用者當前的興趣。 - 對使用者歷史行為進行了不同的加權處理,針對不同的廣告,不同的 behavior id 賦予不同的權重,這個權重是由當前behavior id和候選廣告共同決定的,這就是Attention機制。即針對當前候選Ad,去區域性的啟用(*Local Activate*)相關的歷史興趣資訊。 - 與當前候選Ad相關性越高的歷史行為,會獲得越高的*attention score*,從而會主導這一次預測。 - CTR中**特徵稀疏而且維度高**,通常利用L1、L2、Dropout等手段防止過擬合。由於傳統L2正則計算的是全部引數,CTR預估場景的模型引數往往數以億計。DIN提出了一種正則化方法,在每次小批量迭代中,給與不同頻次的特徵不同的正則權重; - 由於傳統的**啟用函式**,如Relu在輸入小於0時輸出為0,將導致許多網路節點的迭代速度變慢。PRelu雖然加快了迭代速度,但是其分割點預設為0,實際上分割點應該由資料決定。因此,DIN提出了一種資料動態自適應啟用函式Dice。 - **針對大規模稀疏資料的模型訓練:**當DNN深度比較深(引數非常多),輸入又非常稀疏的時候,很容易過擬合。DIN提出**Adaptive regularizaion**來防止過擬合,效果顯著。 ### 4.2 架構 DIN架構圖如下: ![](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011102743714-602910802.png) DIN同時對Diversity和Local Activation進行建模,具體體現如下圖。 ![](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011102800065-294142691.png) 下面我們逐一看看系統的各個部分。 ## 0x05 特徵 ### 5.1 特徵分類 論文中作者把阿里的展示廣告系統特徵分為四大類。 1)使用者畫像特徵; 2)使用者行為特徵,即使用者點選過的商品,各個使用者行為長度不同; 3)待曝光的廣告,廣告其實也是商品; 4)上下文特徵; 每個特徵類別包括多個特徵域(feature field),例如:使用者畫像特徵包括性別,年齡段等;使用者行為特徵,包括使用者點選過的商品,商品的類別,以及所屬的商鋪等;Context包括時間。 ### 5.2 輸入特點 CTR中輸入普遍存在的特點: - 高緯度 - 非常稀疏 有一些特徵域是單值特徵,不同的特徵值之間是互斥的,例如性別只可能屬於男或者女,可以轉化為one-hot表示; 有一些特徵域是多值離散特徵,例如使用者行為特徵,使用者可能點選過多個商品,構成一個商品點選序列,只能用multi-hot編碼表示。與 one-hot 編碼不同,multi-hot 編碼中,一個向量可能存在多個 1,比如: - 使用者在YouTube上看的視訊和搜尋過的視訊。無論是看過的還是搜尋過的,都不止一個,但是相對於所有的視訊來說,看過和搜尋過的數量都太小了(非常稀疏)。 - 在電子商務上的例子就是:使用者購買過的good_id有多個,購買過的shop_id也有多個,而這也直接導致了每個使用者的歷史行為id長度是不同的。 ### 5.3 特徵處理 DNN 並**沒有進行特徵組合/交叉特徵**。而是通過DNN去學習特徵間的互動資訊。 對於單值特徵處理比較簡單,對於多值特徵的處理稍微麻煩些。多值特徵導致了每個使用者的樣本長度都是不同的。如何解決這個問題?通過 `Embedding -> Pooling + Attention`。 ## 0x06 Embedding 深度學習在推薦、搜尋領域的運用,是圍繞著稀疏的ID類特徵所展開的,其主要方法就是Embedding。變ID類特徵的“精確匹配”為“模糊查詢”,以增強擴充套件。即將高維、稀疏categorical/id類特徵通過embedding對映成一個低維、稠密向量。 ### 6.1 特點 Embedding層特點如下: - 深度學習在推薦系統中的應用,比如各種NN,各種FM 都是以embedding為基礎的; - 高維、稀疏的categorical/id類特徵是推薦系統中的一等公民; - 在Embedding層中,每一個特徵域都對應著一個Embedding矩陣; - embedding的作用是將原來高維、稀疏的categorical/id類特徵的“精確匹配”,變為向量之間的“模糊查詢”,從而提高了可擴充套件性; - 推薦系統中的Embedding與NLP中的Embedding也有不同。 - NLP中,一句話的一個位置上只有一個詞,所以Embedding往往變成了:從Embedding矩陣抽取與詞對應的行上的行向量; - 推薦系統中,一個Field下往往有多個Feature,Embedding是將多個Feature Embedding合併成一個向量,即所謂的**Pooling**。比如某個App Field下的Feature有"微信:0.9,微博:0.5,淘寶:0.3",所以得到`Embedding = 0.9 * 微信向量 + 0.5 * 微博向量 + 0.3 * 淘寶向量`; ### 6.2 變長特徵 MLP只能接受固定長度的輸入,但是每個使用者在一段時間內的商品點選序列長度可能會不同,屬於變長特徵,那麼該如何處理這樣的變長特徵? 一般來說是由 Pooling 層來處理,下面就讓我們看看Pooling層。 ## 0x07 Pooling 層 Pooling的作用是把embedding向量轉化為一個固定長度的向量,解決維度不定的問題。 ### 7.1 Pooling作用 使用者有多個興趣愛好,這導致兩個問題: - 表達使用者興趣時,使用者的**歷史行為往往涉及多個categorical/id特徵**,比如點選過的多個商品、看過的多個視訊、輸入過的多個搜尋詞,這就涉及了多個good_id,shop_id。 - 不同的使用者有不同數量的歷史行為,即multi-hot行為特徵的向量會導致所產生的embedding向量列表的長度不同,而全連線需要固定長度的輸入。 為了降低緯度並使得商品店鋪間的算術運算有意義,我們先對id特徵進行Embedding嵌入。 那麼如何對使用者多種多樣的興趣建模?我們把這些id特徵embedding之後的多個低維向量(embedding向量列表),“合併”成一個向量,作為使用者興趣的表示。 因為全連線需要固定長度的輸入,所以我們需要“合併”成一個固定長度向量,這樣才能喂入DNN。 這個“合併”就是所謂**Pooling**。 ### 7.2 實現方式 圍繞著這個Pooling過程,各家有各家的高招: - Youtube DNN這篇論文中,Youtube的做法最簡單、直觀,就是將使用者看過的視訊embedding向量、搜尋過的關鍵詞embedding向量,做一個**簡單的平均**。 - Neural Factorization Machine中,將n個(n=特徵數)k維向量壓縮成一個k維向量,取名為bi-interaction pooling。既完成pooling,也實現了特徵間的二階交叉。 - DIN用各embedding向量的加權平均實現了pooling,而”權重”由attention機制計算得到。 - **基於深度學習的文字分類,同樣面臨著如何將一段話中的多個詞向量壓縮成一個向量來表示這段話的問題。常用的方法,就是將多個詞向量喂入RNN,最後一個時刻RNN的輸出向量就代表了多個詞向量的“合併”結果**。顯然,DIEN則借鑑了這一思路,並且改造了GRU的構造,利用attention score來控制門。 ### 7.3 DNN DNN base模型採用pooling的方式,一般有兩種方法,**求和池化**(sum pooling,各個對應元素進行累加)和**平均池化**(average pooling,各個對應元素求平均)。然後將所有向量連線在一起(concatenate),以獲得例項的總體表示向量。 - 求和就是對多個商品的embedding,在每個對應的維度上做求和。例如,點選序列有10個商品,那麼就有10個商品的embedding,假設商品的embedding維度是16,那麼分別在第1到16維上,對10個值求和。 - 平均就是對多個embedding,在每個對應的維度上求平均。不管使用者點選過多少個商品,經過pooling之後,得到的最終表示向量embedding和每個商品的embedding維度都是相同的。 base模型對於任何要預測的candidate,不管這個candidate是衣服,電子產品等,使用者的表示向量都是確定的、不變的,對於任何candidate都無差別對待。 ### 7.4 DIN 回到阿里的展示廣告系統,如架構圖所示,每個商品有3個特徵域,包括商品自身,商品類別,商品所屬的商鋪。對於每個商品來說,3個特徵embedding拼接之後才是商品的表示向量。 對商品序列做pooling,架構圖中採用的是求和的方式,pooling之後得到使用者行為序列的表示向量。然後再和其他的特徵embedding做拼接,作為MLP的輸入。 MLP輸入端的整個embedding向量,除了candidate的embedding部分,其餘的embedding部分可以視為使用者的表示向量。 ![](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011102859098-1345216596.png) 仔細的研究下Base Model中Pooling Layer就會發現,Pooling操作損失了很多資訊。 所以DIN 使用 Pooling(weighted sum)對Diversity建模,因為直接sum體現不出差異多樣性,加權可以即DIN用各embedding向量的加權平均實現了pooling,而”權重”由attention機制計算得到。 ## 0x08 Attention機制 Attention機制簡單的理解就是,針對不同的廣告,使用者歷史行為與該廣告的權重是不同的。假設使用者有ABC三個歷史行為,對於廣告D,那麼ABC的權重可能是0.8、0.1、0.1;對於廣告E,那麼ABC的權重可能是0.3、0.6、0.1。這裡的權重,就是Attention機制即架構圖中的Activation Unit所需要學習的。 DIN模型其實就是在DNN基礎上加了attention。通過Attention來實現Pooling,使使用者興趣的向量表示,根據候選物料的不同而不同,實現**使用者興趣的“千物千面”**。 模型的目標:基於使用者歷史行為,充分挖掘使用者興趣和候選廣告之間的關係。使用者是否點選某個廣告往往是基於他之前的部分興趣,這是應用Attention機制的基礎。因為無論是使用者興趣行為,還是候選廣告都會被對映到**Embedding空間**中。所以他們兩者的關係,是在Embedding空間中學習的。 ### 8.1 問題 DIN的attention機制部分是**為了**用一個 fix length 的 vector 刻畫使用者面對不同的商品展現出不同的興趣,這個點看起來很簡單,但是實際比較困難。 - 傳統DNN模型為了得到一個固定長度的Embedding Vector表示,原來的做法是在`Embedding Layer`後面增加一個`Pooling Layer`。Pooling可以用sum或average。最終得到一個固定長度的`Embedding Vector`,是使用者興趣的一個抽象表示,常被稱作`User Representation`。缺點是會損失一些資訊。 - 使用者Embedding Vector的維度為k,它最多表示k個相互獨立的興趣愛好。但是使用者的興趣愛好遠遠不止k個,怎麼辦? - 傳統DNN模型在`Embedding Layer -> Pooling Layer`得到使用者興趣表示的時候,也沒有考慮使用者與廣告之間的關係,即不同廣告之間的權重是一致的。這樣傳統的預估方法在一個user面對不同商品(廣告)時用一個同樣的vector來表達這個user。如果在這種情況下要想表達多樣的興趣,最簡單的方案是增加user vector的維度,然而這會帶來overfitting和計算壓力。 所以DIN用類似attention的機制試圖解決這個問題。 ### 8.2 注意力機制 注意力機制顧名思義,就是模型在預測的時候,對使用者不同行為的注意力是不一樣的,“相關”的行為歷史看重一些,“不相關”的歷史甚至可以忽略。即對於不同的特徵有不同的權重,這樣某些特徵就會主導這一次的預測,就好像模型對某些特徵pay attention。 這樣的思想反應到模型中也是直觀的。比如在視訊推薦模型中,DIN可以通過增加使用者的歷史行為feature:使用者觀看的近20個show_id,近20個video_id,然後使用attention網路,最後與其它非歷史行為feature在MLP中匯合。 DIN利用attention機制去更好的建模區域性啟用。在得到使用者興趣表示時賦予不同的歷史行為不同的權重,即通過`Embedding Layer -> Pooling Layer+attention`實現區域性啟用。從最終反向訓練的角度來看,就是根據當前的候選廣告,來反向的啟用使用者歷史的興趣愛好,賦予不同歷史行為不同的權重。 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。 ### 8.3 實現 DIN中並不能直接用attention機制。因為對於不同的候選廣告,使用者興趣表示(embedding vector)應該是不同的。 Local Activation Unit 借鑑了NMT(Neural Machine Translation)中的attention機制,實現了自己的Attention機制。 Local Activation學習候選廣告和使用者歷史行為的關係,並給出候選廣告和各個歷史行為的相關性程度 (即權重引數),再對歷史行為序列進行加權求和,最終得到使用者興趣的特徵表達。也就是說使用者針對不同的廣告表現出不同的興趣表示,即使歷史興趣行為相同,但是各個行為的權重不同。 DIN 在pooling的時候,與candidate相關的商品權重大一些,與candidate不相關的商品權重小一些,**這就是一種Attention的思想**。將candidate與點選序列中的每個商品發生互動來計算attention分數。具體計算輸入包括商品和candidate的embedding向量,以及兩者的外積。對於不同的candidate,得到的使用者表示向量也不同,具有更大的靈活性。 DIN中,對於候選廣告, 根據local activation unit計算出的使用者興趣向量為: ![](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011102820956-991496330.png) 其中, - ei 表示使用者U歷史行為序列embedding向量,比如good_id,shop_id等,長度為H; - Vu 表示使用者所有行為embedding向量的加權和,表示使用者的興趣; - Va 表示廣告 A 的mbedding 向量; - wj 表示ej的權重; - 權重表示的是:每一個behavior id針對當前的候選廣告Va,對總的使用者興趣表示的Embedding Vector的貢獻大小。 - 在實現中,權重wj 用函式去擬合,通過Activation Unit計算得出,用啟用函式Dice的輸出來表示,表示為g(Vi,Va),輸入是Vi和Va; - 候選廣告影響著每個behavior id的權重,也就是Local Activation; - a ( . ) 表示一個feed-forward network,其輸出作為local activation的權值,與使用者向量相乘; 在這種計算方式下,最終的使用者 U 的興趣向量會根據不同的廣告 A 而變化。這就是 “**使用者興趣的千物千面**”。比如,一個使用者之前買過奶粉與泳衣,當展示給她泳鏡時,顯然更會喚起她買過的泳衣的記憶;而當展示給她尿不溼時,顯然更喚起她買過的奶粉的記憶。 DIN attention機制中,使用者興趣向量 Vu 是歷史上接觸過的item embedding向量的加權平均,而第 i 個歷史 item 的權重 Wi 由該歷史 item 的 embedding 向量 Vi 與候選物料的 embedding 向量 Va 共同決定(函式g)。可見同一個使用者當面對不同候選物料時,其興趣向量也不相同,從而實現了“千物千面”。 DIN與base model的主要區別就在於啟用單元上,這個結構通過計算廣告的embedding與使用者表現的embedding之間的相似度得到對應的權重,後對錶現序列進行權重求和,取得了不俗的表現。 ### 8.4 歸一化 一般來說,做attention的時候,需要對所有的分數通過softmax做歸一化,這樣做有兩個好處,一是保證權重非負,二是保證權重之和為1。 但是在DIN的論文中強調,不對點選序列的attention分數做歸一化,直接將分數與對應商品的embedding向量做加權和,目的在於保留使用者的興趣強度。例如,使用者的點選序列中90%是衣服,10%是電子產品,有一件T恤和一部手機需要預測CTR,那麼T恤會啟用大部分的使用者行為,使得根據T恤計算出來的使用者行為向量在數值上更大。 ## 0x09 評價指標 評價標準是阿里自己提出的GAUC。並且實踐證明了GAUC相比於AUC更加穩定、可靠。 AUC表示正樣本得分比負樣本得分高的概率。在CTR實際應用場景中,CTR預測常被用於對每個使用者候選廣告的排序。但是不同使用者之間存在差異:有些使用者天生就是點選率高。以往的評價指標對樣本不區分使用者地進行AUC的計算。論文采用的GAUC實現了使用者級別的AUC計算,**在單個使用者AUC的基礎上,按照點選次數或展示次數進行加權平均,消除了使用者偏差對模型的影響**,更準確的描述了模型的表現效果。 ## 0x10 Adaptive Regularization 由於深度模型比較複雜,輸入又非常稀疏,導致引數非常多,非常容易過擬合。 CTR中輸入稀疏而且維度高,已有的L1 L2 Dropout防止過擬合的辦法,論文中嘗試後效果都不是很好。使用者資料符合 長尾定律`long-tail law`,也就是說很多的feature id只出現了幾次,而一小部分feature id出現很多次。這在訓練過程中增加了很多噪聲,並且加重了過擬合。 對於這個問題一個簡單的處理辦法就是:人工的去掉出現次數比較少的feature id。缺點是:損失的資訊不好評估;閾值的設定非常的粗糙。 **DIN給出的解決方案是:** 1. 針對feature id出現的頻率,來自適應的調整他們正則化的強度; 2. 對於出現頻率高的,給與較小的正則化強度; 3. 對於出現頻率低的,給予較大的正則化強度。 對L2正則化的改進,在進行SGD優化的時候,每個mini-batch都只會輸入部分訓練資料,反向傳播只針對部分非零特徵引數進行訓練,新增上L2之後,需要對整個網路的引數包括所有特徵的embedding向量進行訓練,這個計算量非常大且不可接受。論文中提出,在每個mini-batch中只對該batch的特徵embedding引數進行L2正則化。 ## 0x11 總結 對論文總結如下: 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啟用函式*、*自適應正則* ,顯著的提升了模型效能與收斂速度。 ## 0xFF 參考 [用NumPy手工打造 Wide & Deep](https://zhuanlan.zhihu.com/p/53110408) [看Google如何實現Wide & Deep模型(1)](https://zhuanlan.zhihu.com/p/47293765) [看Youtube怎麼利用深度學習做推薦](https://zhuanlan.zhihu.com/p/46247835) [也評Deep Interest Evolution Network](https://zhuanlan.zhihu.com/p/54838663) [從DIN到DIEN看阿里CTR演算法的進化脈絡](https://zhuanlan.zhihu.com/p/78365283) [第七章 人工智慧,7.6 DNN在搜尋場景中的應用(作者:仁重)](https://blog.csdn.net/aa8102980/article/details/102374473/) [#Paper Reading# Deep Interest Network for Click-Through Rate Prediction](https://blog.csdn.net/John159151/article/details/91377508) [【paper reading】Deep Interest Evolution Network for Click-Through Rate Prediction](https://www.jianshu.com/p/79060b8db1eb) [也評Deep Interest Evolution Network](https://zhuanlan.zhihu.com/p/54838663) [論文閱讀:《Deep Interest Evolution Network for Click-Through Rate Prediction》](https://blog.csdn.net/ybjlucky/article/details/87888255) [【論文筆記】Deep Interest Evolution Network(AAAI 2019)](https://zhuanlan.zhihu.com/p/134170462) [【讀書筆記】Deep Interest Evolution Network for Click-Through Rate Prediction](https://blog.csdn.net/srdlaplace/article/details/89464050) [DIN(Deep Interest Network):核心思想+原始碼閱讀註釋](https://www.jianshu.com/p/f53af7312e18) [計算廣告CTR預估系列(五)--阿里Deep Interest Network理論](https://blog.csdn.net/u010352603/article/details/80590152) [CTR預估之Deep Interest NetWork模型原理詳解](https://blog.csdn.net/yz930618/article/details/85003101) [人人都能看懂的LSTM](https://zhuanlan.zhihu.com/p/32085405) [從動圖中理解 RNN,LSTM 和 GRU](https://baijiahao.baidu.com/s?id=1639105801622260740) [臺大李巨集毅機器學習(一)——RNN&LSTM](https://blog.csdn.net/weixin_41753033/article/details/95937154) [李巨集毅機器學習(2016)](https://www.bilibili.com/video/av9770190/?p=25) [推薦系統遇上深度學習(二十四)--深度興趣進化網路DIEN原理及實戰!](https://www.jianshu.com/p/6742d10b89a8) [from google.protobuf.pyext import _message,使用tensorflow出現 ImportError: DLL load failed](https://blog.csdn.net/u012193416/article/details/86301899) [DIN 深度興趣網路介紹以及原始碼淺析](https://blog.csdn.net/Eric_1993/article/details/107882557) [CTR預估 論文精讀(八)--Deep Interest Network for Click-Through Rate Prediction](https://blog.csdn.net/Dby_freedom/article/details/85936263) [阿里CTR預估三部曲(1):Deep Interest Network for Click-Through Rate Prediction簡析](https://blog.csdn.net/qq_35564813/article/details/90714056) [阿里CTR預估三部曲(2):Deep Interest Evolution Network for Click-Through Rate Prediction簡析](https://blog.csdn.net/qq_35564813/article/details/90723139) [Deep Interest Network解讀](https://www.jianshu.com/p/132da6864d40) [深度興趣網路(DIN,Deep Interest Network)](https://running-bad-ai.github.io/2018/08/02/DIN/) [DIN論文官方實現解析](https://blog.csdn.net/gaoborl/article/details/86644044) [阿里DIN原始碼之如何建模使用者序列(1):base方案](https://blog.csdn.net/sinat_15443203/article/details/104684745) [阿里DIN原始碼之如何建模使用者序列(2):DIN以及特徵工程看法](https://zhuanlan.zhihu.com/p/112044156) [阿里深度興趣網路(DIN)論文翻譯](https://zhuanlan.zhihu.com/p/133467437) [推薦系統遇上深度學習(二十四)--深度興趣進化網路DIEN原理及實戰!](https://www.jianshu.com/p/6742d10b89a8) [推薦系統遇上深度學習(十八)--探祕阿里之深度興趣網路(DIN)淺析及實現](https://www.jianshu.com/p/73b6f5d00f46) [【論文導讀】2018阿里CTR預估模型---DIN(深度興趣網路),後附TF2.0復現程式碼](https://blog.csdn.net/Blank_spaces/article/details/106485534) [【論文導讀】2019阿里CTR預估模型---DIEN(深度興趣演化網路)](https://blog.csdn.net/Blank_spaces/article/details/107