受限玻爾茲曼機與推薦系統

與傳統的淺層機器學習相比, 深度學習具備優秀的自動提取抽象特徵的能力,而且隨着分佈式計算平臺的快速發展,大數據的處理能力獲得極大的提高,使得近年來DL在工程界獲得普遍的應用,包括圖像識別,語音識別,天然語言處理等領域,並取得比傳統機器學習更好的效果提高。另外一方面,智能推薦系統,本質上是從一堆看似雜亂無章的原始流水數據中,抽象出用戶的興趣因子,挖掘出用戶的偏好,所以把深度學習與推薦系統相結合成爲近年來DL發展的一個新熱點,事實上,Spotify,Netflix,Facebook,Google等公司早已經對如何把深度學習應用到推薦系統中有了不少深刻研究,並在實際應用中取得了很好的效果提高 [1]。算法

本文是深度學習在推薦系統實踐應用系列文章的第一篇,詳細介紹瞭如何把受限玻爾茲曼機(Restricted Boltzmann Machine, 下面統一簡稱RBM)應用到咱們當前線上的推薦系統中,包括RBM的原理,在推薦系統的應用及其並行化實現的細節,後面兩篇會詳細介紹另外兩個咱們目前正在研究使用的深度神經網絡,分別是遞歸神經網絡(Recurrent Neural Network, RNN)和卷積神經網絡(Convolutional Neural Network, CNN),詳細介紹它們的原理,如何與智能推薦相結合以及線上的模型效果。網絡

之因此把RBM做爲第一篇進行講解,一方面是由於它的結構相對比較簡單,是一個只有可視層和隱藏層兩層結構的網絡;另外一方面,從嚴格意義上說,RBM並不屬於深層神經網絡,它只是一個兩層結構,並不「深」,但它同時也是構成其餘深度神經網絡的經常使用層次組件,所以,理解如何把RBM應用到推薦系統上,將有助於理解後面幾個更復雜的深度學習算法的應用。架構

一:受限玻爾茲曼機與推薦系統機器學習

1.1 RBM網絡結構定義分佈式

咱們首先給出RBM的網絡結構定義,RBM是由可視層和隱藏層相互鏈接的一個徹底二分圖網絡結構,以下圖所示,每個神經元是一個二值單元,也就是每個神經元的取值只能等於0或1:函數

RBM的網絡結構具備這樣的特色: 可視層的每個神經元與隱藏層的每個神經元相互鏈接;可視層神經元之間,隱藏層神經元之間沒有連線,這爲咱們後面的訓練提供了一個很好的假設性條件:同一層的各神經元之間是相互獨立的。對上面的網絡結構,咱們首先來定義下面的參數:性能

1.2 RBM與協同過濾學習

上一小節咱們對RBM的結構定義進行了簡要的闡述,那麼怎麼把該模型應用到推薦系統中呢?RBM本質上是一個編碼解碼器,具體來講,經過RBM,咱們能夠把原始輸入數據從可視層映射到隱藏層,獲得原始輸入數據的隱因子(latent factor)向量表示,這一過程也稱爲編碼過程,而後利用獲得的隱藏層向量從新映射回可視層,獲得新的可視層數據,這個過程稱爲解碼過程,咱們的目標是讓解碼後的結果能和原始數據儘可能接近,這樣,在解碼的過程當中,咱們不但能獲得已評分物品的新的評分數據,還能對未評分的物品的得分進行預測,這些未評分物品的分數從高到低的排序造成推薦列表。大數據

從上面的分析能夠看出,咱們將RBM應用到推薦中去要解決下面的兩個問題:優化

1. 如何用可視層來表示用戶的聽歌流水數據?

2. 如何處理missing數據?

正如上一段咱們提到,用戶的原始輸入數據只對部分極少數的歌曲有評分,對沒有評分的歌曲對應的神經元,也就是上圖中的missing神經元,在訓練權重時咱們並不考慮這部分數據,每個用戶的數據將構成一個獨立的RBM子模型,每個用戶的子模型只對其中關聯到的權重值調整作出貢獻,同理,每個權重值的參數更新只由與該權重值相關聯的用戶數據來決定。

下面咱們來看看修正的RBM模型對數據編碼和解碼的過程:

