資料介紹
Facebook 使用機(jī)器學(xué)習(xí)和排序模型給所有用戶帶來最佳體驗(yàn),例如發(fā)送什么通知,在你的消息推送中放入什么文章,以及對(duì)于你想關(guān)注的人提些什么建議。高質(zhì)量的機(jī)器學(xué)習(xí)模型對(duì)于找出最相關(guān)的內(nèi)容來說很重要。我們觀察了大量實(shí)時(shí)信號(hào)以制定最佳排序;例如,在過濾通知的使用情況中,我們觀察某人是否已點(diǎn)擊相似的通知,或者對(duì)應(yīng)通知的文章獲得了多少贊。由于每執(zhí)行一次就會(huì)生成一個(gè)新通知推送,所以我們想要盡快返回發(fā)送通知的決策。
更復(fù)雜的模型有助于提高預(yù)測(cè)的精度,提供更相關(guān)的內(nèi)容。但更復(fù)雜的模型需要更長的 CPU 周期(CPU cycles),返回結(jié)果的時(shí)間也更長。考慮到這些限制,我們做不到對(duì)所有可能的候選模型進(jìn)行評(píng)估。然而,通過提升模型效率,我們可以做到在相同的時(shí)間幀運(yùn)用相同的計(jì)算資源評(píng)價(jià)更多的候選模型(inventory)。
在本文中,我們比較了梯度提升決策樹(gradient-boosted decision tree ,簡稱GBDT)這一類預(yù)測(cè)模型的不同實(shí)現(xiàn),并描述了能產(chǎn)生更高效評(píng)估的 C++ 多方面改進(jìn)。
決策樹模型
決策樹被普遍用作預(yù)測(cè)模型,該算法將關(guān)于對(duì)象的特征觀察值映射到對(duì)象類的目標(biāo)值。由于其非線性和快速求值的特點(diǎn),它成為了機(jī)器學(xué)習(xí)、數(shù)據(jù)分析和統(tǒng)計(jì)學(xué)之中最常見的預(yù)測(cè)模型方法之一。在這些樹狀結(jié)構(gòu)中,葉結(jié)點(diǎn)表征分類標(biāo)簽,而有向邊表征產(chǎn)生這些分類標(biāo)簽的特征連接。
決策樹非常強(qiáng)大,但是訓(xùn)練數(shù)據(jù)中的小變動(dòng)可以演化為決策樹中的大變化。這可通過使用一項(xiàng)被稱為梯度提升(gradient boosting)的技術(shù)來補(bǔ)救。即,為錯(cuò)誤分類的訓(xùn)練實(shí)例提升權(quán)重,從而形成一個(gè)新的決策樹。接著對(duì)這一步驟進(jìn)行連續(xù)重復(fù)以獲得新的決策樹。最后的分值(scores)是決策樹上每個(gè)葉節(jié)點(diǎn)分值的加權(quán)總和。
模型通常很少更新,且訓(xùn)練復(fù)雜模型需要花費(fèi)數(shù)小時(shí)。然而,在 Facebook 的大規(guī)模數(shù)據(jù)上,我們想要更頻繁地更新模型,即按照毫秒間隔依次運(yùn)行它們。Facebook 的很多后端服務(wù)是用 C++ 寫的,因此我們利用這一語言的一些屬性做了些改善,以產(chǎn)生只需要更短 CPU 周期進(jìn)行求值的高效模型。
下圖是一個(gè)簡單的決策樹,它包含以下特征:
今天某人 A 點(diǎn)擊通知的數(shù)量(特征 F[0])
對(duì)應(yīng)通知的文章點(diǎn)贊數(shù)量(特征 F[1])
某人 A 點(diǎn)擊通知的總數(shù)量(特征 F[2])
在不同的結(jié)點(diǎn),我們查看了上述特征的值,并遍歷整棵決策樹以獲取通知點(diǎn)擊的概率。
平面樹(Flat tree)的實(shí)現(xiàn)
決策樹模型的樸素實(shí)現(xiàn)是通過一個(gè)帶有指針的簡單二叉樹而完成的。然而,結(jié)點(diǎn)并不需要連續(xù)地存儲(chǔ)于內(nèi)存之中,因?yàn)檫@樣二叉樹并非很有效。另一方面,決策樹通常是完整的二叉樹(即二叉樹的每個(gè)結(jié)點(diǎn)一定存在零值或兩棵子樹),它通過使用向量而壓縮存儲(chǔ)。指針并不需要空間,而每一結(jié)點(diǎn)的父結(jié)點(diǎn)和子結(jié)點(diǎn)可通過數(shù)組索引算法查看。我們將用這一實(shí)現(xiàn)對(duì)比這一章節(jié)的實(shí)驗(yàn)。
編譯樹(Compiled tree)的實(shí)現(xiàn)
每一個(gè)二叉樹都能由一個(gè)復(fù)雜的三元表達(dá)式表征,而這個(gè)表達(dá)式能進(jìn)行編譯并鏈接到可直接在服務(wù)中使用的動(dòng)態(tài)庫(DLL)。需要注意的是,我們可以實(shí)時(shí)添加或更新決策樹模型,而不需要重啟服務(wù)。
我們也可以利用 C++ 中的 LIKELY/UNLIKELY 注釋(annotations)。它們是編譯器發(fā)出指令的方向,并且能將分支預(yù)測(cè)更加偏向于跳轉(zhuǎn)指令(jump instruction)「可能」出現(xiàn)的一側(cè)。如果預(yù)測(cè)是對(duì)的,那么就意味著跳轉(zhuǎn)指令將占有 0 個(gè) CPU 周期。我們可以根據(jù)在批量中排序的或離線分析中的真實(shí)樣本計(jì)算分支預(yù)測(cè),這是因?yàn)橛?xùn)練和評(píng)估集的分布不應(yīng)該改變太多。
更復(fù)雜的模型有助于提高預(yù)測(cè)的精度,提供更相關(guān)的內(nèi)容。但更復(fù)雜的模型需要更長的 CPU 周期(CPU cycles),返回結(jié)果的時(shí)間也更長。考慮到這些限制,我們做不到對(duì)所有可能的候選模型進(jìn)行評(píng)估。然而,通過提升模型效率,我們可以做到在相同的時(shí)間幀運(yùn)用相同的計(jì)算資源評(píng)價(jià)更多的候選模型(inventory)。
在本文中,我們比較了梯度提升決策樹(gradient-boosted decision tree ,簡稱GBDT)這一類預(yù)測(cè)模型的不同實(shí)現(xiàn),并描述了能產(chǎn)生更高效評(píng)估的 C++ 多方面改進(jìn)。
決策樹模型
決策樹被普遍用作預(yù)測(cè)模型,該算法將關(guān)于對(duì)象的特征觀察值映射到對(duì)象類的目標(biāo)值。由于其非線性和快速求值的特點(diǎn),它成為了機(jī)器學(xué)習(xí)、數(shù)據(jù)分析和統(tǒng)計(jì)學(xué)之中最常見的預(yù)測(cè)模型方法之一。在這些樹狀結(jié)構(gòu)中,葉結(jié)點(diǎn)表征分類標(biāo)簽,而有向邊表征產(chǎn)生這些分類標(biāo)簽的特征連接。
決策樹非常強(qiáng)大,但是訓(xùn)練數(shù)據(jù)中的小變動(dòng)可以演化為決策樹中的大變化。這可通過使用一項(xiàng)被稱為梯度提升(gradient boosting)的技術(shù)來補(bǔ)救。即,為錯(cuò)誤分類的訓(xùn)練實(shí)例提升權(quán)重,從而形成一個(gè)新的決策樹。接著對(duì)這一步驟進(jìn)行連續(xù)重復(fù)以獲得新的決策樹。最后的分值(scores)是決策樹上每個(gè)葉節(jié)點(diǎn)分值的加權(quán)總和。
模型通常很少更新,且訓(xùn)練復(fù)雜模型需要花費(fèi)數(shù)小時(shí)。然而,在 Facebook 的大規(guī)模數(shù)據(jù)上,我們想要更頻繁地更新模型,即按照毫秒間隔依次運(yùn)行它們。Facebook 的很多后端服務(wù)是用 C++ 寫的,因此我們利用這一語言的一些屬性做了些改善,以產(chǎn)生只需要更短 CPU 周期進(jìn)行求值的高效模型。
下圖是一個(gè)簡單的決策樹,它包含以下特征:
今天某人 A 點(diǎn)擊通知的數(shù)量(特征 F[0])
對(duì)應(yīng)通知的文章點(diǎn)贊數(shù)量(特征 F[1])
某人 A 點(diǎn)擊通知的總數(shù)量(特征 F[2])
在不同的結(jié)點(diǎn),我們查看了上述特征的值,并遍歷整棵決策樹以獲取通知點(diǎn)擊的概率。
平面樹(Flat tree)的實(shí)現(xiàn)
決策樹模型的樸素實(shí)現(xiàn)是通過一個(gè)帶有指針的簡單二叉樹而完成的。然而,結(jié)點(diǎn)并不需要連續(xù)地存儲(chǔ)于內(nèi)存之中,因?yàn)檫@樣二叉樹并非很有效。另一方面,決策樹通常是完整的二叉樹(即二叉樹的每個(gè)結(jié)點(diǎn)一定存在零值或兩棵子樹),它通過使用向量而壓縮存儲(chǔ)。指針并不需要空間,而每一結(jié)點(diǎn)的父結(jié)點(diǎn)和子結(jié)點(diǎn)可通過數(shù)組索引算法查看。我們將用這一實(shí)現(xiàn)對(duì)比這一章節(jié)的實(shí)驗(yàn)。
編譯樹(Compiled tree)的實(shí)現(xiàn)
每一個(gè)二叉樹都能由一個(gè)復(fù)雜的三元表達(dá)式表征,而這個(gè)表達(dá)式能進(jìn)行編譯并鏈接到可直接在服務(wù)中使用的動(dòng)態(tài)庫(DLL)。需要注意的是,我們可以實(shí)時(shí)添加或更新決策樹模型,而不需要重啟服務(wù)。
我們也可以利用 C++ 中的 LIKELY/UNLIKELY 注釋(annotations)。它們是編譯器發(fā)出指令的方向,并且能將分支預(yù)測(cè)更加偏向于跳轉(zhuǎn)指令(jump instruction)「可能」出現(xiàn)的一側(cè)。如果預(yù)測(cè)是對(duì)的,那么就意味著跳轉(zhuǎn)指令將占有 0 個(gè) CPU 周期。我們可以根據(jù)在批量中排序的或離線分析中的真實(shí)樣本計(jì)算分支預(yù)測(cè),這是因?yàn)橛?xùn)練和評(píng)估集的分布不應(yīng)該改變太多。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 決策樹引擎解決方案
- 基于遺傳優(yōu)化決策樹的建筑能耗預(yù)測(cè)模型 6次下載
- 基于非均衡數(shù)據(jù)分類的猶豫模糊決策樹 5次下載
- 可提高心電信號(hào)分類識(shí)別準(zhǔn)確率的模糊決策樹 14次下載
- 如何使用最優(yōu)二叉決策樹分類模型進(jìn)行奶牛運(yùn)動(dòng)行為的識(shí)別 0次下載
- 基于決策樹的在軌衛(wèi)星故障診斷知識(shí)挖掘 0次下載
- 決策樹的介紹 0次下載
- 基于決策樹學(xué)習(xí)的智能機(jī)器人控制方法 15次下載
- 改進(jìn)決策樹算法的應(yīng)用研究
- 電子稱重儀表決策樹建模研究 24次下載
- 基于決策樹的數(shù)據(jù)挖掘算法應(yīng)用研究 0次下載
- 基于決策樹與相異度的離群數(shù)據(jù)挖掘方法
- 基于屬性相似度的決策樹算法
- 一個(gè)基于粗集的決策樹規(guī)則提取算法
- 決策樹技術(shù)在汽車銷售中的應(yīng)用
- 決策樹:技術(shù)全解與案例實(shí)戰(zhàn) 954次閱讀
- 一種基于決策樹的飛機(jī)級(jí)故障診斷建模方法研究 918次閱讀
- 機(jī)器學(xué)習(xí)之決策樹生成詳解 1.8w次閱讀
- 機(jī)器學(xué)習(xí)中常用的決策樹算法技術(shù)解析 1236次閱讀
- 梯度提升方法(Gradient Boosting)算法案例 1.3w次閱讀
- 決策樹和隨機(jī)森林模型 7868次閱讀
- 什么是決策樹?決策樹算法思考總結(jié) 1.1w次閱讀
- 基于決策樹算法的電能表故障預(yù)測(cè)方法 1695次閱讀
- 決策樹的原理和決策樹構(gòu)建的準(zhǔn)備工作,機(jī)器學(xué)習(xí)決策樹的原理 5851次閱讀
- 結(jié)合深度神經(jīng)網(wǎng)絡(luò)和決策樹的完美方案 9397次閱讀
- 數(shù)據(jù)挖掘算法:決策樹算法如何學(xué)習(xí)及分裂剪枝 5628次閱讀
- 構(gòu)建一個(gè)決策樹并查看它如何進(jìn)行預(yù)測(cè) 1.4w次閱讀
- 大神教你怎么用Python抓取婚戀網(wǎng)用戶數(shù)據(jù),用決策樹生成自己擇偶觀 4084次閱讀
- 機(jī)器學(xué)習(xí):決策樹--python 1553次閱讀
- 解讀決策樹與隨機(jī)森林模型的概念 3618次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 11次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5DIY動(dòng)手組裝LED電子顯示屏
- 0.98 MB | 3次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)PM2.5檢測(cè)系統(tǒng)程序
- 0.83 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537797次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191186次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多