10、DCN 介绍
前言
傳統(tǒng)的CTR預(yù)估模型需要大量的特征工程,耗時(shí)耗力;引入DNN之后,依靠神經(jīng)網(wǎng)絡(luò)強(qiáng)大的學(xué)習(xí)能力,可以一定程度上實(shí)現(xiàn)自動(dòng)學(xué)習(xí)特征組合。但是DNN的缺點(diǎn)在于隱式的學(xué)習(xí)特征組合帶來的不可解釋性,以及低效率的學(xué)習(xí)(并不是所有的特征組合都是有用的)。
最開始FM使用隱向量的內(nèi)積來建模組合特征;FFM在此基礎(chǔ)上引入field的概念,針對不同的field上使用不同隱向量。但是,這兩者都是針對低階的特征組合進(jìn)行建模的。
而DNN學(xué)習(xí)到的特征都是高度非線性的高階組合特征,含義非常難以解釋。
1、 DCN 介紹
DCN全稱Deep & Cross Network,是谷歌和斯坦福大學(xué)在2017年提出的用于Ad Click Prediction的模型。DCN(Deep Cross Network)在學(xué)習(xí)特定階數(shù)組合特征的時(shí)候效率非常高,而且同樣不需要特征工程,引入的額外的復(fù)雜度也是微乎其微的。
2、DCN模型結(jié)構(gòu)
DCN架構(gòu)圖如上圖所示:最開始是Embedding and stacking layer,然后是并行的Cross Network和Deep Network,最后是Combination Layer把Cross Network和Deep Network的結(jié)果組合得到Output。
2.1 Embedding and Stacking Layer
-
為什么要Embed?
- 在web-scale的推薦系統(tǒng)比如CTR預(yù)估中,輸入的大部分特征都是類別型特征,通常的處理辦法就是one-hot,但是one-hot之后輸入特征維度非常高非常稀疏。
- 所以有了Embedding來大大的降低輸入的維度,就是把這些binary features轉(zhuǎn)換成dense vectors with real values。
- Embedding操作其實(shí)就是用一個(gè)矩陣和one-hot之后的輸入相乘,也可以看成是一次查詢(lookup)。這個(gè)Embedding矩陣跟網(wǎng)絡(luò)中的其他參數(shù)是一樣的,是需要隨著網(wǎng)絡(luò)一起學(xué)習(xí)的。
-
為什么要Stack?
處理完了類別型特征,還有連續(xù)型特征沒有處理那。所以我們把連續(xù)型特征規(guī)范化之后,和嵌入向量stacking到一起,就得到了原始的輸入:
2.2 Cross Network
Cross Network是整篇論文的核心。它被設(shè)計(jì)來高效的學(xué)習(xí)組合特征,關(guān)鍵在于如何高效的進(jìn)行feature crossing。形式化如下:
xl和xl+1 分別是第l層和第l+1層cross layer的輸出,wl和bl是這兩層之間的連接參數(shù)。注意上式中所有的變量均是列向量,W也是列向量,并不是矩陣。
- 該怎么理解?
其實(shí)也不難,xl+1 = f(xl, wl, bl) + xl. 每一層的輸出,都是上一層的輸出加上feature crossing f。而f就是在擬合該層輸出和上一層輸出的殘差。 針對one cross layer可視化如下:
- High-degree Interaction Across Features:
Cross Network特殊的網(wǎng)絡(luò)結(jié)構(gòu)使得cross feature的階數(shù)隨著layer depth的增加而增加。相對于輸入x0來說,一個(gè)l層的cross network的cross feature的階數(shù)為l+1。
- 復(fù)雜度分析:
假設(shè)一共有Lc層cross layer,起始輸入x0的維度為d。那么整個(gè)cross network的參數(shù)個(gè)數(shù)為:
因?yàn)槊恳粚拥腤和b都是d維度的。
從上式可以發(fā)現(xiàn),復(fù)雜度是輸入維度d的線性函數(shù)。所以相比于deep network,cross network引入的復(fù)雜度微不足道。這樣就保證了DCN的復(fù)雜度和DNN是一個(gè)級別的。論文中表示,Cross Network之所以能夠高效的學(xué)習(xí)組合特征,就是因?yàn)閤0 * xT的秩為1,使得我們不用計(jì)算并存儲整個(gè)的矩陣就可以得到所有的cross terms。
但是,正是因?yàn)閏ross network的參數(shù)比較少導(dǎo)致它的表達(dá)能力受限,為了能夠?qū)W習(xí)高度非線性的組合特征,DCN并行的引入了Deep Network。
2.3 Deep Network
這一部分沒什么特別的,就是一個(gè)前向傳播的全連接神經(jīng)網(wǎng)絡(luò),我們可以計(jì)算一下參數(shù)的數(shù)量來估計(jì)下復(fù)雜度。假設(shè)輸入x0維度為d,一共有Lc層神經(jīng)網(wǎng)絡(luò),每一層的神經(jīng)元個(gè)數(shù)都是m個(gè)。那么總的參數(shù)或者復(fù)雜度為:
2.4 Combination Layer
Combination Layer把Cross Network和Deep Network的輸出拼接起來,然后經(jīng)過一個(gè)加權(quán)求和后得到logits,然后經(jīng)過sigmoid函數(shù)得到最終的預(yù)測概率。形式化如下:
p是最終的預(yù)測概率;XL1是d維的,表示Cross Network的最終輸出;hL2是m維的,表示Deep Network的最終輸出;Wlogits是Combination Layer的權(quán)重;最后經(jīng)過sigmoid函數(shù),得到最終預(yù)測概率。
損失函數(shù)使用帶正則項(xiàng)的log loss,形式化如下:
另外,針對Cross Network和Deep Network,DCN是一起訓(xùn)練的,這樣網(wǎng)絡(luò)可以知道另外一個(gè)網(wǎng)絡(luò)的存在。
3、實(shí)例
接下來使用的代碼主要采用開源的DeepCTR,相應(yīng)的API文檔可以在這里閱讀
https://deepctr-doc.readthedocs.io/en/latest/Examples.html
4、 總結(jié)
DCN特點(diǎn)如下:
- 使用cross network,在每一層都應(yīng)用feature crossing。高效的學(xué)習(xí)了bounded degree組合特征。不需要人工特征工程。
- 網(wǎng)絡(luò)結(jié)構(gòu)簡單且高效。多項(xiàng)式復(fù)雜度由layer depth決定。
- 相比于DNN,DCN的logloss更低,而且參數(shù)的數(shù)量將近少了一個(gè)數(shù)量級。
總結(jié)
- 上一篇: 康师傅被“水和面”糊住了眼睛?
- 下一篇: Visio 2013最新产品密钥分享,在