揭秘Facebook增長引擎——深度學習推薦系統

陳曉猛

2020-05-20

推薦系統領域是深度學習落地最充分,產生商業價值最大的應用領域之一。一些最前沿的研究成果大多來自業界巨頭的實踐。從Facebook 2014年提出的GBDT+LR組合模型引領特征工程模型化的方向開始,業界迎來了深度學習推薦系統應用的浪潮。

本文將由簡入深,細致講解Facebook的深度學習推薦系統。


本文內容節選自《深度學習推薦系統》一書。深度學習在推薦系統領域掀起了一場技術革命,本書是一本致力于提高一線算法工程師們工業級推薦系統實踐能力的技術干貨。

2014年,Facebook發表了廣告推薦系統論文Practical Lessons from Predicting Clicks on Ads at Facebook[1],提出了經典的GBDT+LR的CTR模型結構。嚴格意義上講,GBDT+LR的模型結構不屬于深度學習的范疇,但在當時,利用GBDT模型進行特征的自動組合和篩選,開啟了特征工程模型化、自動化的新階段。

從那時起,諸如Deep Crossing、Embedding等的深度學習手段被應用在特征工程上,并逐漸過渡到全深度學習的網絡。從某種意義上講,Facebook基于GBDT+LR的廣告推薦系統成了連接傳統機器學習推薦系統時代和深度學習推薦系統時代的橋梁。此外,其在2014年就采用的在線學習、在線數據整合、負樣本降采樣等技術至今仍具有極強的工程意義。

2019年,Facebook又發布了最新的深度學習模型DLRM[2](Deep Learning Recommender Model),模型采用經典的深度學習模型架構,基于CPU+GPU的訓練平臺完成模型訓練,是業界經典的深度學習推薦系統嘗試。

本節先介紹Facebook基于GBDT+LR組合模型的推薦系統實現,再深入到DLRM的模型細節和實現中,一窺社交領域巨頭企業推薦系統的風采。

推薦系統應用場景

Facebook廣告推薦系統的應用場景是一個標準的CTR預估場景,系統輸入用戶(User)、廣告(Ad)、上下文(Context)的相關特征,預測CTR,進而利用CTR進行廣告排序和推薦。需要強調的是:Facebook廣告系統的其他模塊需要利用CTR計算廣告出價、投資回報率(Return on Investment,ROI)等預估值,因此CTR模型的預估值應是一個具有物理意義的精準的CTR,而不是僅僅輸出廣告排序的高低關系(這一點是計算廣告系統與推薦系統關鍵的不同之處)。Facebook也特別介紹了CTR校正的方法,用于在CTR預估模型輸出值與真實值有偏離時進行校正。

以GBDT+LR組合模型為基礎的CTR預估模型

簡而言之,Facebook的CTR預估模型采用了GBDT+LR的模型結構,通過GBDT自動進行特征篩選和組合,生成新的離散型特征向量,再把該特征向量當作LR模型的輸入,預測CTR。

其中,使用GBDT構建特征工程和利用LR預測CTR兩步是采用相同的優化目標獨立訓練的。所以不存在如何將LR的梯度回傳到GBDT這類復雜的訓練問題,這樣的做法也符合Facebook一貫的實用主義的風格。

在引入GBDT+LR的模型后,相比單純的LR和GBDT,提升效果非常顯著。從下表可以看出,混合模型比單純的LR或GBDT模型在損失(Loss)上減少了3%左右。

GBDT+LR模型與其他模型的效果對比

在模型的實際應用中,超參數的調節過程是影響效果的重要環節。在GBDT+LR組合模型中,為了確定最優的GBDT子樹規模,Facebook給出了子樹規模與模型損失的關系曲線。

GBDT子樹規模與模型損失的關系曲線可以看出,在規模超過500棵子樹后,增加子樹規模對于損失下降的貢獻微乎其微。特別是最后1000棵子樹僅貢獻了0.1%的損失下降??梢哉f,繼續增加模型復雜性帶來的收益幾乎可以忽略不計,最終Facebook在實際應用中選擇了600作為子樹規模。囿于Facebook巨大的數據量及GBDT較難實施并行化的特點,Facebook的工程師在實際應用中采用了“GBDT部分幾天更新一次,LR部分準實時更新”的模型更新策略,兼顧模型的實時性和復雜度。

