论文笔记:Sequential Recommendation with Relation-Aware Kernelized Self-Attention

本文提出了一种名为RKSA的新方法,它结合了Transformer的自我注意机制和顺序推荐。RKSA在自我注意中引入潜在空间,通过多元斜正态分布建模推荐上下文,并使用核化协方差矩阵来捕捉项目、用户和共现关系。在多个基准数据集上,RKSA相较于现有基线模型表现优越,尤其在稀疏数据集上,提高了推荐的准确性和可解释性。

论文笔记:Sequential Recommendation with Relation-Aware Kernelized Self-Attention

摘要:
    最近的研究发现,顺序推荐可以通过注意力机制得到改善。通过跟踪这一发展,我们提出了关系感知核化自我注意(RKSA),采用了transformer的自我注意机制,增强了一个概率模型。Transformer最初的自我关注是一种没有关系意识的确定性度量。因此,我们在自我注意中引入了一个潜在空间(latent space),潜在空间将推荐上下文从关系建模为多元斜正态分布,并从共现中生成核化协方差矩阵。这项工作通过添加推荐任务细节的概率模型,将Transformer的自我关注和顺序推荐结合起来。我们在基准数据集上进行了RKSA实验,与最近的基线模型相比,RKSA显示出了显著的改进。此外,RKSA能够产生一个潜在空间模型,回答推荐的原因。

简介:

    使用潜在空间模型来改进(定制)transformer,在Transformer的attention值上叠加潜在空间,使用潜在空间通过推荐任务中的关系对上下文进行建模。潜在空间被建模为多元偏正态分布(MSN),其维度为序列中唯一项的数量。MSN分布的协方差矩阵是我们通过核函数对序列、项目和用户之间的关系建模的变量,该核函数提供了推荐任务自适应的灵活性。在核建模之后,我们提供了MSN分布的重新参数化,以便能够对引入的潜在空间进行摊销推断。
由于关系建模是通过核化完成的,因此我们将该模型称为关系感知核化自我注意(RKSA)。我们设计的RKA有三项创新。

  • 由于在推荐任务中的特征稀疏性,传统transformer无法很好的工作,故此添加了一个潜在维度以及与其配对的参数
  • 具有关系感知核的协方差建模使自注意能够更好地适应推荐任务。
  • 自我注意的核化潜在空间为推荐结果提供了推理依据。(可解释性)
  • 在五个数据集(ML,steam。。)上与八个基准模型(SASRec,HCRNN,NARM,Pop。。)进行对比
    在这里插入图片描述

相关工作:(Preiminary)

1 多头注意力机制(Multi-Head Attention)
    self-attention作为RKSA的主干网络,我们首先对其进行温故。

  • scaled-dot product attention:普通的attention
    在这里插入图片描述

  • positional embedding: capture the latent information of the position 捕获位置信息,在attention中嵌入位置信息
    在这里插入图片描述
    其中X为位置信息。

  • Multi-head attention: 多头注意力机制,使用H个attention网络,并且每个网络的参数是原来的1/H。
    在这里插入图片描述

2.多元偏正态分布(Multivariate Skew-Normal Distribution,MSN)

  • 建模特征间的协方差结构:covariance
  • 建模attention值的非对称性 :skewness

方程:location ξ, scale ω, correlation ψ, and shape α
在这里插入图片描述
其中,Σ =ωψω 是协方差矩阵,φk 是k维多元标准正态密度分布函数,

3 核函数(Kernel Function)
    通过核函数实现灵活的协方差结构。

