李宏毅-注意力机制详解

原视频链接:attention

一. 基本问题分析

1. 模型的input

无论是预测视频观看人数还是图像处理,输入都可以看作是一个向量,输出是一个数值或类别。然而,若输入是一系列向量,长度可能会不同,例如把句子里的单词都描述为向量,那么模型的输入就是一个向量集合,并且每个向量的大小都不一样。解决这个问题的方法是One-hot Encoding以及Word Embedding,其中Word Embedding更能考虑到相似向量的语义信息,如下所示:

2. 模型的output

输出可以是每个vector都产生个对应的label,即N to N。如:在社交网络中,推荐某个用户商品(这个用户可能会买或者不买);

也可以是N to 1。如:情感分析,给出一句话this is good,输出positive;反之给出另一段消极的话输出negative;

也可以是N to M。如:翻译工作,翻译到另一个语言可能和原语言单词长度不一样

3. attention的引入

比如我们想利用全连接网络,输入一个句子,输出对应单词的标签。当一个句子里出现两个相同的单词,并且它们的词性不同(例如:I saw a saw. 我看见一把锯子),这个时候就需要考虑上下文:利用滑动窗口,每个向量查看窗口中相邻的其他向量的性质。 但是滑动窗口所观看的视野是有限的,窗口增大又会计算量增大,且容易过拟合,这就引出了self-attention机制。

二. self-attention机制

输入整个语句的向量到self-attention中,输出对应单词的向量,再将其结果输入到全连接网络,最后输出标签。以上过程可多次重复,如图所示:

 1. 初探“self-attention层”内部机理

这里的a1-a4可以是输入的向量,也可以是隐藏层的输出,b1-b4都是观察到全局的信息(即a1-a4)才得到的输出,如下所示:

 那么这里的b1-b4又是如何产生的呢?b1考虑了a1和这个序列里面哪些是重要的,哪些是次要的。这种重要程度指标通过α表示,即向量之间都有一个相关程度:

 接下来考虑α是如何计算的,下图有两种方法,论文用的是第一种(图左侧),因此着重讲述。继续使用上面的例子,绿色方块代表两个向量a1和a4,我们想计算它们的相关度,将其分别乘上矩阵Wq与Wk(这两个矩阵是通过模型学习学到的)得到向量q与k,再将q与k做内积就得到α了。

 

  这样我们可以分别计算出a2、a3、a4对应的k2、k3、k4(Wk是这些向量所共享的),我们可以分别计算出a1与a2、a3、a4的相关度α1,2、α1,3、α1,4,当然α1,1是和自己的相关度,也可以算。如下所示:

 有了α后,我们可以考虑b1-b4的计算了,怎么使用这些α抽取关注的特征呢?我们再引入一个矩阵Wv(同样是学习得到的),分别将a1-a4与Wv相乘得到v1-v4,将v1与α1,1相乘,v2与α1,2相乘...最后相加,即得到了b1。b2、b3、b4是同理的,下图只画出来了b1:

 2. 再探“self-attention层”内部机理

看起来可能复杂,但是实际上涉及的参数只有输入的向量以及Wq、Wk、Wv三个矩阵。运算过程也都是矩阵乘法。我们从矩阵乘法的角度重新理解下,如下图所示,我们将输入向量a1-a4拼起来,分别乘Wq、Wk、Wv即得到了q1-a4、k1-k4、v1-v4:

 

将k1-k4与q1-q4做内积即得到了每个向量与其他三个向量的相关度,如下图所示,例如第一个向量与其他三个向量的相关度为α1,2、α1,3、α1,4,而α1,1代表和自己的相关度:

将α组成的矩阵记为A,经过softmax处理一下记为A':

 v1-v4组成矩阵V,与A'相乘,根据矩阵乘法,V与A'的第一列相乘再相加的结果即为b1,同理可得b2-b4,b1-b4组成的矩阵就是最终的输出了:

 3. 总结 

  • 阶段1:根据Q和K计算两者的相似性或者相关性
  • 阶段2:对第一阶段的原始分值进行归一化处理
  • 阶段3:根据权重系数A'对V进行加权求和,得到最终的输出

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

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

相关文章

Spring STOMP-消息处理流程

一旦STOMP的接口被公布,Spring应用程序就成为连接客户端的STOMP代理。本节描述服务端消息处理的流程。 spring-messaging模块包含消息类应用的基础功能,这些功能起源于Spring Integration项目。并且,后来被提取整合到Spring框架,…

LeetCode - 0001 两数之和

题目地址:https://leetcode.cn/problems/two-sum/description/ 我:你好,面试官,我对算法了解的不多,只刷过LeetCode第一题,你不要问的太难了,好,我准备好了。 面试官:啊…

Spring Boot 调用外部接口的几种方式

Spring Boot 调用外部接口的几种方式 在微服务架构中,服务间的调用是不可或缺的环节。Spring Boot 为开发者提供了多种方式来实现这一任务,这个文章将为你详细介绍这些方式。 一、使用RestTemplate RestTemplate是 Spring Boot 早期版本中常用的 REST 客…

十个最适合论文写作的GPTs及其应用

