论文《Attentive Recurrent Social Recommendation》阅读

  • 论文概况
  • Introduciton
  • Problem Definition and Preliminaries
    • Preliminary
    • The Proposed Model
    • The General Framework
    • Dynamic Attentive Social Recurrent Recommendation
      • Input Pooling Layer
      • Dynamic Attentive Network
      • Social LSTM Layer
      • Dynamic Output Layer
    • Static Attentive Social Recurrent Recommendation
    • Model Training
  • 论文总结

论文概况

这篇论文是合工大吴乐老师组发表在SIGIR 2018上关于时序性推荐系统方向的一篇文章。这篇文章结合了RNN、Attention和Social Recommendation三个方向,完成了一个基于动态和静态两类注意力网络的时序性的推荐系统,提出了模型ARSE。

论文地址:ARSE

论文代码未公开

Introduciton

根据Introduction部分的内容我们大概能了解文章的创新点。这里我们首先介绍一下,在推荐系统方向,General Recommendation 算法主要是结合一些环境特征(context information)或者user/item的特征去进行推荐,完成矩阵补全(Matrix Completion)问题或二部图的预测(Bipartite Graph Prediction)问题。但是这类方法主要的缺点是数据稀疏性问题,为解决这一问题,就有了利用user-user关系的社交推荐(Social Recommendation),Social Recommendation基于邻居节点会互相影响的假设。另外,基于用户的兴趣会不断变化,提出Sequential Recommendation方向,就是用户的latent factor不是静态的,而是会随着时间变化而不断变化,因此处理的数据就不只是一个interaction matrix而是若干个(随时间长短变化)。处理Sequential RS问题,就涉及到了序列的学习,可以通过诸如RNN、LSTM等模型进行学习,本文即选用LSTM来完成序列的学习。

下面我们按照段落介绍:

段落 内容
Paragraph.1 CF(Collaborative Filtering,协同过滤)一直以来都是推荐系统方向的主流,但是有着Data Sparsity的缺陷
Paragraph.2 使用社交网络可以缓解Data Sparsity问题,可以使用Social Recommendation
Paragraph.3 静态地描述用户属性不符合事实,因为用户的兴趣在一直变化,可以使用Sequential Recommendation/ Dynamic Recommendation,也就是随时间变化的时序性问题
Paragraph.4 解决时序性问题,RNN可以提供解决方案。而在推荐系统方面,还没有RNN在推荐上的应用。
Paragraph.5 综上,本文提出了一个Attentive RNN网络来解决时序性的社交问题。

因此,我们可以看到本文的亮点主要集中在Attention + RNN + Social RS以及几个元素的组合上。

Problem Definition and Preliminaries

问题形式化:给定user集合 U ( ∣ U ∣ = M ) U \ \ (|U|=M) U(U=M),item集合 V ( ∣ V ∣ = N ) V\ \ (|V|=N) V(V=N),user-user的社交网络矩阵 S ∈ R M × N S\in\mathbb{R}^{M\times N} SRM×NS S S是静态的,不随时间变化的,即好友关系保持不变),交互矩阵集合 R = [ R 1 , R 2 , ⋯ , R T ] R = [R^1, R^2, \cdots, R^T] R=[R1,R2,,RT] ,其中 t t t 时刻的交互矩阵(interaction matrix) R t ∈ R M × N ( t ∈ { 1 , 2 , ⋯ , T } ) R^t \in \mathbb{R}^{M\times N} \ \ (t\in \{1, 2, \cdots, T\}) RtRM×N(t{1,2,,T}) ;需要预测的是 T + 1 T+1 T+1 时刻的交互矩阵 R ^ T + 1 \hat{R}^{T+1} R^T+1

Preliminary

作者在这部分中介绍了LSTM模型的大致细节。这里贴张图,用于大家大致参考。

这里需要注意的是,在LSTM每一步的输入中, h t − 1 h_{t-1} ht1表示上一步的隐藏状态vector,本次输入的向量input vector x t x_t xt在输入LSTM内部前,先进行向量拼接(concatenation)再输入模型。

The Proposed Model

