李宏毅-注意力机制详解

原视频链接: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.hqwc.cn/news/689523.html

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

相关文章

C#实现简单音乐文件解析播放——Windows程序设计作业2

1. 作业内容 编写一个C#程序,要求实现常见音乐文件的播放功能,具体要求如下:     1). 播放MP3文件: 程序应能够读取MP3文件,并播放其中的音频。     2). 播放OGG文件: 应能够播放ogg文件。     …

Qt | QSpinBox 类 QDoubleSpinBox 类(微调框)

01、QSpinBox 类 1、QSpinBox类是 QAbstractSpinBox 类的直接子类和具体实现, 2、QSpinBox 类被设计用于处理整数和离散值集合,对于浮点值使用 QDoubleSpinBox 类实现。 3、QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展,以支持使用不同的 字符串。 02…

抽空学学go

2024年5月9日11:14:24 学习go 看课8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili 文档[8小时转职Golang工程师 (yuque.com)]( 1.安装go 2024年5月9日11:27:16 2.安装 vscode go配置环境 vs code配置go开发环境 (zhihu.com) vscode里面配置代理&…

031.下一个排列Java实现

题意 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一)

基于LlaMA 3 LangGraph 在windows本地部署大模型 (一) RAG 是未来人工智能应用的基石。大家并不是在寻求仅仅产生无意义反应的人工智能。而目标是人工智能能够从特定文档集中检索答案,理解查询的上下文,指导自己搜索其嵌入内容或…

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接,允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据,实现了实时的双向通信。 这部分直接说你可能听不懂;我…

docker的centos容器使用yum报错

错误描述 学习docker过程中,基于 centos 镜像自定义新的镜像。拉取一个Centos镜像,并运行容器,容器安装vim,报错了。 报错:Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

vivado Spartan-7 配置存储器器件

下表所示闪存器件支持通过 Vivado 软件对 Spartan -7 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列非易失性存储器 进行擦除、空白检查、编程和验证。赛灵…

用于视频大型多模态模型(Video-LMMs)的复杂视频推理和鲁棒性评估套件

1 引言 最近,大型语言模型(LLMs)在同时处理广泛的NLP任务的同时展示了令人印象深刻的推理和规划能力。因此,将它们与视觉模态集成,特别是用于视频理解任务,催生了视频大型多模态模型(Video-LMMs)。这些模型充当视觉聊天机器人,接受文本和视频作为输入,并处理各种任务,包括视频…

(动画详解)LeetCode225.用队列实现栈

. - 力扣&#xff08;LeetCode&#xff09; 题目描述 解题思路 这道题的思路就是使用两个队列来实现 入栈就是入队列 出栈就是将非空队列的前n-1个元素移动到新的队列中去 再将最后一个元素弹出 动画详解 代码实现 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.…

Appwrite 1.5 已在云端发布 - 四月产品更新

Hello, Appwriters&#x1f44b; 以下是四月份的产品更新和一个令人兴奋的消息&#xff1a; Appwrite 1.5 已在 Appwrite Cloud 上发布。这个版本备受期待&#xff0c;我们很高兴终于能与大家分享这个好消息。 为了让您快速复习&#xff0c;您现在可以开始使用云计算平台上的…

网络匿名--不只是TOR

今天&#xff0c;我们将讨论互联网匿名和隐私&#xff1a; 如何隐藏你的真实身份。 什么是 TOR 。 如何以完全匿名的方式执行黑客任务。 如何使用proxy chain。 如何让我们的匿名性领先一步。 如何使用特定的操作系统保持匿名。 结论&#xff0c;如何实现互联网匿名和隐…