資料介紹
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ù)雜的模型需要更長(zhǎng)的 CPU 周期(CPU cycles),返回結(jié)果的時(shí)間也更長(zhǎng)。考慮到這些限制,我們做不到對(duì)所有可能的候選模型進(jìn)行評(píng)估。然而,通過提升模型效率,我們可以做到在相同的時(shí)間幀運(yùn)用相同的計(jì)算資源評(píng)價(jià)更多的候選模型(inventory)。
在本文中,我們比較了梯度提升決策樹(gradient-boosted decision tree ,簡(jiǎn)稱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++ 寫的,因此我們利用這一語(yǔ)言的一些屬性做了些改善,以產(chǎn)生只需要更短 CPU 周期進(jìn)行求值的高效模型。
下圖是一個(gè)簡(jiǎn)單的決策樹,它包含以下特征:
今天某人 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ǎn)單二叉樹而完成的。然而,結(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)庫(kù)(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ù)雜的模型需要更長(zhǎng)的 CPU 周期(CPU cycles),返回結(jié)果的時(shí)間也更長(zhǎng)。考慮到這些限制,我們做不到對(duì)所有可能的候選模型進(jìn)行評(píng)估。然而,通過提升模型效率,我們可以做到在相同的時(shí)間幀運(yùn)用相同的計(jì)算資源評(píng)價(jià)更多的候選模型(inventory)。
在本文中,我們比較了梯度提升決策樹(gradient-boosted decision tree ,簡(jiǎn)稱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++ 寫的,因此我們利用這一語(yǔ)言的一些屬性做了些改善,以產(chǎn)生只需要更短 CPU 周期進(jìn)行求值的高效模型。
下圖是一個(gè)簡(jiǎn)單的決策樹,它包含以下特征:
今天某人 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ǎn)單二叉樹而完成的。然而,結(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)庫(kù)(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次閱讀
下載排行
本周
- 1Keysight B1500A 半導(dǎo)體器件分析儀用戶手冊(cè)、說明書 (中文)
- 19.00 MB | 4次下載 | 免費(fèi)
- 2使用TL431設(shè)計(jì)電源
- 0.67 MB | 2次下載 | 免費(fèi)
- 3BT134雙向可控硅手冊(cè)
- 1.74 MB | 2次下載 | 1 積分
- 4一種新型高效率的服務(wù)器電源系統(tǒng)
- 0.85 MB | 1次下載 | 1 積分
- 5LabVIEW環(huán)形控件
- 0.01 MB | 1次下載 | 1 積分
- 6PR735,使用UCC28060的600W交錯(cuò)式PFC轉(zhuǎn)換器
- 540.03KB | 1次下載 | 免費(fèi)
- 751單片機(jī)核心板原理圖
- 0.12 MB | 1次下載 | 5 積分
- 8BP2879DB支持調(diào)光調(diào)滅的非隔離低 PF LED 驅(qū)動(dòng)器
- 1.44 MB | 1次下載 | 免費(fèi)
本月
- 1開關(guān)電源設(shè)計(jì)原理手冊(cè)
- 1.83 MB | 52次下載 | 免費(fèi)
- 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊(cè)
- 8.45 MB | 23次下載 | 免費(fèi)
- 3DMT0660數(shù)字萬用表產(chǎn)品說明書
- 0.70 MB | 13次下載 | 免費(fèi)
- 4UC3842/3/4/5電源管理芯片中文手冊(cè)
- 1.75 MB | 12次下載 | 免費(fèi)
- 5ST7789V2單芯片控制器/驅(qū)動(dòng)器英文手冊(cè)
- 3.07 MB | 11次下載 | 1 積分
- 6TPS54202H降壓轉(zhuǎn)換器評(píng)估模塊用戶指南
- 1.02MB | 8次下載 | 免費(fèi)
- 7STM32F101x8/STM32F101xB手冊(cè)
- 1.69 MB | 8次下載 | 1 積分
- 8基于MSP430FR6043的超聲波氣體流量計(jì)快速入門指南
- 2.26MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評(píng)論
查看更多