實時數據流架構

為了實現模型的準實時訓練和特征的準實時更新,Facebook基于Scribe(由Facebook開發并開源的日志收集系統)構建了實時數據流架構,被稱為online data joiner模塊(在線數據整合),該模塊與Facebook推薦系統其他模塊的關系如下。

Facebook的online data joiner與其他模塊的關系該模塊最重要的作用是準實時地把來自不同數據流的數據整合起來,形成訓練樣本,并最終與點擊數據進行整合,形成完整的有標簽樣本。在整個過程中,最應該注意的有以下三點。

1.waiting window(數據等待窗口)的設定

waiting window指的是在曝光(impression)發生后,要等待多久才能夠判定一個曝光行為是否產生了對應的點擊。如果waiting window過大,則數據實時性會受影響;如果waiting window過小,則會有一部分點擊數據來不及與曝光數據進行聯結,導致樣本CTR與真實值不符。這是一個工程調優的問題,需要有針對性地找到與實際業務相匹配的waiting window。除此之外,少量的點擊數據遺漏是不可避免的,這就要求數據平臺能夠階段性地對所有數據進行全量重新處理,避免流處理平臺產生的誤差積累。

2.分布式架構與全局統一的action id(行為id)

為了實現分布式架構下曝光記錄和點擊記錄的整合,Facebook除了為每個行為建立全局統一的request id(請求id),還建立了HashQueue(哈希隊列)用于緩存曝光記錄。在HashQueue中的曝光記錄,如果在等待窗口過期時還沒有匹配到點擊,就會被當作負樣本。Facebook使用Scribe框架實現了這一過程,更多公司使用Kafka完成大數據緩存,使用Flink、Spark Streaming等流計算框架完成后續的實時計算。

3.數據流保護機制

Facebook專門提到了online data joiner的保護機制,因為一旦data joiner由于某些異常而失效(如點擊數據流由于action id的Bug無法與曝光數據流進行正確聯結),所有的樣本都會成為負樣本。由于模型實時進行訓練和服務,模型準確度將立刻受到錯誤樣本數據的影響,進而直接影響廣告投放和公司利潤,后果是非常嚴重的。為此,Facebook專門設立了異常檢測機制,一旦發現實時樣本流的數據分布發生變化,將立即切斷在線學習的過程,防止預測模型受到影響。

降采樣和模型校正

為了控制數據規模,降低訓練開銷,Facebook實踐了兩種降采樣的方法——uniform subsampling(均勻采樣)和 negative down sampling(負樣本降采樣,以下簡稱負采樣)。均勻采樣是對所有樣本進行無差別的隨機抽樣,為選取最優的采樣頻率,Facebook試驗了1%、10%、50%、100%四個采樣頻率,圖8-3比較了不同采樣頻率下訓練出的模型的損失。

不同采樣頻率下的模型損失可以看到,當采樣頻率為10%時,相比全量數據訓練的模型(最右側100%的柱狀圖),模型損失僅上升了1%,而當采樣頻率降低到1%時,模型損失大幅上升了9%左右。因此,10%的采樣頻率是一個比較合適的平衡工程消耗和理論最優的選擇。另一種方法負采樣則保留全量正樣本,對負樣本進行降采樣。除了提高訓練效率,負采樣還直接解決了正負樣本不均衡的問題,Facebook經驗性地選擇了從0.0001到0.1的負采樣頻率,試驗效果如下。

