(讀論文)推薦系統之ctr預估-Wide&Deep模型解析


在讀了FM和FNN/PNN的論文后,來學習一下16年的一篇Google的論文,文章將傳統的LR和DNN組合構成一個wide&deep模型(並行結構),既保留了LR的擬合能力,又具有DNN的泛化能力,並且不需要單獨訓練模型,可以方便模型的迭代,一起來看下吧。
原文:Wide & Deep Learning for Recommender Systems

地址: https://arxiv.org/pdf/1606.07792.pdf

1、問題由來

1.1、背景

本文提出時是針對推薦系統中應用的,當然也可以應用在ctr預估中。

首先介紹論文中通篇出現的兩個名詞:

  • memorization(暫且翻譯為記憶):即從歷史數據中發現item或者特征之間的相關性。
  • generalization(暫且翻譯為泛化):即相關性的傳遞,發現在歷史數據中很少或者沒有出現的新的特征組合。

舉個例子來解釋下:在人類的認知學習過程中演化過程中,人類的大腦很復雜,它可以記憶(memorize)下每天發生的事情(麻雀可以飛,鴿子可以飛)然后泛化(generalize)這些知識到之前沒有看到過的東西(有翅膀的動物都能飛)。
但是泛化的規則有時候不是特別的准確,有時候會出錯(有翅膀的動物都能飛嗎)。這時候就需要記憶(memorization)來修正泛化的規則(generalized rules),叫做特例(企鵝有翅膀,但是不能飛)。這就是Memorization和Generalization的來由或者說含義。

1.2、現有模型的問題

  • 線性模型LR簡單、快速並且模型具有可解釋,有着很好的擬合能力,但是LR模型是線性模型,表達能力有限,泛化能力較弱,需要做好特征工程,尤其需要交叉特征,才能取得一個良好的效果,然而在工業場景中,特征的數量會很多,可能達到成千上萬,甚至數十萬,這時特征工程就很難做,還不一定能取得更好的效果。

  • DNN模型不需要做太精細的特征工程,就可以取得很好的效果,DNN可以自動交叉特征,學習到特征之間的相互作用,尤其是可以學到高階特征交互,具有很好的泛化能力。另外,DNN通過增加embedding層,可以有效的解決稀疏數據特征的問題,防止特征爆炸。推薦系統中的泛化能力是很重要的,可以提高推薦物品的多樣性,但是DNN在擬合數據上相比較LR會較弱。

  • 總結一下:

    1. 線性模型無法學習到訓練集中未出現的組合特征;
    2. FM或DNN通過學習embedding vector雖然可以學習到訓練集中未出現的組合特征,但是會過度泛化。

為了提高推薦系統的擬合性和泛化性,可以將LR和DNN結合起來,同時增強擬合能力和泛化能力,wide&deep就是將LR和DNN組合起來,wide部分就是LR,deep部分就是DNN,將兩者的結果組合進行輸出。

2、模型細節

再簡單介紹下兩個名詞的實現:
Memorization:之前大規模稀疏輸入的處理是:通過線性模型 + 特征交叉。所帶來的Memorization以及記憶能力非常有效和可解釋。但是Generalization(泛化能力)需要更多的人工特征工程。

Generalization:相比之下,DNN幾乎不需要特征工程。通過對低緯度的dense embedding進行組合可以學習到更深層次的隱藏特征。但是,缺點是有點over-generalize(過度泛化)。推薦系統中表現為:會給用戶推薦不是那么相關的物品,尤其是user-item矩陣比較稀疏並且是high-rank(高秩矩陣)

兩者區別:Memorization趨向於更加保守,推薦用戶之前有過行為的items。相比之下,generalization更加趨向於提高推薦系統的多樣性(diversity)。

2.1、Wide 和 Deep

Wide & Deep:
Wide & Deep包括兩部分:線性模型 + DNN部分。結合上面兩者的優點,平衡memorization和generalization。
原因:綜合memorization和generalizatio的優點,服務於推薦系統。在本文的實驗中相比於wide-only和deep-only的模型,wide & deep提升顯著。下圖是模型整體結構:

可以看出,Wide也是一種特殊的神經網絡,他的輸入直接和輸出相連,屬於廣義線性模型的范疇。Deep就是指Deep Neural Network,這個很好理解。Wide Linear Model用於memorization;Deep Neural Network用於generalization。
左側是Wide-only,右側是Deep-only,中間是Wide & Deep。

2.2、Cross-product transformation

論文Wide中不斷提到這樣一種變換用來生成組合特征,這里很重要。它的定義如下:

其中k表示第k個組合特征。i表示輸入X的第i維特征。C_ki表示這個第i維度特征是否要參與第k個組合特征的構造。d表示輸入X的維度。到底有哪些維度特征要參與構造組合特征,這個是人工設定的(這也就是說需要人工特征工程),在公式中沒有體現。

其實這么一個復雜的公式,就是我們之前一直在說的one-hot之后的組合特征:僅僅在輸入樣本X中的特征gender=female和特征language=en同時為1,新的組合特征AND(gender=female, language=en)才為1。所以只要把兩個特征的值相乘就可以了。
(這樣Cross-product transformation 可以在二值特征中學習到組合特征,並且為模型增加非線性)

2.3、The Wide Component

如上面所說Wide Part其實是一個廣義的線性模型。使用特征包括:

  • raw input: 原始特征

  • cross-product transformation :上面提到的組合特征

用同一個例子來說明:你給model一個query(你想吃的美食),model返回給你一個美食,然后你購買/消費了這個推薦。 也就是說,推薦系統其實要學習的是這樣一個條件概率: P(consumption | query, item)。
Wide Part可以對一些特例進行memorization。比如AND(query=”fried chicken”, item=”chicken fried rice”)雖然從字符角度來看很接近,但是實際上完全不同的東西,那么Wide就可以記住這個組合是不好的,是一個特例,下次當你再點炸雞的時候,就不會推薦給你雞肉炒米飯了。

2.4、The Deep Component

如模型右邊所示:Deep Part通過學習一個低緯度的dense representation(也叫做embedding vector)對於每一個query和item,來泛化給你推薦一些字符上看起來不那么相關,但是你可能也是需要的。比如說:你想要炸雞,Embedding Space中,炸雞和漢堡很接近,所以也會給你推薦漢堡。

Embedding vectors被隨機初始化,並根據最終的loss來反向訓練更新。這些低維度的dense embedding vectors被作為第一個隱藏層的輸入。隱藏層的激活函數通常使用ReLU。

3、模型訓練

訓練中原始的稀疏特征,在兩個組件中都會用到,比如query="fried chicken" item="chicken fried rice":

在訓練的時候,根據最終的loss計算出gradient,反向傳播到Wide和Deep兩部分中,分別訓練自己的參數。也就是說,兩個模塊是一起訓練的(也就是論文中的聯合訓練),注意這不是模型融合。

  • Wide部分中的組合特征可以記住那些稀疏的,特定的rules

  • Deep部分通過Embedding來泛化推薦一些相似的items

Wide模塊通過組合特征可以很效率的學習一些特定的組合,但是這也導致了他並不能學習到訓練集中沒有出現的組合特征。所幸,Deep模塊彌補了這個缺點。
另外,因為是一起訓練的,wide和deep的size都減小了。wide組件只需要填補deep組件的不足就行了,所以需要比較少的cross-product feature transformations,而不是full-size wide Model。
具體的訓練方法和實驗請參考原論文。

4、總結

缺點:Wide部分還是需要人工特征工程。
優點:實現了對memorization和generalization的統一建模。能同時學習低階和高階組合特征


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM