本文介紹了使用 玻爾茲曼機 用於 推薦系統.
有一群使用者可能訂購(閱讀,觀看,購買)大量商品。使用者給商品評分(或評價)。我們的任務是,根據使用者和他人的先前評分,儘可能精確地預測使用者對新商品的評分,以便推薦使用者可能喜歡的商品。
大多數推薦系統具有以下特徵
- 使用者數量遠遠超過商品數量
- 所有或幾乎所有使用者只對一小部分商品進行了評分
- 評分的可能性很小(通常為1,2,3,4,5)。
- 已評分商品數量差異很大。
正如 Netflix 獎比賽所顯示的,沒有哪種方法優於其他方法。為了獲得最佳結果,應將幾種方法結合在一起。其中之一,限制玻爾茲曼機(RBM),將在本文中介紹。
- U - 使用者集
- I - 商品集
- G - 評分集
- 評分了商品
的使用者集。
- 使用者
評價過的商品集。
- 使用者
對商品
的評分。
- 使用者
對商品
的評分預測。
- T - 訓練集。T 的每個成員都是一個三元組
.
在描述 RBM 模型之前,我們簡要介紹一下 SVD 模型(奇異值分解),它可能是最好的單一方法。
在奇異值分解 (SVD) 下,每個使用者
由一個特徵向量
表示,其中 N 是模型的維度。類似地,每個專案
由一個特徵向量
表示。
預測評分是兩個向量的乘積

這裡的 x 和 y 是模型需要學習的引數,以便擬合訓練集。
該模型直觀易懂,因為特徵代表了專案的各種屬性。例如,在推薦電影時,某些特徵可能對愛情片非常積極,對沒有愛情元素的電影則為零或負面,而對諷刺愛情片的電影則非常負面。使用者特徵向量中對應的特徵對討厭愛情片的使用者將是負面的,而對於相反情況則為正面的。
學習模型最簡單的方法是將總誤差
降至最小。我們可以透過梯度下降來實現,迴圈地從訓練集中提取資料,對於每個
,將引數沿著與 E 的梯度相反的方向改變。



這裡的 L 是一個學習引數,它設定了梯度下降的整體速度。
但是,對於資料量少的使用者和電影,這種方法往往會構建巨大的特徵向量,因為這樣可以更好地擬合數據。為了禁止這種情況,並利用大特徵值不太可能出現的知識,應該新增正則化項


有關 SVD 的更詳細解釋,請參閱 Simon Funk 的“Netflix 更新:在家嘗試” [1]。但是,他的演算法一次新增一個特徵,後來發現不如同時學習所有特徵好。
現在我們來談談玻爾茲曼機模型。
第一步,假設我們不是預測分數,而是預測特定分數的 *機率*
的機率。
我們可以使用與上一節中描述的類似方法。

(為什麼不
? 因為通常使用者比物品多得多,所以
會包含大量的引數。)
但是我們可以做得更好。首先,我們可以利用所有分數的總機率為 1 的事實

其次,由於機率始終介於 0 到 1 之間,因此最好用它本身的邏輯函式而不是向量積來描述
邏輯函式

其中 *邏輯函式* f 定義為

將
重新定義為權重 W,並將
重新定義為隱層單元,並要求所有 x 都為 0 或 1,則可以得到

這就是玻爾茲曼機模型。