作者将ARSE分为两部分,DARSE(Dynamic Attentive Recurrent Social rEcommendation,动态注意力循环社交推荐) 和 SARSE (Static Attentive Recurrent Social rEcommendation,静态注意力循环社交推荐)。 DARSE考虑随时间变化而变化的部分;而SARSE考虑的是静态的部分。预测结果是两者的简单相加。

需要注意的是,在这里的Table 1,有一点引起人困扰的是 Q Q QW W WP P P 分别表示item动态latent matrix、item静态latent matrix、user静态latent matrix,user的动态latent matrix不需要吗?这里需要说明的是,user的动态latent matrix不只一个,而是有T个。可以表示为 H t ∣ t = 1 , 2 , ⋯ , T H^t |t=1, 2, \cdots, T Htt=1,2,,T。这里之所以有多个 H t H^t Ht,是因为用户兴趣随时间而变化,因此需要有多个放到LSTM中。 H t H^t Ht 中的每一行 h a t ∈ R D h_a^t \in \mathbb{R}^{D} hatRD 就是任意用户 a a at t t 时刻的的latent vector,同时也是LSTM的hidden state vector。这里我们应该就可以看出Collaborative Filtering 和 LSTM 是如何结合起来的。

而item和用户的静态属性都是不随时间变化的,因此不需要改变。另外, x a t x_a^t xat 并不对应到一个矩阵 X t X^t Xt,这里的 x a t x_a^t xat 是通过对矩阵 Q Q Q 中的某一行进行选择得到的,具体的,后文进行详细介绍。

这里需要声明一点的是,Table 1中应该有一个书写小错误,这里的矩阵 P P P 应该大小是 D × M D \times M D×M,而不是 D × N D \times N D×N,欢迎评论区讨论指正。

The General Framework

首先,我们给出预测的 r ^ a i t \hat{r}_{ai}^t r^ait 的计算公式:
r ^ a i t = r ^ D , a i t + r ^ S , a i t = q i T h a t + w i T p ~ a (5) \hat{r}_{ai}^t = \hat{r}_{D, ai}^t+ \hat{r}_{S,ai}^t = {q}_{i}^\mathsf{T} h_a^t + {w}_{i}^\mathsf{T} \tilde{p}_a \tag{5} r^ait=r^D,ait+r^S,ait=qiThat+wiTp~a(5)

