基于自注意力网络的SASRec

运用了自注意力网络(self-attention network,SAN)的序列推荐算法(SASRec)能以并行化的方式捕捉同一序列上不同时间步间的转移关系,最后通过加权求和的方式得出每个时间步的序列特征。

算法原理:

SASRec主要由一个输入层、一个自注意力网络和一个预测(输出)层组成。输入层负责将每个物品编码为一个物品嵌入向量,并根据它们在用户行为序列中的顺序将它们拼接为用户序列的嵌入矩阵,预测层从自注意力网络输出的嵌入矩阵中提取每个时间步的用户偏好特征,将其与候选物品特征结合后,即可得出对应的用户对物品的偏好值。

自注意力网络是由若干自注意力块堆叠而成的。一个自注意力块包含一个能捕捉不同时间步之间关联关系的自注意力层和一个独立捕捉个时间步信息的前馈层。

自注意力块内部和外部的网络层之间又通过残差连接,从而解决了梯度消失或梯度爆炸的问题,更好的传播低层的信息。

Abstract

序列动态推荐希望可以关注“上下文”信息。目前出现了马尔科夫链(MC)和循环神经网络(RNN)两种方法。马尔科夫链假设用户的下一个动作可以根据最后几个动作来预测,而RNN原则上允许发现更长期的语义。MC适合要求模型简约的极其稀疏的数据集。而RNN适合模型复杂且密集的数据集。

INTRODUCTION

新的序列模型Transfomer在机器翻译任务中实现了最先进的性能和效率。transformer基于一种“自注意力”的注意力机制,这个机制非常高效。能够揭示句子中单词之间的句法和语义模式。

构建的基于自注意力的序列推荐模型(SASRec)在每个时间步自适应地为先前的项目分配权重。

由于自注意力机制,SASRec 倾向于考虑对密集数据集的长期依赖,同时关注稀疏数据集上的近期活动。

适用于并行加速,比基于CNN/RNN的替代方案快一个数量级。

RELATED WORK

A. General Recommendation

B. Temporal Recommendation

C. Sequential Recommendation

D. Attention Mechanisms

METHODOLOGY

A. Embedding Layer

为了方便并行化,将每个用户的输入物品序列的长度固定为L。对于用户历史交互物品数量大于L的,我们截取最新的序列片段;对于用户的历史交互数量小于L的情况,我们使用一个填充项对序列的开头进行填充【A constant zero vector 0 is used as the embedding for the padding item.常量0用作填充项目的嵌入】。通常选择一个较大且合适的L值以完整地保留多数用户的历史物品序列,过度增大L值可能对提升推荐效果的作用不大,甚至会影响算法效率。

Positional Embedding

由于自注意力模型不包含任何循环或卷积模块,因此它不知道先前项目的位置。因此我们将一个可学习的位置嵌入P注入到输入嵌入。初始输入嵌入矩阵为物品嵌入向量和位置嵌入向量相加得到。物品嵌入矩阵和位置嵌入矩阵是被所有物品序列所共享的,由模型学习到的参数。{如果使用固定位置嵌入,会发现性能变差,为何?}

B. Self-Attention Block

自注意力定义如下,Q代表Query,K代表Key,V代表Value。在QKT得到的矩阵中,第p行、第q列的元素蕴含着第p个时间步和第q个时间步的内容之间的关联度信息。▲表示一个因果掩码(mask),可以看作通过一个形似下三角的过滤器将来自未来的信息滤除(即q>p的情况)。最后再乘以V,就是根据前面算出的权重对所有时间步的信息加权,重新得到各时间步的序列特征。

Self-Attention layer

自注意力方法使用相同的对象作为Query、Key和Value。自注意力操作将嵌入E作为输入,通过线性投影转换为三个矩阵,并将它们输入到注意力层。【投影使模型更加灵活,例如模型可以学习不对称交互】

Causality

由于序列的性质,模型在预测第(t+1)各项目时应仅考虑前t个项目。然而,自注意力层(St)的第t个输出包含后续项目的嵌入,这使得模型ill-posed。通过禁止Qi和Kj(j>i)之间的所有链接来修改注意力。【在计算第t+1个位置的注意力权重时,Qt+1只能和K1....Kt进行交互。保证模型在预测时不会利用未来的信息。】

Point-Wise Feed-Forward Network

尽管自注意力能够通过自适应权重聚合所有先前项目的嵌入,但是它是一个线性模型。因此我们使用前馈网络为模型赋予非线性并考虑不同潜在维度之间的相互作用。

注意Si和Sj之间没有交互作用,意味着可以防止信息泄露(从后到前)

C. Stacking Self-Attention Blocks

在经过第一个自注意力块后,Fi聚合了所有先前项目的嵌入,通过另外一个基于F的自注意力块来学习更复杂的项目转换可能会更有用。堆叠自注意力块(自注意力层+前馈网络)以及第b个自注意力块。

当网络更深,会出现几个问题(1)模型容量增加容易过拟合(2)训练过程不稳定(由于梯度消失等)(3)具有更多参数的模型需要更多的训练时间。

g(x)表示自注意力层或前馈网络。对于每个块中的层g,在输入g之前对输入x应用层归一化,对g的输出应用dropout,并将输入x添加到最终输出。

