在廣告領域,預測用戶點擊率(Click Through Rate,簡稱CTR)領域近年也有大量關於深度學習方面的研究,僅這兩年就出現了不少於二十多種方法
本文就近幾年CTR預估領域中學術界的經典方法進行探究, 並比較各自之間模型設計的初衷和各自優缺點。
通過十種不同CTR深度模型的比較,不同的模型本質上都可以由基礎的底層組件組成。
本文中出現的變量定義:
- n: 特征個數,所有特征one-hot后 連接起來的整體規模大小
- f: 特征field個數,表示特征類別有多少個
- k: embedding層維度,在FM中是隱向量維度
- H1: 深度網絡中第一個隱層節點個數,第二層H2,以此類推。
二、深度學習模型
1. Factorization-machine(FM)
FM模型可以看成是線性部分的LR,還有非線性的特征組合xixj交叉而成,表示如下:

其中vi是第i維特征的隱向量,長度k<<n,包含k個描述特征的因子。參數個數為k*n。所有包含xi的非零組合特征都可以用來訓練vi,緩解數據稀疏問題。
圖1是從神經網絡的角度表示FM, 可以看成底層為特征維度為n的離散輸入,經過embedding層后,對embedding層線性部分(LR)和非線性部分(特征交叉部分)累加后輸出。

圖1 FM模型結構
FM等價於FM + embedding,待學習的參數如下:
(1)LR部分: 1+n
(2)embedding 部分: n*k
FM下文中將作為各種網絡模型的基礎組件
2. Deep Neural Network(DNN)
圖2是經典的DNN網絡, 結構上看就是傳統的多層感知機(MultiLayer Perceptron,簡稱MLP)。
在MLP網絡中,輸入是原始的特征n維特征空間,假設第一層隱層節點數為H1,第二層為H2,以此類推。在第一層網絡中,需要學習的參數就是n*H1。
對於大多數CTR模型來說,特征體系都極其龐大而且稀疏,典型的特征數量級n從百萬級到千萬級到億級甚至更高,這么大規模的n作為網絡輸入在ctr預估的工業界場景中是不可接受的。
下面要講到的大多數深度學習CTR網絡結構,都圍繞着如何將DNN的高維離散輸入,通過embedding層變成低維稠密的輸入工作來展開。

圖2 DNN模型結構
DNN待學習參數: n*H1+H1*H2+H2*H3+H3*o(o為輸出層大小,在ctr預估中為1)
DNN(后文稱MLP)也將作為下文各種模型的基礎組件之一。
3. Factorization-machine supported Neural Networks (FNN)
在上述的DNN中,網絡的原始輸入是全部原始特征,維度為n,通常都是百萬級以上。
然而特征維度n雖然空間巨大,但如果歸屬到每個特征所屬的field(維度為f),通常f維度會小很多。
如果有辦法將每個特征用其所屬的field來表示,原始輸入將大大減少不少。Factorisation-machine supported Neural Networks,簡稱FNN就是基於這種思想提出來的。

圖3 FNN模型結構
FNN假設每個field有且只有一個值為1,其他均為0。x為原始輸入的特征,它是大規模離散稀疏的。
它可以分成n個field,每一個field中,只有一個值為1,其余都為0(即one hot)。 field i的輸入可以表示成 x[start_i: end_i], Wi為field i的embedding矩陣。
z為embedding后的向量,是一個k維的向量,它由一次項wi ,二次項vi=(vi1,vi2,…vik) 組成,其中k是FM中二次項的向量的維度。
而后面的l1,l2則為神經網絡的全連接層的表示。
除此之外,FNN還具有以下幾個特點:
- FM參數需要預訓練
FM部分的embedding需要預先進行訓練,所以FNN不是一個end-to-end模型。
在其他論文中,有試過不用FM初始化embedding, 而用隨機初始化的方法,要么收斂速度很慢,要么無法收斂。
- 無法擬合低階特征
FM得到的embedding向量直接concat連接之后作為MLP的輸入去學習高階特征表達,最終的DNN輸出作為ctr預估值。因此,FNN對低階信息的表達比較有限。
- 每個field只有一個非零值的強假設
FNN假設每個fileld只有一個值為非零值,如果是稠密原始輸入,則FNN失去意義。
對於一個fileld有幾個非零值的情況,例如用戶標簽可能有多個,一般可以做average/sum/max等處理。
本質上講,FNN = LR+DEEP = LR + embedding + MLP,參數如下
(1)LR部分: 1+n
(2)embedding部分: n*k
(3)MLP部分: f*k*H1+H1*H2+H2
可以看到,對比DNN,在進入MLP部分之前,網絡的輸入由n降到了f*k(f為field個數,幾十到幾百之間,k為隱向量維度,一般0~100)
4. Product-based Neural Network(PNN)
FNN的embedding層直接concat連接后輸出到MLP中去學習高階特征。
PNN,全稱為Product-based Neural Network,認為在embedding輸入到MLP之后學習的交叉特征表達並不充分,提出了一種product layer的思想,
既基於乘法的運算來體現體征交叉的DNN網絡結構,如圖4所示。

