Transformers 直观解释——不仅是如何工作,而且为什么工作得这么好

输入序列如何到达Attention模块

注意力模块存在于编码器堆栈中的每个编码器中,以及解码器堆栈中的每个解码器中。我们将首先放大编码器的注意力。

Attention in the Encoder:
在这里插入图片描述

举个例子,假设我们正在研究一个英语到西班牙语的翻译问题,其中一个示例源序列是“球是蓝色的”。目标序列是“La bola es azul”。

源序列首先通过嵌入和位置编码层,该层为序列中的每个单词生成嵌入向量。嵌入被传递到编码器,首先到达注意力模块。

在注意力机制中,嵌入序列通过三个线性层,产生三个独立的矩阵——称为查询、键和值。这是用于计算注意力分数的三个矩阵。

要记住的重要一点是,这些矩阵的每一“行”对应于源序列中的一个单词。
The flow of the source sequence:源序列的流程
在这里插入图片描述

每个输入行都是序列中的一个单词

我们理解注意力机制的方式是从源序列中的单个单词开始,然后跟随它们通过 Transformer 的路径。特别是,我们希望关注注意力模块内部发生的事情。
这将帮助我们清楚地了解源序列和目标序列中的每个单词如何与源序列和目标序列中的其他单词相互作用。

因此,当我们进行解释时,请重点关注对每个单词执行的操作以及每个向量如何映射到原始输入单词。我们不需要担心许多其他细节,例如矩阵形状、算术计算的细节、多个注意力头等等,如果它们与每个单词的去向不直接相关的话。
因此,为了简化解释和可视化,我们忽略嵌入维度并仅跟踪每个单词的行。
The flow of each word in the source sequence :源序列中每个单词的流程
在这里插入图片描述

每个单词都会经历一系列可学习的转换

每个这样的行都是通过一系列转换(嵌入、位置编码和线性层)从其相应的源字生成的。
所有这些转换都是可训练的操作。这意味着这些操作中使用的权重不是预先确定的,而是由模型学习的,从而产生所需的输出预测。

