AutoRec算法

AutoRec模型是一個(gè)單隱層神經(jīng)網(wǎng)絡(luò)推薦模型,可以說是最簡單的神經(jīng)網(wǎng)絡(luò)的模型。它的原理也不復(fù)雜,可以看做是MLP(多層感知機(jī))和DNN(深度神經(jīng)網(wǎng)絡(luò))的簡化,其中最主要的是結(jié)合了自編碼器(AutoEncoder)和協(xié)同過濾(Collaborative Filtering)的思想。

自編碼器是一個(gè)能夠完成數(shù)據(jù)“自編碼”的模型:將數(shù)據(jù)以向量的形式作為輸入,通過自編碼器,得到的輸出盡可能和輸入接近。這個(gè)概念和矩陣分解非常的相似,矩陣分解就是將評(píng)分矩陣分解成兩個(gè)矩陣,通過訓(xùn)練擬合原有的評(píng)分,最后通過兩個(gè)矩陣相乘的形式得到一個(gè)滿秩的矩陣,也就是可以對(duì)未知的評(píng)分進(jìn)行預(yù)測(cè)。

其中輸入為,輸出為
,
代表所有的輸入數(shù)據(jù)向量,
表示編碼器,
表示解碼器,自編碼器的目標(biāo)便是優(yōu)化損失函數(shù)。
就是令圖中的紅色部分的Error的值最小。

在基于評(píng)分?jǐn)?shù)據(jù)的協(xié)同過濾算法當(dāng)中,假設(shè)我們有個(gè)用戶,
個(gè)物品,則有用戶-物品評(píng)分矩陣
。對(duì)于一個(gè)用戶
來說,他對(duì)所有
個(gè)物品的評(píng)分?jǐn)?shù)據(jù)可以形成一個(gè)
維的向量
。同理,對(duì)于一個(gè)物品
來說,他對(duì)所有
個(gè)物品的評(píng)分?jǐn)?shù)據(jù)可以形成一個(gè)
維的向量
。下面是AutoRec的整體模型框圖

可以看到整個(gè)模型只有3層,藍(lán)色的圓點(diǎn)代表的是隱層神經(jīng)元,紅色方框代表的是模型的輸入,經(jīng)過權(quán)重矩陣
和
到達(dá)輸出層,我們的目的是通過訓(xùn)練模型,找到合適的權(quán)重矩陣
和
,以及偏置
和
,使得輸入值和輸出值的誤差最小。
為了防止過擬合,可以對(duì)權(quán)重和
添加約束
其中表示Frobenius范數(shù),定義好損失函數(shù)之后,就可以使用反向傳播和梯度下降等方法來進(jìn)行模型訓(xùn)練了?;谖锲返腁utoRec模型的訓(xùn)練過程如下:
輸入物品
的評(píng)分向量
,即所有用戶對(duì)物品
的評(píng)分向量
得到模型的評(píng)分預(yù)測(cè)輸出向量
根據(jù)評(píng)分預(yù)測(cè)向量和真實(shí)評(píng)分向量的誤差進(jìn)行訓(xùn)練,最小化損失函數(shù),得到最終的模型參數(shù)

實(shí)驗(yàn)對(duì)比
視頻參考

代碼參考https://gitee.com/youryouth/mc/tree/master
作者分別在MovieLens 1M和10M、以及Netflix數(shù)據(jù)上進(jìn)行了對(duì)比實(shí)驗(yàn),評(píng)測(cè)指標(biāo)為RMSE,即均方根誤差。分別與U-RBM、I-RBM、BiasedMF、LLORMA算法進(jìn)行了對(duì)比。結(jié)果如下:

作者還做了消融實(shí)驗(yàn),驗(yàn)證選擇不同的激活函數(shù)對(duì)最終實(shí)驗(yàn)結(jié)果的影響。


代碼實(shí)踐
可以使用基于用戶或者基于電影,作為網(wǎng)絡(luò)的輸入。比如基于用戶,那么網(wǎng)絡(luò)的輸入就是6040,如果是電影,那么網(wǎng)絡(luò)的輸入3952,然后經(jīng)過隱藏層,假設(shè)是300,得到對(duì)應(yīng)的特征向量,最后的輸出跟輸入維度保持一致。
使用torch.utils.data.Dataset來加載對(duì)應(yīng)的數(shù)據(jù)集。
代碼中的x_mat矩陣即用戶或者電影對(duì)應(yīng)的矩陣,然后每一行作為輸入即可。

總結(jié)
AutoRec模型是深度學(xué)習(xí)方法用于推薦系統(tǒng)中的開山之作,它僅僅使用了一個(gè)單隱層的自編碼器來泛化用戶和物品評(píng)分,使模型具有一定的泛化和表達(dá)能力。但是由于模型過于簡單,也讓它在實(shí)際使用中顯得表征能力不足。