Transformer中Self-Attention的详细解读

news2024/12/30 2:52:19

Transformer最早是在论文《Attention is All You Need》中提出的,目前已广泛应用于NLP领域,如语言翻译、文本分类、问答系统等。由于在产品规划中需要使用这样的模型结构,因此花了一些时间对其进行了一些学习理解。

除了阅读论文及配套的代码之外,还参考了Jay Alammar的技术讲解博客The Illustrated Transformer。这篇博客非常推荐Transformer的初学者,像我这样的语言模型菜鸟读起来都没什么压力。

1. Transformer模型结构

在讲Self-Attention之前,我们先来看看Transformer的结构。论文中给出的Transformer结构如下:

图1 model architecture

不同数量的Encoder和Decoder的堆叠,就可以组成不同的Transformer结构,例如在翻译模型中,可以使用6个Encoder和6个Decoder来组成整个模型:

图2 NMT模型的完整结构

那么,接下来我们看看每个Encoder和Decoder内部的结构。简单来理解,每个Encoder内部包含两大部分:Self-Attention和Feed-Forward;而Decoder内部结构则略复杂一点,比起Decoder,还多了一层Encoder-Decoder Attention。

图3 encoder和decoder内部模块划分

2.  数据流

我们关注的第二个议题是,作为文字的输入数据是如何在模型中处理的?答案就是:需要将文字转换为数字,也就是Word Embedding。这是因为机器学习算法通常要求输入为数值向量,网络并不擅长处理字符串。将词汇或短语从文字映射成实数向量,除了易于神经网络处理,另外还有两个重要而有力的特性:(1) 降维, (2) 上下文相似性,这两方面都使得语言能够被更有效地表示。

Word Embedding只在最下面一层的Encoder进行,其他Encoder接收上一个Encoder输出的向量。向量大小为512。对一整个句子中的词语完成Embedding之后,这些vector将会经过每个encoder的Self-attention层和Feed-forward层。

图4 Encoder中的数据流

从上图中我们可以看到,每一个位置的词向量按照自己的路径经过Encoder,在Self-attention模块,这些词向量会有交互,在Feed-forward模块,每个词向量是独立传播的,这也有利于它们的并行执行。

3. Self-Attention的实现

论文中对Self-attention的描述为Scaled Dot-Product Attention,并给出了实现公式:

 输入为dk维的Queries和Keys,以及dv维的Values,图形化表示如下:

图5 Scaled Dot-Product Attention

有点抽象对吧?那我们就跟随文章开头提到的那篇博客的脚步,来解释这个结构。

Self-attention的目的是要寻找输入向量(可以理解为输入语句)内部的关联,例如要翻译下面这句话:

The animal didn't cross the street because it was too tired

那么,句子中的it指代什么呢?是指the animal,还是指the street?对于机器学习来说,这就是个问题。那么通过学习句子中不同单词的关联性,就可以知道it指代的是the animal。

图6 Self-attention应用解释示例

3.1 Self-attention的分步理解

对Self-attention的理解可以分为几个步骤:

(1) 首先,我们需要创建三个vector,分别是Query vector、Key vector和Value vector,这几个vectors的获取是通过输入的embedding和三个矩阵WQ、WK和WV相乘,这三个矩阵是网络在训练中学习到的。论文中设计的三个输出vector维度为64。

图7 Query, Key, Value三个vector的生成

(2) 接下来,我们要使用计算出来的三个vectors进行打分计算具体做法是:对每一个单词位置,计算该位置的Query vector和每一个位置的Key vector的点积,以下图为例,第一个单词在整个输入序列(本例中只有两个单词)中对应位置的分数计算分别为:q1·k1,q1·k2;同样的,如果计算第二个单词在整个输入序列对应位置的分数,则应该是:q2·k1,q2·k2。

图8 Self-attention中的score计算

(3) (4) 我们把第三步和第四步合并,首先,上面的score计算结果要除以8(见上面Attention公式,dk为64,其平方根为8),接下来进行softmax操作,将分数归一化到0~1之间,并使其和为1:

图9 对score除以8并归一化

进行以上操作之后,我们就可以看到,每个单词在每个位置上的关注度。在此例中,“Thinking”这个单词在自身位置的关注度最大。当然也会有些句子,当前位置的单词对其他位置的单词关注度比较大,比如我们前面例子中的“it”和“the animal”。