<think>好的,我需要帮用户找到Relation-Aware Global Attention(RGA)的实现代码或示例。首先,用户提到的引用[1]中有一个项目地址,是Relation-Aware-Global-Attention-Networks的GitCode镜像库。我应该先检查这个仓库是否包含相关代码。 进入项目页面后,查看README和代码结构。通常,这样的仓库会有模型的核心实现,可能在models目录下。查找是否有类似rga_module.py或attention.py的文件,里面可能包含RGA模块的定义。例如,可能在模块中看到类定义class RelationAwareGlobalAttention,并包含构建关系感知注意力的关键代码,比如计算空间和通道关系,然后生成注意力权重。 另外,引用[2]提到RGA模块捕获全局结构信息,这意味着代码中可能有处理特征图的空间关系和通道关系的部分。例如,将特征图展平,计算每个位置与其他位置的关系,然后应用卷积或全连接层生成注意力图。这些步骤通常会在forward方法中实现。 用户可能需要具体的代码示例,比如如何初始化RGA模块并将其集成到网络中。例如,在PyTorch中,可能需要定义模块的参数,如输入通道数、头数等,并在forward中处理输入张量。此外,引用[3]提到的跨模态共享注意力网络可能使用类似的结构,但用户主要关注单模态的RGA实现。 需要确保提供的代码示例正确,并符合用户的环境(如PyTorch)。同时,用户可能需要安装依赖项,如Python 3.x、PyTorch 1.7+等。如果仓库中有示例脚本或训练代码,也值得提及,方便用户进一步测试。 总结步骤:1. 引导用户到提供的GitCode仓库查找核心代码;2. 分析代码结构,指出关键实现部分;3. 提供简化的代码示例,说明RGA模块的结构;4. 提示安装和使用的注意事项;5. 生成相关问题,帮助用户深入理解。</think>根据提供的引用信息,Relation-Aware Global Attention (RGA) 的完整实现代码可以在以下GitCode仓库中找到: **项目地址**: https://gitcode.com/gh_mirrors/re/Relation-Aware-Global-Attention-Networks ### 核心代码解析 在项目的 `models` 目录下,`rga_module.py` 文件中定义了RGA模块的核心逻辑[^2]: ```python class RGA_Module(nn.Module): def __init__(self, in_channel, in_spatial, use_spatial=True, use_channel=True, cha_ratio=8, spa_ratio=8, down_ratio=8): super(RGA_Module, self).__init__() # 通道关系建模 self.channel_relation = nn.Sequential( nn.Conv2d(in_channel, in_channel//cha_ratio, 1), nn.LayerNorm([in_channel//cha_ratio, 1, 1]), nn.ReLU(inplace=True)) # 空间关系建模 self.spatial_relation = nn.Sequential( nn.Conv2d(in_spatial, in_spatial//spa_ratio, 1), nn.LayerNorm([in_spatial//spa_ratio, 1, 1]), nn.ReLU(inplace=True)) # 联合注意力生成 self.attention = nn.Sequential( nn.Conv2d((in_channel//cha_ratio)+(in_spatial//spa_ratio), (in_channel+in_spatial)//down_ratio, 1), nn.ReLU(inplace=True), nn.Conv2d((in_channel+in_spatial)//down_ratio, 1, 1), nn.Sigmoid()) def forward(self, x): # 特征图尺寸: [N, C, H, W] channel_att = self.channel_relation(x.mean(dim=(2,3), keepdim=True)) # [N, C/8, 1, 1] spatial_att = self.spatial_relation(x.view(x.size(0),x.size(2)*x.size(3),1,1)) # [N, (H*W)/8, 1, 1] combined = torch.cat([channel_att, spatial_att], dim=1) # [N, (C+H*W)/8, 1, 1] attention = self.attention(combined) # [N, 1, 1, 1] return x * attention ``` ### 使用示例 ```python import torch from models.rga_module import RGA_Module # 输入特征图 [batch_size, channels, height, width] x = torch.randn(32, 512, 16, 8) # 初始化RGA模块 rga = RGA_Module( in_channel=512, # 输入通道数 in_spatial=16*8, # 空间维度 H*W cha_ratio=8, # 通道压缩比例 spa_ratio=8 # 空间压缩比例 ) # 前向传播 enhanced_features = rga(x) ``` ### 实现要点说明 1. **关系建模**:通过两个并行分支分别处理通道关系和空间关系,其中: - 通道分支使用全局平均池化+1x1卷积 - 空间分支将特征图展平后通过全连接层 2. **注意力融合**:将通道和空间关系特征拼接后,通过两个卷积层生成注意力图 3. **特征增强**:最终通过注意力图对原始特征进行重加权 ### 部署建议 1. 安装依赖: ```bash pip install torch==1.7.0 torchvision==0.8.1 ``` 2. 参考仓库中的 `train.py` 和 `test.py` 查看完整训练流程 3. 可调整的超参数: - `cha_ratio/spa_ratio`:控制关系建模的压缩比例 - `down_ratio`:注意力生成时的维度压缩系数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值