《Dual Sparse Attention Network For Session-based Recommendation 》阅读
Dual Sparse Attention Network For Session-based Recommendation
概要
本文AAAI-2021会议上的一篇文章。本文设计了Dual Sparse Attention Network(DASN)来解决注意力机制的缺点。在该方法中,探讨了一种学习目标项目的embedding用来建模用户的当前偏好,并应用了自适应稀疏变换函数来消除不相关项目的影响。
注意力机制 :可以自动为项目分配不同的影响权重用来捕获相关信息,可以使得会话中的项目加权和提供了用户偏好更好的表示,并且提高了预测精度
在大多数的基于注意力机制的推荐模型中有这样两个假设:
* 将用户的最后一次点击视为用户当前偏好的查询向量
* 考虑会话中的所有项目都有利于最终结果


Introduction
本文章的主要贡献:
- 提出了一种基于由自我注意和普通注意组成的双重注意网络的新框架。它学习与项目级协作信息的目标嵌入,并对高级信息使用不同的查询、关键字和值向量来有效地建模基于会话的推荐场景。
- 引入了一种基于上下文的自适应稀疏注意机制,以发现会话中可能的不相关项目,并为相关项目保留更高的权重。
- 在两个真实数据集上的实验表明,提出的模型不仅可以获得比现有方法更好的结果,而且由于稀疏注意机制,还提高了模型的可辨性
定义
基本定义
I=\{i_1,i_2,\ldots,i_m\}表示所有商品的集合
S=\{s_1,s_2,\ldots,s_n\}表示根据时间排序的会话,s_p表示第p个被点击的商品,n表示会话长度
S_t=\{s_1,s_2,\ldots,s_t\}表示在时间t步阶段的会话的前缀,作用是用来预测下一个点击项s_{t+1}
为每个项目i生成得分\hat{y_i},最终将top-K分数的项目呈现给用户
稀疏变换函数(Sparse Transformation Function)
Softmax函数是一种激活函数,将一个数值向量归一化为一个概率分布向量,但是返回的值都是正的。这样的非零概率会为无用数据分配权重,从而影响推荐的能力。
稀疏变换倾向于为向量中的低得分产生0,它和softmax具有相似的性能,但具有选择性、更紧凑、注意力集中。
Sparsemax:
\operatorname{sparsemax}(x)=\underset{p \in \Delta^{d-1}}{\operatorname{argmin}}\|p-x\|^2\tag{1}
本文用由Peters, Niculae, and Mar-tins 2019提出的\alpha \text {-entmax }函数来代替softmax
\begin{aligned} &\alpha \text {-entmax }(x)=\underset{p \in \Delta^{d-1}}{\operatorname{argmax}} p^T x+H_\alpha^T(p), \text { where } \\ &H_\alpha^T(p)= \begin{cases}\frac{1}{\alpha(\alpha-1)} \sum_j\left(p_j-p_j^\alpha\right), & \alpha \neq 1 \\ H^S(p), & \alpha=1\end{cases} \end{aligned}\tag{2}
其中\Delta^{d-1}=\left\{p \in \mathbb{R}^d \mid 1^T p=1, p \geq 0\right\}(归一化的向量),H_\alpha^T(p)是Tsallis \alpha-熵(一个由标量\alpha>1参数化的熵族),当\alpha = 1时,它就是Softmax,当\alpha = 2时,它是Sparsemax。本文提出了一种自动学习\alpha的方法,允许每个会话根据上下文自适应选择参数

方法
DSAN模型分为四个主要部分:
- Embedding layer:将输入会话转换为两个向量
- Target embedding Learning:通过稀疏自我关注来利用项目级的协作信息
- Target ateention layer:与初始信息相结合
- Prediction layer:最终结果预测
下图为DSAN的总体架构:红色虚线表示可能的零权重值

