本文內容節選自《深度學習推薦系統》一書。由美國Roku推薦系統架構負責人、前Hulu高級研究員王喆精心編著,書中包含了這場革命中一系列的主流技術要點:深度學習推薦模型、Embedding技術、推薦系統工程實現、模型評估體系、業界前沿實踐…………深度學習在推薦系統領域掀起了一場技術革命,本書是一本致力於提高一線算法工程師們工業級推薦系統實踐能力的技術乾貨。想要了解關於推薦系統的更多乾貨知識,關注AI科技大本營並在評論區分享你對本文的學習心得,我們將從中選出5條優質評論,各送出《深度學習推薦系統》一本。活動截止時間為5月13日晚8點。
推薦系統領域是深度學習落地最充分,產生商業價值最大的應用領域之一。
一些最前沿的研究成果大多來自業界巨頭的實踐。從Facebook 2014年提出的GBDT+LR組合模型引領特徵工程模型化的方向,到2016年微軟提出Deep Crossing模型,谷歌發布Wide&Deep模型架構,以及YouTube公開其深度學習推薦系統,業界迎來了深度學習推薦系統應用的浪潮。
時至今日,無論是阿里巴巴團隊在商品推薦系統領域的持續創新,還是Airbnb在搜索推薦過程中對深度學習的前沿應用,深度學習已經成了推薦系統領域當之無愧的主流。
對從業者或有志成為推薦工程師的讀者來說,處在這個代碼開源和知識共享的時代無疑是幸運的。我們幾乎可以零距離地通過業界先鋒的論文、博客及技術演講接觸到最前沿的推薦系統應用。
本章的內容將由簡入深,由框架到細節,依次講解Facebook、Airbnb、YouTube及阿里巴巴的深度學習推薦系統。希望讀者能夠在之前章節的知識基礎上,關注業界最前沿的推薦系統應用的技術細節和工程實現,將推薦系統的知識融會貫通,學以致用。
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的模型細節和實現中,一窺社交領域巨頭企業推薦系統的風採。
8.1.1 推薦系統應用場景
Facebook廣告推薦系統的應用場景是一個標準的CTR預估場景,系統輸入用戶(User)、廣告(Ad)、上下文(Context)的相關特徵,預測CTR,進而利用CTR進行廣告排序和推薦。需要強調的是:Facebook廣告系統的其他模塊需要利用CTR計算廣告出價、投資回報率(Return on Investment,ROI)等預估值,因此CTR模型的預估值應是一個具有物理意義的精準的CTR,而不是僅僅輸出廣告排序的高低關係(這一點是計算廣告系統與推薦系統關鍵的不同之處)。Facebook也特別介紹了CTR校正的方法,用於在CTR預估模型輸出值與真實值有偏離時進行校正。
8.1.2 以GBDT+LR組合模型為基礎的CTR預估模型
簡而言之,Facebook的CTR預估模型採用了GBDT+LR的模型結構,通過GBDT自動進行特徵篩選和組合,生成新的離散型特徵向量,再把該特徵向量當作LR模型的輸入,預測CTR。
其中,使用GBDT構建特徵工程和利用LR預測CTR兩步是採用相同的優化目標獨立訓練的。所以不存在如何將LR的梯度回傳到GBDT這類複雜的訓練問題,這樣的做法也符合Facebook一貫的實用主義的風格。
在引入GBDT+LR的模型後,相比單純的LR和GBDT,提升效果非常顯著。從表81中可以看出,混合模型比單純的LR或GBDT模型在損失(Loss)上減少了3%左右。
表8-1 GBDT+LR模型與其他模型的效果對比
在模型的實際應用中,超參數的調節過程是影響效果的重要環節。在GBDT+LR組合模型中,為了確定最優的GBDT子樹規模,Facebook給出了子樹規模與模型損失的關係曲線(如圖81所示)。
圖8-1 GBDT子樹規模與模型損失的關係曲線
可以看出,在規模超過500棵子樹後,增加子樹規模對於損失下降的貢獻微乎其微。特別是最後1000棵子樹僅貢獻了0.1%的損失下降。可以說,繼續增加模型複雜性帶來的收益幾乎可以忽略不計,最終Facebook在實際應用中選擇了600作為子樹規模。
5.3.3節對GBDT+LR的模型更新方式做了介紹,囿於Facebook巨大的數據量及GBDT較難實施並行化的特點,Facebook的工程師在實際應用中採用了「GBDT部分幾天更新一次,LR部分準實時更新」的模型更新策略,兼顧模型的實時性和複雜度。
8.1.3 實時數據流架構
為了實現模型的準實時訓練和特徵的準實時更新(5.3節詳細介紹過推薦模型和特徵的實時性相關知識),Facebook基於Scribe(由Facebook開發並開源的日誌收集系統)構建了實時數據流架構,被稱為online data joiner模塊(在線數據整合),該模塊與Facebook推薦系統其他模塊的關係如圖82所示。
圖8-2 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專門設立了異常檢測機制,一旦發現實時樣本流的數據分布發生變化,將立即切斷在線學習的過程,防止預測模型受到影響。
8.1.4 降採樣和模型校正
為了控制數據規模,降低訓練開銷,Facebook實踐了兩種降採樣的方法——uniform subsampling(均勻採樣)和 negative down sampling(負樣本降採樣,以下簡稱負採樣)。均勻採樣是對所有樣本進行無差別的隨機抽樣,為選取最優的採樣頻率,Facebook試驗了1%、10%、50%、100%四個採樣頻率,圖8-3比較了不同採樣頻率下訓練出的模型的損失。
圖8-3 不同採樣頻率下的模型損失
可以看到,當採樣頻率為10%時,相比全量數據訓練的模型(最右側100%的柱狀圖),模型損失僅上升了1%,而當採樣頻率降低到1%時,模型損失大幅上升了9%左右。因此,10%的採樣頻率是一個比較合適的平衡工程消耗和理論最優的選擇。
另一種方法負採樣則保留全量正樣本,對負樣本進行降採樣。除了提高訓練效率,負採樣還直接解決了正負樣本不均衡的問題,Facebook經驗性地選擇了從0.0001到0.1的負採樣頻率,試驗效果如圖84所示。
圖8-4 不同負採樣頻率下的模型損失
可以看到,當負採樣頻率在0.0250時,模型損失不僅小於基於更低採樣頻率訓練出來的模型,居然也小於負採樣頻率在0.1時訓練出來的模型。雖然Facebook在論文中沒有做出進一步的解釋,但最可能的原因是通過解決數據不均衡問題帶來的效果提升。在實際應用中,Facebook採用了0.0250的負採樣頻率。
負採樣帶來的問題是CTR預估值的漂移,假設真實CTR是0.1%,進行0.01的負採樣之後,CTR將會攀升到10%左右。為了進行準確的競價及ROI預估,CTR預估模型是要提供準確的、有物理意義的CTR值的,因此在進行負採樣後需要進行CTR的校正,使CTR模型的預估值的期望回到0.1%。校正的公式如(式81)所示。
其中q是校正後的CTR,p是模型的預估CTR,w是負採樣頻率。通過負採樣計算CTR的過程並不複雜,有興趣的讀者可以根據負採樣的過程手動推導上面的式子。
8.1.5 Facebook GBDT+LR組合模型的工程實踐
Facebook基於GBDT+LR組合模型實現的廣告推薦系統雖然已經是2014年的工作,但我們仍能從中吸取不少模型改造和工程實現的經驗,總結來講最值得學習的有下面三點:
1.特徵工程模型化
2014年,在很多從業者還在通過調參經驗嘗試各種特徵組合的時候,Facebook利用模型進行特徵自動組合和篩選是相當創新的思路,也幾乎是從那時起,各種深度學習和Embedding的思想開始爆發,發揚著特徵工程模型化的思路。
2.模型複雜性和實效性的權衡
對GBDT和LR採用不同的更新頻率是非常工程化且有價值的實踐經驗,也是對組合模型各部分優點最大化的解決方案。
3.有想法要用數據驗證
在工作中,我們往往有很多直覺上的結論,比如數據和模型實時性的影響有多大,GBDT應該設置多少棵子樹,到底用負採樣還是隨機採樣。針對這些問題,Facebook告訴我們用數據說話,無論是多麼小的一個選擇,都應該用數據支撐,這才是一位工程師嚴謹的工作態度。
8.1.6 Facebook的深度學習模型DLRM
時隔5年,Facebook於2019年再次公布了其推薦系統深度學習模型DLRM(Deep Learning Recommender Model),相比GBDT+LR,DLRM是一次徹底的應用深度學習模型的嘗試。接下來將介紹DLRM的模型結構、訓練方法和效果評估。
DLRM的模型結構如圖85所示,模型各層的作用如下。
圖85 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務實的技術風格相關,也說明在海量數據的背景下,簡單的模型結構就可以發揮不俗的作用。
8.1.7 DLRM模型並行訓練方法
作為一篇來自工業界的論文,模型的實際訓練方法往往可以讓業界同行收益頗多。Facebook的數據量之大,單節點的模型訓練必然無法快速完成訓練任務,因此模型的並行訓練就是必須採用的解決方法。
簡單來說,DLRM融合使用了模型並行和數據並行的方法,對Embedding部分採用了模型並行,對MLP部分採用了數據並行。Embedding部分採用模型並行的目的是減輕大量Embedding層參數帶來的內存瓶頸問題。MLP部分採用數據並行可以並行進行前向和反向傳播。
其中,Embedding做模型並行訓練指的是在一個device(設備)或者計算節點上,僅保存一部分Embedding層參數,每個設備進行並行mini batch梯度更新時,僅更新自己節點上的部分Embedding層參數。
MLP層和特徵交互層進行數據並行訓練指的是每個設備上已經有了全部模型參數,每個設備利用部分數據計算梯度,再利用全量規約(AllReduce)的方法匯總所有梯度進行參數更新。
8.1.8 DLRM模型的效果
DLRM的訓練是在Facebook自研的AI平臺Big Basin platform上進行的,平臺的具體配置是Dual Socket Intel Xeon 6138 CPU@2.00GHz +8個Nvidia Tesla V100 16GB GPUs。Facebook Big Basin AI硬體平臺示意圖如圖8-6所示。
圖86 Facebook Big Basin AI硬體平臺
很明顯,Big Basin platform是一個高性能的CPU+GPU的組合平臺,沒有採用類似6.3節介紹的Parameter Server的分布式硬體架構。這節約了大量網絡通信的成本,但在擴展性方面沒有Parameter Server靈活。
在性能的對比上,DLRM選擇了谷歌2017年提出的DCN作為baseline(性能基準)。通過對比本節介紹的DLRM和3.6節介紹的DCN可以發現,DLRM和DCN的主要區別在於特徵交叉方式的不同,DLRM採用了不同特徵域兩兩內積的交叉方式,而DCN採用了比較複雜的cross layer的特徵交叉方式。以Criteo Ad Kaggle data為測試集,二者的性能對比如圖87所示。
圖8-7 DLRM與DCN性能對比
可以看出,DLRM在準確率指標上稍勝一籌。當然,模型的性能與數據集的選擇、參數的調優都有很大關係,而且DLRM在Adagrad訓練方式下的優勢已經微乎其微,這裡的性能評估讀者僅做參考即可。
8.1.9 Facebook深度學習推薦系統總結
無論是GBDT+LR組合模型,還是最新的DLRM模型,Facebook的技術選擇總給人非常工業化的感覺,簡單直接,以解決問題為主。雖然從學術角度看模型的創新性不足,但業界的從業者卻能從中借鑑非常多的工程實踐經驗。DLRM模型是非常標準且實用的深度學習推薦模型。如果公司剛開始從傳統機器學習模型轉到深度學習模型,則完全可以採用DLRM作為標準實現。而GBDT+LR組合模型傳遞出的特徵工程模型化及模型組合的思路,對推薦系統技術發展有更深遠的影響。
贈書活動
想要了解關於推薦系統的更多乾貨知識,關注AI科技大本營並在評論區分享你對本文的學習心得,我們將從中選出5條優質評論,各送出《深度學習推薦系統》一本。