文章目录
这是一篇发表在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+Uht−1)
其中
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=(1−zt)ht−1+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+Uzht−1)
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(rt⊙ht−1)
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+Urht−1)
3. CUSTOMIZING THE GRU MODEL
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
- items可能有成千上万甚至更多个,很难在每个step中都计算所有item的得分,因此每个step都进行采样,只更新部分权重。同时采用负采样的方法来保证正例的高rank。
- 负采样时,需要考虑到item的popularity,因此采用了从其他mini-batch中采样作为负例的方法。这样做的好处是:a.降低了计算复杂度和coding难度;b.这种策略同样是基于popularity的负采样,因为popularity越高的item越可能被采样为负例。
3.3 RANKING LOSS
- pointwise:每个item都视为是独立的,对每个item进行打分or排序;
- pairwise:两两排序,正例应该排在负例前面;
- listwise:对所有items进行排序,因为计算量太大用得很少。
文章中表示,经过试验,pairwise更适合本文网络,文中使用了两种:
- 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=−NS1⋅j=1∑NSlog(σ(r s,i−r 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 - 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=NS1⋅j=1∑NSI{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=NS1⋅j=1∑NSσ(r s,j−r s,i)+σ(r s,j2)
4. EXPERIMENTS
一顿比较,发现GRU比RNN和LSTM效果好