前深度学习时代CTR预估模型的演化之路 [王喆观点]
畢業于清華大學計算機系的王喆學長梳理從傳統機器學習時代到深度學習時代所有經典CTR(click through rate)模型的演化關系和模型特點。內容來源:https://zhuanlan.zhihu.com/p/61154299。
在互聯網永不停歇的增長需求的驅動下,CTR預估模型(以下簡稱CTR模型)的發展也可謂一日千里,從2010年之前千篇一律的邏輯回歸(Logistic Regression,LR),進化到因子分解機(Factorization Machine,FM)、梯度提升樹(Gradient Boosting Decision Tree,GBDT),再到2015年之后深度學習的百花齊放,各種模型架構層出不窮。我想所有從業者談起深度學習CTR預估模型都有一種莫名的興奮,但在這之前,認真的回顧前深度學習時代的CTR模型仍是非常必要的。原因有兩點:
- 即使是深度學習空前流行的今天,LR、FM等傳統CTR模型仍然憑借其可解釋性強、輕量級的訓練部署要求、便于在線學習等不可替代的優勢,擁有大量適用的應用場景。模型的應用不分新舊貴賤,熟悉每種模型的優缺點,能夠靈活運用和改進不同的算法模型是算法工程師的基本要求。
- 傳統CTR模型是深度學習CTR模型的基礎。深度神經網絡(Deep Nerual Network,DNN)從一個神經元生發而來,而LR正是單一神經元的經典結構;此外,影響力很大的FNN,DeepFM,NFM等深度學習模型更是與傳統的FM模型有著千絲萬縷的聯系;更不要說各種梯度下降方法的一脈相承。所以說傳統CTR模型是深度學習模型的地基和入口。
看到上面的關系圖,有經驗的同學可能已經對各模型的細節和特點如數家珍了。中間位置的LR模型向四個方向的延伸分別代表了傳統CTR模型演化的四個方向:
- 向下為了解決特征交叉的問題,演化出PLOY2,FM,FFM等模型;
- 向右為了使用自動化的手段解決特征工程的難題,Facebook將LR與GBDT進行結合,提出了GBDT+LR組合模型;
- 向左Google從online learning的角度解決模型時效性的問題,提出了FTRL;
- 向上阿里基于樣本分組的思路增加模型的非線性,提出了LS-PLM(MLR)模型;
1.?LR:CTR模型的核心和基礎
位于正中央的是當之無愧的Logistic Regression。仍記得2012年我剛進入計算廣告這個行業的時候,各大中小公司的主流CTR模型無一例外全都是LR模型。LR模型的流行是有三方面原因的,一是數學形式和含義上的支撐;二是人類的直覺和可解釋性的原因;三是工程化的需要。
- 邏輯回歸的數學基礎
邏輯回歸作為廣義線性模型的一種,它的假設是因變量y服從伯努利分布。那么在點擊率預估這個問題上,“點擊”這個事件是否發生就是模型的因變量y。而用戶是否點擊廣告這個問題是一個經典的擲偏心硬幣問題,因此CTR模型的因變量顯然應該服從伯努利分布。所以采用LR作為CTR 模型是符合“點擊”這一事件的物理意義的。
與之相比較,線性回歸(Linear Regression)作為廣義線性模型的另一個特例,其假設是因變量y服從高斯分布,這明顯不是點擊這類二分類問題的數學假設。
在了解LR的數學理論基礎后,其數學形式就不再是空中樓閣了,具體的形式如下:
其中x是輸入向量,θ 是我們要學習的參數向量。結合CTR模型的問題來說,x就是輸入的特征向量,h(x)就是我們最終希望得到的點擊率。
- 人類的直覺和可解釋性
直觀來講,LR模型目標函數的形式就是各特征的加權和,再施以sigmoid函數。忽略其數學基礎(雖然這是其模型成立的本質支撐),僅靠人類的直覺認知也可以一定程度上得出使用LR作為CTR模型的合理性。
使用各特征的加權和是為了綜合不同特征對CTR的影響,而由于不同特征的重要程度不一樣,所以為不同特征指定不同的權重來代表不同特征的重要程度。最后要套上sigmoid函數,正是希望其值能夠映射到0-1之間,使其符合CTR的物理意義。
LR如此符合人類的直覺認知顯然有其他的好處,就是模型具有極強的可解釋性,算法工程師們可以輕易的解釋哪些特征比較重要,在CTR模型的預測有偏差的時候,也可以輕易找到哪些因素影響了最后的結果,如果有跟運營、產品一起工作的經驗的話,更會知道可解釋性強是一個模型多么優秀的“品質”。
- 工程化的需要
在互聯網公司每天動輒TB級別的數據面前,模型的訓練開銷就異常重要了。在GPU尚未流行開來的2012年之前,LR模型也憑借其易于并行化、模型簡單、訓練開銷小等特點占據著工程領域的主流。囿于工程團隊的限制,即使其他復雜模型的效果有所提升,在沒有明顯beat LR之前,公司也不會貿然加大計算資源的投入升級CTR模型,這是LR持續流行的另一重要原因。
2.?POLY2:特征交叉的開始
但LR的表達能力畢竟是非常初級的。由于LR僅使用單一特征,無法利用高維信息,在“辛普森悖論”現象的存在下,只用單一特征進行判斷,甚至會得出錯誤的結論。
針對這個問題,當時的算法工程師們經常采用手動組合特征,再通過各種分析手段篩選特征的方法。但這個方法無疑是殘忍的,完全不符合“懶惰是程序員的美德”這一金科玉律。更遺憾的是,人類的經驗往往有局限性,程序員的時間和精力也無法支撐其找到最優的特征組合。因此采用 PLOY2模型進行特征的“暴力”組合成為了可行的選擇。
在上面POLY2二階部分的目標函數中(上式省略一階部分和sigmoid函數的部分),我們可以看到POLY2對所有特征進行了兩兩交叉,并對所有的特征組合賦予了權重。POLY2通過暴力組合特征的方式一定程度上解決了特征組合的問題。并且由于本質上仍是線性模型,其訓練方法與LR并無區別,便于工程上的兼容。但POLY2這一模型同時存在著兩個巨大的缺陷:
①?由于在處理互聯網數據時,經常采用one-hot的方法處理id類數據,致使特征向量極度稀疏,POLY2進行無選擇的特征交叉使原本就非常稀疏的特征向量更加稀疏,使得大部分交叉特征的權重缺乏有效的數據進行訓練,無法收斂;②?權重參數的數量由n直接上升到n^2,極大增加了訓練復雜度。
3.?FM:隱向量特征交叉
為了解決POLY2模型的缺陷,2010年德國康斯坦茨大學的Steffen Rendle提出了FM(Factorization Machine)。
從FM的目標函數的二階部分中我們可以看到,相比POLY2,主要區別是用兩個向量的內積(wj1·?wj2)取代了單一的權重w(j1 , j2)。具體來說,FM為每個特征學習了一個隱權重向量(latent vector),在特征交叉時,使用兩個特征隱向量的內積作為交叉特征的權重。通過引入特征隱向量的方式,直接把原先n^2級別的權重數量減低到了n*k(k為隱向量維度,n>>k)。在訓練過程中,又可以通過轉換目標函數形式的方法,使FM的訓練復雜度進一步降低到n*k級別。相比POLY2極大降低訓練開銷。
隱向量的引入還使得FM比POLY2能夠更好的解決數據稀疏性的問題。舉例來說,我們有兩個特征,分別是channel和brand,一個訓練樣本的feature組合是(ESPN, Adidas),在POLY2中,只有當ESPN和Adidas同時出現在一個訓練樣本中時,模型才能學到這個組合特征對應的權重。而在FM中,ESPN的隱向量也可以通過(ESPN, Gucci)這個樣本學到,Adidas的隱向量也可以通過(NBC, Adidas)學到,這大大降低了模型對于數據稀疏性的要求。甚至對于一個從未出現過的特征組合(NBC, Gucci),由于模型之前已經分別學習過NBC和Gucci的隱向量,FM也具備了計算該特征組合權重的能力,這是POLY2無法實現的。也許FM相比POLY2丟失了某些信息的記憶能力,但是泛化能力大大提高,這對于互聯網的數據特點是非常重要的。
工程方面,FM同樣可以用梯度下降進行學習的特點使其不失實時性和靈活性。相比之后深度學習模型復雜的網絡結構,FM比較容易實現的inference過程也使其沒有serving的難題。因此FM在2012-2014年前后逐漸成為業界CTR模型的重要選擇。
4.?FFM:引入特征域概念
2015年,基于FM提出的FFM(Field-aware Factorization Machine ,簡稱FFM)在多項CTR預估大賽中一舉奪魁,并隨后被Criteo、美團等公司深度應用在CTR預估,推薦系統領域。相比FM模型,FFM模型主要引入了Field-aware這一概念,使模型的表達能力更強。
上式是FFM的目標函數的二階部分。其與FM目標函數的區別就在于隱向量由原來的wj1?變成了wj1,f2?,這就意味著每個特征對應的不是一個隱向量,而是對應著不同域的一組隱向量,當wj1特征與wj2特征進行交叉時,xj1特征會從一組隱向量中挑出與特征xj2的域f2對應的隱向量wj1,f2進行交叉。同理特征xj2也會用與xj1的域f1對應的隱向量進行交叉。
這里再次強調一下,上面所說的“域”就代表著特征域,域內的特征一般會采用one-hot編碼形成one-hot特征向量。
FFM模型學習每個特征在f個域上的k維隱向量,交叉特征的權重由特征在對方特征域上的隱向量內積得到,權重數量共n*k*f個。在訓練方面,由于FFM的二次項并不能夠像FM那樣簡化,因此其復雜度為kn^2。相比FM,FFM由于引入了field這一概念,為模型引入了更多有價值信息,使模型表達能力更強,但與此同時,FFM的計算復雜度上升到kn^2,遠遠大于FM的k*n。
5.?CTR模型特征交叉方向的演化
以上模型實際上是CTR模型朝著特征交叉的方向演化的過程,我們再用圖示方法回顧一下從POLY2到FM,再到FFM進行特征交叉方法的不同。
- POLY2模型直接學習每個交叉特征的權重,權重數量共n^2個:
- FM模型學習每個特征的k維隱向量,交叉特征由相應特征隱向量的內積得到,權重數量共n*k個:
- FFM模型引入了特征域這一概念,在做特征交叉時,每個特征選擇與對方域對應的隱向量做內積運算得到交叉特征的權重。參數數量共n*k*f個:
6.?GBDT+LR:特征工程模型化的開端
FFM模型采用引入特征域的方式增強了模型的表達能力,但無論如何,FFM只能夠做二階的特征交叉,如果要繼續提高特征交叉的維度,不可避免的會發生組合爆炸和計算復雜度過高的情況。那么有沒有其他的方法可以有效的處理高維特征組合和篩選的問題?2014年,Facebook提出了基于GBDT+LR組合模型的解決方案。簡而言之,Facebook提出了一種利用GBDT自動進行特征篩選和組合,進而生成新的離散特征向量,再把該特征向量當作LR模型輸入,預估CTR的模型結構。
GBDT + LR 構建CTR模型需要強調的是,用GBDT構建特征工程,和利用LR預估CTR兩步是獨立訓練的。所以自然不存在如何將LR的梯度回傳到GBDT這類復雜的問題,而利用LR預估CTR的過程前面已經有所介紹,在此不再贅述,下面著重講解如何利用GBDT構建新的特征向量。
GBDT是由多棵回歸樹組成的樹林,后一棵樹利用前面樹林的結果與真實結果的殘差做為擬合目標。每棵樹生成的過程是一棵標準的回歸樹生成過程,因此每個節點的分裂是一個自然的特征選擇的過程,而多層節點的結構自然進行了有效的特征組合,也就非常高效的解決了過去非常棘手的特征選擇和特征組合的問題。
利用訓練集訓練好GBDT模型之后,就可以利用該模型完成從原始特征向量到新的離散型特征向量的轉化。具體過程是這樣的,一個訓練樣本在輸入GBDT的某一子樹后,會根據每個節點的規則最終落入某一葉子節點,那么我們把該葉子節點置為1,其他葉子節點置為0,所有葉子節點組成的向量即形成了該棵樹的特征向量,把GBDT所有子樹的特征向量連接起來,即形成了后續LR輸入的特征向量。
利用GBDT生成新的特征向量過程舉例來說,如上圖所示,GBDT由三顆子樹構成,每個子樹有4個葉子節點,一個訓練樣本進來后,先后落入“子樹1”的第3個葉節點中,那么特征向量就是[0,0,1,0],“子樹2”的第1個葉節點,特征向量為[1,0,0,0],“子樹3”的第4個葉節點,特征向量為[0,0,0,1],最后連接所有特征向量,形成最終的特征向量[0,0,1,0,1,0,0,0,0,0,0,1]。
由于決策樹的結構特點,事實上,決策樹的深度就決定了特征交叉的維度。如果決策樹的深度為4,通過三次節點分裂,最終的葉節點實際上是進行了3階特征組合后的結果,如此強的特征組合能力顯然是FM系的模型不具備的。但由于GBDT容易產生過擬合,以及GBDT這種特征轉換方式實際上丟失了大量特征的數值信息,因此我們不能簡單說GBDT由于特征交叉的能力更強,效果就比FFM好,在模型的選擇和調試上,永遠都是多種因素綜合作用的結果。
GBDT+LR比FM重要的意義在于,它大大推進了特征工程模型化這一重要趨勢,某種意義上來說,之后深度學習的各類網絡結構,以及embedding技術的應用,都是這一趨勢的延續。
在之前所有的模型演化過程中,實際上是從特征工程這一角度來推演的。接下來,我們從時效性這個角度出發,看一看模型的更新頻率是如何影響模型效果的。
在模型更新這個問題上,我們的直覺是模型的訓練時間和serving時間之間的間隔越短,模型的效果越好,為了證明這一點,facebook的工程師還是做了一組實效性的實驗(如上圖),在結束模型的訓練之后,觀察了其后6天的模型loss(這里采用normalized entropy作為loss)。可以看出,模型的loss在第0天之后就有所上升,特別是第2天過后顯著上升。因此daily update的模型相比weekly update的模型效果肯定是有大幅提升的。
如果說日更新的模型比周更新的模型的效果提升顯著,我們有沒有方法實時引入模型的效果反饋數據,做到模型的實時更新從而進一步提升CTR模型的效果呢?Google 2013年應用的FTRL給了我們答案。
7.?FTRL:天下武功,唯快不破
FTRL的全稱是Follow-the-regularized-Leader,是一種在線實時訓練模型的方法,Google在2010年提出了FTRL的思路,2013年實現了FTRL的工程化,之后快速成為online learning的主流方法。與模型演化圖中的其他模型不同,FTRL本質上是模型的訓練方法。雖然Google的工程化方案是針對LR模型的,但理論上FTRL可以應用在FM,NN等任何通過梯度下降訓練的模型上。
為了更清楚的認識FTRL,這里對梯度下降方法做一個簡要的介紹,從訓練樣本的規模角度來說,梯度下降可以分為:batch,mini-batch,SGD(隨機梯度下降)三種,batch方法每次都使用全量訓練樣本計算本次迭代的梯度方向,mini-batch使用一小部分樣本進行迭代,而SGD每次只利用一個樣本計算梯度。對于online learning來說,為了進行實時得將最新產生的樣本反饋到模型中,SGD無疑是最合適的訓練方式。
但SGD對于互利網廣告和推薦的場景來說,有較大的缺陷-難以產生稀疏解。為什么稀疏解對于CTR模型如此重要呢?
之前我們已經多次強調,由于one hot等id類特征處理方法導致廣告和推薦場景下的樣本特征向量極度稀疏,維度極高,動輒達到百萬、千萬量級。為了不割裂特征選擇和模型訓練兩個步驟,如果能夠在保證精度的前提下盡可能多的讓模型的參數權重為0,那么我們就可以自動過濾掉這些權重為0的特征,生成一個“輕量級”的模型。“輕量級”的模型不僅會使樣本部署的成本大大降低,而且可以極大降低模型inference的計算延遲。這就是模型稀疏性的重要之處。
而SGD由于每次迭代只選取一個樣本,梯度下降的方向雖然總體朝向全局最優解,但微觀上的運動的過程呈現布朗運動的形式,這就導致SGD會使幾乎所有特征的權重非零。即使加入L1正則化項,由于CPU浮點運算的結果很難精確的得到0的結果,也不會完全解決SGD稀疏性差的問題。就是在這樣的前提下,FTRL幾乎完美地解決了模型精度和模型稀疏性兼顧的訓練問題。
但FTRL的提出也并不是一蹴而就的。如上圖所示,FTRL的提出經歷了下面幾個關鍵的過程:
- 從最簡單的SGD到OGD(online gradient descent),OGD通過引入L1正則化簡單解決稀疏性問題;
- 從OGD到截斷梯度法,通過暴力截斷小數值梯度的方法保證模型的稀疏性,但損失了梯度下降的效率和精度;
- FOBOS(Forward-Backward Splitting),google和伯克利對OGD做進一步改進,09年提出了保證精度并兼顧稀疏性的FOBOS方法;
- RDA:微軟拋棄了梯度下降這條路,獨辟蹊徑提出了正則對偶平均來進行online learning的方法,其特點是稀疏性極佳,但損失了部分精度。
- Google綜合FOBOS在精度上的優勢和RDA在稀疏性上的優勢,將二者的形式進行了進一步統一,提出并應用FTRL,使FOBOS和RDA均成為了FTRL在特定條件下的特殊形式。
8.?LS-PLM:阿里曾經的主流CTR模型
下面我們從樣本pattern本身來入手,介紹阿里的的LS-PLM(Large Scale Piece-wise Linear Model),它的另一個更廣為人知的名字是MLR(Mixed Logistic Regression)。MLR模型雖然在2017年才公之于眾,但其早在2012年就是阿里主流的CTR模型,并且在深度學習模型提出之前長時間應用于阿里的各類廣告場景。
本質上,MLR可以看做是對LR的自然推廣,它在LR的基礎上采用分而治之的思路,先對樣本進行分片,再在樣本分片中應用LR進行CTR預估。在LR的基礎上加入聚類的思想,其動機其實來源于對計算廣告領域樣本特點的觀察 。
舉例來說,如果CTR模型要預估的是女性點擊女裝廣告的CTR,顯然我們并不希望把男性用戶點擊數碼類產品的樣本數據也考慮進來,因為這樣的樣本不僅對于女性購買女裝這樣的廣告場景毫無相關性,甚至會在模型訓練過程中擾亂相關特征的權重。為了讓CTR模型對不同用戶群體,不用用戶場景更有針對性,其實理想的方法是先對全量樣本進行聚類,再對每個分類施以LR模型進行CTR預估。MLR的實現思路就是由該動機產生的。
MLR目標函數的數學形式如上式,首先用聚類函數π對樣本進行分類(這里的π采用了softmax函數,對樣本進行多分類),再用LR模型計算樣本在分片中具體的CTR,然后將二者進行相乘后加和。其中超參數分片數m可以較好地平衡模型的擬合與推廣能力。當m=1時MLR就退化為普通的LR,m越大模型的擬合能力越強,但是模型參數規模隨m線性增長,相應所需的訓練樣本也隨之增長。在實踐中,阿里給出了m的經驗值為12。
下圖中MLR模型用4個分片可以完美地擬合出數據中的菱形分類面。
MLR算法適合于工業級的廣告、推薦等大規模稀疏數據場景問題。主要是由于表達能力強、稀疏性高等兩個優勢:
- 端到端的非線性學習:從模型端自動挖掘數據中蘊藏的非線性模式,省去了大量的人工特征設計,這使得MLR算法可以端到端地完成訓練,在不同場景中的遷移和應用非常輕松。
- 稀疏性:MLR在建模時引入了L1范數,可以使得最終訓練出來的模型具有較高的稀疏度,模型的學習和在線預測性能更好。
如果我們用深度學習的眼光來看待MLR這個模型,其在結構上已經很接近由輸入層、單隱層、輸出層組成的神經網絡。所以某種意義上說,MLR也在用自己的方式逐漸逼近深度學習的大門了。
9.?深度學習CTR模型的前夜
2010年FM被提出,特征交叉的概念被引入CTR模型;2012年MLR在阿里大規模應用,其結構十分接近三層神經網絡;2014年Facebook用GBDT處理特征,揭開了特征工程模型化的篇章。這些概念都將在深度學習CTR模型中繼續應用,持續發光。
另一邊,Alex Krizhevsky 2012年提出了引爆整個深度學習浪潮的AlexNet,深度學習的大幕正式拉開,其應用逐漸從圖像擴展到語音,再到NLP領域,推薦和廣告也必然會緊隨其后,投入深度學習的大潮之中。
2016年,隨著FNN,Deep&Wide,Deep crossing等一大批優秀的CTR模型框架的提出,深度學習CTR模型逐漸席卷了推薦和廣告領域,成為新一代CTR模型當之無愧的主流。
?
參考資料:
總結
以上是生活随笔為你收集整理的前深度学习时代CTR预估模型的演化之路 [王喆观点]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle必看
- 下一篇: 深度学习CTR模型最全演化图谱 [王喆观