編碼過程:利用原始數據,咱們求取隱藏層的隱向量表示,這個過程是由條件機率公式求得:

下圖是編碼過程的動態圖展現:

二:模型最優化 - 對比散度(contrastive divergence)

經過第一部分的敘述,咱們已經知道了RBM的網絡結構以及如何與推薦系統相結合,那麼如今咱們的問題就是如何訓練模型,對於RBM來講,就是要訓練出三個權重參數: 鏈接可視層與隱藏層的權重W,可視層結點的偏移量visbias,隱藏層結點的偏移量hidbias。

對於機器學習模型來講,咱們首先要肯定咱們的目標訓練函數是什麼,對於RBM模型,它本質上是一個編碼解碼的過程,所以咱們很天然的想法是:指望通過RBM編碼和解碼後的數據與原始的輸入數據儘可能接近,這也是最大似然參數估計的思想,即咱們的最優化目標函數爲:

訓練RBM的最大困難在於負梯度的計算,Hinton教授於2002年提出了對比散度的算法,它有效解決了RBM訓練速度的難題,也是當前RBM的標準訓練算法,對比散度的思想是經過一種合理的採樣方法, 以較少的採樣樣原本近似負梯度的全部組合空間,具體實現過程就是:咱們從原始的輸入數據出發,通過編碼解碼後獲得新的可視層輸入,這一個過程稱爲1步Gibbs採樣,而後利用通過相同的過程,獲得,重複這個過程次,最後獲得,這個值就是最後負梯度的近似,這個過程被稱爲步Gibbs採樣過程,下圖就是步Gibbs採樣過程的動態圖展現:

三:對比散度的並行化實現

當前對RBM的並行化訓練已經有比較成熟的平臺,如Theano,Caffe,TensorFlow等,咱們在實現的過程沒有采用上面的平臺架構,而是採用了spark集羣來訓練,對比散度訓練RBM過程本質上是一個梯度降低的最優化過程,下圖是算法在spark的執行流程圖:

根據前面的描述,每個用戶的數據構成一個RBM子網絡,集羣首先是對數據和子模型進行切分,模型和數據在運行的過程當中將被分配到不一樣的executor中執行,獲得每個子模型的正梯度以及k步Gibbs採樣後的負梯度,而後子結果傳送回driver端進行合併,通常來講爲了防止所有數據返回形成driver端的網絡通信壓力以及內存壓力,咱們能夠採用樹聚合的方式來優化,下圖是樹深度爲2和樹深度爲4的效果圖,注意不一樣線條的顏色表明數據在不一樣的單元中傳輸,從圖中能夠看出,深度越大,計算的步驟會變長,但每一次傳輸到driver的數據會減小,能夠防止driver端內存溢出的問題。

四:線上模型融合

通過前面三節的分析,咱們已經對RBM如何做用於推薦系統,RBM模型的訓練等都有了比較深刻的瞭解,最後咱們須要利用訓練好的模型來生成推薦數據並與其餘算法模型進行融合,對推薦結果數據的計算,是利用已經訓練完的權重參數,對輸入數據進行一次編解碼的過程,解碼後的新數據,不但能從新生成已經操做過的數據的得分,還能對未操做過的數據預測得分,也就是1.2節的missing數據,這些missing數據的得分幫助咱們對推薦數據進行排序。

要實現這個過程,咱們有下面兩種作法:一是直接離線批量生成全部用戶的數據,但這種作法的計算量很是巨大;二是把訓練好的權重單獨保存,推薦數據的生成放到在線層實時計算,以下圖所示:

在應用中,咱們採用的是第二種方法,這種作法相比第一種方法的好處有兩個:一是結果不依賴於離線任務,防止了離線任務的失敗對線上數據的影響;二是線上實時計算的結果數據可以與現有的算法模型數據的融合更加靈活,包括後續數據處理的規則過濾,重排序等。

五:小結

本文詳細分析了RBM在推薦系統中的應用,從文中分析能夠看出,RBM對推薦系統的提高主要得益於它具備自動提取抽象特徵的能力,這也是深度學習做用於推薦系統的基礎。後面的文章中,將繼續分析RNN和CNN如何在提取抽象特徵的基礎上,進一步提高推薦系統的性能。

相關文章
相關標籤/搜索