如何解决大规模机器学习的三大痛点?
阿里妹導(dǎo)讀:阿里巴巴電商平臺(tái)有上億的用戶和產(chǎn)品,每天產(chǎn)生百億規(guī)模的用戶反饋數(shù)據(jù)。比如淘寶首頁(yè)的猜你喜歡場(chǎng)景,每天就有100億規(guī)模的用戶行為數(shù)據(jù)。如此超大規(guī)模的訓(xùn)練數(shù)據(jù),給分布式機(jī)器學(xué)習(xí)帶來(lái)了巨大的挑戰(zhàn),也引入了有趣的研究問(wèn)題。
2017年,阿里巴巴推薦算法團(tuán)隊(duì)和計(jì)算平臺(tái)PAI團(tuán)隊(duì)合作打造了eXtreme Parameter Sever (XPS) 機(jī)器學(xué)習(xí)平臺(tái),其中eXtreme寓意為“追求極致”, 體現(xiàn)我們希望設(shè)計(jì)具有極致性能和效果的機(jī)器學(xué)習(xí)平臺(tái)的愿景。XPS平臺(tái)已經(jīng)廣泛全流量運(yùn)行在手機(jī)淘寶的猜你喜歡、生活研究所、飛豬旅行和天貓推薦等大數(shù)據(jù)場(chǎng)景。
2017年雙11購(gòu)物狂歡節(jié)當(dāng)天,小時(shí)級(jí)XNN模型在猜你喜歡和天貓推薦場(chǎng)景上線,穩(wěn)定和快速地使用了用戶雙11的實(shí)時(shí)行為信息,顯著提升了雙11當(dāng)天的收入和用戶價(jià)值。在性能上,XPS平臺(tái)上的例行算法,現(xiàn)在每天能輕松處理100億規(guī)模樣本1000億規(guī)模的特征,算法運(yùn)行速度快,容錯(cuò)能力強(qiáng),資源利用率高。本文將對(duì)XPS平臺(tái)的整體結(jié)構(gòu)進(jìn)行介紹,希望通過(guò)這些分享和大家交流我們?cè)诜植际剿惴ㄔO(shè)計(jì)和框架優(yōu)化上的經(jīng)驗(yàn)。
近年來(lái),阿里巴巴個(gè)性化推薦和個(gè)性化搜索給用戶帶來(lái)了很好的體驗(yàn),用戶行為數(shù)量也隨之大幅增長(zhǎng)。特別是移動(dòng)終端的業(yè)務(wù)飛速發(fā)展,用戶和商品兩個(gè)維度都呈現(xiàn)爆發(fā)式增長(zhǎng),用戶和產(chǎn)品狀態(tài)也隨時(shí)間持續(xù)動(dòng)態(tài)變化。在這種動(dòng)態(tài)的超大規(guī)模的數(shù)據(jù)體量下,打造高效的分布式機(jī)器學(xué)習(xí)平臺(tái),精準(zhǔn)預(yù)測(cè)用戶對(duì)產(chǎn)品的點(diǎn)擊率和轉(zhuǎn)化率是非常有價(jià)值的,也是很有挑戰(zhàn)的。
規(guī)模龐大且高頻變化的特征和樣本,給分布式機(jī)器學(xué)習(xí)平臺(tái)的設(shè)計(jì)帶來(lái)的挑戰(zhàn)具體可以歸結(jié)為樣本、特征和分布式規(guī)模三個(gè)方面:
在樣本方面,我們每天面對(duì)的是百億規(guī)模的訓(xùn)練數(shù)據(jù),累計(jì)六個(gè)月的歷史訓(xùn)練數(shù)據(jù)就超過(guò)了萬(wàn)億規(guī)模。顯然,傳統(tǒng)的全量多輪迭代的機(jī)器學(xué)習(xí)算法已經(jīng)不太適合這樣規(guī)模的訓(xùn)練樣本,因?yàn)檫@類算法需要消耗的計(jì)算資源極多,也無(wú)法很好地引入數(shù)據(jù)的時(shí)序性。
在特征方面,大規(guī)模樣本下特征總量輕易超過(guò)千億量級(jí),傳統(tǒng)的特征編號(hào)方法需要消耗極多的機(jī)器資源和耗費(fèi)很長(zhǎng)的計(jì)算時(shí)間來(lái)完成特征編號(hào),而且對(duì)新出現(xiàn)的特征也難以及時(shí)進(jìn)行編號(hào)。從資源消耗和時(shí)間消耗上看,特征序列化編號(hào)方法已經(jīng)是不可承受的步驟。此外,采用類似TensorFlow里通過(guò)string_to_hash_bucket的方法將特征映射到固定范圍的做法,雖然保證固定了tensor的shape,減少了參數(shù)總量,但是在特征總數(shù)巨大的時(shí)候則又引入了大量的哈希沖突,影響了算法效果。
在分布式規(guī)模方面,大規(guī)模特征下給Server的存儲(chǔ)和分布式計(jì)算性能帶來(lái)巨大壓力。舉例來(lái)說(shuō),1萬(wàn)億個(gè)32位float浮點(diǎn)數(shù)就需要3.63TB的存儲(chǔ)空間,再加上需要保留的歷史梯度等,往往需要300到600臺(tái)server才能使各個(gè)進(jìn)程的內(nèi)存占用控制在一個(gè)合理范圍。Server數(shù)成倍增長(zhǎng),導(dǎo)致并行請(qǐng)求數(shù)也線性增長(zhǎng),給通信也帶來(lái)較大壓力。同時(shí),存儲(chǔ)量以及單任務(wù)進(jìn)程數(shù)的增長(zhǎng),也給集群調(diào)度、容錯(cuò)、網(wǎng)絡(luò)、IO帶來(lái)較大的壓力。
面對(duì)這些挑戰(zhàn),XPS平臺(tái)提出了很多創(chuàng)新的技術(shù)來(lái)應(yīng)對(duì),向“極限參數(shù)服務(wù)器”的目標(biāo)前進(jìn)了一步:
在樣本處理問(wèn)題上,我們采用流式學(xué)習(xí)算法為主的算法選型來(lái)解決大規(guī)模樣本問(wèn)題。在流式學(xué)習(xí)下,對(duì)每一批新數(shù)據(jù),直接在當(dāng)前模型上進(jìn)行增量訓(xùn)練,并產(chǎn)出下一個(gè)模型,無(wú)需加載全量數(shù)據(jù)進(jìn)行多輪全量學(xué)習(xí)。流式學(xué)習(xí)算法選型,平衡了數(shù)據(jù)規(guī)模和資源消耗問(wèn)題,更輕量級(jí)地應(yīng)對(duì)了大規(guī)模樣本的問(wèn)題;
在特征處理問(wèn)題上,采用了將特征哈希映射為哈希值的方法替代特征編號(hào)機(jī)制。在節(jié)省內(nèi)存、提升性能的同時(shí),支持了特征的動(dòng)態(tài)稀疏化正則機(jī)制和表示向量維度的動(dòng)態(tài)擴(kuò)張機(jī)制,解決了特征總量過(guò)大的問(wèn)題;
在分布式規(guī)模方面,通過(guò)異步Checkpoint和Exactly Once Failover以及高性能的ArrayHashMap等機(jī)制,加上動(dòng)態(tài)稀疏化正則機(jī)制等特征處理技術(shù),保證了分布式訓(xùn)練的性能,提高了Server的存儲(chǔ)效率。
面對(duì)這些大規(guī)模下的機(jī)器學(xué)習(xí)問(wèn)題,eXtreme Parameter Server在阿里巴巴內(nèi)部應(yīng)運(yùn)而生,針對(duì)性地解決了大規(guī)模樣本和大規(guī)模特征的挑戰(zhàn),并得到了廣泛的應(yīng)用。
XPS在阿里巴巴內(nèi)部的猜你喜歡、天貓、購(gòu)物鏈路、飛豬、生活研究所、阿里媽媽等業(yè)務(wù)場(chǎng)景廣泛應(yīng)用,對(duì)用戶點(diǎn)擊率、線上收入提升、線上用戶價(jià)值提升效果顯著。
下面我們對(duì)XPS平臺(tái)的系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)流程、分布式優(yōu)化、核心算法和算子體系進(jìn)行介紹。
一、系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)流程
1.1 系統(tǒng)結(jié)構(gòu)
XPS平臺(tái)整體結(jié)構(gòu)如下圖所示。在數(shù)據(jù)源上,底層支持OSS File、MaxCompute離線存儲(chǔ)、流式數(shù)據(jù)源Streaming DataHub和Kafka等數(shù)據(jù)源。用戶在MaxCompute上同時(shí)完成離線數(shù)據(jù)處理和XPS算法調(diào)用。集群調(diào)度使用了阿里集團(tuán)的飛天集群調(diào)度,能夠有效避免資源搶占,高效利用計(jì)算資源;在算法層,XPS提供了XNN/XFTRL/XSVD/XGBOOST/FM等算法;在業(yè)務(wù)層,我們支持了推薦、廣告和搜索等業(yè)務(wù)場(chǎng)景。
業(yè)務(wù)方通過(guò)MaxCompute中的SQL進(jìn)行XPS平臺(tái)的算法調(diào)用,配置選擇需要的算法和優(yōu)化算子,能夠快速地完成訓(xùn)練任務(wù)的搭建。預(yù)估服務(wù)會(huì)來(lái)抓取XPS產(chǎn)出的模型,提供給線上做預(yù)估服務(wù)。XPS提供了完善的容錯(cuò)機(jī)制,用戶任務(wù)失敗會(huì)自動(dòng)被重新拉起訓(xùn)練。
1.2 數(shù)據(jù)流程
目前,XPS平臺(tái)在阿里巴巴內(nèi)部建立了完善的數(shù)據(jù)流解決方案,我們與阿里集團(tuán)各個(gè)團(tuán)隊(duì)合作,形成了從訓(xùn)練數(shù)據(jù)生產(chǎn)、特征工程、模型訓(xùn)練、模型評(píng)估、模型部署、模型打分的數(shù)據(jù)流程,XPS整體數(shù)據(jù)處理流程如下圖所示。
數(shù)據(jù)生產(chǎn)、特征工程、模型訓(xùn)練和模型評(píng)估階段,我們采用了阿里的MaxCompute離線存儲(chǔ)系統(tǒng)。平臺(tái)上單個(gè)任務(wù)能夠輕松應(yīng)對(duì)每天百億規(guī)模的訓(xùn)練數(shù)據(jù),千億特征規(guī)模的特征學(xué)習(xí)。通過(guò)支持大規(guī)模的特征,能充分挖掘了數(shù)據(jù)中蘊(yùn)含的數(shù)據(jù)規(guī)律。模型訓(xùn)練采用流式調(diào)度,在流式調(diào)度學(xué)習(xí)下,每次學(xué)習(xí)只需要加載之前存儲(chǔ)的模型,輸入新樣本進(jìn)行訓(xùn)練產(chǎn)出新模型,部署到線上進(jìn)行預(yù)估。整體上,相比全量計(jì)算,流式學(xué)習(xí)節(jié)約了大量計(jì)算資源。
在預(yù)估服務(wù)端,我們采用阿里內(nèi)部的rtp-xps服務(wù),我們將模型轉(zhuǎn)化為tf格式,采用tf-serving來(lái)做預(yù)估服務(wù)。在模型評(píng)估方面,我們基于rtp-xps和MaxCompute研發(fā)了自己的一致性測(cè)試方案和工具,結(jié)合tf-serving可以實(shí)現(xiàn)快速的特征和模型一致性測(cè)試。在特征工程上,我們?cè)陂_(kāi)發(fā)XPS的過(guò)程中,開(kāi)發(fā)了一套高性能的SessionServer服務(wù),SessionServer提取了用戶一段時(shí)間的前文行為數(shù)據(jù),這些數(shù)據(jù)更好地幫助我們理解用戶,也捕捉了用戶的實(shí)時(shí)行為特性。
二、分布式優(yōu)化
為了能夠支持千億規(guī)模特征、萬(wàn)億規(guī)模樣本,我們針對(duì)分布式機(jī)器學(xué)習(xí)場(chǎng)景下的異步通信做了專門優(yōu)化。XPS框架自主研發(fā)了高性能的通信框架,在分布式機(jī)器學(xué)習(xí)場(chǎng)景下的異步通信場(chǎng)景下較傳統(tǒng)的MPI通信性能提升1~2倍。通過(guò)這些優(yōu)化手段,XPS的Server數(shù)能夠橫向擴(kuò)展至800個(gè),完成千億特征萬(wàn)億參數(shù)規(guī)模的機(jī)器學(xué)習(xí)任務(wù)。分布式優(yōu)化技術(shù)具體包括下面幾個(gè)方面:
2.1 特征哈希化
XPS框架支持直接輸入哈希散列計(jì)算后的特征ID,或者對(duì)輸入的字符串特征自動(dòng)計(jì)算哈希值。這樣整個(gè)計(jì)算過(guò)程和輸出模型均只保存哈希值。我們與在線inference服務(wù)打通,輸入樣本、輸出模型以及訓(xùn)練迭代、通信都能直接哈希散列特征ID,在實(shí)際線上的模型訓(xùn)練中,節(jié)省了一半的內(nèi)存,并且性能也提升了1倍。
2.2 動(dòng)態(tài)特征擴(kuò)縮容
在流式學(xué)習(xí)場(chǎng)景,一個(gè)顯著的特點(diǎn)是快速變化的動(dòng)態(tài)特征。每時(shí)每刻都有新的特征加入,也有老的特征被刪除,在引入實(shí)時(shí)的自動(dòng)化會(huì)話特征之后,在較短時(shí)間內(nèi)會(huì)有千億量級(jí)的特征插入和刪除。在這種情形下,需要底層框架能夠支持高頻、動(dòng)態(tài)的特征增刪和通信。XPS框架針對(duì)高頻增刪特征場(chǎng)景做了專門的優(yōu)化,重新設(shè)計(jì)實(shí)現(xiàn)了XPS-ArrayHashMap,采用realloc/mremap方式手工管理內(nèi)存,插入、刪除KV的性能顯著高于std::unordered_map、google::DenseMap等哈希表實(shí)現(xiàn);更為重要的是,XPS-ArrayHashMap支持直接零拷貝通信,消除了序列化、反序列化步驟。
2.3 全局Checkpoint和Exactly Once Failover
萬(wàn)億參數(shù)的總存儲(chǔ)空間可以達(dá)到10TB級(jí)別。在這個(gè)量級(jí)的存儲(chǔ)空間需求下,使用400-800個(gè)server是很常見(jiàn)的需求。而大量的server進(jìn)程和worker進(jìn)程給分布式參數(shù)服務(wù)器帶來(lái)很高的穩(wěn)定性和擴(kuò)展性壓力。針對(duì)這種場(chǎng)景,XPS框架支持了多Worker并行加載、輸出模型,異步Checkpoint和異步Failover等機(jī)制,對(duì)節(jié)點(diǎn)失效能夠零感知自動(dòng)化恢復(fù)。
不同于獨(dú)立的HPC集群,阿里集團(tuán)的飛天集群在并行節(jié)點(diǎn)數(shù)量很大時(shí),遇到個(gè)別節(jié)點(diǎn)故障的概率是比較高的。XPS框架支持完善的Failover功能,在各類流式數(shù)據(jù)源和離線數(shù)據(jù)源上,都支持Exactly Once的Failover,能夠?qū)?shù)據(jù)流和模型都恢復(fù)到節(jié)點(diǎn)失敗的前一刻,從而做到節(jié)點(diǎn)重啟后不丟數(shù)據(jù)和不重復(fù)計(jì)算。
2.4 高并發(fā)通信
XPS框架自主研發(fā)了高性能的通信框架,在分布式機(jī)器學(xué)習(xí)場(chǎng)景下的異步通信場(chǎng)景下較傳統(tǒng)的MPI通信性能提升1~2倍。針對(duì)大規(guī)模的特征場(chǎng)景,XPS的通信層對(duì)稀疏矩陣能夠支持零拷貝收發(fā),并通過(guò)稀疏層、稠密層分別合并通信,減少通信包數(shù)量并降低了通信延遲。通過(guò)這些優(yōu)化手段,使得XPS的Server數(shù)能夠橫向擴(kuò)展至800個(gè),從而能夠支持在訓(xùn)練過(guò)程中存儲(chǔ)千億特征,萬(wàn)億參數(shù)的規(guī)模。
2.5 表示學(xué)習(xí)優(yōu)化
學(xué)習(xí)稀疏特征的表示向量對(duì)稀疏特征的計(jì)算和通信優(yōu)化是最重要的,我們對(duì)稀疏哈希特征下的Embedding矩陣計(jì)算進(jìn)行了深度優(yōu)化,極致地優(yōu)化表示向量學(xué)習(xí)中的性能。具體地,通過(guò)Pull通信操作得到的表示向量組雖然表示一個(gè)稀疏矩陣,但全部表示向量在一個(gè)連續(xù)的緩沖區(qū)中,用這段通信buffer數(shù)據(jù)可直接構(gòu)造ArrayHashMap,不需要內(nèi)存拷貝。通過(guò)這樣的哈希表實(shí)現(xiàn)的稀疏特征索引接口,計(jì)算時(shí)能夠以O(shè)(1)時(shí)間復(fù)雜度訪問(wèn)到通信傳過(guò)來(lái)的各稀疏特征的表示向量,這樣,稀疏表示向量組無(wú)須轉(zhuǎn)換成稠密格式也能被高效地使用,消除了創(chuàng)建中間稠密矩陣的開(kāi)銷,大幅加快了minibatch的Embedding矩陣計(jì)算。
三、核心算法
大規(guī)模的訓(xùn)練樣本,全量多輪迭代算法即使優(yōu)化得再高效,也無(wú)法避免每天需要重新訓(xùn)練全量數(shù)據(jù)的問(wèn)題,顯然這已經(jīng)不適合大數(shù)據(jù)的發(fā)展。流式學(xué)習(xí)算法選型,能夠平衡了數(shù)據(jù)規(guī)模和資源消耗問(wèn)題,輕松應(yīng)對(duì)了大規(guī)模樣本的學(xué)習(xí)問(wèn)題。以流式學(xué)習(xí)算法為核心的分布式機(jī)器學(xué)習(xí)平臺(tái),在算法調(diào)參、算法評(píng)估、算法監(jiān)控等各方面都有很多有趣的優(yōu)化內(nèi)容。
XPS旨在設(shè)計(jì)超大規(guī)模數(shù)據(jù)場(chǎng)景下高效的流式學(xué)習(xí)算法平臺(tái),我們當(dāng)前主要設(shè)計(jì)了線性算法XFTRL、雙線性算法XSVD和深度學(xué)習(xí)算法XNN。
3.1 XFTRL算法
XFTRL算法是對(duì)經(jīng)典線性算法FTRL的擴(kuò)展,是為了解決大規(guī)模數(shù)據(jù)下FTRL的一些缺點(diǎn)而提出的。我們?cè)谑褂肍TRL算法的時(shí)候,遇到了很多數(shù)值問(wèn)題和穩(wěn)定性問(wèn)題,為了解決這些問(wèn)題,我們?cè)O(shè)計(jì)了幾個(gè)優(yōu)化點(diǎn):
第一,引入正則防止奇異權(quán)重。在實(shí)踐中,我們發(fā)現(xiàn)FTRL算法在運(yùn)行中容易發(fā)生權(quán)重突然陡增的現(xiàn)象,通過(guò)在FTRL中引入變量z的二正則,可以有效抑制權(quán)重突然過(guò)大的現(xiàn)象;
第二,引入權(quán)重版本控制和梯度平均讓更新更平滑。我們?cè)诟绿荻葧r(shí),引入了Pull權(quán)重和Push梯度時(shí)的權(quán)重版本差打折機(jī)制,來(lái)減輕分布式下的梯度更新時(shí)worker和server的權(quán)重不一致的問(wèn)題。我們進(jìn)一步對(duì)minibatch下Server端的梯度和做平均,讓模型權(quán)重更新過(guò)程更加平滑;
第三, 引入流式學(xué)習(xí)下的參數(shù)衰減機(jī)制。我們對(duì)FTRL算法中的w, z和n等變量在每次更新完之后,乘以一個(gè)衰減系數(shù),讓整個(gè)模型權(quán)重偏向最新數(shù)據(jù),更好地捕獲數(shù)據(jù)的時(shí)效性。
3.2 XSVD算法
XSVD算法是針對(duì)電商系統(tǒng)中“用戶”、“產(chǎn)品”和“歷史行為產(chǎn)品”三個(gè)核心元素,通過(guò)改進(jìn)SVD++提出的算法。SVD++是推薦領(lǐng)域經(jīng)典的算法,但我們很少看到大規(guī)模數(shù)據(jù)場(chǎng)景下的解決方案。我們的核心動(dòng)機(jī)是解決SVD++算法在萬(wàn)億樣本下的可學(xué)習(xí)性問(wèn)題。在流式學(xué)習(xí)的算法設(shè)計(jì)基調(diào)下,我們需要將SVD算法改造為流式場(chǎng)景下可學(xué)習(xí)的模式。很容易想到,對(duì)SVD++中的反饋產(chǎn)品隱向量累加項(xiàng),只取當(dāng)前行為的前K次行為作為反饋?lái)?xiàng),就可以實(shí)現(xiàn)流式學(xué)習(xí)。其次,為了讓XSVD算法也具有LR算法的表達(dá)能力,我們也將用戶,產(chǎn)品和會(huì)話特征也作為普通的特征,和隱向量一起做聯(lián)合學(xué)習(xí)。此外,為了豐富XSVD的表達(dá)能力,我們還在XSVD中引入阿里內(nèi)部的SLRM算法的“模型特征化”的轉(zhuǎn)化思想,通過(guò)將SLIM算法中需要學(xué)習(xí)的產(chǎn)品序?qū)﹃P(guān)系映射為學(xué)習(xí)產(chǎn)品序?qū)Φ奶卣鳈?quán)重的方式在XSVD中引入了SLIM思想。
3.3 XNN算法
XNN算法是我們提出的深度學(xué)習(xí)算法,其結(jié)構(gòu)圖如下圖所示。XNN主要包含了輸入層(InputLayer)、轉(zhuǎn)化層(TransformLayer)、乘積激活層(MultiActiveLayer)和輸出層(OutputLayer)。
XNN網(wǎng)絡(luò)的InputLayer對(duì)輸入的離散特征、組合特征和連續(xù)特征進(jìn)行處理,每個(gè)one-hot編碼的特征會(huì)進(jìn)行short和long編碼,然后按照特征組進(jìn)行累加(reduce_sum)操作。TransformLayer對(duì)輸入層InputLayer進(jìn)行各種歸一化變化然后推送給MultiActiveLayer,MultiActiveLayer進(jìn)行逐層的矩陣連乘和激活操作,最后頂層被Sigmoid激活算子作用后輸出。XNN的輸入數(shù)據(jù)按照特征組來(lái)組織,以降低在做reduce_sum時(shí)cache miss的代價(jià)。矩陣操作混合使用Eigen矩陣庫(kù)和CBlas矩陣庫(kù),平衡數(shù)據(jù)接口的簡(jiǎn)潔性和計(jì)算的高效性。
相比經(jīng)典的深度學(xué)習(xí)算法,它主要有以下優(yōu)點(diǎn):
動(dòng)態(tài)特征稀疏化正則。我們根據(jù)每個(gè)特征f的動(dòng)態(tài)效用值Utlity(f)實(shí)現(xiàn)特征的動(dòng)態(tài)增加和動(dòng)態(tài)刪除, 當(dāng)Utility(f)大于一定閾值時(shí)創(chuàng)建特征并學(xué)習(xí)特征權(quán)重,小于一定閾值時(shí)擦除特征并刪除特征權(quán)重。動(dòng)態(tài)特征的設(shè)計(jì)思想有效控制了可學(xué)習(xí)的特征總量;
動(dòng)態(tài)表達(dá)維度擴(kuò)張。我們根據(jù)每個(gè)特征f的動(dòng)態(tài)信息量Infomation(f),給不同特征賦予不同的隱向量維度,對(duì)重要特征進(jìn)行高維壓縮,不重要的特征進(jìn)行低維壓縮,提高特征價(jià)值,提升內(nèi)存使用效率。
自動(dòng)化會(huì)話特征建模。我們?cè)谀P椭凶詣?dòng)統(tǒng)計(jì)長(zhǎng)期、中期和短期的會(huì)話特征,把會(huì)話特征加入神經(jīng)網(wǎng)絡(luò)進(jìn)行特征統(tǒng)計(jì)值和隱表達(dá)的聯(lián)合學(xué)習(xí),自動(dòng)化會(huì)話特征思想將在算子設(shè)計(jì)中詳細(xì)介紹。
分頻次正則。我們對(duì)不同頻次的特征采用不同的正則系數(shù),以避免局部過(guò)擬合,最大化測(cè)試準(zhǔn)度。在性能方面,猜你喜歡場(chǎng)景累計(jì)的全量數(shù)據(jù),包含了千億規(guī)模的特征和萬(wàn)億規(guī)模的樣本,單個(gè)樣本平均一百個(gè)特征,在5600核16TB內(nèi)存的資源開(kāi)銷下(和MR任務(wù)混部的普通CPU集群),XNN算法可以在7小時(shí)內(nèi)完成每天增量的百億規(guī)模的流式樣本的學(xué)習(xí)。
XFTRL、XSVD和XNN算法是XPS平臺(tái)比較獨(dú)特的新算法,XPS平臺(tái)還支持以下經(jīng)典算法: XGBOOST、Factorization Machine、OWL-QN、Word2Vector等。未來(lái),我們會(huì)不斷擴(kuò)展XPS的算法集,提出更多的創(chuàng)新算法。我們還將進(jìn)一步研究流式學(xué)習(xí)下更多的工程特性,比如去中心化設(shè)計(jì)、慢機(jī)的智能化處理和通信層機(jī)制優(yōu)化,建立更加完善的流式學(xué)習(xí)機(jī)器學(xué)習(xí)平臺(tái)機(jī)制。
四、算子體系
在開(kāi)發(fā)XPS的過(guò)程中,我們抽象了一些通用的算法思想,逐步形成了XPS的算子體系。使用XPS平臺(tái)的算法用戶設(shè)計(jì)一個(gè)新算法的時(shí)候,設(shè)計(jì)完算法之后,只需要選擇系統(tǒng)中的算子進(jìn)行搭配,就可以完成算法開(kāi)發(fā)。算子體系的設(shè)計(jì),不僅加速了算法構(gòu)建過(guò)程,提升了算法開(kāi)發(fā)、調(diào)試的效率,同時(shí)還增強(qiáng)算法的表達(dá)能力。我們主要設(shè)計(jì)了下面的算子:
4.1 流式評(píng)估算子
針對(duì)XPS的流式訓(xùn)練數(shù)據(jù),我們?cè)O(shè)計(jì)了流式評(píng)估框架,極大地加速了我們的調(diào)參工作,有效地幫助我們進(jìn)行模型正確性效驗(yàn)。流式測(cè)試算子具體思想也十分簡(jiǎn)單,每經(jīng)過(guò)M個(gè)Batch的訓(xùn)練,我們就對(duì)未來(lái)的N個(gè)Batch的數(shù)據(jù)做一次評(píng)估,并觀察預(yù)估數(shù)據(jù)上的AUC, MAE, RMSE, 最大權(quán)值和最小權(quán)重等指標(biāo),同時(shí)密切關(guān)注預(yù)估準(zhǔn)度PCOPC(Predict Click Over Post Click)。這樣的評(píng)估機(jī)制,極大地提升了參數(shù)調(diào)試的效率。同時(shí),在訓(xùn)練結(jié)束時(shí),這些指標(biāo)也反應(yīng)出模型的質(zhì)量,訓(xùn)練框架會(huì)檢查這些參數(shù),只有它們達(dá)到一定的正確性標(biāo)準(zhǔn),才產(chǎn)出模型給預(yù)估服務(wù)模塊進(jìn)行模型部署。
4.2 自動(dòng)化會(huì)話特征算子
在點(diǎn)擊率預(yù)估和轉(zhuǎn)化率預(yù)估場(chǎng)景,用戶在最近一段時(shí)間內(nèi)的會(huì)話特征的重要性是很高的。一般的系統(tǒng)中,用于提供會(huì)話特征的SessionServer能提供的只是一定維度的統(tǒng)計(jì)。我們提出了Automatic Session這種“特征模型化”的設(shè)計(jì)思想。具體而言,模型一邊進(jìn)行數(shù)據(jù)訓(xùn)練,一邊統(tǒng)計(jì)每個(gè)特征在一定的時(shí)間內(nèi)的曝光和點(diǎn)擊,然后計(jì)算每個(gè)特征在不同周期的點(diǎn)擊率,加入到訓(xùn)練特征中其他特征一起訓(xùn)練。Automatic Session的加入,極大地豐富了我們的特征體系。我們提供了長(zhǎng)中短三個(gè)衰減系數(shù)項(xiàng),用戶可以在任何XPS算法中通過(guò)配置這三個(gè)衰減系數(shù)引入自動(dòng)化會(huì)話特征算子,增強(qiáng)模型本身的表達(dá)能力。
4.3 梯度平均算子
頻率過(guò)低的特征的學(xué)習(xí)容易造成模型權(quán)重過(guò)度分散而引入過(guò)擬合,頻率過(guò)高的特征因?yàn)榫植窟^(guò)度更新也容易過(guò)擬合。Server端每次更新權(quán)重的時(shí)候,會(huì)根據(jù)特征頻次對(duì)梯度做不同方式的打折。
4.4 異步更新控制算子
異步更新控制算子根據(jù)Pull模型權(quán)重和Push梯度時(shí)模型權(quán)重的版本差做梯度打折,防止了異步更新的效率損失。版本差低的梯度更新值置信度更高,版本差高的梯度更新值置信度更低。
除了以上算子而外,XPS里面還有激活函數(shù)選擇算子,正則選擇算子,變量衰減算子和安全性檢查算子。
對(duì)于XPS的算法開(kāi)發(fā)用戶,我們?cè)谔峁└咝У姆植际綌U(kuò)展性的基礎(chǔ)上,還抽象了一套面向算法開(kāi)發(fā)者的SDK,對(duì)用戶屏蔽了復(fù)雜的分布式調(diào)度、通信和同步、異步等底層細(xì)節(jié)。算法開(kāi)發(fā)用戶只需要考慮算法總體流程、Worker上計(jì)算梯度的邏輯以及Server上更新模型的邏輯,選擇算法算子體現(xiàn)中的算子,就可以開(kāi)發(fā)出千億特征的算法。一個(gè)XPS新算法的構(gòu)建過(guò)程,一般會(huì)包含下面9個(gè)步驟:
完成新算法Worker端梯度計(jì)算代碼;
選擇加入自動(dòng)化會(huì)話特征,以豐富特征體系;
加入流式測(cè)試算子,方便快速調(diào)參和模型監(jiān)控;
選擇梯度平均函數(shù)保持更新的平滑性;
選擇異步更新控制算子的版本差控制函數(shù)類型;
通過(guò)激活函數(shù)選擇算子來(lái)選擇激活函數(shù);
通過(guò)正則選擇算子來(lái)選擇正則方法;
選擇變量衰減值,激活變量衰減算子,進(jìn)行變量的流式衰減;
選擇安全性檢查算子對(duì)梯度值、更新值和模型最大最小值進(jìn)行安全性檢查和安全性控制。
通過(guò)XPS的算子抽象設(shè)計(jì),算法開(kāi)發(fā)用戶對(duì)算法的優(yōu)化算子有了更多靈活性的選擇。在這種方式下,用戶可以集中精力進(jìn)行算法創(chuàng)新性研究,而忽略不必關(guān)心的技術(shù)細(xì)節(jié)。在阿里集團(tuán)中,XPS平臺(tái)已經(jīng)幫助用戶研發(fā)了SLRM新算法,其他新算法也在研究之中。
經(jīng)過(guò)大量的實(shí)踐,eXtreme Parameter Server平臺(tái)已經(jīng)成為阿里集團(tuán)解決超大規(guī)模樣本和特征學(xué)習(xí)問(wèn)題的新一代分布式機(jī)器學(xué)習(xí)系統(tǒng)。2017年,XPS被廣泛應(yīng)用到阿里集團(tuán)的搜索,廣告和推薦等場(chǎng)景,算法開(kāi)發(fā)用戶數(shù)量也在快速增長(zhǎng)。2018年,我們將在XPS中建設(shè)圖像和NLP算法;我們也正在完善TensorFlow編程模式,將支持用戶使用python編程接入TensorFlow,方便用戶能快速地編寫自己的模型,并且調(diào)用高效的XPS的Sever功能;我們還在整合強(qiáng)化學(xué)習(xí)算法框架和引入阿里基礎(chǔ)特征服務(wù)系統(tǒng)AliBasicFeatureServer。
高速發(fā)展的阿里集團(tuán),未來(lái)將會(huì)遇到更多的大數(shù)據(jù)研究問(wèn)題,這些問(wèn)題很挑戰(zhàn),也很迷人。XPS將會(huì)在極限化參數(shù)服務(wù)器的設(shè)計(jì)理念下堅(jiān)定前行。XPS算法負(fù)責(zé)人范朝盛和工程負(fù)責(zé)人陳緒表示: eXtreme Parameter Sever的目標(biāo)是設(shè)計(jì)追求極致性能和效果的分布式參數(shù)服務(wù)器,我們走出了一步,未來(lái)還有很長(zhǎng)的路要走,我們將努力用AI技術(shù)改變我們的生活。
總結(jié)
以上是生活随笔為你收集整理的如何解决大规模机器学习的三大痛点?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里NIPS 2017论文解读:如何降低
- 下一篇: 双11稳定性负责人叔同讲述:九年双11的