關(guān)于點擊率模型,你知道這三點就夠了》》》上海會務公司《《《
上述的模型選擇都是結(jié)合業(yè)務場景做出的選擇,這里按我個人理解給出一個連貫一些的點擊率預估模型演進的過程:
之前提及過,一般會以高維sparse特征的LR模型作為基線模型,也有用dense特征直接結(jié)合LR來建模的。由于LR是線性分類器,后者需要對dense特征手工加各種非線性變換,遇到瓶頸后會轉(zhuǎn)向前者,或者改成使用GBDT,NN等非線性模型。而高維sparse特征結(jié)合LR的方案,人工在特征工程遇到一定瓶頸后,會采用FM等方案自動做特征發(fā)現(xiàn),為了解決時效性的問題,會結(jié)合batch的訓練加上Online的更新方式,或者直接轉(zhuǎn)向完全Online的方案如ftrl。還有一個方向是會結(jié)合自身的業(yè)務場景,對模型的損失函數(shù)做一些創(chuàng)新,比如yahoo的laser,阿里的coupled group lasso,比賽里的field aware的ffm等等。
在比賽里為了提升效果,很常見的一個策略是把各個模型融合在一起,最簡單的有把各個模型的結(jié)果做線性加權(quán),也有把各個模型進行stacking的方案,比如Facebook的gbdt+lr,再有把各個模型的信息喂給dnn去學習的。對這三種方案來說,效果最好的,我個人比較相信,是用dnn去做模型的blending(融合)。注意這里說的DNN不是指具體的某個模型dbn,cnn,而是指將各種淺層模型的中間權(quán)重,預估結(jié)果,原始的靜態(tài),動態(tài)特征等作為DNN的輸入,使用dnn后饋的輸入梯度來聯(lián)合更新這些結(jié)構(gòu)的參數(shù)。對DNN大家可能比較詬病的是其訓練效率,但我覺得在大公司可能還好,聽在百度的朋友說DNN的開發(fā)代價和訓練開銷隨著探索在逐步降低,不一定比gbdt等非線性模型代價高很多。
當然,對小公司來說,直接走到DNN有點用力過猛,我在這里簡要介紹一下FM+gbdt去融合的方案:第一步當然也是基于大規(guī)模稀疏特征LR。第二步,為了更好的刻畫長尾,自動發(fā)現(xiàn)組合特征,采用了FM。在同樣的訓練時間下,AUC提升,模型泛化性能可控。第三步:為了更好的fine tuning頭部和提升時效性,采用了用gbdt加動態(tài)特征的模型。最后呢,把這兩個模型簡單的做線性融合,由于倆個模型的特征和模型差異性較大,融合后auc也有顯著的提升。
對于gbdt,開源的實現(xiàn)有很多,但效果差別比較大,這里推薦一個開源實現(xiàn)xgboost,很多kaggle上的比賽借助這個工具都拿到了好名次。之前我寫過一篇叫做xgboost導讀和實戰(zhàn)的文章,對原始paper中的公式給出了一些推導細節(jié),這里不再詳述。簡單的說原始paper里是在函數(shù)空間上梯度下降求解,在求解步長時一般都是固定學習率。而xgboost對損失函數(shù)做了二階的泰勒展開,考慮了損失函數(shù)的二階梯度信息,并加入了正則項整體求最優(yōu)解,有比較好的泛化性能。另外在具體建樹的分裂節(jié)點過程也不是大多數(shù)實現(xiàn)里基于信息增益等,而是結(jié)合具體目標函數(shù)的真實下降量。有人做過各實現(xiàn)的評測,xgboost在性能和效果上都是相當不錯的。
BSp-SSp
幾個典型的模型基本就簡要講到這里,最后講一下模型求解的優(yōu)化算法,計算廣告書里給出了不少經(jīng)典的優(yōu)化凸優(yōu)化算法的原理和實現(xiàn)代碼,LBFGS,trust region等,這些凸優(yōu)化算法基本上都是掃一遍樣本,迭代的更新一次模型參數(shù),想要提升模型訓練收斂的效率,主要思路是降低掃樣本的成本,比如把樣本cache在內(nèi)存里,另外就是降低迭代輪數(shù),比如書里提到的admm。
這樣的batch做迭代的優(yōu)化方法現(xiàn)在被稱為一種叫做BSp(Bulk Synchronous parallel)的方式,與之相對應的叫做SSp(StalenessSynchronous parallel),主要是基于異步的minibatch sgd的優(yōu)化算法來更新,加上了一個bounded的一致性協(xié)議來保證收斂。補充一點的是,很多實現(xiàn)中其實是完全異步來實現(xiàn)的,更為簡單一些。SSp的方式雖然單輪迭代的網(wǎng)絡開銷不小,但是掃一遍樣本,minibatch sgd可以更新很多次模型,迭代的次數(shù)相對LBFGS會降低很多,所以整體的時間開銷相對也會少很多,另外可以結(jié)合online更新進一步降低訓練時間。從底層消息通訊的工程架構(gòu)上來說,ssp的方式主要是異步的push pull,基于消息隊列如zeromq等去實現(xiàn),相對bsp的這樣的同步原語,實現(xiàn)起來相對簡單優(yōu)雅些,也有一些不錯的開源實現(xiàn)比如李沐的dmlc。
ssp方式的缺點是數(shù)據(jù)量少的時候minibatch sgd的優(yōu)勢相對不明顯,需要多調(diào)調(diào)參數(shù),沒有batch算法省事??傮w說來,趨勢是在從bsp的架構(gòu)往ssp的架構(gòu)在轉(zhuǎn),包括一些dnn的實現(xiàn),基于SSp的方式加Online更新后訓練模型的開銷相對已經(jīng)較小了。
(轉(zhuǎn)自微信公眾號:計算廣告)