深度學習在CTR預估中的應用
來自專欄 閑聊廣告ctr預估模型
一、前言
深度學習憑藉其強大的表達能力和靈活的網路結構在NLP、圖像、語音等眾多領域取得了重大突破。在廣告領域,預測用戶點擊率(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部分,deeFM採用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, 來作為最終的用戶表示。
三、寫在最後
前面介紹了10中深度學習模型的網路結構,總結起來可以用如下的所表示
各種CTR深度模型看似結構各異,其實大多數可以用如下的通用範式來表達,
- input->embedding:
把大規模的稀疏特徵ID用embedding操作映射為低維稠密的embedding向量
- embedding層向量
concat, sum, average pooling等操作,大部分CTR模型在該層做改造
- embedding->output:
通用的DNN全連接框架,輸入規模從n維降為k*f維度甚至更低。
圖13 通用深度學習模型結構
其中,embedding vector這層的融合是深度學習模型改造最多的地方,該層是進入深度學習模型的輸入層,embedding 融合的質量將影響DNN模型學習的好壞。個人總結大體有以下4種操作,當然後續可能會有越來越多其他的變形結構。
圖14 embedding層融合方式
另外,DNN部分,業界也有很多或state-of-art或很tricky的方法,都可以在裡面進行嘗試,例如dropout,在NFM的Bi-interaction中可以嘗試以一定概率dropout掉交叉特徵增前模型的泛化能力等。
寫在最後
ctr預估領域不像圖像、語音等領域具有連續、稠密的數據以及空間、時間等的良好局部相關性,ctr預估中的大多數輸入都是離散而且高維的,特徵也分散在少量不同的field上。要解決這樣的一個深度學習模型,面臨的第一個問題是怎麼把輸入向量用一個embedding層降維策劃那個稠密連續的向量,如本文介紹的用FM去做預訓練,或者和模型一起聯合訓練,或者其他數據源提取的embedding特徵向量去做concat。其次,在寬和深的大戰中,在google在提出了wide&deep的模型框架後,這套體系基本已成為業內的基本框架。無論wide部分或者deep怎麼改造,其實本質上還是一些常見組件的結合,或者改造wide,或者改造deep,或者在wide和deep的結合過程中進行改造。
ctr預估領域方法變化層出不窮,但萬變不離其宗,各種模型本質上還是基礎組件的組合,如何結合自己的業務、數據、應用場景去挑選合適的模型應用,可能才是真正的難點所在。
四、參考文獻
[1]Factorization Machines
[2]Wide & Deep Learning for Recommender Systems
[3]Deep Learning over Multi-Field Categorical Data: A Case Study on User Response Prediction
[4]Product-based Neural Networks for User Response Prediction
[5]DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
[6]Neural Factorization Machines for Sparse Predictive Analytics
[7] Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
[8]Deep & Cross Network for Ad Click Predictions
[9]Deep Interest Network for Click-Through Rate Prediction
推薦閱讀:
※Predicting Clicks- Estimating the Click-Through Rate for New Ads by _Microsoft_2007_WWW【Review】
TAG:深度學習DeepLearning | ctr | 機器學習 |