千億特徵流式學習在大規模推薦排序場景的應用
摘要:2017雲棲大會機器學習平台PAI專場,阿里巴巴高級技術專家陳緒帶來千億特徵流式學習在大規模推薦排序場景的應用的演講。主要從電商個性化推薦開始談起,進而描述了技術挑戰和PAI解決方案,重點分享了鯤鵬框架和演算法調優,最好作了簡要總結。
以下是精彩內容整理:
電商個性化推薦
淘寶、天貓在無線、PC端各個場景的商品個性化推薦大家都很熟悉,這些展示都是由個性化推薦排序演算法決定的。根據每個用戶不同的興趣,做到千人千面的個性化展示,比如手淘首頁的猜你喜歡,它是阿里電商最大的推薦場景,還有人群導購、看了又看、買了又買等頁面,背後都是由機器學習演算法來規劃商品個性化排序。
點擊率預估演算法
商品的個性化排序一般都轉化成點擊率預估問題,給定一個當前用戶,並且給定用戶相關上下文的一些特徵,來預測對於一個特定的商品的點擊概率有多大,我們希望用戶點擊率越高的商品排在前面,點擊或者不點擊是二分類問題,通過採集用戶商品各種維度特徵進行建模,最終訓練排序模型。
點擊率預估演算法是經典的研究課題,很早以前就有邏輯回歸:Logistic Regression(LBFGS、FTRL)線性演算法,還有決策樹GBDT、XGBOOST提供非線性分類能力,近幾年逐漸往更深層次發展研究,比如Factorization Machine、DNN、Wide&Deep。
挑戰和解決方案
具體到阿里電商場景,我們也有特定的問題和挑戰。
阿里電商推薦的業務特點:最大場景達到百億級別的PV/天,訓練樣本很大,億級別用戶維度和億級別商品維度使我們做特徵工程交叉組合時非常容易形成爆炸式天文數字的特徵維度,還有快速實時變化的用戶興趣和熱門商品。
傳統的點擊率預估演算法和平台的挑戰是特徵規模有限(10億~100億)難以刻畫全網用戶行為和商品特徵,熱門商品每天也在快速變化,離線訓練難以捕捉用戶短期內興趣模式。
基於以上問題,我們做了大量演算法框架和平台優化,在PAI平台上開發千億特徵流式學習這樣的機器學習框架。
阿里Parameter Server (鯤鵬,SIGKDD17)優化
PS支撐阿里集團最大規模的分散式演算法訓練,我們從2014年開始研發,到目前為止服務廣告、推薦、搜索等多個重要場景,支撐PAI平台大規模演算法,Owlqn-LR:300億特徵、1千億樣本,LDA:1萬億word - topic矩陣等,我們也逐步向公有雲用戶開放演算法訓練服務。
PS框架面臨的挑戰有很多,包括參數規模和樣本規模巨大,為了能夠更精確的學習商品特徵,我們需要將規模提升到幾千億甚至上萬億級別;模型更新間隔短(分鐘級別)才能儘快捕捉線上用戶變化信息特徵;演算法效果穩定性要求高,在鯤鵬基礎上做了大量針對性功能和優化來適應新型演算法場景。
PS框架具備以下特點:
l? 邁向千億特徵規模
200~400台Server,平均35GB內存。
l? 特徵集合高頻率變化
使用定製的ArrayHashMap存儲特徵權重向量,去除特徵ID化環節,插入、迭代性能較std::unordered_map提升300%。我們以高頻率向模型中插入新特徵到模型中,也會以非常高的頻率剔除過期特徵,在工程實踐上做了大量改進,能夠適應高頻率特徵集合的高頻率變化。
l? 通信性能優化
當並行server數量非常高時,我們做了大量通信性能優化,使得我們對大量特徵樣本量實時訓練更新,Sparse、Dense參數合併通信,通信鏈路無鎖。
我們將以前離線batch方式轉換成實時在線訓練,由全量樣本訓練向流式增量訓練(Online Learning)演化,由訓練Job轉化為不間斷訓練Service,整個過程中內存數據不落盤,實時感知新數據分區觸發訓練,將訓練樣本讀到訓練進程中,將更新後的模型實時推到在線預測服務中去。同時,框架還支持靈活控制實時訓練觸發間隔,如果某些場景需要高頻模型,最高可以精確到分鐘級觸發。
我們在多數據源支持統一checkpoint、Exactly Once Failover,所有數據保證嚴格訓練一遍;支持單節點非同步failover,在訓練過程中,如果有個別進程crash,整個進程不需要打斷,可以繼續不受影響繼續更新模型;我們也可以靈活斷點調參,結合流式預估、流式評價運算元,加速調參過程。
千億特徵流式演算法體系
我們在鯤鵬平台上打造了一系列千億特徵流式學習系列演算法。包括XFtrl是線性模型+千億級寬特徵;XSVD是千億規模Embedding向量召回模型,融合了許多矩陣演算法;XNN也是千億特徵DNN演算法。我們具備了從線性到淺層Embedding再到深層DNN網路的演算法建設,實際上涵蓋了個性化推薦在演算法場景下的粗排召回模型以及精排的ranking模型,在平台上都可以支持。
我們對於參數更新模式進行了相應改進,不間斷實時模型更新演算法優化(XFtrl為例),比如在樣本量累積到很大時很容易遇到數值穩定性問題和參數抖動問題,我們做了動態梯度平均策略和正則策略來彌補甚至消除動態抖動影響;此外,我們需要把特徵進行高頻增刪,我們通過特徵權重動態衰減策略及時從模型中剔除,保證模型始終是正向更新。
我們也進行了抽象運算元(Operator)體系,比如參數Optimizer,支持稀疏梯度矩陣,減少計算量;參數Initializer,支持Lazy initialization,一直到參數第一次出現時我們才會進行隨機初始化;我們還有很多的模型評估operator。
模型評估範式
常規模型評價方式是準備一個驗證數據集,每次訓練完後在模型上計算Loss、AUC等指標,這樣會帶來流式場景下的問題:用戶點擊行為和商品快速變化;靜態測試集無法反饋模型動態效果。
流式模型評估:對「未來」數據實時評估當前模型準度:AUC、PCOPC、MAE、...,提高了演算法工程師對離線調參的效率。
總結
PAI平台鯤鵬框架在手淘、天貓多個大規模推薦場景上線,單場景1天100億+訓練樣本,累積2000億+特徵;平台訓練速度達到500萬Sample/s迭代性能,模型持續增量在線訓練超過60天;有了大規模特徵和實時應用更新,使引導點擊率和客單價顯著提升。
我們在千億特徵流式學習模式下訓練框架和實現演算法的革新,PAI平台鯤鵬框架是推薦、廣告、搜索排序演算法的利器,而且我們以演算法組件形式即將通過PAI平台提供公有雲服務。
原文
推薦閱讀:
※Unity3D回合制手游《星辰奇緣》性能測評深度分析
※Unity匿名函數的堆內存優化
※一個採用GC的原生程序語言有沒有可能性能上超越非GC的原生程序語言?
※寫工業級別代碼是怎樣一種體驗?
※一段簡單文件IO的C程序,為什麼我的優化反而更慢?