不同負采樣頻率下的模型損失可以看到,當負采樣頻率在0.0250時,模型損失不僅小于基于更低采樣頻率訓練出來的模型,居然也小于負采樣頻率在0.1時訓練出來的模型。雖然Facebook在論文中沒有做出進一步的解釋,但最可能的原因是通過解決數據不均衡問題帶來的效果提升。在實際應用中,Facebook采用了0.0250的負采樣頻率。負采樣帶來的問題是CTR預估值的漂移,假設真實CTR是0.1%,進行0.01的負采樣之后,CTR將會攀升到10%左右。為了進行準確的競價及ROI預估,CTR預估模型是要提供準確的、有物理意義的CTR值的,因此在進行負采樣后需要進行CTR的校正,使CTR模型的預估值的期望回到0.1%。校正的公式如下。

其中q是校正后的CTR,p是模型的預估CTR,w是負采樣頻率。通過負采樣計算CTR的過程并不復雜,有興趣的讀者可以根據負采樣的過程手動推導上面的式子。

Facebook GBDT+LR組合模型的工程實踐

Facebook基于GBDT+LR組合模型實現的廣告推薦系統雖然已經是2014年的工作,但我們仍能從中吸取不少模型改造和工程實現的經驗,總結來講最值得學習的有下面三點:

1.特征工程模型化

2014年,在很多從業者還在通過調參經驗嘗試各種特征組合的時候,Facebook利用模型進行特征自動組合和篩選是相當創新的思路,也幾乎是從那時起,各種深度學習和Embedding的思想開始爆發,發揚著特征工程模型化的思路。

2.模型復雜性和實效性的權衡

對GBDT和LR采用不同的更新頻率是非常工程化且有價值的實踐經驗,也是對組合模型各部分優點最大化的解決方案。

3.有想法要用數據驗證

在工作中,我們往往有很多直覺上的結論,比如數據和模型實時性的影響有多大,GBDT應該設置多少棵子樹,到底用負采樣還是隨機采樣。針對這些問題,Facebook告訴我們用數據說話,無論是多么小的一個選擇,都應該用數據支撐,這才是一位工程師嚴謹的工作態度。

Facebook的深度學習模型DLRM

時隔5年,Facebook于2019年再次公布了其推薦系統深度學習模型DLRM(Deep Learning Recommender Model),相比GBDT+LR,DLRM是一次徹底的應用深度學習模型的嘗試。接下來將介紹DLRM的模型結構、訓練方法和效果評估。

DLRM的模型型各層的作用如下。

DLRM的模型結構特征工程:所有特征被分為兩類:一類是將類別、id類特征用one-hot編碼生成的稀疏特征(sparse features);另一類是數值型連續特征(dense features)。

Embedding層:每個類別型特征轉換成one-hot向量后,用Embedding層將其轉換成維度為n的Embedding向量。也就是說,將稀疏特征轉換成Embedding向量。而年齡、收入等連續型特征將被連接(concat)成一個特征向量,輸入圖中黃色的MLP中,被轉化成同樣維度為n的向量。至此,無論是類別型稀疏特征,還是連續型特征組成的特征向量,在經過Embedding層后,都被轉換成了n維的Embedding向量。

神經網絡層(NNs層):Embedding層之上是由三角形代表的神經網絡層。也就是說,得到n維的Embedding 向量后,每類Embedding還有可能進一步通過神經網絡層做轉換。但這個過程是有選擇性的,根據調參和性能評估的情況來決定是否引入神經網絡層進行進一步的特征處理。

特征交互層(interactions層):這一層會將之前的Embedding兩兩做內積,再與之前連續型特征對應的Embedding連接,輸入后續的MLP。所以這一步其實與3.5節介紹的PNN一樣,目的是讓特征之間做充分的交叉,組合之后,再進入上層MLP做最終的目標擬合。目標擬合層:結構圖中最上層的藍色三角代表了另一個全連接多層神經網絡,在最后一層使用 sigmoid函數給出最終的點擊率預估,這也是非常標準的深度學習模型輸出層的設置。從DLRM的模型結構中可以看出,模型結構并不特別復雜,也沒有加入注意力機制、序列模型、強化學習等模型思路,是一個非常標準的工業界深度學習推薦模型。這與Facebook務實的技術風格相關,也說明在海量數據的背景下,簡單的模型結構就可以發揮不俗的作用。

