推荐算法DCN(Deep Cross)自动构造高阶交叉特征原理介绍
DCN(Deep & Cross)
- 目標:
- 概要:
- 動機Motivation:
- Model介紹:
- Cross Layer交叉層
- 聯合訓練
- 模型分析
- Experiment測試結果
- Conclusion結論
目標:
斯坦福與Google聯合發表在AdKDD 2017上的論文《Deep & Cross Network for Ad Click Predictions》。
特點:對Wide@Deep模型的升級,可以自動自動構造高階交叉特征。可以說和華為同期提出的DeepFM屬于同一種思想,并且走得更遠。看了下作者,好像也是中國人。中國不注重AI人才,導致大量的AI領軍人物流失。真是可惜。
華為同期提出的DeepFM只是用了FM替換了Wide@Deep中的Wide(LR)部分,沒有提出更多的創新,DCN創新更大。
- 模型優點:自動自動構造高階交叉特征。模型復雜度整體可控。
- 缺點:基于Embedding向量的位(bit)進行的特征交叉,沒有基于向量 vector的交叉,基于向量 vector的交叉可以學到更多信息。FM是基于向量 vector的交叉,但是其復雜度基本上限制其停留在二階交叉。
- 后續演進模型:xDeepFM,基于向量 vector的交叉,但是時間復雜度是硬傷。后續單獨介紹。
概要:
本文(知乎)介紹斯坦福與Google聯合發表在AdKDD 2017上的論文《Deep & Cross Network for Ad Click Predictions》。這篇論文是Google 對 Wide & Deep工作的一個后續研究,文中提出 Deep & Cross Network,將Wide部分替換為由特殊網絡結構實現的Cross,自動構造有限高階的交叉特征,并學習對應權重,告別了繁瑣的人工叉乘。
文章發表后業界就有一些公司效仿此結構并應用于自身業務,成為其模型更新迭代中的一環。觀看 作者對Deep & Cross的Oral視頻。
動機Motivation:
針對大規模稀疏特征的點擊率預估問題,Google在2016年提出 Wide & Deep 的結構來同時實現Memorization(記憶能力)與Generalization(泛化能力)。
- 但是在Wide部分,仍然需要人工地設計特征叉乘。面對高維稀疏的特征空間、大量的可組合方式,基于人工先驗知識雖然可以緩解一部分壓力,但仍需要不小的人力和嘗試成本,并且很有可能遺漏一些重要的交叉特征。
- FM可以自動組合特征,但也僅限于二階叉乘。
能否告別人工組合特征,并且自動學習高階的特征組合呢?Deep & Cross(DCN) 即是對此的一個嘗試。
Model介紹:
類似Wide & Deep,Deep & Cross的網絡結構如圖1所示,可以仔細觀察下:
文中對原始特征做如下處理:
- 對sparse特征進行embedding,對于multi-hot的sparse特征,embedding之后再做一個簡單的average pooling;
- 對dense特征歸一化,然后和embedding特征拼接,作為隨后Cross層與Deep層的共同輸入。
注意:這里提供了一種思想:Cross層與Deep層的輸入相同,后面證實,這種方法可以讓模型通過線性的Cross層,結合深度Deep層進行后向反饋,能起到一種線性的Cross層給深度Deep層減負的作用,效果比“Cross層與Deep層的輸入不同 ”更好。
Cross Layer交叉層
Cross的目的是以一種顯示、可控且高效的方式,自動構造有限高階交叉特征,我們會對這些特點進行解讀。Cross結構如上圖1左側所示,其中第l+1l+1l+1層輸出為:
即
Cross Layer 設計的巧妙之處全部體現在上面的計算公式中,我們先看一些明顯的細節:
那么為什么這樣設計呢?Cross究竟做了什么?對此論文中給出了定理3.1以及相關證明,但定理與證明過程都比較晦澀,為了直觀清晰地講解清楚,我們直接看一個具體的例子:假設Cross有2層,
最后得到
參與到最后的losslossloss計算。
可以看到x1x_{1}x1? 包含了原始特征[x0,1,x0,2][x_{0,1},x_{0,2}][x0,1?,x0,2?]從一階到二階的所有可能叉乘組合,而x2x_{2}x2?包含了其從一階到三階的所有可能叉乘組合。現在大家應該可以理解cross layer計算公式的用心良苦了,上面這個例子也可以幫助我們更深入地理解Cross的設計:
有限高階:叉乘階數由網絡深度決定,深度LcL_{c}Lc? 對應最高Lc+1L_{c}+1Lc?+1 階的叉乘.
自動叉乘:Cross輸出包含了原始特征從一階(即本身)到 Lc+1L_{c}+1Lc?+1 階的所有叉乘組合,而模型參數量僅僅隨輸入維度成線性增長: 2?d?Lc2*d*L_{c}2?d?Lc?
參數共享:不同叉乘項對應的權重不同,但并非每個叉乘組合對應獨立的權重(指數數量級), 通過參數共享,Cross有效降低了參數量(這個在很多模型中有體現,比如GRU,記憶門和遺忘門用一個門限來控制,CNN中每層一個卷積核,并非每次運算一個卷積核,也是相同的參數共享思想)。此外,參數共享還使得模型有更強的泛化性和魯棒性。例如,如果獨立訓練權重,當訓練集中xi=0?xj=0x_{i}=0\bigcap x_{j}=0xi?=0?xj?=0這個叉乘特征出現 ,對應權重肯定是零,而參數共享則不會,類似地,數據集中的一些噪聲可以由大部分正常樣本來糾正權重參數的學習.
這里有一點很值得留意,前面介紹過,文中將dense特征和embedding特征拼接后作為Cross層和Deep層的共同輸入。這對于Deep層是合理的,但我們知道人工交叉特征基本是對原始sparse特征進行叉乘,那為何不直接用原始sparse特征作為Cross的輸入呢?
結合這里介紹的Cross設計,每層layer的節點數都與Cross的輸入維度一致的,直接使用大規模高維的sparse特征作為輸入,會導致極大地增加Cross的參數量。當然,可以暢想一下,其實直接拿原始sparse特征喂給Cross層,才是論文真正宣稱的“省去人工叉乘”的更完美實現,但是現實條件不太允許。所以將高維sparse特征轉化為低維的embedding,再喂給Cross,實則是一種trade-off的可行選擇。
聯合訓練
模型的Deep 部分如圖1右側部分所示,DCN拼接Cross 和Deep的輸出,采用logistic loss作為損失函數,進行聯合訓練,這些細節與Wide & Deep幾乎是一致的,在這里不再展開論述。
另外,文中也在目標函數中加入L2正則防止過擬合。
模型分析
設初始輸入x0x_{0}x0?維度為ddd,Deep和Cross層數分別為 LcrossL_{cross}Lcross? 和 LdeepL_{deep}Ldeep?,為便于分析,設Deep每層神經元個數為 mmm ,則兩部分的參數量為:
可以看到Cross的參數量隨ddd 增大僅呈“線性增長”!相比于Deep部分,對整體模型的復雜度影響不大,這得益于Cross的特殊網絡設計,對于模型在業界落地并實際上線來說,這是一個相當誘人的特點。
Experiment測試結果
對比方法 文中選擇DNN,LR,FM與Deep Cross(DC)作為對比方法,其中DNN可看作將DCN去除Cross部分,LR使用所有稀疏特征(dense特征會被離散化)與部分精選交叉特征。
實驗結果 實驗結果如下表,DCN不但效果明顯最優,而且相比之下僅用了DNN的40%內存。
作者進一步對比了DCN與DNN在memory占用和效果上的差異,實驗結果如下兩表所示。為達到同樣性能,DCN所需的參數量顯著更少;此外,隨著參數量的上升,DNN與DCN的差距在減小,但DCN仍穩定占優。相比DNN,Cross可以輔助Deep,減小了Deep的“工作量”,通過特殊的cross layer設計,用更少的參數量有效捕獲有意義的、DNN難以捕捉的特征相關性。
文中也在兩個Non-CTR數據集——Forest Covertype和Higgs上進行了實驗,這是UCI上的公開數據集,結果類似,DCN最優。此外,文中也對cross層數進行了實驗,實驗顯示cross層并非越多越好,具體結果如下圖:
Conclusion結論
- 論文提出一種新型的交叉網絡結構 DCN,其中 Cross 可以顯示、自動地構造有限高階的特征叉乘,從而在一定程度上告別人工特征叉乘,“一定程度”是因為文中出于模型復雜度的考慮,仍是僅對sparse特征對應的embedding作自動叉乘,但這仍是一個有益的創新。
- Cross部分的復雜度與輸入維度呈線性關系,相比DNN非常節約內存。實驗結果顯示了DCN的有效性,DCN用更少的參數取得比DNN更好的效果。
- 共享參數的設計,Cross層與Deep層的輸入相同,是其提供的新思想。
總結
以上是生活随笔為你收集整理的推荐算法DCN(Deep Cross)自动构造高阶交叉特征原理介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将linux系统移动硬盘,着手打造你的随
- 下一篇: 如何打造高质量的网页内容呢?