(5) 前面步骤我们已经算出了每个单词处理时,在不同位置上的关注度,相当于权重,那么接下来我们需要将该权重作用在Value vector上,可以理解为对关注位置的单词进行保持,而抑制非相关位置上单词的权重。

(6) 第六步是对第(5)步的加权向量进行求和。该步会产生Self-attention在当前单词位置的输出。

图10 求和并输出

3.2 Self-attention的矩阵实现

上面我们分步骤理解了Self-attention的原理和实现,但在实际应用中,为了快速执行,是通过矩阵的形式来进行的。那么矩阵如何实现呢?

首先,计算Query、Key和Value几个矩阵(在前面讲的分步理解中,是Query vector、Key vector和Value vector),矩阵的计算通过将输入embedding vectors打包成一个Matrix X(相当于把前面的X1、x2...堆叠在一起),再跟训练出来的权重矩阵(WQ、WK和WV)做矩阵乘法。

图11 计算Q, K, V矩阵

接下来,通过矩阵运算把3.1中的六个步骤压缩到一步中处理,如下图所示:

图12 Self-attention的完整矩阵运算

以上就是Transformer中Self-Attention的完整解读了。网络结构中还有Multi-Head Attention等结构,为了篇幅简洁,我们放在下一篇中来解读。

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

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

相关文章

(黑马出品_05)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

(黑马出品_05)SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技…

Mysql按照月份分组统计数据,当月无数据则填充0

目录 起因实现结论 起因 最近有个需求需要在sql中实现获取近半年的统计数据,本来以为挺简单的,不过这个项目数据基本没有,在此情况下还要实现获取近半年的数据就没办法简单group by了 实现 #如果每个月都有数据的话是比较简单的 SELECT DA…

【Linux】iftop命令详解

目录 一、iftop简介 二、安装iftop命令 2.1 命令查看测试环境系统信息 2.2 查看iftop版本与命令帮助 三、iftop的基本使用 3.1 直接使用iftop命令 3.2 iftop的显示说明 3.3 指定监控某块网卡 3.4 显示某个网段进出封包流量 3.5 按照流量排序 3.6 过滤显示连接 3.7 …

第107讲:Mycat实践指南:取模分片下的水平分表详解

文章目录 1.使用取模分片水平分表2.水平分表取模分片案例2.1.准备测试的表结构2.2.配置Mycat实现范围分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察水平分表效果 1.使用取模分片水平分表 平…

Python数据处理实战(5)-上万行log数据提取并分类进阶版

系列文章: 0、基本常用功能及其操作 1,20G文件,分类,放入不同文件,每个单独处理 2,数据的归类并处理 3,txt文件指定的数据处理并可视化作图 4,上万行log数据提取并作图进阶版 …

element---tree树形结构(返回的数据与官方的不一样)

项目中要用到属性结构数据&#xff0c;后端返回的数据不是官方默认的数据结构&#xff1a; <el-tree:data"treeData":filter-node-method"filterNode":props"defaultProps"node-click"handleNodeClick"></el-tree>这是文档…

Leetcode3071. 在矩阵上写出字母 Y 所需的最少操作次数

Every day a Leetcode 题目来源&#xff1a;3071. 在矩阵上写出字母 Y 所需的最少操作次数 解法1&#xff1a;模拟 统计 Y 中的元素出现次数&#xff0c;记到一个长为 3 的数组 cnt1 中。统计不在 Y 中的元素出现次数&#xff0c;记到一个长为 3 的数组 cnt2 中。 计算最多…

商业前端TS开发自动化工具

本期作者 一、背景 商业侧的业务比较复杂&#xff0c;B端项目中含有大量常量类的类型判断&#xff0c;且因历史原因&#xff0c;很多常量值前端无法直接知其含义&#xff0c;这既不利于新人的上手&#xff0c;也不利于项目的维护。 在开发协作上&#xff0c;前后端的API沟通&a…

unicloud 云数据库概念及创建一个云数据库表并添加记录(数据)

云数据库概念 uniCloud提供了一个 JSON 格式的文档型数据库。顾名思义&#xff0c;数据库中的每条记录都是一个 JSON 格式的文档。 它是 nosql 非关系型数据库&#xff0c;如果您之前熟悉 sql 关系型数据库&#xff0c;那么两者概念对应关系如下表&#xff1a; 关系型JSON 文…