这里需要注意的是, T ^\mathsf{T} T 是矩阵的转置符号,在原文中用 ′ \ ^{'} 表示。

q i {q}_{i} qi 表示 item i i i 的dynamic latent vector。
h a t h_a^t hat 表示 user a a a 在时刻 t t t 的dynamic latent vector。
w i {w}_{i} wi 表示 item i i i 的 static latent vector。
p ~ a \tilde{p}_a p~a 表示 user a a a 的static latent vector。
这里之所以 p ~ a \tilde{p}_a p~a上有波浪符号,是因为这是在集成了 p a {p}_a pa vector本身和注意力加权的邻接节点vector之后的表示,看下图也可以大概看明白。

由架构图我们也可以看出来,静态的user只和静态的item进行向量之间的内积计算,动态的user只和动态的item进行内积计算。

Dynamic Attentive Social Recurrent Recommendation

动态的部分简称为DARSE,作者认为每个人的喜好变化会影响社交关系的亲疏远近;同样,社交关系的变化也会影响每个人的喜好变化,这其中是interplay的关系。

作者一共分成了三层,我们分别介绍如下:

Input Pooling Layer

x a t = P o o l i n g ( Q ( : , L a t ) ) (6) x_a^t = Pooling(Q(:, L_a^t)) \tag{6} xat=Pooling(Q(:,Lat))(6)

这一步的目的是为了把任意用户在任意时刻变长的喜欢列表 L a t L_a^t Lat 变为定长以方便后续LSTM处理。这里形成了用户 a a a 在时刻 t t t 的固定大小的向量表示 x a t x_a^t xat,代表了用户 a a a 在时刻 t t t 的喜好特征,也是后续LSTM的输入向量。这里的 Q ( : , L a t ) Q(:, L_a^t) Q(:,Lat) 就是一个切片处理,把用户 a a a 的喜好item对应的列取出来进行压缩处理,得到一个D维的向量。

Dynamic Attentive Network

这里是为了得到用户 a a a 的邻居节点的环境向量 h ~ a t \tilde{h}_a^t h~ath ~ a t \tilde{h}_a^t h~at 是任意与 a a a 相邻的用户 b ( b ∈ S a ) b \ \ (b\in S_a) b(bSa) 在时刻 t t t 的动态向量 h b t {h}_b^t hbt 的注意力加权之和。那么问题来了,注意力怎么算呢?公式如下:

α a b t = exp ⁡ ( m t ( a , b ) ) ∑ c ∈ S a exp ⁡ ( m t ( a , c ) ) (7) \alpha_{ab}^t = \frac{\exp(m^t(a,b))}{\sum_{c\in S_a}{\exp(m^t(a,c))}} \tag{7} αabt=cSaexp(mt(a,c))exp(mt(a,b))(7)
m t ( a , c ) = R e L U ( A 5 × R e L U ( A 1 × h a t − 1 + A 2 × h c t − 1 + A 3 × e a + A 4 × e c ) ) (8) m^t(a,c)=ReLU(A_5 \times ReLU(A_1 \times h_a^{t-1} + A_2 \times h_c^{t-1} + A_3 \times e_a + A_4 \times e_c)) \tag{8} mt(a,c)=ReLU(A5×ReLU(A1×hat1+A2×hct1+A3×ea+A4×ec))(8)
可以看到,这里的注意力系数 α a b t \alpha_{ab}^t αabt 就是 m t ( a , c ) m^t(a,c) mt(a,c)的归一化值,而 m t ( a , c ) m^t(a,c) mt(a,c) 就是一个双层的MLP计算完成的,通过 a a at − 1 t-1 t1 时刻的动态向量、 a a a 的相邻用户 c c ct − 1 t-1 t1 时刻的动态向量、 a a a 的结构embedding、 c c c 的结构embedding计算完成。这里, e a e_a eae c e_c eca a ac c c 的图节点embedding(文中使用denosing autoEncoder完成)。我们可以看到 t t t 时刻动态注意力是由节点及其邻居节点的结构特征和 t − 1 t-1 t1 时刻的latent向量(代表用户的兴趣特征)共同决定的。

有了上面的注意力权重,就可以计算每个节点 a a a 的社交上下文信息(social contextual informaiton),形式上是加权的邻接节点动态社交影响力之和(weighted dynamic social influence from social neighbors),如下式所示:

h ~ a t = ∑ b ∈ S a α a b t × h b t (10) \tilde{h}_a^t = \sum_{b\in{S_a}} \alpha_{ab}^{t} \times h_b^t \tag{10} h~at=bSaαabt×hbt(10)

Social LSTM Layer

这一层是将上文中在Input Pooling Layer中学到的节点喜好向量 x a t x_a^t xat 和Dynamic Attentive Network层学到的节点环境向量 h ~ a t − 1 \tilde{h}_a^{t-1} h~at1 输入LSTM模型中,用下式中的 f L S T M ( ⋅ ) f_{LSTM} (\cdot) fLSTM() 表示。

h a t = f L S T M ( [ x a t , h a t − 1 , h ~ a t − 1 ] ) (11) h_a^t = f_{LSTM}([x_a^t, h_a^{t-1}, \tilde{h}_a^{t-1}]) \tag{11} hat=fLSTM([xat,hat1,h~at1])(11)

上式中, h a t − 1 h_a^{t-1} hat1 是上一时刻的LSTM hidden state vector,将 x a t x_a^t xath ~ a t − 1 \tilde{h}_a^{t-1} h~at1 进行拼接后作为input vector,可以得到下一时刻的hidden state vector h a t h_a^t hat ,这也是用户 a a a 在时刻 t t t 的dynamic latent vector。

Dynamic Output Layer

这里不做过多解释,使用向量内积完成动态部分的输出计算。

r ^ D , a i t = q i T ⋅ h a t \hat{r}_{D, ai}^t = q_i^{\mathsf{T}} \cdot h_a^t r^D,ait=qiThat

Static Attentive Social Recurrent Recommendation

Dynamic解释清楚以后,这部分就不用做过多解释了,SARSE就是一个加了注意力的Collaborative Filtering模型。具体如下:

r ^ S , a i t = w i T ⋅ p ~ a (17) \hat{r}_{S, ai}^t = w_i^{\mathsf{T}} \cdot \tilde{p}_a \tag{17} r^S,ait=wiTp~a(17)

n t ( a , c ) = R e L U ( B 5 × R e L U ( B 1 × p a + B 2 × p c + B 3 × e a + B 4 × e c ) ) (14) n^t(a,c)=ReLU(B_5 \times ReLU(B_1 \times p_a + B_2 \times p_c + B_3 \times e_a + B_4 \times e_c)) \tag{14} nt(a,c)=ReLU(B5×ReLU(B1×pa+B2×pc+B3×ea+B4×ec))(14)

β a b = exp ⁡ ( n t ( a , b ) ) ∑ c ∈ S a exp ⁡ ( n t ( a , c ) ) (15) \beta_{ab} = \frac{\exp(n^t(a,b))}{\sum_{c\in S_a}{\exp(n^t(a,c))}} \tag{15} βab=cSaexp(nt(a,c))exp(nt(a,b))(15)

p ~ a = ∑ b ∈ S a β a b × p b + p a \tilde{p}_a = \sum_{b\in S_a}{\beta_{ab} \times p_b + p_a} p~a=bSaβab×pb+pa

这里需要注意的是,最终在SARSE的预测输出中使用的向量是 p ~ a \tilde{p}_a p~a 而不是 p a p_a pa ,这里用的是注意力计算完成后由 p a p_a pa 和其邻接节点的静态向量加权求和后的向量加和计算完成。

Model Training

L Θ ( R , R ^ ) = − ∑ t = 1 T ∑ a = 1 M ∑ i = 1 N [ r a i t log ⁡ ( r ^ a i t ) + ( 1 − r a i t ) log ⁡ ( 1 − r ^ a i t ) ] (18) L_{\Theta}(R, \hat R) = -\sum\limits_{t=1}^{T} \sum\limits_{a=1}^{M} \sum\limits_{i=1}^{N} [ r_{ai}^t \log(\hat{r}_{ai}^t) + (1-r_{ai}^t) \log(1-\hat{r}_{ai}^t) ] \tag{18} LΘ(R,R^)=t=1Ta=1Mi=1N[raitlog(r^ait)+(1rait)log(1r^ait)](18)

使用二分类的log loss损失函数进行训练。

论文总结

这篇文章提出了一个ARSE模型,使用注意力机制、LSTM模型和social Recommendation相结合的方式,结合使用了静态注意力和动态注意力,值得推荐。

稍微有点瑕疵的部分就是本文的参考文献部分年份都稍微有点久远[笑哭],除此以外,都是惊喜。

论文《Attentive Recurrent Social Recommendation》阅读相关推荐

  1. 《基于卷积神经网络的深度迁移学习,用于燃气轮机燃烧室的故障检测》论文阅读

    目录 突出 抽象 引言 1.1动机 1.2文献综述获得的结论 1.3贡献 1.4组织 2方法 2.1燃汽轮机组故障知识共享 2.2迁移学习 2.3 基于卷积神经网络的深度迁移学习 2.4用于燃气轮机燃 ...

  2. 基于卷积神经网络和投票机制的三维模型分类与检索 2019 论文笔记

    作者:白静 计算机辅助设计与图形学学报 1.解决的问题 由于三维模型投影得到的视图是由不同视点得到,具有相对独立性,这种像素级的融合运算并没有直接的物理或者几何意义,更有可能造成图像有益信息淹没和混淆 ...

  3. TextCNN——基于卷积神经网络的文本分类学习

    1.CNN基础内容 CNN的全称是Convolutional Neural Network,是一种前馈神经网络.由一个或多个卷积层.池化层以及顶部的全连接层组成,在图像处理领域表现出色. 本文主要学习 ...

  4. 读懂深度迁移学习,看这文就够了 | 赠书

    百度前首席科学家.斯坦福大学副教授吴恩达(Andrew Ng)曾经说过:迁移学习将是继监督学习之后的下一个促使机器学习成功商业化的驱动力. 本文选自<深度学习500问:AI工程师面试宝典> ...

  5. 一种基于卷积神经网络的图像去雾研究-含matlab代码

    目录 一.绪论 二.去雾卷积网络 2.1 特征提取 2.2 多尺度映射 2.3 局部均值 2.4 非线性回归 三.实验与分析 四.Matlab代码获取 一.绪论 雾是一种常见的大气现象,空气中悬浮的水 ...

  6. 机械臂论文笔记(一)【基于卷积神经网络的二指机械手 抓取姿态生成研究 】

    基于卷积神经网络的二指机械手 抓取姿态生成研究 论文下载 摘要 第1章 绪论 1.1 抓取生成国内外研究现状 1.1.1已知物体抓取生成 1.1.2相似物体抓取生成 1.1.3 未知物体抓取生成 1. ...

  7. 毕业设计 - 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

    文章目录 1 前言 2 前言 3 数据集 3.1 良性样本 3.2 病变样本 4 开发环境 5 代码实现 5.1 实现流程 5.2 部分代码实现 5.2.1 导入库 5.2.2 图像加载 5.2.3 ...

  8. 基于卷积神经网络与迁移学习的油茶病害图像识别

    基于卷积神经网络与迁移学习的油茶病害图像识别 1.研究思路 利用深度卷积神经网络强大的特征学习和特征表达能力来自动学习油茶病害特征,并借助迁移学习方法将AlexNet模型在ImageNet图像数据集上 ...

  9. Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)

    Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类) 1.卷积神经网络 1.1卷积神经网络简介 1.2卷积运算 1.3 深度学习与小数据问题的相关性 2.下载数据 2.1下载原始数据 ...

  10. 基于卷积神经网络实现图片风格的迁移 1

    卷积神经网络详解 一.实验介绍 1.1 实验内容 Prisma 是最近很火的一款APP,它能够将一张普通的图像转换成各种艺术风格的图像.本课程基于卷积神经网络,使用Caffe框架,探讨图片风格迁移背后 ...

