SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS

这是一篇发表在2016年ICLR上的文章,用RNN应用在推荐系统中,输入session中现在的行为序列,预测下一个可能的行为。适用于用户信息较少的场景(missing the user profile)

1. RELATED WORK

1.1 item-to-item


1.在同一个session中经常被点击的item,则认为是相似的。使用提前计算好的item相似矩阵,在线上对用户进行推荐。这种算法仅仅考虑了用户上一个的点击行为,而忽视了更早之前的点击;
2.MDPs:在推荐中应用马尔科夫链,当要考虑用户所有的sequence时,state space变得难以处理;
3.GFF:用两种latent representation来表示item,一种用来表示item本身,另外一种为item作为session一部分的表示。这种方法没有考虑session中的排序。

1.2 deep learning


1.RBM
2.CNN

2. RECOMMENDATIONS WITH RNNS

RNN:标准RNN隐层状态 h h h更新公式:
h t = g ( W x t + U h t − 1 ) h_t=g(Wx_t+Uh_{t-1}) ht=g(Wxt+Uht1)
其中 g g g是光滑有界函数,如logistic sigmoid function , x t x_t xt t t t时刻的输入。给定当前状态 h t h_t ht,RNN输出序列中下一个元素可能的概率分布。

GRU:为了解决RNN的梯度消失问题。GRU学习何时以何种程度更新单元的隐层状态。GRU的激活函数:
h t = ( 1 − z t ) h t − 1 + z t h ^ t h_t=(1-z_t)h_{t-1}+z_t \widehat h_t ht=(1zt)ht1+zth t
其中
z t = σ ( W z x t + U z h t − 1 ) z_t=\sigma (W_z x_t + U_z h_{t-1}) zt=σ(Wzxt+Uzht1)
h ^ t = t a n h ( W x t + U ( r t ⊙ h t − 1 ) \widehat h_t = tanh(Wx_t + U(r_t \odot h_{t-1}) h t=tanh(Wxt+U(rtht1)
r t = σ ( W r x t + U r h t − 1 ) r_t = \sigma (W_r x_t + U_r h_{t-1}) rt=σ(Wrxt+Urht1)

3. CUSTOMIZING THE GRU MODEL

GRU后加入了一个feedforward层

3.1 SESSION-PARALLEL MINI-BATCHES

传统RNN是在sequence上用一个滑动窗口来进行切分,再把这些windowed fragments前后相连组成mini-batch。但是在本文场景下,
(1)有的session可能只有2条数据,而另一个session可能有上百条;
(2)本文的目的就是捕获session随时间的进化趋势,将sequence切分成fragment就显得没有意义。
于是文中提出了如图所示的mini-batch方法,session-parallel mini-batches
在这里插入图片描述

3.2 SAMPLING ON THE OUTPUT

  1. items可能有成千上万甚至更多个,很难在每个step中都计算所有item的得分,因此每个step都进行采样,只更新部分权重。同时采用负采样的方法来保证正例的高rank。
  2. 负采样时,需要考虑到item的popularity,因此采用了从其他mini-batch中采样作为负例的方法。这样做的好处是:a.降低了计算复杂度和coding难度;b.这种策略同样是基于popularity的负采样,因为popularity越高的item越可能被采样为负例。

3.3 RANKING LOSS

  • pointwise:每个item都视为是独立的,对每个item进行打分or排序;
  • pairwise:两两排序,正例应该排在负例前面;
  • listwise:对所有items进行排序,因为计算量太大用得很少。

文章中表示,经过试验,pairwise更适合本文网络,文中使用了两种:

  1. BPR:
    L s = − 1 N S ⋅ ∑ j = 1 N S l o g ( σ ( r ^ s , i − r ^ s , j ) ) L_s=- \frac{1}{N_S}\cdot{\sum_{j=1}^{N_S}}log(\sigma(\widehat r_{s,i} - \widehat r_{s,j})) Ls=NS1j=1NSlog(σ(r s,ir s,j))
    其中 N S N_S NS是smple size, r ^ s , k \widehat r_{s,k} r s,k是item k k k的score, i i i是 desired item (next item in the session), j j j是negative samples
  2. TOP1:对相关item的相对排名的正则逼近,relative rank为:
    L s = 1 N S ⋅ ∑ j = 1 N S I { r ^ s , j > r ^ s , i } L_s=\frac{1}{N_S}\cdot{\sum_{j=1}^{N_S}}I\{\widehat r_{s,j} > \widehat r_{s,i}\} Ls=NS1j=1NSI{r s,j>r s,i}
    其中 I { ⋅ } I\{\cdot\} I{}用sigmoid函数逼近,但这会导致负样本的score变高,为了让负样本的score趋近于0,增加了正则项约束,最终的loss为:
    L s = 1 N S ⋅ ∑ j = 1 N S σ ( r ^ s , j − r ^ s , i ) + σ ( r ^ s , j 2 ) L_s=\frac{1}{N_S}\cdot{\sum_{j=1}^{N_S}}\sigma(\widehat r_{s,j} - \widehat r_{s,i}) + \sigma(\widehat r_{s,j}^2) Ls=NS1j=1NSσ(r s,jr s,i)+σ(r s,j2)

4. EXPERIMENTS

一顿比较,发现GRU比RNN和LSTM效果好

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值