Linear and Embedding weights are learned:学习线性和嵌入权重(
在这里插入图片描述
关键问题是,Transformer 如何计算出哪一组权重能够带来最佳结果?请记住这一点,因为我们稍后会再讨论它。

注意力分数——查询和关键词之间的点积

注意力执行几个步骤,但在这里,我们将只关注线性层和注意力分数。
Multi-head attention :多头注意力
在这里插入图片描述

Attention Score calculation:注意力分数计算
在这里插入图片描述
从公式中我们可以看出,Attention 的第一步是在 Query (Q) 矩阵和 Key (K) 矩阵的转置之间进行矩阵乘法(即点积)。观察每个单词发生了什么。
我们生成一个中间矩阵(我们称之为“因子”矩阵),其中每个单元格都是两个单词之间的矩阵乘法。
Dot Product between Query and Key matrices :
查询矩阵和关键矩阵之间的点积
在这里插入图片描述
例如,第四行中的每一列对应于第四个查询词与每个关键字之间的点积。
查询矩阵和关键矩阵之间的点积:
在这里插入图片描述

注意力分数——查询关键词和值词之间的点积

下一步是这个中间“因子”矩阵和值(V)矩阵之间的矩阵乘法,以产生由注意力模块输出的注意力分数。这里我们可以看到第四行对应于第四个查询词矩阵乘以所有其他关键字K和值V。
Dot Product between Query-Key and Value matrices :
查询键和值矩阵之间的点积
在这里插入图片描述
这会产生由注意力模块输出的注意力分数向量 (Z)。

考虑输出分数的方法是,对于每个单词,它是“值”矩阵中每个单词的编码值,并由“因子”矩阵加权。因子矩阵是该特定单词的查询值与所有单词的键值的点积。
Attention Score is a weighted sum of the Value words:
注意力分数是价值词的加权总和
在这里插入图片描述

查询词、关键词和值词的作用是什么?

查询词可以解释为我们正在计算注意力的词。键和值词是我们正在关注的词,即。该词与查询词的相关程度如何。
Attention Score for the word “blue” pays attention to every other word :
“blue”一词的注意力分数会关注所有其他单词
在这里插入图片描述
例如,对于句子“The ball is blue”,单词“blue”的行将包含“blue”与其他每个单词的注意力分数。这里,“blue”是查询词,其他词是“Key/Value”。
还有其他操作正在执行,例如除法和 softmax,但我们可以在本文中忽略它们。它们只是更改矩阵中的数值,但不影响矩阵中每个单词行的位置。它们也不涉及任何词间交互。

点积告诉我们单词之间的相似度

因此,我们已经看到,注意力分数通过进行点积,然后将它们相加,捕获特定单词与句子中每个其他单词之间的关系。但是矩阵乘法如何帮助 Transformer 确定两个单词之间的相关性呢?
要理解这一点,请记住查询、键和值行实际上是具有嵌入维度的向量。让我们仔细看看这些向量之间的矩阵乘法是如何计算的。
Each cell is a dot product between two word vectors :
每个单元格都是两个词向量之间的点积
在这里插入图片描述
当我们在两个向量之间进行点积时,我们将数字对相乘,然后将它们相加。

  • 如果两个配对数字(例如上面的“a”和“d”)均为正数或均为负数,则乘积将为正数。该乘积将增加最终的总和。
  • 如果一个数为正数,另一个数为负数,则乘积将为负数。该乘积将减少最终的总和。
  • 如果乘积为正,则两个数字越大,对最终求和的贡献就越大。

这意味着如果两个向量中对应数字的符号对齐,则最终的和会更大。

Transformer 如何学习单词之间的相关性?

点积的概念也适用于注意力分数。如果两个单词的向量更加对齐,则注意力分数会更高。

那么我们想要 Transformer 的行为是什么呢?

我们希望句子中彼此相关的两个单词的注意力分数较高。我们希望两个彼此不相关的单词的分数较低。
例如,对于句子“黑猫喝牛奶”,“牛奶”一词与“喝”非常相关,可能与“猫”相关性稍差,与“黑”无关。我们希望“牛奶”和“饮料”产生较高的注意力分数,“牛奶”和“猫”产生稍低的分数,而“牛奶”和“黑色”产生可忽略不计的分数。
这是我们希望Transformer 模型学习产生的输出。
为此,“牛奶”和“饮料”的词向量必须对齐。 “牛奶”和“猫”的向量会有所不同。对于“牛奶”和“黑色”来说,它们会有很大不同。
让我们回到我们一直牢记的一点——Transformer 如何计算出哪一组权重将给它带来最好的结果?
词向量是根据词嵌入和线性层的权重生成的。因此,Transformer 可以学习这些嵌入、线性权重等,以生成上述所需的词向量。
换句话说,它将以这样的方式学习这些嵌入和权重:如果句子中的两个单词彼此相关,那么它们的单词向量将对齐。从而产生更高的注意力分数。对于彼此不相关的单词,单词向量将不会对齐,并且会产生较低的注意力分数。
因此,“牛奶”和“饮料”的嵌入将非常一致,并产生很高的注意力分数。对于“牛奶”和“猫”,它们会有所不同,产生稍低的分数;而对于“牛奶”和“黑色”,它们会有很大不同,产生较低的分数。
这就是注意力模块背后的原理。

总结——是什么让 Transformer 运转起来?

查询Q和键K之间的点积计算每对单词之间的相关性。然后将该相关性用作“因子”来计算所有值V的加权和。该加权和作为注意力分数输出。
Transformer 学习嵌入等,从而使彼此相关的单词更加对齐。
这是引入三个线性层并为查询、键和值创建三个版本的输入序列的原因之一。这为注意力模块提供了更多参数,它可以学习这些参数来调整词向量的创建。

Transformer 中的编码器自注意力

Transformer 中使用了 Attention 在三个地方:

  • 编码器中的自注意力——源序列关注自身
  • 解码器中的自注意力——目标序列关注自身
  • Decoder 中的 Encoder-Decoder-attention — 目标序列关注源序列
    在编码器自注意力中,我们计算源句子中每个单词与源句子中每个其他单词的相关性。这种情况发生在堆栈中的所有编码器中。

Transformer 中的解码器自注意力

我们刚刚在编码器自注意力中看到的大部分内容也适用于解码器中的注意力,但有一些微小但显着的差异。
解码器中的注意力:
在这里插入图片描述
在解码器自注意力中,我们计算目标句子中每个单词与目标句子中每个其他单词的相关性。

在这里插入图片描述

Transformer 中的编码器-解码器注意力

在Encoder-Decoder Attention中,Query是从目标句子中获取的,Key/Value是从源句子中获取的。因此,它计算目标句子中每个单词与源句子中每个单词的相关性
编码器-解码器注意力:
在这里插入图片描述

结论

希望这能让您更好地感受到 Transformer 设计的优雅。另请阅读我的系列中的其他 Transformer 文章,以深入了解为什么 Transformer 现在已成为如此多深度学习应用程序的首选架构。

出自:
https://towardsdatascience.com/transformers-explained-visually-not-just-how-but-why-they-work-so-well-d840bd61a9d3

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

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

相关文章

【旅游】泉州攻略v1.0.0

一、泉州古城 泉州市距离深圳大约520公里,从深圳北站出发,高铁大约3小时30分。 到达泉州西站后,往东南方向大约8公里,就可以到达主要的旅游景点泉州古城。 古城很适合使用一天玩耍,核心路线如下: 一路的景…

C++ STL教程

C STL教程 文章目录 C STL教程1.1 std::vector1.1.1vector的定义1.1.2vector容器的初始化1.1.3vector容器内元素的访问和修改1.1.4vector中的常用函数 1.2 std::string1.2.1string的定义1.2.2string的初始化1.2.3string中元素的访问和修改1.2.4string中连接字符串1.2.5string中…

AtCoder Beginner Contest 337 A - E

A - Scoreboard 大意 高桥队和青木队进行了场比赛&#xff0c;给出每场比赛中高桥队和青木队的积分&#xff0c;问最后谁总分更高或平局。 思路 统计总分比较即可。 代码 #include<iostream> using namespace std; int main(){int n, a0, b0;cin >> n;while(…

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…

2024全国水科技大会【高峰对话】北京排水集团(附部分报告题目)

北京排水集团坚持“服务社会、造福百姓、企业利益与公众利益高度一致”的宗旨&#xff0c;充分认知自身在地区经济发展中的社会责任&#xff0c;以满足政府与公众对公用事业企业服务的需求为首要任务&#xff0c;通过“现代化的队伍、现代化的手段、现代化的设备和现代化的管理…

springBoot+ureport报表引擎

UReport是一款基于单元格迭代模型的纯Java中式报表引擎。它架构于Spring之上&#xff0c;因此与企业应用具有良好的集成能力。UReport提供了基于Eclipse插件与基于网页的两种报表模版设计方式&#xff0c;采用类Excel报表模版设计风格&#xff0c;简单、易上手&#xff0c;可在…

数据结构和算法:搜索

二分查找 二分查找&#xff08;binary search&#xff09; 是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止。 给定一个长度为 &#x1d45b; 的数组 nums &#xff0c;元素按从小到大…

django orm DateTimeField 6位小数精度问题

from django.db.backends.mysql.base import DatabaseWrapperDatabaseWrapper.data_types[DateTimeField] "datetime"意思就是重写源码里面的DateTimeField字段

如何在家中使用手机平板电脑 公司iStoreOS软路由实现远程桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

2024年【起重机械指挥】考试报名及起重机械指挥免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机械指挥考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新起重机械指挥免费试题题目及答案&#xff01;多做几遍&#xff0c;其实通过起重机械指挥模拟考试题库很简单。 1、【多选题】严禁吊车超负…

凯撒加密.

题目描述 给定一个单词&#xff0c;请使用凯撒密码将这个单词加密 凯撒密码是一种替换加密的技术&#xff0c;单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为 d&#xff0c;变为e.&#xff0c;w 变为z&#xff0c;2 变为a&#xff0c;y变为 6&#xff0c;z变…

Java——注解和注释

0 注解和注释的区别 在博主刚开始学习java语言的时候&#xff0c;经常把注释和注解搞混淆&#xff0c;误认为这两个是类似的东西&#xff0c;其实它们完全不是一个东西。 注释&#xff1a; 注释是程序员在代码中添加的说明性文字&#xff0c;用于解释代码的功能、目的或实现…

每日五道java面试题之springboot篇(二)

目录&#xff1a; 第一题. 你如何理解 Spring Boot 配置加载顺序&#xff1f;第二题. Spring Boot 中如何解决跨域问题 ?第三题. 什么是 CSRF 攻击&#xff1f;第四题. 比较一下 Spring Security 和 Shiro 各自的优缺点 ?第五题. bootstrap.properties 和 application.proper…

[AIGC] 对比MySQL全文索引,RedisSearch,和Elasticsearch的详细区别

全文搜索是数据库和搜索引擎的重要功能。这个功能能在一个或多个列中查找用户查询的文本&#xff0c;这对诸如电子商务网站和检索大量文本数据的应用是必需的。在这篇文章中&#xff0c;我们将详细对比三种主流全文搜索技术&#xff1a; MySQL全文索引&#xff0c;Redis的Redis…

【Ucore操作系统】8. 并发

文章目录 【 0. 引言 】0.1 线程定义0.2 同步互斥 【 1. 内核态的线程管理 】1.1 线程概念1.2 线程模型与重要系统调用1.2.1 线程创建系统调用1.2.2 等待子线程系统调用1.2.3 进程相关的系统调用 1.3 应用程序示例1.3.1 系统调用封装1.3.2 多线程应用程序 – threads 1.4 线程管…

考研数学|《660题》这样刷最有效!

考研数学660题作为许多考研学子在备考过程中重要的复习资料之一&#xff0c;自然也有很多同学会有660该怎么刷的问题。为了更有效率地使用这些题目&#xff0c;希望以下策略能帮到大家&#xff0c; 首先&#xff0c;你需要根据自己的实际情况&#xff0c;制定一个合理的学习计…

【网安】DDoS攻击:方法、影响与防御策略

【网安】DDoS攻击&#xff1a;方法、影响与防御策略 前言DDoS攻击实现的常见方法Volumetric Attacks&#xff08;流量攻击&#xff09;UDP FloodICMP (Ping) Flood Protocol Attacks&#xff08;协议攻击&#xff09;SYN Flood Application Layer Attacks&#xff08;应用层攻击…

就业班 第二阶段 2401--3.25 day5 mycat读写分离

[TOC] 启动并更改临时密码 [rootmysql1~]# systemctl start mysqld && passwdgrep password /var/log/mysqld.log | awk END{ print $NF} && mysqladmin -p"$passwd" password Qwer123..; MyCAT读写分离 Mycat 是一个开源的数据库系统&#xff0c;但…

LeetCode-1669题:合并两个链表(原创)

【题目描述】 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果链表的头指针。 【…