DLRM模型并行訓練方法

作為一篇來自工業界的論文,模型的實際訓練方法往往可以讓業界同行收益頗多。Facebook的數據量之大,單節點的模型訓練必然無法快速完成訓練任務,因此模型的并行訓練就是必須采用的解決方法。簡單來說,DLRM融合使用了模型并行和數據并行的方法,對Embedding部分采用了模型并行,對MLP部分采用了數據并行。Embedding部分采用模型并行的目的是減輕大量Embedding層參數帶來的內存瓶頸問題。MLP部分采用數據并行可以并行進行前向和反向傳播。其中,Embedding做模型并行訓練指的是在一個device(設備)或者計算節點上,僅保存一部分Embedding層參數,每個設備進行并行mini batch梯度更新時,僅更新自己節點上的部分Embedding層參數。MLP層和特征交互層進行數據并行訓練指的是每個設備上已經有了全部模型參數,每個設備利用部分數據計算梯度,再利用全量規約(AllReduce)的方法匯總所有梯度進行參數更新。

DLRM模型的效果

DLRM的訓練是在Facebook自研的AI平臺Big Basin platform上進行的,平臺的具體配置是Dual Socket Intel Xeon 6138 [email protected] +8個Nvidia Tesla V100 16GB GPUs。

Facebook Big Basin AI硬件平臺很明顯,Big Basin platform是一個高性能的CPU+GPU的組合平臺,這節約了大量網絡通信的成本,但在擴展性方面沒有Parameter Server靈活。在性能的對比上,DLRM選擇了谷歌2017年提出的DCN作為baseline(性能基準)。通過對比DLRM和DCN可以發現,DLRM和DCN的主要區別在于特征交叉方式的不同,DLRM采用了不同特征域兩兩內積的交叉方式,而DCN采用了比較復雜的cross layer的特征交叉方式。以Criteo Ad Kaggle data為測試集,二者的性能對比下。

DLRM與DCN性能對比可以看出,DLRM在準確率指標上稍勝一籌。當然,模型的性能與數據集的選擇、參數的調優都有很大關系,而且DLRM在Adagrad訓練方式下的優勢已經微乎其微,這里的性能評估讀者僅做參考即可。

Facebook深度學習推薦系統總結

無論是GBDT+LR組合模型,還是最新的DLRM模型,Facebook的技術選擇總給人非常工業化的感覺,簡單直接,以解決問題為主。雖然從學術角度看模型的創新性不足,但業界的從業者卻能從中借鑒非常多的工程實踐經驗。DLRM模型是非常標準且實用的深度學習推薦模型。如果公司剛開始從傳統機器學習模型轉到深度學習模型,則完全可以采用DLRM作為標準實現。而GBDT+LR組合模型傳遞出的特征工程模型化及模型組合的思路,對推薦系統技術發展有更深遠的影響。

讀者評論

相關博文

  • 社區使用反饋專區

    陳曉猛 2016-10-04

    尊敬的博文視點用戶您好: 歡迎您訪問本站,您在本站點訪問過程中遇到任何問題,均可以在本頁留言,我們會根據您的意見和建議,對網站進行不斷的優化和改進,給您帶來更好的訪問體驗! 同時,您被采納的意見和建議,管理員也會贈送您相應的積分...

    陳曉猛 2016-10-04
    3889 643 3 6
  • 迎戰“雙12”!《Unity3D實戰核心技術詳解》獨家預售開啟!

    陳曉猛 2016-12-05

    時隔一周,讓大家時刻掛念的《Unity3D實戰核心技術詳解》終于開放預售啦! 這本書不僅滿足了很多年輕人的學習欲望,并且與實際開發相結合,能夠解決工作中真實遇到的問題。預售期間優惠多多,實在不容錯過! Unity 3D實戰核心技術詳解 ...

    陳曉猛 2016-12-05
    2423 35 0 1
  • czk 2017-07-29
    3410 24 0 1
十一选五开奖结果云