[論文閱讀]阿里DIEN深度興趣進化網路之總體解讀
阿新 • • 發佈:2020-10-31
# [論文閱讀]阿里DIEN深度興趣進化網路之總體解讀
[toc]
## 0x00 摘要
之前我們介紹了阿里的深度興趣網路(Deep Interest Network,以下簡稱DIN),一年後阿里再次升級其模型到深度興趣進化網路(Deep Interest Evolution Network,以下簡稱DIEN。
本系列文章通過解讀DIN & DIEN論文以及原始碼,順便梳理一些深度學習相關概念和TensorFlow的實現。
本文是系列第六篇 :DIEN 論文解讀,參考了大量文章,衷心感謝各位兄弟的分享,具體參見文末連結。
## 0x01論文概要
### 1.1 文章資訊
- 論文標題: Deep Interest Evolution Network for Click-Through Rate Prediction
- 論文地址: https://arxiv.org/pdf/1809.03672.pdf
- 程式碼地址: https://github.com/mouna99/dien
### 1.2 基本觀點
#### 1.2.1 DIN的問題
DIN忽略興趣的變化。
- 使用者的興趣是不斷變化的。例如使用者對衣服的喜好,會隨季節、時尚風潮以及個人品味的變化而變化,呈現一種連續的變遷趨勢。
- 在淘寶平臺中,使用者的興趣是豐富多樣的,且每個興趣的演變基本互不影響。
- 此外,影響最終行為的僅僅是與目標商品相關的興趣。
#### 1.2.2 DIEN創新
作者提出,以前的CTR預估方法都是直接將使用者表現的表示向量當作興趣,而沒有通過具體的表現對隱藏的興趣進行建模。因此提出DIEN【關鍵 - 興趣直接導致了連續的行為,所以需要對使用者興趣及其演變建模,從使用者歷史行為中挖掘使用者與目標商品相關的興趣及演變】。
DIEN有兩個關鍵模組:
- 一個是興趣抽取層:
- 從具體的使用者表現中通過模擬使用者興趣遷移過程,抽取潛在的興趣,主要是利用 GRU + 一個輔助損失(auxiliary loss)。即DIN沒有考慮使用者歷史之間的時序關係,而DIEN則使用了GRU來建模使用者歷史的時間序列;
- 直接使用GRU的缺陷: 隱藏狀態 只是表示捕捉行為之間依賴關係,並不能代表興趣。且目標物體的點選是由最終的興趣觸發的,所以GRU只能學習行為之間的依賴,並不能很好反映使用者興趣;
- **創新**:由於**每一步的興趣狀態都會直接導致下一個連續的行為。** 因此作者提出:輔助損失,使用下一個行為 來監督興趣狀態 的學習;
- 一個是興趣進化層:
- 興趣的多樣性會導致興趣偏移的現象。在相鄰的訪問中,使用者的意圖可能非常不同,使用者的一個行為可能依賴於很久以前的行為。
- 基於從興趣抽取層獲得的興趣序列基礎上加入注意力機制,模擬與當前目標廣告相關的興趣進化過程 。利用AUGRU(帶有注意力機制更新門的GRU,attentional update gate,簡稱AUGRU)建模興趣變化的過程;
- AUGRU 增強了在 興趣演化 中 相關興趣 的影響,同時削弱了興趣漂移所產生的非相關興趣效應。通過在更新門中引入注意機制,AUGRU 可以實現針對不同目標物體的特定興趣演化過程。
可以這樣說,在訓練的每一步中,我們為 interest extractor layer 引入了輔助loss。在 interest evolving layer 中加入了attention機制。
### 1.3 名詞解釋
**隱式興趣(latent interest)**:使用者與系統互動的行為是表達興趣的載體。
**興趣演變(Interest evolving)**:受外在環境與內在認知變化的影響,使用者的興趣往往會隨時間不斷變化。以購買衣服為例,使用者對興趣的喜好,會隨季節、時尚風潮以及個人品味的變化而變化。
因此,想要做好點選率預估,必須在挖掘使用者興趣的同時,抓住使用者興趣的變化過程 。
## 0x02 總體概要
### 2.1 模型架構
DIN架構如下:
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112145349-169408410.jpg)
與DIN類似,模型架構同樣是由 輸入層 + Embedding層 + 連線層 + 多層全連線神經網路 + 輸出層的整體架構;
和DIN不同的是,DIEN把 user behavior 組織成序列資料的形式,並把簡單的使用外積完成的activation unit變成一個attention-based GRU網路。
深度興趣進化網路分為幾層,從下到上依次是:
- 行為序列層(Behavior Layer):主要作用是將使用者瀏覽過的商品轉換成對應的embedding,並且按照瀏覽時間做排序,即把原始的id類行為序列特徵轉換成Embedding行為序列。
- 興趣抽取層(Interest Extractor Layer):主要作用是通過模擬使用者的興趣遷移過程,基於行為序列提取使用者興趣序列。
- 興趣進化層(Interest Evolving Layer):主要作用是通過在興趣抽取層基礎上加入Attention機制,模擬與當前目標廣告相關的興趣進化過程,對與目標物品相關的興趣演化過程進行建模;
- 將興趣表示 和 ad、user profile、context的embedding向量進行拼接。最後使用MLP完成最後的預測;
再詳細點說:
- 使用者歷史肯定是一個時間序列,將其喂入RNN,則最後一個狀態可以認為包含了所有歷史資訊。因此,作者用一個雙層的GRU 來建模使用者興趣。
- 將使用者歷史接觸過的item embedding微量,喂進第一層GRU,輸出的就是使用者各時刻的興趣。這一層被稱為**Interest Extraction Layer**
- 將第一層的輸出,喂進第二層GRU,並用attention score(基於第一層的輸出向量與候選物料計算得出)來控制第二層的GRU的update gate。這一層叫做**Interest Evolving Layer**。
- **Interest Evolving Layer的最後一個狀態作為使用者興趣的向量表示,與ad, context的特徵一同喂入MLP**,預測點選率。
## 0x03 興趣抽取層
### 3.1 之前工作
DIEN論文中提到,之前的一些演算法,通過引入RNN來發掘和利用行為序列(也就是瀏覽過的商品序列)中的依賴關係,比直接對行為序列做pooling效果更好。但是這些演算法存在的問題就是直接將RNN的隱層輸出作為使用者的興趣表示。而商品embedding才是對商品的真實表達,也是對使用者興趣的直接反應,RNN的隱層輸出向量未必能夠真正表達使用者的興趣。
因為觀測到當前時刻的興趣直接影響了下一時刻行為的發生,而GRU對興趣表示的針對性弱。所以興趣提取層引入了一個有監督學習,設計了auxiliary loss 損失函式,目的是用**下一時刻的行為監督當前時刻興趣的學習**。這樣就強行將RNN輸出隱層與商品embedding發生互動,如架構圖中左側的Auxiliary Loss所示。
即:
- 使用者的行為是依時間產生的序列資料,所以使用GRU結構的RNN;
- 使用者當前的興趣直接導致下一行為的產生,所以設計了輔助損失函式,用下一刻的行為監督當前時刻興趣的學習;
### 3.2 GRU
興趣進化層的基本結構是GRU(Gated Recurrent Unit)網路,如架構中黃色區域所示,即用GRU來對使用者行為之間的依賴性進行建模。
電子商務系統中的使用者行為豐富,即使在很短的如兩週這樣的時間,其歷史行為序列也很長。為了在效率和效能之間進行平衡,我們採用GRU對行為進行建模。
GRU的輸入是使用者按時間排序的行為序列,也就是行為對應的商品(按照時間步排列的商品embedding向量)。相比傳統的序列模型RNN和LSTM,GRU解決了RNN的梯度消失問題;與LSTM相比,GRU的引數更少,訓練收斂速度更快。
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112203724-27991600.png)
引數解釋如下:
- 假設第t個時間步輸入e(t),GRU輸出隱單元h(t);
- 令下一個時間步的輸入向量 e(t+1) 作為正樣本,隨機取樣負樣本 e(t+1) ‘,且 e(t+1) ‘ != e(t) ;
- h(t)與正負樣本向量分別做內積;
### 3.3 輔助損失
為了使序列結構模型的隱藏狀態有效地表示潛在興趣,應該對隱藏狀態進行額外的監督,例如引入排名資訊。在推薦系統中,**排名損失**已被廣泛用於排名任務。
#### 3.3.1 輔助損失
輔助loss來源於全部的點選記錄,而非針對目標廣告,有利於避免梯度消失,將有點選的作為正樣本,未點選的作為負樣本。
DIEN定義輔助損失如下:
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112219219-900165366.png)
#### 3.3.2 全域性損失
DIEN使用的全域性損失函式如下:
- Label target 是CTR任務的loss函式;
- 將CTR的loss和輔助loss相加作為整個網路的loss進行優化;
- alpha 是平衡最終CTR預測和興趣表示的超引數;
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112233579-1880061531.jpg)
#### 3.3.3 輔助損失作用
DIEN作者指出GRU只能學習行為之間的依賴,並不能很好反映使用者興趣。Label target 只包含了最終興趣的監督資訊,中間的歷史狀態 ht 並不能得到監督資訊來指導學習。而興趣可能會導致多個連續行為,因此模型引入Auxiliary Loss來提升興趣表達的準確性。
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112249652-1684021524.png)
具體來講,就是利用 t 時刻的行為 b(t+1) 作為監督去學習隱含層向量 ht ,除了利用真實的下一個行為作為正樣本之外,**負例**的選擇或是從使用者未互動過的商品中隨機抽取,或是從已展示給使用者但使用者沒有點選的商品中隨機抽取。正負樣本分別代表了使用者 點選/未點選 的第 t 個物品embedding向量。
引入Auxiliary Loss的優勢有:
- 幫助GRU的隱狀態更好地表示使用者興趣。加入了輔助損失,GRU的每一個隱藏狀態 都表示使用者在 時間下的興趣狀態,所有的興趣狀態點的拼接 構造了一個興趣序列;
- RNN在建模長序列場景下梯度傳播可能並不能很好地影響到序列開始部分,在序列的每個部分引入一個輔助監督訊號,可以一定程度上降低優化難度;
- Auxiliary Loss可以給Embedding層的學習帶來更多的語義資訊,學習到的Item對應更好的Embedding。
### 3.4 總結
經過GRU組成的興趣抽取層後,使用者的行為向量 b ( t ) 被進一步抽象化,形成了興趣狀態向量h ( t )。
再用一句話總結下,興趣提取層的作用是挖掘行為序列中商品之間的聯絡,對使用者的興趣進行提取和表達。
## 0x04 興趣進化層
興趣進化層 Interest Evolution Layer 的主要目標是刻畫使用者興趣的進化過程。
使用者興趣是不斷變化的:
- 使用者在某一段時間的喜好具有一定的集中性。比如使用者可能在一段時間內不斷買書,在另一段時間內不斷買衣服;
- 每種興趣都有自己的演變趨勢,不同種類的興趣之間很少相互影響,例如買書和買衣服的興趣基本互不相關;
使用者這種變化會直接影響使用者的點選決策。建模使用者興趣的進化過程有兩方面的好處:
- 追蹤使用者的interest可以使我們學習final interest的表達時包含更多的歷史資訊;
- 可以根據interest的變化趨勢更好地進行CTR預測;
### 4.1 演化規律
隨著外部環境和內部認知的變化,使用者興趣也在不斷變化,因此使用者的行為受不同興趣的影響。興趣進化層相比興趣抽取層的最大特點在於引入Attention機制,為了更有針對性地模擬與目標廣告相關的興趣進化路徑。
推薦模型永遠不能脫離具體業務場景,在阿里這種電商環境下,使用者非常有可能同時對多品類商品感興趣,比如在購買“機械鍵盤”的同時也在檢視“衣服”品類下的商品。這樣當目標商品是某電子產品時,“機械鍵盤”相關的興趣演化路徑就要比“衣服”相關的演化路徑重要。
使用者興趣的演化具有如下規律:
- Interest Drift:由於興趣的多樣性,興趣可能會漂移。使用者在某一段時間的interest會有一定的集中性。比如使用者可能在一段時間內不斷買書,在另一段時間內不斷買衣服。
- Interest Individual:一種interest有自己的發展趨勢,不同種類的interest之間很少相互影響,例如買書和買衣服的interest基本互不相關。我們只關注與目標物品相關的演化過程。
### 4.2 AUGRU
基於以上規律,興趣進化層通過 AUGRU(GRU with Attentional Update gate)來引入注意力機制,通過使用興趣狀態和 target item 計算得到相關性,AUGRU 增強相關興趣的影響,同時減弱不相關興趣的影響,進而去捕捉與目標商品相關的興趣及其演變。
即通過分析興趣演化的特徵,作者**結合注意力機制的區域性啟用能力和GRU的序列學習能力來對興趣演化進行建模**。這樣,在GRU的每個步驟中,注意力機制都可以增強相對興趣的影響,並減弱來自興趣漂移的干擾。
有了使用者的興趣表示,興趣發展層的作用就是捕獲與candidate相關的興趣發展模式,如架構圖中紅色區域所示,這裡使用了第 2 個 GRU。將 candidate 的 embedding 向量與第 1 個 GRU 的輸出隱向量發生互動,生成attention 分數。需要注意的是,與 DIN 不同,這裡的 attention 分數採用 softmax 做了歸一化。attention 分數 反應了目標物品 和當前興趣狀態 的關係,相關性越大,則分數越大。
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112308520-505672513.png)
### 4.3 attention
attention計算如下:
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112321257-1259011679.png)
如何將attention機制加到GRU中呢?文中嘗試了3種方法
- **GRU with attentional input (AIGRU)**:在輸入中結合注意力機制。
AIGRU使用注意力評分影響興趣進化層的輸入。即直接將attention係數和輸入相乘。在理想的情況下,相關興趣越少,輸入值越小,那麼我們就可以對與目標專案相關的興趣進化趨勢進行建模。然而,AIGRU的表現並不好。因為即使是零輸入也會改變GRU的隱藏狀態,所以相對興趣越少,也會影響興趣進化的學習。
- **Attention based GRU(AGRU):** 將注意力分數替換GRU的更新門(利用注意力score來控制hidden state的更新),直接地改變了隱藏狀態。即直接將attention係數來替換GRU的update gate,直接對隱狀態進行更新。
AGRU利用注意力得分直接控制隱藏狀態的更新,削弱了興趣演變過程中較少相關興趣的影響。將注意力嵌入到GRU中可以改善注意力機制的影響力,並有助於AGRU克服AIGRU的缺陷。雖然AGRU可以使用注意分數直接控制隱藏狀態的更新,但它使用一個標量(attention score)代替一個向量,忽略了不同維度間的重要性差異。
- **GRU with attentional update gate (AUGRU):** 在GRU的更新門中加入注意力分數:
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112352944-1519630261.png)
![img](https://img2020.cnblogs.com/blog/1850883/202010/1850883-20201011112403406-517763560.png)
在AUGRU中,保留更新門的原始尺寸資訊,通過注意力分數 來縮放更新門的所有維度,從而導致相關度較小的興趣對隱藏狀態的影響也較小。AUGRU可以更有效地避免利益漂移帶來的干擾,並推動相對興趣平穩發展。
AUGRU是效果最好的一種。文中將attention分數與update gate相乘,替換原始的update gate,稱為AUGRU,其中A指的是Attention,U指的是Update gate。
我們看一下DIEN這個結構有什麼問題。GRU是序列計算結構,要按照時間步一步一步進行計算。DIEN有兩個GRU,第2個GRU還要基於第1個GRU的結果來做attention,所以第2個GRU必須要等到第1個GRU全部計算完成才能開始計算,兩個GRU單元無法平行計算,所以可能存在時延大的問題,序列越長,時延可能就越長。文中介紹說工業場景輸入的序列長度是50,累積兩個GRU的時延,相當於序列長度為100的時延。
### 4.4 特點
對興趣進化建模的優點如下:
- 興趣進化模組可以為最終興趣的表示提供更多的相關歷史資訊
- 根據興趣進化趨勢預測目標專案的點選率比較好
興趣進化層結合了注意力機制中的區域性啟用能力和GRU的序列學習能力來實現建模興趣演化的目標。
## 0x05 總結
DIEN的主要貢獻如下:
- 在電商系統中關注了興趣進化現象,提出了一個新的網路架構對興趣進化過程進行建模。興趣進化模型使興趣表示更豐富,CTR預測更準確。
- 與直接以行為為興趣不同,DIEN中專門設計了興趣抽取層。針對GRU的隱藏狀態對興趣表示較差的問題,提出了一種輔助損失。
- 設計了興趣進化層。興趣進化層有效地模擬了與目標專案相關的興趣進化過程。
下一篇將介紹模型原始碼整體架構,敬請期待。
## 0xFF 參考
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)
https://zhuanlan.zhihu.com/p/134170462)
[【讀書筆記】Deep Interest Evolution Network for Click-Through Rate Prediction](https://blog.csdn.net/srdlaplace/article/details/89464050)
[人人都能看懂的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)
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)
[推薦系統遇上深度學習(二十四)–深度興趣進化網路DIEN原理及實戰!](https://www.jianshu.com/p/6742d10b89a8)
[【論文導讀】2019阿里CTR預估模型—DIEN(深度興趣演化網路)](https://blog.csdn.net/Blank_spaces/article/details/107