圖4 PNN模型結構
對比FNN網絡,PNN的區別在於中間多了一層Product Layer層。Product Layer層由兩部分組成,左邊z為embedding層的線性部分,右邊為embedding層的特征交叉部分。
除了Product layer不同,PNN和FNN的MLP結構是一樣的。這種product思想來源於,在ctr預估中,認為特征之間的關系更多是一種and“且”的關系,而非add"加”的關系。
例如,性別為男且喜歡游戲的人群,比起性別男和喜歡游戲的人群,前者的組合比后者更能體現特征交叉的意義。
根據product的方式不同,可以分為inner product(IPNN)和outer product(OPNN),如圖5所示。

圖5 PNN (左圖:IPNN; 右圖:OPNN)
Product layer的輸出為

- Inner Product-based Neural Network
IPNN的叉項使用了內積g(fi, fj) = <fi, fj>。f個filed,兩兩求內積共計交叉項p部分的參數共f*(f-1)/2(f為特征的field個數,原始論文里用的N)個,線性部分z部分參數共f*k個。
需要學習的參數為:
(1)FM部分: 1+ n + n*k
(2)product部分: (f*k + f*(f-1)/2)*H1
(3)MLP部分:H1*H2+H2*1
- Outer Product-based Neural Network
OPNN用矩陣乘法來表示特征的交叉, g(fi, fj)=fifit。f個field兩兩求矩陣乘法,交叉項p共f*(f-1)/2*k*k個參數。線性部分z部分參數共f*k個。需要學習的參數為:
(1)FM部分: 1+ n + n*k
(2)product部分: (f*k + f*(f-1)/2*k*k)*H1
(3)MLP部分:H1*H2+H2*1
5. Wide & Deep Learning (Wide&Deep)
前面介紹的兩種變體DNN結構FNN和PNN,都在embedding層對輸入做處理后輸入MLP,讓神經網絡充分學習特征的高階表達,deep部分是有了,
對高階的特征學習表達較強,但wide部分的表達是缺失的, 模型對於低階特征的表達卻比較有限。google在2016年提出了大名鼎鼎的wide&Deep的結構正是解決了這樣的問題。
Wide&deep結合了wide模型的優點和deep模型的優點,網絡結構如圖6所示,wide部分是LR模型,Deep部分是DNN模型。

圖6 Wide&Deep 模型結構
在這個經典的wide&deep模型中,google提出了兩個概念,generalization(泛化性)和memory(記憶性)
- Memory(記憶性)
wide部分長處在於學習樣本中的高頻部分,優點是模型的記憶性好,對於樣本中出現過的高頻低階特征能夠用少量參數學習;
缺點是模型的泛化能力差,例如對於沒有見過的ID類特征,模型學習能力較差。
- Generalization(泛化性)
deep部分長處在於學習樣本中的長尾部分,優點是泛化能力強,對於少量出現過的樣本甚至沒有出現過的樣本都能做出預測(非零的embedding向量);
缺點是模型對於低階特征的學習需要用較多參才能等同wide部分效果,而且泛化能力強某種程度上也可能導致過擬合出現bad case.
除此之外,wide&deep模型還有如下特點
- 人工特征工程
LR部分的特征,仍然需要人工設計才能保證一個不錯的效果。因為LR部分是直接作為最終預測的一部分,
如果作為wide部分的LR特征工程做的不夠完善,將影響整個wide&deep的模型精度
- 聯合訓練
模型是end-to-end結構,wide部分和deep部分是聯合訓練的
- embedding層deep部分單獨占有
LR部分直接作為最后輸出,因此embedding層是deep部分獨有的。
wide&deep 等價於LR + embedding + MLP,需要學習的網絡參數有:
- LR: 1+n
- embedding部分:n*k
- MLP部分: f*k*H1 + H1*H2 + H2*1
6. Factorization-Machine based Neural Network (deepFM)
google提出的wide&deep框架固然強大,但由於wide部分是個LR模型,仍然需要人工特征工程。
但wide&deep給整個學術界和工業界提供了一種框架思想。基於這種思想,華為諾亞方舟團隊結合FM相比LR的特征交叉的功能,
將wide&deep部分的LR部分替換成FM來避免人工特征工程,於是有了deepFM,網絡結構如圖7所示。