最新文章

  1. gbdt 回归 特征重要性 排序_RandomForest、GBDT、XGBoost、lightGBM 原理与区别
  2. POJ1149 最大流经典建图PIG
  3. php7 根据日期算星座,php根据日期判断星座的函数分享
  4. 微软开源AI诊断工具Error Analysis
  5. SpringBoot整合MyBatis并实现简单的查询功能
  6. python——redis
  7. linux阵列建立分区,在Linux上创建磁盘阵列———RAID-5
  8. 字符串,列表,元组,字典基本函数
  9. 201809-1 卖菜
  10. 通过 Kali Linux 暴力破解 WiFi
  11. 阿里巴巴官方:明年今日马云将不再担任董事局主席
  12. 小胜智能机器人如何和手机联网_当下热门的人工智能电话机器人会革手机的命吗?...
  13. 基于改进Bisenet的五官精确分割系统(源码&教程)
  14. 香港中大完成全球首个多专科单孔微创机械人手术临床研究
  15. (硅谷课堂项目)Java开发笔记4:前端基础知识(二)
  16. 使用Git从gitee仓库中,只下载其中的某单个的文件夹
  17. GB2312汉字编码字符集对照表
  18. Redis和Mecahe的简介
  19. Oracle-SQL查询表的一条数据
  20. linux 9 aml 设置wifi,aml常用命令.pdf

热门文章

  1. Matlab中的随即置乱函数randperm和randsample函数用法对比
  2. windows下安装emscripten python下载安装
  3. 【软件设计师】软件设计师考试内容及分值分布
  4. win10壁纸不能幻灯片放映_win10系统桌面无法自动播放幻灯片的具体技巧
  5. 委托作为参数进行传递
  6. Android -- 全局变量
  7. pytorch 打印网络参数
  8. (sklearn学习笔记)降维算法PCA与SVD的原理及用法
  9. 自己这一年来开发的几十个原创PHP程序,都有演示,大家可看下。
  10. 学生护眼灯色温多少合适?精选色温舒适的学生护眼灯