深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention

news2025/1/16 14:01:42

目录

一.引言

二.Attention

1.Common Attention 

2.Google Attention

三.Multi-Head Attention

四.总结


一.引言

Attention 注意力机制最早来源于我们自身的视觉感官,当我们视觉获取到图像信息时,我们并不是从前往后从上往下均匀的扫描画面,而是会更偏重观测某一个位置,上面的热力图给出了我们观察建筑物时,视觉更关注,即 Attention 更多的地方。同样,在推荐场景下,图像信息就类比为我们对应的 Item,而我们感官的 Attention 侧重则根据用户历史行为序列决定。

二.Attention

1.Common Attention 

注意力 Attention 函数可以描述为将 Query 和一组键值对 Key-Value 映射到 Output,其中 Query、Key、Value 和 Output 都是向量。输出计算为值的加权和,其中分配给每个值的权重由 Query 与相应 Key 的兼容性函数计算。

keys 负责与 query 计算权重,得到权重后与 values 进行加权求和得到 output,在一些开源代码中,我们经常看到 Attention 代码中有 Q、K、V 类似标识,其中:

Q - Query    在推荐场景下为目标 Item 

K - Keys      在推荐场景下为用户行为 Goods

V - Values   在推荐场景下 V 与 K 相同,均为用户行为 Goods

推荐实战场景下,Query 与 Key 的权重计算一般采用 Dot-Product 的方式,对于 N 个 Key 将得到 N 个权重,根据场景不同,也可以决定是否对权重采用 Softmax 归一化,再进行加权求和。

2.Google Attention

Google《Attention Is All You Need》一文中在原始计算公式的基础上增加了比例因子 1/√dk。最常用的 Attention 函数是 Add Attention 和 Dot-Product Attention。理论上二者复杂度相似,但是 Dot-Product Attention 可以通过矩阵优化代码提高效率。除此之外,由于 Dot-Product Attention 有时幅度较大容易将 softmax 函数推入梯度极小的区域,为了抵消这种影响,谷歌将点积做了缩放,缩放因子为 √dk。

三.Multi-Head Attention

Multi-Head Attention 最早应用于 NLP 任务中,其代替 RNN 实现了 Seq2Seq 的模型框架。

Q - Query    在推荐场景下为目标 Item,批量计算时维度为 None x 1 x Dim 

K - Keys      在推荐场景下为用户行为 Goods,批量计算时维度为 None x T_k x Dim

V - Values   在推荐场景下 V 与 K 相同,均为用户行为 Goods

Multi-Head 可以理解为 Q、K、V 分解为 Head 个子空间,对每个子空间内的向量进行 Attention 操作,例如一个 Query 的维度为 None x 128,如果采用 Head = 4 的场景,则 Query 被分为 4 个 None x 32 的向量,同理 K、V 对应的向量也被分解。随后每个 None x 32 进行 Attention 操作,最后再 Concat 合并。

Tips:

NLP 场景下 Query 为语句序列,维度为 None x T_q x Dim,由于推荐场景下 Query 候选集为单一商品,所以维度为 None x 1 x Dim。Multi-Head Attention 可以理解为在向量的不同子空间内进行 Attention,以表征不同的含义。除此之外,Multi-Head Attention 还分别增加了前后两个 linear 模块,与传统 Attention 直接 lookup 获取向量内积有所不同。上图可以看作是 Multi-Head 的立体示意图。

四.总结

上面简单介绍了 Attention 与 Multi-Attention 机制,目前 Attention 机制已经广泛应用于推荐与自然语言处理任务中,除了上面最基础的 id 对应 embedding 信息外,很多场景下通过增加 id SideInfo 侧信息以及序列行为相对位置与绝对位置信息的 Position_embeeding 优化 Attention 的效果。后续会使用 kears 实现简单的 Attention 与 Multi-Head Attention 机制,欢迎批评指正~

参考:

Attention Is All You Need

更多推荐算法相关深度学习:深度学习导读专栏 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用FinalShell连接VirtualBoxLinux虚拟机?

本章教程,主要介绍一下如何用FinalShell连接VirtualBoxLinux虚拟机。 当安装完虚拟机的时候,你可能会遇到找不到ifconfig命令。这个是因为当时安装过程中,我们选择的是最小化安装,所以有些命令是需要按需进行安装的。 目录 1、li…

JavaScript:原型、原型链、继承