圖7 DeepFM模型結構
比起wide&deep的LR部分,deepFM采用FM作為wide部分的輸出,FM部分如圖8所示。


圖8 deepFM模型中的FM部分結構
除此之外,deepFM還有如下特點:
- 低階特征表達
wide部分取代WDL的LR,比FNN和PNN相比能捕捉低階特征信息
- embedding層共享
wide&deep部分的embedding層得需要針對deep部分單獨設計;
而在deepFM中,FM和DEEP部分共享embedding層,FM訓練得到的參數既作為wide部分的輸出,也作為DNN部分的輸入。
- end-end訓練
embedding和網絡權重聯合訓練,無需預訓練和單獨訓練
deepFM等價於FM + embedding + DNN
(1)FM部分: 1+n
(2)embedding部分:n*k
(3)DNN部分: f*k*H1 + H1*H2+H1
通過embedding層后,FM部分直接輸出沒有參數需要學習,進入DNN部分的參數維度從原始n維降到f*k維。
7. Neural Factorization Machines (NFM)
前面的deepFM在embedding層后把FM部分直接concat起來(f*k維,f個field,每個filed是k維向量)作為DNN的輸入。
Neural Factorization Machines,簡稱NFM,提出了一種更加簡單粗暴的方法,在embedding層后,做了一個叫做BI-interaction的操作,讓各個field做element-wise后sum起來去做特征交叉,
MLP的輸入規模直接壓縮到k維,和特征的原始維度n和特征field 維度f沒有任何關系。網絡結構如圖9所示。

圖9 NFM模型結構
這里論文只畫出了其中的deep部分, wide部分在這里省略沒有畫出來。
Bi-interaction聽名字很高大上,其實操作很簡單:就是讓f個field兩兩element-wise相乘后,得到f*(f-1)/2個向量,然后直接sum起來,最后得到一個k維的向量。
所以該層沒有任何參數需要學習。
NFM等價於FM + embedding + MLP,需要學習的參數有:
(1)FM部分: 1+n
(2)embedding部分:n*k
(3)MLP部分: k*H1 + H1*H2+…+Hl*1
NFM在embedding做了bi-interaction操作來做特征的交叉處理,優點是網絡參數從n直接壓縮到k(比FNN和deepFM的f*k還少),降低了網絡復雜度,能夠加速網絡的訓練得到模型;但同時這種方法也可能帶來較大的信息損失。
8. Attention Neural Factorization Machines (AFM)
前面提到的各種網絡結構中的FM在做特征交叉時,讓不同特征的向量直接做交叉,基於的假設是各個特征交叉對ctr結果預估的貢獻度是一樣的。
這種假設其實是不合理的, 不同特征在做交叉時,對ctr預估結果的貢獻度是不一樣的。Attention Neural Factorization Machines,簡稱NFM模型,
利用了近年來在圖像、NLP、語音等領域大獲成功的attention機制,在前面講到的NFM基礎上,引入了attention機制來解決這個問題。
AFM的網絡結構如圖10所示。和NFM一樣,這里也省略了wide部分,只畫出了deep部分結構。

圖10 AFM模型結構
AFM的embedding層后和NFM一樣,先讓f個field的特征做了element-wise product后,得到f*(f-1)/2個交叉項。
和NFM直接把這些交叉項sum起來不同,AFM引入了一個Attention Net,認為這些交叉特征項每個對結果的貢獻是不同的,例如xi和xj的權重重要度,用aij來表示。
從這個角度來看,其實AFM其實就是個加權累加的過程。Attention Net部分的權重aij不是直接學習,而是通過如下公式表示


這里t表示attention net中的隱層維度,k和前面一樣,為embedding層的維度。
所以這里需要學習的參數有3個,W, b, h,參數個數共t*k+2*t個。得到aij權重后,對各個特征兩兩點積加權累加后,得到一個k維的向量,
引入一個簡單的參數向量pT,維度為k進行學習,和wide部分一起得到最終的AFM輸出。

