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