一、理解原型 1.1、人工智能解释 JavaScript中的原型是一种机制,它允许在创建对象时共享属性和方法。每个JavaScript对象都有一个原型对象,它包含一些公共属性和方法,可以被该对象和其他对象共享。 当你创建一个对象时,Javascr…

案例13:Java社区帮扶对象管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

HTML+CSS实训——Day01——安装好环境+写一个简单的应用启动页面

前言 学校最近开始实训周了,一上就是一个月,本来想在课上学点考研的东西的,但是无奈任务重,而且最后还能有点小奖励,就认真学了,再者说,html也挺重要的,学一学也不算浪费时间。 软…

【JUC】Synchronized与锁升级

【JUC】Synchronized与锁升级 文章目录 【JUC】Synchronized与锁升级1. 概述1.1 无锁1.2 偏向锁 1. 概述 用锁能够实现数据的安全性,但是会带来性能下降。无锁能够基于线程并行提升程序性能,但是会带来安全性下降。如何达到两者的平衡呢? s…

VuePress V1 踩坑记录

文章目录 前言1.Node.js 版本问题2.侧边栏3.添加页面目录导航4.非首页 footer 不生效5.部署到 Github 的错误vuepress 的 docs 与 Github Pages 的 docs 目录冲突样式丢失 7.资源引用问题本地图片找不到引用 CSDN 图片报 403 错误 参考文献 前言 我的第二本开源电子书《后台开…

Raft集群变更:This article is all your need

Background 为了变化raft集群,我们可以选择:.停在旧配置,然后再上线新配置 。但是这个会导致整个集群变得不可用,同时手动修改也会到来问题。 所以我们采用热变更 这也导致了安全性的问题,变更过程有可能导致两个le…

miniconda安装+pycharm安装

miniconda安装pycharm安装 1.miniconda安装2.pycharm安装3.pycharm环境配置 1.miniconda安装 miniconda下载路径:https://docs.conda.io/en/latest/miniconda.html 打开后选择对应的电脑系统及python版本下载 下载完成后双击运行 选择安装路径,记住安装…

SpringCloud Eureka 的详细讲解及示意图

目录 SpringCloud Eureka 服务注册与发现 Spring Cloud 组件选型- 图 当前项目架构问题分析-引出Eureka 一图胜千言 问题分析 引入Eureka 项目架构 解读上图 Eureka采用了 CS 的设计架构, 创建单机Eureka Server-注册中心 创建e-commerce-eureka-server-90…

【深度学习】- 作业3: CIFAR10图像分类

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

【数据结构与算法】- 周测三

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

【瑞萨RA_FSP】UART 编程实战

文章目录 一、UART收发回显二、UART指令控制RGB灯三、基于环形队列的UART收发回显 一、UART收发回显 UART只需两根信号线即可完成双向通信,对硬件要求低,使得很多模块都预留UART接口来实现与其他模块或者控制器进行数据传输, 比如GSM模块&am…

【Unity3D】反射和折射

1 前言 立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射和折射效果。 立方体纹理采样原理:从世界坐标系的坐标原点出…

深入printf

目录 printf的定义 printf的使用 函数说明 说明符(specifier) flags(标志) width(最小宽度) .precision(精度) length(类型长度) 转义序列 printf的…

linux(软硬链接)

目录: 1.软连接 2.硬链接 ----------------------------------------------------------------------------------------------------------------------------- 1.软连接 linux当中有两个概念,一个是软连接,一个是硬链接,在学习…

Golang每日一练(leetDay0074) 词典类设计、单词搜索II

目录 211. 添加与搜索单词 - 数据结构设计 Design-add-and-search-words-data-structure 🌟🌟 212. 单词搜索 II Word Search ii 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golan…

基于C#和Blazor开发的前后端分离框架

Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 开源地址 https://gitee.com/known/Known 开发环境 .NET 7VS2022 概述 基于C#和Blazor实现的快速开发框架,前后端分离…

【深度学习】- 作业4: 脑部MRI(核磁共振)图像分别

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

【数据结构与算法】- 周测四

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

三、尚医通医院管理实现

文章目录 三、医院管理实现1、医院列表1.1 医院列表api接口1.1.1 添加service分页接口与实现1.1.2 添加controller方法 1.2 service-cmn模块提供接口1.2.1添加service接口与实现1.2.2添加controller方法 1.3封装Feign服务调用1.3.1搭建service-client父模块1.3.2 搭建service-c…