總結AFM的網絡結構來說,有如下特點:
- Attention Network
AFM的亮點所在,通過一個attention net生成一個關於特征交叉項的權重,然后將FM原來的二次項直接累加,變成加權累加。本質上是一個加權平均,學習xjxj的交叉特征重要性
- Deep Network
沒有deep,卒。
Attention net學習得到的交叉項直接學些個pt參數就輸出了,少了DNN部分的表達,對高階特征部分的進一步學習可能存在瓶頸。
另外,FFM其實也引入了field的概念去學習filed和featrue之間的權重。沒有了deep 部分的AFM,和優化的FFM上限應該比較接近。
AFM等價於 FM + embedding + attention + MLP(一層),需要學習的參數有:
(1)FM部分參數:1+n
(2)Embedding部分參數: n*k
(3)Attention Network部分參數: k*t + t*2
(4)MLP部分參數:k*1
9. Deep&Cross Network(DCN)
在ctr預估中,特征交叉是很重要的一步,但目前的網絡結構,最多都只學到二級交叉。LR模型采用原始人工交叉特征,FM自動學習xi和xj的二階交叉特征,
而PNN用product方式做二階交叉,NFM和AFM也都采用了Bi-interaction的方式學習特征的二階交叉。對於更高階的特征交叉,只有讓deep去學習了。
為解決這個問題,google在2017年提出了Deep&Cross Network,簡稱DCN的模型,可以任意組合特征,而且不增加網絡參數。圖11為DCN的結構。

圖11 DCN模型結構
整個網絡分4部分組成:
(1)Embedding and stacking layer
之所以不把embedding和stacking分開來看,是因為很多時候,embedding和stacking過程是分不開的。
前面講到的各種 XX-based FM 網絡結構,利用FM學到的v向量可以很好的作為embedding。而在很多實際的業務結構,可能已經有了提取到的embedding特征信息,
例如圖像的特征embedding,text的特征embedding,item的embedding等,還有其他連續值信息,例如年齡,收入水平等,這些embedding向量stack在一起后,一起作為后續網絡結構的輸入。
當然,這部分也可以用前面講到的FM來做embedding。為了和原始論文保持一致,這里我們假設X0向量維度為d(上文的網絡結構中為k),這一層的做法就是簡答的把各種embedding向量concat起來。

(2)Deep layer netwok
在embedding and stacking layer之后,網絡分成了兩路,一路是傳統的DNN結構。表示如下

為簡化理解,假設每一層網絡的參數有m個,一共有Ld層,輸入層由於和上一層連接,有d*m個參數(d為x0向量維度),后續的Ld-1層,
每層需要m*(m+1)個參數,所以一共需要學習的參數有 d*m+m*(m+1)*(Ld-1)。最后的輸出也是個m維向量Hl2
(3)Cross layer network
Embedding and stacking layer輸入后的另一路就是DCN的重點工作了。假設網絡有L1層,每一層和前一層的關系可以用如下關系表示

可以看到f是待擬合的函數,xl即為上一層的網絡輸入。需要學習的參數為wl和bl,因為xl維度為d, 當前層網絡輸入xl+1也為d維,
待學習的參數wl和bl也都是d維度向量。因此,每一層都有2*d的參數(w和b)需要學習,網絡結構如下。

經過Lc層的cross layer network后,在該layer最后一層Lc層的輸出為Lc2的d維向量
(4)Combination Output Layer
經過cross network的輸出XL1(d維)和deep network之后的向量輸入(m維)直接做concat,變為一個d+m的向量,最后套一個LR模型,需要學習參數為1+d+m。
總結起來,DCN引入的cross network理論上可以表達任意高階組合,同時每一層保留低階組合,參數的向量化也控制了模型的復雜度。
DCN等價於embedding + cross + deep + LR
(1)embedding部分參數: 根據情況而定
(2)cross部分參數:2*d*Lc(Lc為cross網路層數)
(3)deep部分參數:d*(m+1)+m*(m+1)*(Ld-1) (Ld為深度網絡層數,m為每層網絡參數)
(4)LR 部分參數:1+d+m
10. Deep Interest Network (DIN)
最后介紹阿里在2017年提出的Deep Interest Network,簡稱DIN模型。與上面的FNN,PNN等引入低階代數范式不同,DIN的核心是基於數據的內在特點,引入了更高階的學習范式。
用戶的興趣是多種多樣的,從數學的角度來看,用戶的興趣在興趣空間是一個多峰分布。在預測ctr時,用戶embedding表示的興趣維度,很多是和當前item是否點擊無關的,
只和用戶興趣中的局部信息有關。因此,受attention機制啟發,DIN在embedding層后做了一個action unit的操作,對用戶的興趣分布進行學習后再輸入到DNN中去,網絡結構如圖12所示

圖12 DIN模型結構
DIN把用戶特征、用戶歷史行為特征進行embedding操作,視為對用戶興趣的表示,之后通過attention network,對每個興趣表示賦予不同的權值。
- Vu:表示用戶最終向量
- Vi:表示用戶興趣向量(shop_id, good_id..)
- Va:表示廣告表示向量
- Wi: 對於候選廣告,attention機制中該興趣的權重

可以看到,對於用戶的每個興趣向量Vi,都會通過學習該興趣的權重Vi, 來作為最終的用戶表示。
