深度學習相關技術近年來在工程界可謂是風生水起,在自然語言處理、影像和影片識別等領域得到極其廣泛的應用,並且在效果上更是碾壓傳統的機器學習。一方面相對傳統的機器學習,深度學習使用更多的資料可以進行更好的擴充套件,並且具有非常優異的自動提取抽象特徵的能力。另外得益於GPU、SSD儲存、大容量RAM以及大資料分散式計算平臺等的快速發展,海量資料的處理能力大幅度提升。同時,“千人千面”的個性化推薦系統已經融入到我們的日常生活的方方面面,並且給企業帶來了巨大的收益。智慧推薦系統本質上是對原始的使用者行為資料進行深入地分析和挖掘,得到使用者的興趣偏好,進行精準推薦。所以,將深度學習和推薦系統相結合也成為了工業界的研究熱點,Google、Facebook、Netflix等公司很早就開始研究基於深度學習的推薦系統,並且取得了顯著的效果提升。(達觀資料 於敬)
一、RBM介紹
1 RBM和Netflix
提到基於RBM的推薦系統,不得不提Netflix競賽。2006年,Netflix公司為了提升推薦效果,懸賞百萬美元組織了一場競賽,讓大家窮盡所能以使其推薦演算法的效果能夠提升10%以上。在競賽的後半程,RBM異軍突起。當時以SVD++為核心的各種模型幾乎已經陷入了僵局,很多人在此基礎上加了pLSA、LDA、神經元網路演算法、馬爾可夫鏈、決策樹等等,但效果提升並不明顯,各個參賽隊伍基本上進入到了比拼trick與融合模型資料的體力活階段了。
但是,RBM的出現,把整個競賽推進到了一個新的臺階。最終在2009年,“雞尾酒”團隊將上百個模型進行融合以10.05%的結果獲得了此次競賽的終極大獎。但是Netflix後來的線上系統並沒有採用如此複雜的全套演算法,而是僅僅應用了最核心的兩個演算法,其中就有受限玻爾茲曼機,另外一個就是耳熟能詳的奇異值分解。
2 RBM的層次結構
RBM是一種可用隨機神經網路來解釋的機率圖模型,主要用於協同過濾、降維、分類、迴歸、特徵學習和主題建模。RBM包括兩層,第一個層稱為可見層,第二個層稱為隱藏層。
如圖1所示,每個圓圈稱為節點,代表一個與神經元相似的單元,而運算就在這些節點中進行。每一個神經元是一個二值單元,也就是每一個神經元的取值只能等於0或1。節點之間的連線具有如下特點:層內無連線,層間全連線。
RBM和BM的不同之處就在於:BM允許層內節點連線,而RBM不允許。這就是受限玻爾茲曼機中受限二字的本意。每一個節點對輸入資料進行處理,同時隨機地決定是否繼續傳輸輸入資料,這裡的“隨機”是指改變輸入資料的係數是隨機初始化的。每個可見層的節點表示有待學習資料集合中一個物品的一個低層次特徵。
接下來看一下單個輸入x是如何透過這個兩層網路的,如圖2所示。在隱藏層的節點中,x和一個權重w相乘,再和所謂的偏差b相加。這兩步的結果輸入到一個啟用函式中,進而得到節點的輸出,也就是對於給定輸入x,最終透過節點後的訊號強度。如果用公式表示的話,即:sigmoid函式是神經網路中常用的啟用函式之一,其定義為:
接下來看看多項輸入節點是如何整合到隱藏節點中的,如圖4所示。每個輸入x分別與各自的權重w相乘,再將結果求和後與偏差b想加,得到結果後輸入到啟用函式中,最後得到節點的輸出值a。
由於可見層的所有節點的輸入都會被傳送到隱藏層中的每個節點,所以RBM可以被定義成一種對稱二分圖。如圖5所示,當多個輸入透過多個隱藏節點時,在隱藏層的每個節點中,都會有 x和權重w相乘,有4個輸入,而每個輸入x會有三個權重,最終就有12個權重,從而可以形成一個行數等於輸入節點數、列數等於輸出節點數的權重矩陣。隱藏層的每個節點接收4個可見層的輸入與各自權重相乘後的輸入值,乘積之和與偏差值b相加,再經過啟用運算後得到隱藏層每個節點的輸出a。
再進一步,如果是想構建一個二層的深度神經網路,如6所示,將第一隱藏層的輸出作為第二隱藏層的輸入,然後再透過不定數量的隱藏層,最終就可以到達分類層。(達觀資料 於敬)
3 RBM的重構
這裡介紹下RBM在無監督情況下如何重構資料的,其實就是在可見層和第一隱藏層之間多次進行正向和反向傳遞,但並不涉及更深的網路結構。在重構階段,第一隱藏層的啟用值作為反向傳遞的輸入。這些輸入值和相應的權重相乘,然後對這些乘積求和後再與偏差相加,得到的結果就是重構值,也就是原始輸入x的近似值。
由於RBM的初始權重是隨機初始化的,所以重構值與原始輸入之間的差別往往很大。r值與輸入值之差定義為重構誤差,經由反向傳遞來不斷修正RBM的權重,經過不斷迭代,可以使得重構誤差達到最小。RBM在正向傳遞過程中根據輸入值來計算節點的啟用值,也就是對輸入x進行加權後得到輸出為a的機率p(a|x;w)。 而在反向傳遞時,啟用值則變成輸入,輸出值變成了原始資料的重構值,也就是RBM在估計啟用值為a時而輸入值為x的機率p(x|a;w),啟用值的權重w和正向傳遞中的一樣。最終兩個過程相結合,得到輸入 為x 和啟用值為 a 的聯合機率分佈p(x, a)。
重構不同於平時所說的迴歸、分類。重構是在預測原始輸入資料的機率分佈,同時預測許多不同點的值,這就是生成學習。RBM用KL(Kullback Leibler)散度來衡量預測的機率分佈與基準分佈之間的距離。
KL散度衡量的是兩條曲線下方不重疊區域的面積,RBM的最佳化演算法就是要最小化這個面積,從而使得權重在與第一隱藏層的啟用值相乘後,可以得到與原始輸入儘可能近似的結果。如圖7所示,左半邊是一組原始輸入的機率分佈曲線p,另外一個是重構值的機率分佈曲線q,右半邊的圖則顯示了兩條曲線之間的差異。
在整個重構過程中,RBM會根據重構誤差反覆的迭代計算,以儘可能準確地學習出原始值,最終看上去兩條機率分佈曲線會盡可能地逼近,如圖8所示。
利用RBM的堆疊可以構造出深層的神經網路模型——深度置信網路(Deep Belief Net, DBN),感興趣的話可以查閱相關資料深入瞭解。在處理無監督學習問題時,使用一定的資料集合來訓練網路,設定下可見層節點的值匹配下資料集合中的值。然後使用訓練好的網路,對未知資料進行計算就可以進行分類。(達觀資料 於敬)
二、RBM的數學原理
在RBM中,有如下性質:當給定可見層節點的狀態時,隱藏層各節點之間是否啟用是條件獨立的;反之當給定隱藏層節點的狀態時,可見層各節點之間是否啟用也是條件成立的。
:分別表示可見層和隱藏層的神經元數量;
:可見層的狀態向量,表示可見層中第個神經元的狀態;
:可見層的狀態向量,表示隱藏層中第個神經元的狀態;
:可見層的偏置向量,表示可見層中第個神經元的偏置;
隱藏層的偏置向量,表示隱藏層中第個神經元的偏置;
:隱藏層和可見層之間的權重矩陣,表示隱藏層中第個神經元與可見層中第個神經元之間的連線權重
對於RBM,其引數主要是可見層和隱藏層之間的權重、可見層的偏置和隱藏層的偏置,記為,可將其看作是W、a、b中所有分量拼接起來的到的長向量。
RBM是一個基於能量的模型,對於給定的狀態(v, h),可以定義能量函式
進而可以的到(v, h)的聯合機率分佈
其中
為歸一化因子
於是,可以定義邊緣機率分佈
結合聯合機率分佈、邊緣機率分佈和sigmoid函式,可以得到:
在給定可見層狀態時,隱藏層上某個神經元被啟用的機率
給定隱藏層狀態時,可見層上某個神經元被啟用的機率
給定訓練樣本後,訓練RBM也就是調整引數,使得RBM表示的機率分佈儘可能與訓練資料保持一致。
給定訓練集:
是訓練樣本的數量,,則訓練RBM的目標就是最大化似然函式:
進一步取log函式:
使用梯度上升法進行上述最最佳化問題的求解,梯度上升法的形式是:
為學習率,最終可以得到:
Hinton給出了高效尋來呢RBM的演算法——對比散度(Contrastive Divergence,簡稱CD)演算法。
對,取初始值:,然後執行k步Gibbs抽樣,其中第t步先後執行:
利用取樣出
利用取樣出
最後,關於RBM的評估方法,由於本身演算法的限制,一般採用近似方法進行評估,重構誤差就是其中之一。重構誤差以訓練樣本作為初始狀態,經過RBM的分佈進行一次Gibbs轉移後與原資料的差異量。重構誤差在一定程度上反映了RBM對訓練樣本的似然度,雖然不完全可靠,但計算簡單,在實踐中非常有用。(達觀資料 於敬)
三、如何將RBM應用到推薦系統中
本質上來說,RBM是一個編碼解碼器:將原始輸入資料從可見層對映到隱藏層,並且得到原始輸入資料的隱含因子,對應的是編碼過程;然後利用得到的隱藏層向量在對映回可見層,得到新的可見層資料,對應的是解碼過程。而最佳化目標是希望讓解碼後的資料和原始輸入資料儘可能的接近。在推薦場景中,可以獲取到使用者對物品的評分矩陣,進過RBM的編碼-解碼過程處理後,不僅得到了已有評分對應的新評分,同時對未評分的物品進行預測,並將預測分數從高到低排序就可以生成推薦列表。換句話說,就是將RBM應用到協同過濾中。
但是這個推薦過程需要解決兩個問題:
1)RBM中的節點都是二元變數, 如果用這些二元變數來對使用者評分進行建模?
2)實際業務場景中,使用者只會對很少的物品評分,使用者評分行為矩陣都是非常稀疏的,那麼如何處理這些缺失的評分?
Ruslan Salakhutdinov等人首次提出了使用RBM求解Netflix競賽中的協同過濾問題。對傳統的RBM進行改進:可見層使用Softmax神經元;使用者只對部分物品評分,而對於沒有評分的物品使用一種特殊的神經元表示,這種神經元不與任何隱藏層神經元連線。具體結構如圖11所示。
從圖11中可以看到,Softmax神經元是一個長度為K的向量(圖中K為5),並且這個向量每次只有一個分量為1,而且第i個單元為1僅當使用者對該物品打分為i是才會置為1,其餘為0。從而可以得到可見層單元和隱藏層單元被啟用的機率:
使用前面提到的CD演算法,各個引數的學習過程如下:
RBM經過學習以後,可以得到整個網路的全部引數。給定一個使用者u和一個物品i,預測評分R(u, i)過程如下:
1) 將使用者u的所有評分作為RBM的softmax單元的輸入
2) 對於所有的隱藏單元j計算啟用機率
3)對於所有的k=1,2,…,K, 計算
4)取期望值作為預測結果,比如
以上RBM只用到使用者對物品的評分,忽略了很重要的資訊:使用者瀏覽過哪些物品,但是並沒有評的情況。條件RBM (Conditional Restricted Boltzmann Machine)對這種資訊可以進行建模。
其中r是m維的向量,為1的話,表示使用者對瀏覽過第i個電影,加入r之後的條件機率:
權重D的學習過程:
經過前面的分析,對RBM的內部演算法原理、編碼和解碼過程以及在推薦中的應用等有了基本的瞭解。在推薦業務場景中,一般有兩種使用方式:
一是進行離線計算,也就是對大量使用者都批次計算推薦結果,當然計算量往往很乏;
二是將訓練號的模型儲存下來,然後實時生成推薦結果,也就是排序的過程。在達觀推薦架構中,RBM是以第二種方式進行應用中。這種方式避免了大量複雜的離線計算,可以對多種單一離線結果進行融合排序,應用上更加靈活。
其實深度學習的很多模型都可以應用於推薦系統,方式也非常多。達觀資料精於技術,對於推薦系統和深度學習相結合以持續最佳化推薦效果的探索也從未停止,後續也會不斷地分享相關成果,敬請期待。
關於作者
於敬:達觀資料聯合創始人,中國計算機學會(CCF)會員,第23屆ACM CIKM Competition競賽國際冠軍,達觀資料個性化推薦組總負責人,負責達觀資料智慧推薦系統的架構設計和開發、推薦效果最佳化等。同濟大學計算機應用技術專業碩士,曾先後在盛大創新院、盛大文學和騰訊文學資料中心從事使用者行為建模、個性化推薦、大資料處理、資料探勘和機器學習相關工作,對智慧推薦、機器學習、大資料技術和分散式系統有較深入的理解和多年實踐經驗。