Residual Connections

残差网络的核心思想是通过残差连接将低层特征传播到高层。为什么有剩余连接?因为现有的序列推荐方法表明,最后访问的项目在预测下一个项目起着关键作用,然后在几个自注意力块后,最后访问的项目的嵌入与所有先前的项目纠缠在一起添加剩余连接可以将最后访问的项目嵌入传播到最后一层,更好的利用低层信息。

Layer Normalization

对输入进行归一化有利于稳定和加速神经网络训练。

Dropout

缓解过拟合问题,dropout正则化技术被证明在各种神经网络架构中有效。

dropout的想法:在训练期间以概率p随机“关闭”神经元,并在测试时使用所有神经元。dropout可以被视为集成学习的一种形式,考虑了共享参数的大量模型。

D. Prediction Layer

在b个自注意力块自适应且分层地提取先前项目的信息之后,预测下一个项目。

采用MF层来预测项目i的相关性:

E. Network Training

将每个用户序列转换为固定长度序列(通过截断或填充),将ot定义为时间步t的预期输出

binary cross entropy loss

该网络由Adam优化器(SGD随机梯度下降的变体)进行优化。

缺点

实验无法扩展到非常长的序列。只关注最近的动作而不是所有动作。

Q&A

为什么在学习到的序列特征上加一个用户的潜在特征并不能特工这个序列特征的表征能力?【推测原因是模型已经通过考虑用户的所有行为来生成序列特征,本身就已经包含了足够的用户信息。】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…

【机器学习chp9】集成学习

一、集成学习的概念 1. 什么是集成学习 定义:集成学习是一种通过组合多个模型(称为基学习器)来提升整体系统性能的方法。优点: 单个模型性能可能已经优化到极限,难以进一步提高,集成学习通过少量额外工作…

复合机器人整体解决方案

复合机器人是一种集成移动机器人和协作机器人两项功能为一身的新型机器人,更符合人们想象中“脑、眼、手、脚”融合的机器人终极形态。复合机器人的整体解决方案通常涉及多个方面,包括机器人本体、控制系统、感知系统、执行系统以及周边配套设备等。以下…

SpringBoot【十】mybatis之xml映射文件>、<=等特殊符号写法!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 在利用mybatis进行开发的时候&#xff0c;编写sql时可能少不了>、<等比较符号&#xff0c;但是在mapper映射文件中直接使用是不行的&#xff0c;会报错&#xff0…

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在那篇文章里&#xff0c;它使用了很多的英文…

windows下Qt5自动编译配置QtMqtt环境(11)

文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt网络编程 &#x1f448; 1、概述 Qt默认是不包含mqtt库的&#xff0c;如果需要使用到mqtt库就只能自己编译配…

关于OpenAI Sora上线!AI视频生成的新纪元

OpenAI Sora的上线无疑是人工智能领域的一个重要进展&#xff0c;它标志着AI技术在视频生成和编辑方面迈出了一大步。 引言 在人工智能的快速发展中&#xff0c;OpenAI的最新力作——Sora&#xff0c;标志着AI视频生成技术的一个新纪元。Sora的上线不仅是技术上的一次飞跃&am…

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…

Windows11安装Isaac Lab

1.1 下载文件 将 Isaac Lab 仓库克隆到您的工作空间&#xff1a; git clone https://github.com/isaac-sim/IsaacLab.git 1.2 创建Isaac Sim符号链接 F:cd IsaacLab 官方文档里路径/有问题&#xff0c;改成\&#xff09;&#xff1a; # 打开IsaacLab目录cd IsaacLab# 使用…

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址&#xff1a; git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

C++小碗菜之五:GDB调试工具

“程序员不是编写代码的人&#xff0c;而是调试错误的人。” – 约翰本尼斯&#xff08;John Bennet&#xff09; 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子&#xff1a; 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …

【软件测试面试题】测试理论/基础面试(持续更新)

Hi&#xff0c;大家好。最近很多朋友都在说今年的互联网行情不好&#xff0c;面试很难&#xff0c;不知道怎么复习&#xff0c;我最近总结了一份在软件测试面试中比较常见的测试理论/基础面试面试题合集&#xff0c;希望对大家有帮助。建议点赞收藏再阅读&#xff0c;防止丢失&…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码&#xff08;颜色可行修改&#xff09; // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端&#xff08;Docker Client&#xff09;2. Docke…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

Docker 安装Nginx与配置Nginx

文章目录 前言 1.什么是nginx2.为什么使用nginx3.高并发4.Nginx特点&#xff1a; 一、docker安装nginx二、Nginx配置简介 1.文件讲解2.nginx.conf3.default.conf 三、nginx负载均衡 1.配置服务器列表地址2.多集群策略 2.1 权重配置2.2 ip_hash2.3 least_conn2.4 fair2.5 url_h…

qwen2.5 模型JSON格式化输出案例

这篇不是通过prompt提示去实现,是用vllm、ollama推理框架支持;这里也给出个prompt实现的案例参考 1、 vllm推理 参考:https://docs.vllm.ai/en/latest/usage/structured_outputs.html 模型vllm运行: 用的Qwen/Qwen2.5-3B-Instruct模型 vllm serve ./qwen2_5 --host 0.0…