图解注意力

图解注意力

Part #2: The Illustrated Self-Attention

在文章前面的部分,我们展示了这张图片来展示自注意力被应用于正在处理单词"it"的一层中:
在这里插入图片描述

在本节中,我们将看看这是如何完成的。请注意,我们将以一种试图理解单个单词发生什么的方式来看待它。这就是为什么我们将展示许多单独的向量。实际的实现是通过将巨大的矩阵相乘在一起来完成的。但我想专注于这里单词层面上发生的事情的直觉。

Self-Attention (without masking)

让我们首先看看在编码器模块中如何计算原始自注意力。让我们看看一个一次只能处理四个标记的玩具变压器模块。

自注意力通过三个主要步骤应用:

  1. 为每个路径创建查询(Query)、键(Key)和值(Value)向量。
  2. 对于每个输入标记,使用其查询向量与所有其他键向量进行评分。
  3. 在将它们乘以相关分数后,将值向量相加

在这里插入图片描述

1- Create Query, Key, and Value Vectors

让我们专注于第一条路径。我们将采用其查询,并与所有键进行比较。这为每个键产生了一个分数。自注意力的第一步是为每个标记路径计算三个向量(现在让我们暂时忽略注意力头):

在这里插入图片描述

2- Score

现在我们已经有了向量,我们只在步骤#2中使用查询和键向量。由于我们专注于第一个标记,我们将它的查询与所有其他键向量相乘,为这四个标记中的每一个都产生了一个分数。

在这里插入图片描述

3- Sum

现在我们可以将分数乘以值向量。得分高的值将在我们加总它们后构成结果向量的很大一部分。

在这里插入图片描述

分数越低,我们展示的值向量就越透明。这是为了表示乘以一个小数如何稀释向量的值。

如果我们对每条路径执行相同的操作,我们最终会得到一个向量,代表每个标记包含该标记的适当上下文。然后,这些向量被呈现给Transformer模块中的下一个子层(前馈神经网络):

在这里插入图片描述

The Illustrated Masked Self-Attention

现在我们已经查看了Transformer自注意力步骤的内部,让我们继续看看掩蔽自注意力。掩蔽自注意力与自注意力相同,只是在步骤#2时有所不同。假设模型只有两个标记作为输入,我们正在观察第二个标记。在这种情况下,最后两个标记被掩蔽了。因此,模型在打分步骤中进行了干预。它基本上总是将未来标记的分数设为0,这样模型就不能提前看到未来的单词:

在这里插入图片描述

这种掩蔽通常是通过一个称为注意力掩蔽矩阵来实现的。想象一个由四个单词组成的序列(例如“robot must obey orders”)。在语言建模场景中,这个序列以四个步骤吸收——每个单词一步(假设现在每个单词都是一个标记)。由于这些模型以批量工作,我们可以假设这个玩具模型的批量大小为4,它将整个序列(及其四个步骤)作为一批处理。

在这里插入图片描述

在矩阵形式中,我们通过将查询矩阵乘以键矩阵来计算分数。让我们如下可视化它,只是不是单词,而是与该单词在该单元格中相关联的查询(或键)向量:

在这里插入图片描述

乘法之后,我们应用注意力掩蔽三角矩阵。它将我们想要掩蔽的单元格设置为负无穷大或一个非常大的负数(例如,在GPT-2中为-10亿):

在这里插入图片描述

然后,对每一行应用softmax会产生我们用于自注意力的实际分数:

在这里插入图片描述