文章目录 一、GPTs让一切皆有可能二、最适合论文写作的GPTs及其应用1、[Paper Search Engine](https://chat.openai.com/g/g-9v5gHG9Bo)2、[Academic Paper Specialist(学术论文撰写专家)](https://chat.openai.com/g/g-jryw3pfsH)3、[Paper Connect 论文…

【八十七】【算法分析与设计】单调栈全新版本,右大于,左小于右小于等于,739. 每日温度,907. 子数组的最小值之和

739. 每日温度(右大于) 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示…

微信公众号接入chatGPT自动回复(2)

微信公众平台 配置自动回复的服务器 application.properties中的配置 验证服务器接口配置 其实就两个接口(相同的url地址,只不过请求方式不一样) 1.验证接口(get请求) 2.自动回复接口(post请求) 完整代码 这个地址就是上面URL配置的地址 如果使用Nginx的话自动配置 将该代…

[原创](Modern C++)现代C++的字符串与Windows API交互的正确方式.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

11个免费的 android数据恢复应用程序功能分析

在手机上丢失数据是一个很大的错误。但是,在这种情况下,除了惊慌失措之外,最好开始使用android数据恢复应用程序搜索以查找将其取回的方法。您可以检查手机的备份存储以在Android上进行数据恢复,但是如果数据仍然无处可寻&#xf…

@PostConstruct

PostConstruct initializeBean方法–> PostProcessor.postProcessMergedBeanDefinition --> InitDestroyAnnotationBeanPostProcessor.postProcessBeforeDestruction 被PostConstruct注解的方法会在Bean初始化的时候被调用,如下图: 继承关系如下…

jenkins连接ubuntu普通用户节点

1.创建credentials 2.创建node 3.在jenkins服务器还需要进行的操作(jenkins服务器中) mkdir /var/lib/jenkins/.ssh ssh-keyscan -H 192.168.110.204 >> /var/lib/jenkins/.ssh/known_hosts chown -R jenkins:jenkins /var/lib/jenkins/.ssh/ 4.…

相交链表(数据结构)

160. 相交链表 - 力扣(LeetCode)https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 题目 解决思路 1,找到相交的点 相交链表的关键也就是找到相交的点,所以我们需要首先判断有没有相交的节点&#…

程序员必读书籍推荐

在快速发展的编程领域,不断学习和积累是每位程序员的必修课。以下是几本对于程序员来说,不容错过的必读书籍。 《代码大全》是一本编程界的经典之作,书中不仅详细介绍了编程的最佳实践,还深入探讨了软件构建的艺术。对于想要提升…

最新的云渲染100活动有哪些?渲染100邀请码1a12

随着科技的进步,云渲染已经成为设计行业的必备工具,各个云渲染平台为了吸引用户也推出各种各样的活动,今天我们以广受好评的渲染100为例,来说下它们的活动体系。 1、新用户活动 渲染100对新用户很友好,提供了充足的测…

K-RTD01和利时FW248中控卡件

K-RTD01和利时FW248中控卡件。 系统概述 的全称为保护工程师站及录波分析后台”是利用现代计算机和网络技术,K-RTD01和利时FW248中控卡件。实时收集变电站运行和故障信息,并通过对变电站的故障信息进行综合分析,K-RTD01和利时FW248中控卡件。…

Ps 滤镜:便条纸

Ps菜单:滤镜/滤镜库/素描/便条纸 Filter Gallery/Sketch/Note Paper 便条纸 Note Paper滤镜用于模拟手工纸张的质感和视觉效果。此滤镜将图像简化并添加浮雕和颗粒效果,使图像看起来像是在手工制作的纸上绘制或打印。 “便条纸”滤镜通过结合使用浮雕效果…

【代码】matlab调用COM端口获取传感器数据

参考链接 原始代码 clc clear close all fclose(instrfind)%先关闭所有串口 % scom serial(COM7); %建立串口对象函数(需要手动和自己电脑的端口匹配) fclose(scom); %关闭串口设备对象 scom.InputBufferSize 512;%输入缓冲区 scom.O…

为什么一个项目在idea中的配置文件设置端口号为8000,在vue中设置端口号为8080,项目可以运行成功?

在学习一个前后端分离开发的项目中,突然发现该项目在idea的配置文件中,设置的端口号为8000 application.properties: server.port8000 而在vue的配置文件中,设置的项目端口号为8080: devServer: {port: 8080,clien…

Copilot for Microsoft 365 扩充新增 16 种语言

最近,微软公司发布公告,进一步扩大 Copilot for Microsoft 365 语言支持,新增 16 种,支持的语言总数达到 25 种。 新支持的语言如下: 阿拉伯语 捷克语 丹麦语 荷兰语 芬兰语 希伯来语 匈牙利语 韩语 挪威语&am…

Sass详解:CSS预处理器的强大之处

Sass详解:CSS预处理器的强大之处 Sass,全称为Syntactically Awesome Style Sheets,是一种CSS预处理器,它扩展了CSS的功能,提供了变量、嵌套规则、混合(Mixins)、函数等强大的编程特性&#xff…