key word:
阿里巴巴廣告推薦
Motivation:傳統的
Embedding&MLP
演算法會在使用者的不同興趣上產生瓶頸,這些演算法是透過模型輸出的使用者不同行為序列的特徵向量,做一個池化操作最後預測點選率,這種固定的特徵往往不能夠反應使用者不同的興趣特徵,池化操作會損失特徵資訊。例如在廣告推薦系統中:一名游泳運動員會點選推薦的護目鏡,主要是因為他買了泳衣,而不是他上週購物清單上的鞋子。因此在這篇文章中,提出了自適應計算使用者的興趣Embedding。code:zhougr1993/DeepInterestNetwork
- 一、歷史發展
- 二、創新點
- 三、DIN模型
- Local activation unit
- Mini-batch Aware Regularization
- Data Adaptive Activation Function
一、歷史發展
作為初學者(筆者),對一個領域發展的瞭解的很重要的。這篇論文對模型自動化提取特徵的發展進行了介紹,筆者也對其作一個學習過程記錄
- LP-PLM & FM
這兩種演算法可以被看作是隻包含了一層隱藏層的的網路,是首次採用embedding layer對稀疏輸入進行變換的模型,旨在捕捉特徵之間的聯絡。
- Deep Crossing & Wide&Deep & YouTube Recommendation CTR model
透過複雜的MLP網路替換掉
FM
,LP-PLM
的轉換函式
- PNN
實現高階的特徵互動
- DeepFM
採用
FM
替換 Wide&Deep的 Wide 部分,從而不需要人工的選擇稀疏向量
以上推薦模型,都可以被稱為:Embedding&MLP
,這類推薦模型的特徵處理模式一致:透過使用者不同的行為序列特徵向量,對不同的行為序列特徵向量做一個池化操作,最後預測點選率,池化操作會丟失不同特徵的資訊,無法處理同一使用者的不同興趣。一般模型的架構如圖所示:
- Embedding Layer
embedding層的本質就是訓練得到一個輸入向量表達矩陣\(D \times K\),其中\(D\)表示embedding層的維度,\(K\)表示輸入的id個數,進入embedding層後根據id值的索引輸出embedding向量;因此one-hot編碼只有一個向量輸出,而multi-hot編碼有多個Embedding向量輸出
學習參考連結:【詞向量表示】Word2Vec原理及實現-CSDN部落格
- Pooling Layer
由於物品的multi向量的“1”個數的不同,導致embedding的向量輸出個數不同,對於使用者的行為序列的特徵,最後進行池化操作。
【弊端】:這種池化操作會導致使用者的興趣向量是對於不同的廣告來說都是一樣的,無法反映出面對不同廣告的興趣。
- Loss
交叉熵損失
二、創新點
Local activation unit
:解決對於不同廣告使用者的向量不變的問題;
Mini-batch Aware Regularization
:解決\(l_2\)正則化導致的計算量上漲的問題;
Data Adaptive Activation Function
:調整啟用函式自適應不同輸入的分佈;
三、DIN模型
Local activation unit
該啟用單元僅用在了使用者行為序列的特徵上,透過給定的候選廣告和歷史行為序列,自適應計算使用者的Embedding表徵
- 實現方式
其中,\(w_j\)是透過計算候選廣告\(v_a\)與使用者行為向量\(e_j\)透過前饋網路\(a(·)\)得到的啟用權重
- 與
NMT
的區別
NMT
在輸出時進行了softmax歸一化,而該篇文章並沒有使用歸一化操作,這是由於輸出的分數認為是使用者對於物品的興趣程度,而歸一化的結果只能比較廣告和使用者行為序列的相對關係,而不能表示絕對強度。一個使用者只有 30% 衣服、70% 電子,另一個使用者的行為序列是 10% 衣服、90% 電子,歸一化的結果是一樣,歸一化後無法表現出第二個使用者更喜歡電子。
Mini-batch Aware Regularization
在SGD最佳化器下,只需要更新與當前 mini-batch非零稀疏特徵相關的模型引數。但是一旦加入\(l_2\)正則化,所有的引數都需要被計算,導致大量的引數計算。這是由於加入了正則化後,每一個引數都需要增加一個損失懲罰項\(\frac{\lambda}{2}||\theta||^2\),每一個引數都要計算。為此,提出一種新的正則化方式,只需要對稀疏特徵進行懲罰,無需對所有引數計算。
Data Adaptive Activation Function
- PReLU
dead ReLU
:ReLU
啟用函式在訓練過程中,負值的神經元永久性死亡
Leaky ReLU
:輸入為負數時,採用固定斜率而不是永遠為0
PReLU
是一種可學習的啟用函式,設計目的是為了解決 ReLU 啟用函式的一些侷限性,尤其是輸入分佈不同或存在dead ReLU
問題時的表現。透過\(\alpha\)對負值動態調整,使得負值輸入也能產生小的啟用輸出,從而避免死神經元問題,比Leaky ReLU
更加靈活
數學定義:
進一步可以寫為:
該篇文章對\(p(s)\)進行了修正,指出PReLU
的零值時一個硬分割點,不適合不同分佈的輸入,因此,將\(p(s)\)修改,最終得到DICE
啟用函式: