今天我想介紹阿里的同一推薦團隊一脈相承的兩篇文章,Deep Interest Network for Click-Through Rate Prediction和,Deep Interest Evolution Network for Click-Through Rate Prediction。這是第一部分,主要介紹前一篇文章。算法
Deep Interest Network提出於2017年。它的思路很是值得借鑑。在電子商務系統或者說全部的推薦系統中,CTR預測都是一個值得注意的問題。而在今年了,深度學習方法被普遍地應用於CTR預測中。 這篇文章認爲,大部分目前使用的深度學習模型均可以認爲是Embedding&MLP結構,即大規模的、稀疏的輸入數據首先被壓縮成低維的embedding,變成固定長度的輸入向量,被輸入到全鏈接網絡中去。這些模型大大減小了特徵工程的工做量,所以廣爲流行。markdown
但這些方法仍然有缺點,最大的缺點就是固定維數的向量不能充分地表達用戶興趣的diversity。咱們固然能夠擴大向量的維數,但這會致使模型overfitting的可能性大大增長。在推薦系統中,興趣通常由過去的行爲來表示。從另外一個角度上說,咱們也不必定非要用維數很高的向量。用戶的興趣也許很廣,可是在預測某些項目的時候咱們並不須要知道用戶所有的interest。好比說,預測一個用戶是否是要買一雙鞋子時,咱們關心她在買衣服鞋子時的興趣,而不關心她在買廚房用品時的興趣。文章把這類興趣稱爲locally activated,這個文章都是試圖利用attention機制在diversity和locally activated之間尋找較優的平衡。網絡
在淘寶系統中,廣告便是商品,也就是通常推薦系統中的item。推薦系統的邏輯以下:把通常的retriever階段稱爲Matching,系統邏輯由matching和ranking組成。淘寶使用collaborative filtering來完成matching過程,選擇一些candidate,再用CTR prediction方法進行排序。 函數
輸入排序算法的feature大部分狀況下是multi-group categorical form,它們被one-hot或者multi-hot形式表示出來,一個典型的輸入以下: 學習
而整個輸入空間則如圖所示:淘寶原本使用的是一個Embedding&MLP模型,咱們在這裏稱這個model爲Base Model。這個model由以下幾部分構成:spa
Embedding Layer負責將一些上面提到的高維的binary vector轉變爲稠密的低維向量。例如咱們能夠把約維的goods id向量轉化爲幾十維的embedding向量。Embedding layer使用字典查找的方法,並遵循以下規則:翻譯
但就像以前說的,不一樣的用戶有不一樣的行爲,咱們須要把不一樣數量的embedding向量組合成固定維數的輸入向量輸入到MLP中去,因此咱們須要一個池化層來結合它們。sum-pooling和average pooling都很經常使用。通過pooling的不一樣種類的向量會在concat layer組合起來。rest
MLPlayer負責預測,Loss function是Log Loss。整個Model的結構如圖所示。 code
池化層雖然能達到目的,但卻會損失很大一部分信息。DIN的關鍵就是利用attention機制學習locally activated information,從而儘量減小信息損失。DIN引入了一個激活結構,並使用了以下系統結構: orm
能夠看到,最關鍵的區別就在激活結構上。DIN借鑑了機器翻譯領域中經常使用的attention機制,但和原始的attention結構並不相同。這個attention結構會致使本來的sum pooling變成一個weighted sum pooling,從而學習到locally activated information。簡單地說,經過把ad的embedding和behavior的embedding相乘並輸入一個FNN網絡,咱們獲得了一個 activation weight,利用這個weight,咱們將behaviour的embedding結合起來。 文章做者嘗試了使用LSTM方法來學習behavior的序列化信息,但結果沒什麼提高,因此最終的結構就像咱們上面所看到的這樣。文章還提出了一些訓練技巧。
咱們使用正則化方法來防止過擬合。可是L2正則化意味着在每個mini-batch的訓練中國,都須要計算所有參數的更新,這會致使沉重的計算負擔,在大規模數據集中尤爲不可接受。因此文章提出了Mini-batch Aware Regularization方法,這個方法能利用數據集的稀疏性減小計算量。這不是咱們的重點,具體細節能夠去看原文。
PReLu是一種經常使用的激活函數。它的表達式以下:
它固定在x = 0時出現轉折,但當每一層的輸入數據的分佈不一樣時,並非很合適。阿里提出了一種新的激活函數Dice,是PReLu的一種擴展。咱們通常使用AUC進行結果評估,阿里使用了weighted AUC,還提出了另外一種名叫RelaImpr的指標。
在A/B Test的結果以下: