歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~網絡
本文由 鵝廠優文發表於 雲+社區專欄
2、深度學習模型框架
做者:辛俊波 | 騰訊 應用研究員
深度學習憑藉其強大的表達能力和靈活的網絡結構在NLP、圖像、語音等衆多領域取得了重大突破。在廣告領域,預測用戶點擊率(Click Through Rate,簡稱CTR)領域近年也有大量關於深度學習方面的研究,僅這兩年就出現了很多於二十多種方法。本文就近幾年CTR預估領域中學術界的經典方法進行探究, 並比較各自之間模型設計的初衷和各自優缺點。經過十種不一樣CTR深度模型的比較,不一樣的模型本質上均可以由基礎的底層組件組成。機器學習
本文中出現的變量定義:ide
• n: 特徵個數,全部特徵one-hot後 鏈接起來的總體規模大小函數
• f: 特徵field個數,表示特徵類別有多少個學習
• k: embedding層維度,在FM中是隱向量維度優化
• H1: 深度網絡中第一個隱層節點個數,第二層H2,以此類推。ui
FM模型能夠當作是線性部分的LR,還有非線性的特徵組合xixj交叉而成,表示以下:google
其中vi是第i維特徵的隱向量,長度k<<n,包含k個描述特徵的因子。參數個數爲k*n。全部包含xi的非零組合特徵均可以用來訓練vi,緩解數據稀疏問題。圖1是從神經網絡的角度表示FM, 能夠當作底層爲特徵維度爲n的離散輸入,通過embedding層後,對embedding層線性部分(LR)和非線性部分(特徵交叉部分)累加後輸出。spa
圖1 FM模型結構
待學習的參數以下:
(1)LR部分: 1+n
(2)embedding 部分:n*k
FM下文中將做爲各類網絡模型的基礎組件
圖2是經典的DNN網絡, 結構上看就是傳統的多層感知機(MultiLayer Perceptron,簡稱MLP)。在MLP網絡中,輸入是原始的特徵n維特徵空間,假設第一層隱層節點數爲H1,第二層爲H2,以此類推。在第一層網絡中,須要學習的參數就是n*H1。對於大多數CTR模型來講,特徵體系都極其龐大並且稀疏,典型的特徵數量級n從百萬級到千萬級到億級甚至更高,這麼大規模的n做爲網絡輸入在ctr預估的工業界場景中是不可接受的。下面要講到的大多數深度學習CTR網絡結構,都圍繞着如何將DNN的高維離散輸入,經過embedding層變成低維稠密的輸入工做來展開。
圖2 DNN模型結構
DNN待學習參數: nH1+H1H2+H2H3+H3o(o爲輸出層大小,在ctr預估中爲1)
DNN(後文稱MLP)也將做爲下文各類模型的基礎組件之一
在上述的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], W0i
爲field i的embedding矩陣。Zi 爲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部分: fkH1+H1*H2+H2
能夠看到,對比DNN,在進入MLP部分以前,網絡的輸入由n降到了f*k(f爲field個數,幾十到幾百之間,k爲隱向量維度,通常0~100)
FNN的embedding層直接concat鏈接後輸出到MLP中去學習高階特徵。PNN,全稱爲Product-based Neural Network,認爲在embedding輸入到MLP以後學習的交叉特徵表達並不充分,提出了一種product layer的思想,既基於乘法的運算來體現體徵交叉的DNN網絡結構,如圖4所示。
圖3 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的輸出爲
PNN = FM + product + MLP
Ø Inner Product-based Neural Network
IPNN的叉項使用了內積g(fi, fj) = <fi, fj>。f個filed,兩兩求內積共計交叉項p部分的參數共f(f-1)/2(f爲特徵的field個數,原始論文裏用的N)個,線性部分z部分參數共fk個。須要學習的參數爲:
(1)FM部分: 1+ n + n*k
(2)product部分: (fk + f(f-1)/2)*H1
(3)MLP部分:H1H2+H21
Ø Outer Product-based Neural Network
OPNN用矩陣乘法來表示特徵的交叉, g(fi, fj)=fifit。f個field兩兩求矩陣乘法,交叉項p共f(f-1)/2kk個參數。線性部分z部分參數共fk個。須要學習的參數爲:
(1)FM部分: 1+ n + n*k
(2)product部分: (fk + f(f-1)/2kk)*H1
(3)MLP部分:H1H2+H21
前面介紹的兩種變體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
(1)LR部分: 1+n
(2)embedding部分:n*k
(3)MLP部分: fkH1 + H1H2 + H21
google提出的wide&deep框架當然強大,但因爲wide部分是個LR模型,仍然須要人工特徵工程。但wide&deep給整個學術界和工業界提供了一種框架思想。基於這種思想,華爲諾亞方舟團隊結合FM相比LR的特徵交叉的功能,將wide&deep部分的LR部分替換成FM來避免人工特徵工程,因而有了deepFM,網絡結構如圖6所示。
圖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部分: fkH1 + H1*H2+H1
經過embedding層後,FM部分直接輸出沒有參數須要學習,進入DNN部分的參數維度從原始n維降到f*k維。
前面的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部分: kH1 + H1H2+…+Hl*1
NFM在embedding作了bi-interaction操做來作特徵的交叉處理,優勢是網絡參數從n直接壓縮到k(比FNN和deepFM的f*k還少),下降了網絡複雜度,可以加速網絡的訓練獲得模型;但同時這種方法也可能帶來較大的信息損失。
前面提到的各類網絡結構中的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,參數個數共tk+2t個。獲得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部分參數: kt+t2
(4)MLP部分參數:k*1
在ctr預估中,特徵交叉是很重要的一步,但目前的網絡結構,最多都只學到二級交叉。LR模型採用原始人工交叉特徵,FM自動學習xi和xj的二階交叉特徵,而PNN用product方式作二階交叉,NFM和AFM也都採用了Bi-interaction的方式學習特徵的二階交叉。對於更高階的特徵交叉,只有讓deep去學習了。爲解決這個問題,google在2017年提出了Deep&Cross Network,簡稱DCN的模型,能夠任意組合特徵,並且不增長網絡參數。圖11爲DCN的結構。
圖10 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層,輸入層因爲和上一層鏈接,有dm個參數(d爲x0向量維度),後續的Ld-1層,每層須要m(m+1)個參數,因此一共須要學習的參數有 dm+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
通過crossnetwork的輸出XL1(d維)和deep network以後的向量輸入(m維)直接作concat,變爲一個d+m的向量,最後套一個LR模型,須要學習參數爲1+d+m。
總結起來,DCN引入的crossnetwork理論上能夠表達任意高階組合,同時每一層保留低階組合,參數的向量化也控制了模型的複雜度。
DCN = embedding + cross + deep + LR
待學習參數有:
(1)embedding部分參數: 根據狀況而定
(2)cross部分參數:2dLc(Lc爲cross網路層數)
(3)deep部分參數:d(m+1)+m(m+1)*(Ld-1)(Ld爲深度網絡層數,m爲每層網絡參數)
(4)LR 部分參數:1+d+m
最後介紹阿里在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深度模型看似結構各異,其實大多數能夠用以下的通用範式來表達,
把大規模的稀疏特徵ID用embedding操做映射爲低維稠密的embedding向量
concat, sum, average pooling等操做,大部分CTR模型在該層作改造
通用的DNN全鏈接框架,輸入規模從n維降爲k*f維度甚至更低。
圖3 通用深度學習模型結構
其中,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
問答
如何把深度學習應用在雲中?
相關閱讀
IPv6原理、應用與實踐
Python 工匠:編寫條件分支代碼的技巧
AI從入門到放棄:CNN的導火索,用MLP作圖像分類識別?
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識
此文已由做者受權騰訊雲+社區發佈,更多原文請點擊
搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!
海量技術實踐經驗,盡在雲加社區!