小孩近视用白炽灯好吗?多款热门护眼台灯实测分享

如今对于家长而言&#xff0c;最关心的事情除了孩子的学习成绩以外&#xff0c;最重要的就是孩子的视力健康问题&#xff0c;现在的孩子近视率实在太高了&#xff0c;不少还在小学阶段的学生都开始配戴上了眼镜。所以想要保护孩子的视力健康一盏好的台灯肯定是必不可少的&#…

RabbitMQ入门到实战一篇文章就够了

RabbitMQ 课程内容 认识RabbitMQ安装RabbitMQSpringBoot使用RabbitMQ其他特性 一.RabbitMQ入门 1.RabbitMQ认识 1.1.RabbitMQ是什么 MQ全称为Message Queue&#xff0c;即消息队列. 它也是一个队列,遵循FIFO原则 。RabbitMQ是由erlang语言开发&#xff0c;基于AMQP&#…

德人合科技|天锐绿盾加密软件——数据防泄漏系统

德人合科技是一家专注于提供企业级信息安全解决方案的服务商&#xff0c;提供的天锐绿盾加密软件是一款专为企业设计的数据安全防护产品&#xff0c;主要用于解决企事业单位内部敏感数据的防泄密问题。 www.drhchina.com PC端&#xff1a; https://isite.baidu.com/site/wjz012…

Spring Boot 生成与解析Jwt

Spring Boot 生成与解析Jwt Maven依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>生成&解析 package yang;import io.jsonwebtoken.Claims…

神经网络(neural network)

在这一章中我们将进入深度学习算法&#xff0c;学习一些神经网络相关的知识&#xff0c;这些是有更加强大的作用&#xff0c;更加广泛的用途。 神经元和大脑(neurons and the brain): 我们对于我们的编程的进步主要来自我们对于大脑的研究&#xff0c;根据我们对于大脑的研究…

耐腐蚀PFA消解管可配四氟回流盖适配海能莱伯泰科全自动石墨消解仪

PFA消解管&#xff0c;也叫PFA消化管、特氟龙消解管、耐高温消解杯等&#xff0c;应用于气相、液相、等离子光谱质谱、原子吸收、原子荧光等化学分析方法的样品前处理&#xff0c;可消解重金属、农残、食品、淤泥、稀土、水产品、有机物等。 PFA消解管 PFA消解管可耐强酸、强碱…

【论文阅读】(2024.03.05-2024.03.15)论文阅读简单记录和汇总

(2024.03.05-2024.03.15)论文阅读简单记录和汇总 2024/03/05&#xff1a;随便简单写写&#xff0c;以后不会把太详细的记录在CSDN&#xff0c;有道的Markdown又感觉不好用。 目录 &#xff08;ICMM 2024&#xff09;Quality Scalable Video Coding Based on Neural Represent…

(2024.03.04)如何打包Android Studio项目?

一、引言 最近帮助很多从未谋面的小伙伴调试了一下AS的项目&#xff0c;调试完成后需要他们查看是否与当初需求一致&#xff0c;此时就需要将已完成的项目打包&#xff0c;即导出APK安装包&#xff0c;发送到他们的手机上就可以下载安装使用了。在这里一是分享给大家打包方法&…

Java项目:41 springboot大学生入学审核系统的设计与实现010

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本大学生入学审核系统管理员和学生。 管理员功能有个人中心&#xff0c;学生管理&#xff0c;学籍信息管理&#xff0c;入学办理管理等。 学…

实验1:查看CPU和内存,用机器指令和汇编指令编程

预备知识&#xff1a;Debug的使用 1.Debug&#xff1a; Debug时DOS、Windows都提供的实模式&#xff08;8086 方式&#xff09;程序的调试工具。 debug是Windows 16位或者32位机器上的一款调试工具。 也就是说&#xff0c;在WindowsXP及以前的机器上都有debug&#xff0c;直接…

【C++从0到王者】第五十二站:跳表

文章目录 一、什么是跳表二、skiplist的效率三、skiplist的实现 一、什么是跳表 skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key或者key/value的查找模型。 skiplist&#xff0c;…