Deep Learning 論文解讀——Session-based Recommendations with Recurrent Neural Networks

博客地址:http://www.cnblogs.com/daniel-D/p/5602254.htmlhtml

新浪微博:http://weibo.com/u/2786597434網絡

歡迎多多交流~session

Main Ideadom

這篇論文的工做是講 RNN 應用到推薦系統中,想法在於把一個 session 點擊一系列 item 的行爲看作一個序列,用來訓練一個 RNN 模型。在預測階段,把 session 已知的點擊序列做爲輸入,用 softmax 預測該session下一個最有可能點擊的item。論文想法雖然很樸素很直白,可是目前這類直接用deep learning的結構來作推薦的論文很是少(RBM除外),所以值得仔細研讀。spa

Architecture

論文采用了 RNN 中的 GRU 單元做爲基本結構,組建了一個深層的神經網絡來預測該session下一個點擊的item 的機率。好比item擁有 2w 個,那麼經過 1-of-N coding 的方式(one hot encoding),神經網絡的第一層就有2w個節點,而後經過第二層embedding層壓縮爲低維連續向量(假設200維),固然最開始這些向量都是隨機初始化的。embedding這一層其實是一個 2w * 200的矩陣字典,每一行 200 維的向量就是一個item的presentation。這200維向量可做爲 stacked GRU 的輸入,獲得低維連續的輸出(200維),而後經過與 一個 200 * 2w 的矩陣相乘,獲得了下一個點擊的item在 2w 個節點中的預測機率,總體而言,這是一個 sequence to sequence 的預測問題。htm

爲了更好的並行計算,論文采用了mini-batch的處理,即把不一樣的session拼接起來,同一個sequence遇到下一個Session時,要注意將 GRU 中的一些向量從新初始化。由於item的維度很是高,每次要預測 2w 個item 的機率會致使計算量龐大,所以原則上只選取當前的正樣本(即下一個點擊的item)加上隨機抽取的負樣本。論文采用了取巧的方法來減小採樣須要的計算量,即選取了同一個 mini-batch 中其餘sequence下一個點擊的item做爲負樣本,用這些正負樣原本訓練整個神經網絡。blog

Loss Function

做者嘗試了 常見的 point-wise rank loss,即認爲負樣本爲 0, 正樣本爲 1 的loss function,發現訓練出來的模型並不穩定,緣由可能由於在推薦裏面,並不存在絕對的正樣本和負樣本。在同一個情景裏面,用戶只能點擊一個最偏好的item,對其餘item可能也存在偏好,這並非一個非黑即白的classification問題。而後做者嘗試了 pair-wise rank loss,而且對於負樣本的分數進行了近0約束,防止訓練過程當中分數相互「攀比」的情形下全部的預測分數都愈來愈高。實際上,我認爲這種約束方法近似於對 權重進行了 L2 約束。 get

Results

論文在 recSys2015 競賽的數據集上進行了點擊item的預測評比,對比的方法有 pop 、s-pop 、item-knn以及 BPR-MF,評測標準有 MRR@20 和 Recall@20,貌似都取得了不錯的效果。博客

一些想法

a、最後一層很重要,最後一層隱層實際是前面點擊序列的embedding結果,能夠看作 user 向量。輸出層某個節點表示一個item,與之相連的實際是item的向量。it

b、user 向量只用到了item序列,item和user自己的profile屬性是否能夠應用到模型裏來?

相關文章
相關標籤/搜索