这个分数表的意思是:

    • 当模型处理数据集中的第一个示例(行#1),其中只包含一个单词(“robot”),它的全部注意力(100%)将集中在那个单词上。
    • 当模型处理数据集中的第二个示例(行#2),其中包含单词(“robot must”),当它处理单词“must”时,它的48%注意力将集中在“robot”上,52%的注意力将集中在“must”上。

Masked Self-Attention

Evaluation Time: Processing One Token at a Time

我们可以按照掩蔽自注意力的工作方式使GPT-2运行。但在评估期间,当我们的模型在每次迭代后只添加一个新词,对于已经处理过的标记,重新计算早期路径上的自注意力将是低效的。

在这种情况下,我们处理第一个标记(现在先忽略s)。

在这里插入图片描述

GPT-2保留“a”这个标记的键(key)和值(value)向量。每个自注意力层都保留该标记的相应的键和值向量:

在这里插入图片描述

现在在下一次迭代中,当模型处理单词“robot”时,它不需要为“a”标记生成查询(query)、键(key)和值(value)。它只需重用第一次迭代中保存的那些:

在这里插入图片描述

Self-attention: 1- Creating queries, keys, and values
  • 假设模型正在处理单词 “it”。如果我们谈论的是底层区块,那么该标记的输入将是 “it” 的嵌入和 #9 位置的位置上编码:

在这里插入图片描述

Transformer中的每个区块都有自己的权重(文章后面会分解)。我们首先遇到的是用于创建查询、键和值的权重矩阵。

在这里插入图片描述

乘法的结果是一个向量,基本上是单词 “it” 的查询、键和值向量的串联。

在这里插入图片描述

GPT-2 Self-attention: 1.5- Splitting into attention heads

在前面的示例中,我们直接深入到自注意力中,忽略了“多头”部分。现在对这一概念进行一些说明将是有用的。自注意力在 Q、K、V 向量的不同部分上多次进行。“划分”注意力头仅仅是将长向量重塑为矩阵。小型 GPT-2 有 12 个注意力头,因此这将是重塑矩阵的第一个维度:
在这里插入图片描述

GPT-2 Self-attention: 2- Scoring

我们现在可以继续进行打分——知道我们只看一个注意力头(并且所有其他头正在进行类似的操作)
在这里插入图片描述

现在,令牌可以根据所有其他令牌的键进行评分(这些键在之前的迭代中已在注意力头 #1 中计算出):
在这里插入图片描述

GPT-2 Self-attention: 3- Sum

如我们之前所见,现在我们将每个值与其得分相乘,然后将它们相加,生成注意力头 #1 的自注意力结果:

在这里插入图片描述

GPT-2 Self-attention: 3.5- Merge attention heads

我们处理不同注意力头的方式是首先将它们连接成一个向量:
在这里插入图片描述

但是,这个向量还不能直接发送到下一个子层。我们需要先把这个拼凑出来的隐含状态“怪物”转化为一个统一的表示。

GPT-2 Self-attention: 4- Projecting

我们让模型学习如何最好地将连接起来的自注意力结果映射成一个前馈神经网络可以处理的向量。接下来是我们第二个大的权重矩阵,它将注意力头的结果投射到自注意力子层的输出向量:

在这里插入图片描述

至此,我们已经生成了可以传递到下一层的向量:

在这里插入图片描述

翻译自(https://jalammar.github.io/illustrated-transformer/)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统编程--软/硬连接

真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个inode。 命令: 软连接:ln -s 原文件名 新文件名 硬链接:ln 原文件名 新文件名 删除链接文件:unlink 文件名执行上面两条命令…

linux 简单使用 sftp 和 lftp命令

目录 一. 环境准备二. sftp命令连接到SFTP服务器三. lftp命令3.1 连接FTP和SFTP服务器3.2 将文件从sftp服务器下载到本地指定目录 四. 通过WinSCP命令行从SFTP服务器获取文件到Windows 一. 环境准备 ⏹在安卓手机上下载个MiXplorer,用作SFTP和FTP服务器 官网: htt…

MySQL数据库(一):数据库介绍与安装

在嵌入式开发中,数据库的重要性体现在高效的数据存储和管理、数据持久化、复杂查询和处理、数据同步和共享、安全性和可扩展性。常见嵌入式数据库包括SQLite、MySQL、LevelDB等,应用于智能家居、工业控制、车载系统和物联网设备,提升了系统功…

网络编程篇:HTTP协议

一.预备知识 在客户端访问服务端时,要用ipport,但是在日常用户访问服务端的时候,并不会直接使用ip,而是使用域名,比如:百度(www.baidu,com)。 …

深度学习11-13

1.神经元的个数对结果的影响: (http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html) (1)神经元3个的时候 (2)神经元是10个的时候 神经元个数越多,可能会产生…

在C++中,构造器(Builder)模式的思考(《C++20设计模式》及常规设计模式对比)

文章目录 一、前言二、为什么需要Builder Pattern,Builder Pattern到底解决了什么实际问题?为什么不用set()方法?2.1 初学者有那些对象的属性初始化方法呢?2.1.1 构造函数的弊端2.1.1.1 对于属性的初始化只能是固定的顺序 2.1.2 用set()函数初…

在线随机密码生成工具

对于运维工作,经常需要生产随机密码,这里介绍一款在线生成密码工具,支持配置密码组合类型,如数字、字母大小写、特殊字符等,还能排除某些特殊字符。 在线随机密码生成工具 https://tool.hiofd.com/random-string-gen…

SCI一区级 | Matlab实现BO-Transformer-LSTM多变量时间序列预测

SCI一区级 | Matlab实现BO-Transformer-LSTM多变量时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-LSTM多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-LSTM多变量时间序列预测,贝叶斯…

嵌入式中逻辑分析仪与示波器的基本原理

大家好,今天主要给大家分享一下,嵌入式中如何使用逻辑分析仪和示波器的方法,希望对大家有所帮助。 https://dreamsourcelab.cn/ 第一:什么是逻辑分析仪 是否遇到使用示波器分析数字电路的冏境:深度不够,时间太短,无法抓到想要的波形,没有协议内容解析? 逻辑分析仪…

项目八 OpenStack存储管理

任务一 理解OpenStack块存储服务 1.1 •Cinder的主要功能 • 提供 持久性块存储资源,供 Nova 计算服务的虚拟机实例使用 。 • 为 管理块存储设备提供一套方法,对卷实现从创建到删除的整个生命周期 管理。 • 将 不同的后端存储进行封装,对外…

利用竞争智慧与大型语言模型:假新闻检测的新突破

Explainable Fake News Detection With Large Language Model via Defense Among Competing Wisdom 论文地址: Explainable Fake News Detection with Large Language Model via Defense Among Competing Wisdom | Proceedings of the ACM on Web Conference 2024https://dl.…

uni-CMS:全端开源内容管理系统的技术探索

摘要 本文介绍了uni-CMS,一个基于uniCloud开发的开源内容管理系统(CMS)。该系统旨在帮助开发者快速搭建并管理内容丰富的网站、小程序和移动应用。通过其全端渲染、内容安全检测、广告解锁付费内容以及AI生成文章等特性,uni-CMS不…

【算法】优先级队列-基础与应用

优先级队列(Priority Queue)是一种特殊的队列类型,它允许在其元素中分配优先级。与传统的先进先出(FIFO)队列不同,优先级队列中元素的出队顺序取决于它们的优先级。优先级较高的元素会被优先处理&#xff0…

数组移除元素算法(以JS为例)

题目:LeeCode第27题 答案: 算法思想:双指针 这段代码实际上使用了一种简化版的双指针技术来实现元素的移除。这里的双指针技术并不是传统意义上的两个指针,而是一个索引k作为辅助指针,用来记录新数组(或原…

面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling

1、为什么需要Hierarchical Softmax和Negative Sampling 从输入层到隐含层需要一个维度为NK的权重矩阵,从隐含层到输出层又需要一个维度为KN的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但…

机器学习基础:与Python关系和未来发展

目录 初识Python Python的由来 自由软件运动 编译方式的演进 Python语言的特点 语法简单,易于理解 语法结构清晰,快速上手 丰富的第三方库 机器学习 监督学习 无监督学习 半监督学习 欢迎回到我们的神经网络与深度学习Tensorflow实战学习&am…

Python 虚拟环境 requirements.txt 文件生成 ;pipenv导出pip安装文件

搜索关键词: Python 虚拟环境Pipenv requirements.txt 文件生成;Pipenv 导出 pip requirements.txt安装文件 本文基于python版本 >3.9 文章内容有效日期2023年01月开始(因为此方法从这个时间开始是完全ok的) 上述为pipenv的演示版本 使用以下命令可精准生成requirement…

thrift接口调用工具

写了一个thrift接口调用工具 导入thrift文件就可以直接调用相应接口 工具会根据thrift文件中接口的参数名,参数类型,返回值等等,自动生成接口参数,和结果json化显示。 https://github.com/HuaGouFdog/Fdog-Kit

Java启动jar设置内存分配详解

在微服务架构越来越盛行的情况下,我们通常一个系统都会拆成很多个小的服务,但是最终部署的时候又因为没有那么多服务器只能把多个服务部署在同一台服务器上,这个时候问题就来了,服务器内存不够,这个时候我们就需要对每…