Embedding Layer
将输入会话转换成两个向量,分别为:item embedding ,positional embedding。
c_i=Concat(x_i,p_i)\tag{3}
其中x_i就是item embedding,p_i是positional embedding,c_i是item和position的concatenated embedding
Concatenated embedding可以了解item的协作信息和item在会话中的位置
为了在没有特定目标商品的的情况下学习当前用户的偏好表示,本文在输入序列的末尾添加了一个特殊的item索引,该索引由的初始化由其他item embedding 初始化。在图中即为x_s和p_s。最终\hat{C} = \{c_1,c_2,\ldots,c_t,c_s\}其中c_s是我们需要预测的目标的embedding,他的位置就在t+1,c_s由x_s和p_s构成。不同会话中的特殊item的索引共享相同的embedding。
Target Embedding Learning
该部分通过自注意力机制在会话的embedding c中学习到会话中item对之间的依赖关系。
自注意力机制如下
\hat{A}=\alpha-\operatorname{entmax}\left(\frac{Q K^T}{\sqrt{2 d}}\right) V \tag{4}
Q、K、V分为代表Query、Key、Value,Q包含查询的表示,K是键矩阵,V是参与item的值矩阵
本文中使K=V=\hat{C},Q=f(\hat{C}W^Q+b^Q),其中f(\cdot)是ReLU函数,W^Q是加权矩阵,b^Q是偏差向量
\alpha-entmax函数中的\alpha的值的由下公式确定:
\alpha = \sigma(W_\alpha c_s + b_\alpha)+1 \tag{5}
其中\sigma为sigmod函数,W_\alpha为加权矩阵,b_\alpha为偏差值,二者都是可学习参数。c_s就是前面增加的特殊embedding。最终\alpha的值在1-2之前,这会使得激活函数\alpha-entmax更加的平滑
之后应用Position-wise Feed-Forward Net-work(位置前馈网络)赋予模型更多的非线性
F F N(\hat{A})=\max \left(0, \hat{A} W_1^{\text {self }}+b_1\right) W_2^{\text {self }}+b_2\tag{6}
之后在结果添加残余链接和层归一化用来减轻模型训练的不稳定性。还添加了退出机制用来缓解过度拟合
本文将上述的整体过程定义为:E = SAN(\hat{C}),E=\{e1,\ldots,e_t,e_s\}就是最终的输出结果,e_s是learned target embedding,它包含特殊item索引并融合整个会话的信息以表示哟用户的真实当前偏好
Target Attention Layer
自注意网络可以理解为特征提取,其中每个item embedding包含了彼此之间的信息,并且包含了learned target embedding的信息,但是忽略了初始信息。
因此,在这一层中,基于不同的K,Q,V直接应用一个Vanilla attention 网络来学习整个会话的表示。
\beta_p=\alpha-\operatorname{entmax}\left(W_0 f\left(W_1 e_p+W_2 e_s+b_a\right)\right) \tag{7}
实际上就是经过FFN(前馈网络)然后再经过激励函数得到权重\beta,该权重表示前t个item的embedding和learned target embedding的权重关系
其中
\alpha=\sigma\left(W_\alpha e_s+b_\alpha\right)+1 \tag{8}
在获得会话前缀S_t的权重向量\beta = \{\beta_1,\beta_2,\ldots,\beta_t\}后,整个会话的表示可以被计算为:
h_s=\sum_{p=1}{\beta_p c_p} \tag{9}
Prediction Layer
在本层中,根据上层的输出来评估下一个点击项目的概率。
首先将h_s,e_s拼接,然后应用FFN来获得DASN模型的最终表示
\begin{aligned} h &=\operatorname{Concat}\left(e_s, h_s\right) \\ z &=f\left(W_z h+b_z\right) \end{aligned} \tag{10}
其中f(\cdot)是非线性激活函数SELU
对于每个item,它的概率计算如下:
\begin{gathered} \hat{z}=w_k \operatorname{L2Norm}(z), \hat{x_i}=\operatorname{L2Norm}\left(x_i\right) \\ \hat{y_i}=\operatorname{softmax}\left(\hat{z}^T \hat{x_i}\right) \end{gathered} \tag{11}
w_k是归一化权重,x_i是初始item embedding
L2Norm是一种损失函数,主要是为了防止过拟合以及ill-posed(不存在唯一稳定解)问题
这种加权归一化和正则化softmax损失会使得训练过程更稳定,对超参数不敏感
最后损失函数采用交叉熵函数:
L(y, \hat{y})=-\sum_{i=1}^m y_i \log \left(\hat{y}_i\right) \tag{12}
其中y是对应的one-hot encoding
实验结果

总结
对比softmax采用新的稀疏变换函数的确实能够使得信息更加集中,能够舍弃一些无关点击对结果带来的影响,并且本文在最后是结合了整个会话过程中的item embeding而不是最后一次点击,个人感觉可能推荐的准确度确实应该会提高一些。本篇文章整体的阐述过程也十分的清晰,是一篇很好的文章。
