3b1b自注意力机制讲解记录

news2024/11/15 17:54:28

本文是对视频【官方双语】直观解释注意力机制,Transformer的核心 | 【深度学习第6章】的整理

1 背景

要解决的问题:接收一段文本,预测下一个词
在这里插入图片描述
句子会被切成许多小块,这些小块称为token。token可以是单词也可以是词组。为了简单起见,本文假设所有token是单词。
在这里插入图片描述
第一步就是把每个token映射到一个嵌入向量(embedding)
在这里插入图片描述
需要了解的是,在这个高维空间中,每个可能的嵌入向量的方向代表了语义。

在这里插入图片描述
Transformer的目的是为了不断调整这些嵌入向量,使得他不仅仅对这个单独的单词进行编码,同时还要融入更多的上下文语义。
在这里插入图片描述

2 self-attention(单头)

2.1 Q和K,得到注意力模式(attention pattern)

同一个单词在不同的语境中有不同的含义
在这里插入图片描述
在第一步切分文本并把每个token映射到嵌入向量后,三个“mole”对应的是同一个向量。初始的token嵌入没有考虑任何上下文信息。
在这里插入图片描述
想象一下,在嵌入空间有多个方向,编码了“mole”这个单词的不同含义。

在这里插入图片描述
训练好的注意力模块可以计算出需要给初始的泛型嵌入(generic embedding)加上什么向量,才能把它移动到考虑了上下文的对应的方向上
在这里插入图片描述
注意力模块不仅精细化了一个单词的含义,还允许模型相互传递这些嵌入向量所蕴含的信息。

在这里插入图片描述
在这里插入图片描述
甚至可以传递的很远,而且新的嵌入向量的信息比单个词丰富的多。
在这里插入图片描述
所有向量流经网络之后,经历了很多层注意力模块。此时预测下一个token的计算过程,完全基于序列中最后一个向量
在这里插入图片描述
举例来说,输入了一整篇文章,最后是“the murderer was”.如果模型要准确预测下一个词,该序列的最后一个向量,也就是“was”对应的向量,必须经过所有注意力模块的更新,已包含远超单个词的信息量。也就是设法编码整个上下文窗口中与预测下一个词相关的所有信息。

在这里插入图片描述
在这里插入图片描述
举例如下:假设有下面这段话,重点关注形容词对名词的改变。
在这里插入图片描述
每个词的初始嵌入是一个高维向量。只编码了这个词的泛型含义,没有考虑上下文。同时也编码了位置信息(位置编码有很多种),告诉模型单词在序列中的位置。
在这里插入图片描述
在这里插入图片描述
E ⃗ \vec{E} E 来表示嵌入向量,最后的目标就是通过计算,产生一组新的,更为精准的嵌入向量(考虑了上下文)。

在这里插入图片描述
这个过程的第一步可以想象成“creature”这个单词在问:“我的前面有形容词吗?”
在这里插入图片描述
然后fluffy和blue回答:“是的,我们在这里”。
在这里插入图片描述
这样的提问被编码成了另外一个向量,称之为查询(Query)
在这里插入图片描述
查询向量的维度比嵌入向量的维度要小得多。要计算查询向量,先取一个矩阵 W Q W_Q WQ,乘以嵌入向量

在这里插入图片描述

查询向量 Q 4 → = W Q E 4 → \overrightarrow{Q_4}=W_Q \overrightarrow{E_4} Q4 =WQE4
在这里插入图片描述
把查询矩阵与所有嵌入向量相乘,得到对应的查询向量。 W Q W_Q WQ是从数据中学习得到的。
在这里插入图片描述
还需要第二个矩阵,键矩阵 W K W_K WK,也会与每个嵌入向量相乘,产生键向量序列

在这里插入图片描述
W Q W_Q WQ W K W_K WK都把嵌入向量映射到了低维度空间。在低维度空间,查询向量与键向量方向对齐的时候,认为匹配。对于本例,键矩阵会把fluffy和blue映射到与creature的查询向量高度一致的方向上。

在这里插入图片描述
为了衡量每个键向量与每个查询向量的匹配程度,计算所有可能的键向量与查询向量之间的内积。内积越大,键向量与查询向量越对齐(方向一致),
在这里插入图片描述
上面形容词的例子就像这样。fluffy和blue的键向量与creature的查询向量高度对齐。fluffy和blue注意到了creature的嵌入.其他的词的键向量与creature的查询向量内积很小,说明他们与他的关联不大。
在这里插入图片描述
内积可以是负无穷到正无穷的任何数字。这个内积得分可以看作是每个词与更新其他词的含义有多相关
在这里插入图片描述
这些得分最后要当作权重使用,所以要映射到(0,1)之间,而且每列总和为1,就像概率分布。
在这里插入图片描述

softmax可以达到这个目的
在这里插入图片描述
利用softmax进行归一化后,每一列可以看作权重,表示左侧的键向量与顶部的查询向量的相关程度。

在这里插入图片描述
我们称这个网格为attention pattern

在这里插入图片描述
论文中把attention写的很简洁, Q Q Q是查询向量, K K K是键向量 V V V是值向量。如下:
在这里插入图片描述
Q K T QK^T QKT表达了键向量与查询向量的内积得到的表格,为了数值稳定性,除以键-查询空间的维度的平方根。然后整个表达式的最外层的softmax是逐列进行的。
在这里插入图片描述

在这里插入图片描述

2.2 掩码

[to DO]

2.3 V,更新语义

算出这个模式,就可以让模型推断出每个词与其他哪些词(在精细化语义上)有关,
在这里插入图片描述
然后要做的就是去更新嵌入向量,把各个词的信息传递给与之相关的其他词。
例如要让fluffy这个词的嵌入向量改变creature这个词的嵌入向量,使其移动到这个12000多维的词嵌入空间的另一个方向。从而更具体的表示“fluffy creature”
在这里插入图片描述
这会用到第三个矩阵,值矩阵(value matrix) W V W_V WV,将 W V W_V WV乘以第一个词“fluffy”的嵌入,得到的就是值向量(value vector),这也就是加到后面的“creature”的嵌入向量的向量,所以这个值向量处于与嵌入向量相同的高维空间。
在这里插入图片描述
这个过程可以理解为“如果这个词需要调整目标词的含义(这个由attention pattern决定),那么,要使得目标词能反映出语义的变化,需要加上什么向量呢?”
在这里插入图片描述
每个嵌入向量乘以 W V W_V WV,得到对应的值向量。拿creature这个词举例,他所对应的attention权重乘以对应的值向量,得到想要引入的变化量,记为 Δ E ⃗ \Delta \vec{E} ΔE ,然后把他加到原始嵌入向量上。预期是得到一个考虑了上下文的更精准的向量。

在这里插入图片描述
当然,需要对所有的词都要做这个操作,得到每个token考虑上下文后更精准的编码。这就是单头注意力机制。
在这里插入图片描述
整个过程由三个可学习的矩阵实现: W Q W_Q WQ W K W_K WK W V W_V WV
在这里插入图片描述
算一下GPT3的总参数量:键矩阵和查询矩阵都有12288个列,对应了嵌入向量空间维度。128行,对应了键-查询空间维度。这样就各有1572864个参数
在这里插入图片描述
按照之前说的,值矩阵行和列都是12288维,这就是1.5亿 的参数。可以看到值矩阵的参数数量比查询矩阵和键矩阵多好几个数量级。

在这里插入图片描述
有没有更好的处理方式呢?将值矩阵分解成两个矩阵的乘积。
在这里插入图片描述
解释1:第一个矩阵把较大的嵌入向量映射到低维度的空间,称为“value down matrix”,另一个矩阵把向量从低维空间映射回高维嵌入空间,称为“value up matrix”
解释2:线性代数术语:对大矩阵的“低秩分解”(low rank transformation)
在这里插入图片描述
这样四个矩阵加起来一共约630万个参数。
在这里插入图片描述

3 交叉注意力:cross-attention

GPT只需要自注意力机制,不需要交叉注意力机制。交叉注意力机制涉及的模型会处理两种不同类型的数据。比如机器翻译和音频转文字。
在这里插入图片描述
交叉注意力和自注意力几乎相同,唯一的区别是:键和查询矩阵作用于不同的数据集。例如机器翻译中,键来自一种语言,而查询来自另一种语言。
在这里插入图片描述
而这个注意力模式就可以描述,一种语言中的哪些词对应另一种语言的哪些词。这种情况下通常不会用到掩码。因为不存在后面的token影响前面的token 的问题。
在这里插入图片描述

4 多头注意力机制

上面的例子里讲的是形容词影响名词的语义,实际上,上下文中影响词义的方式有多种。每一种不同的上下文更新方式,键矩阵和查询矩阵都会有所变化,以捕捉不同的注意力模式。值矩阵也会不同(要加到嵌入向量上的向量不同)

transformer完整的注意力模块由多头注意力组成,每个头都有不同的键、值、查询矩阵。GPT3每个注意力模块有96个注意力头。

在这里插入图片描述GPT3每个注意力模块有96个注意力头。每个头都有不同的键、值、查询矩阵,产生96个不同的注意力模式。每个注意力头都有不同的值矩阵,产生96个值向量。与对应注意力模式分别加权求和。每个token都会产生96个要加到这个token嵌入向量上的变化量。而你要做的就是把各个头给出的变化量加起来。然后加上初始的嵌入向量
在这里插入图片描述
这个总和就是多头注意力模块输出的一列。得到更精准的向量。
在这里插入图片描述
这样一共有6亿个参数。
在这里插入图片描述

4.1 额外说明

在论文和实际的实践中,多头注意力机制中,value up矩阵会合到一起,称为output矩阵,与整个多头注意力模块相关联,
在这里插入图片描述
而值矩阵就指的是value down矩阵。以下还有其他额外的技巧
在这里插入图片描述
多头注意力之后,还要经过MLP模块。然后会多次重复这两个模块。使得所提取的概念从低级走向高级。比如情感,语气,诗意。
在这里插入图片描述
在这里插入图片描述
96个层,这样GPT3的参数量来到了580亿。很多了,但是只占总参数量1750亿的三分之一。其他参数在MLP。
在这里插入图片描述

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

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

相关文章

SpringBoot百万行Excel导入MySQL实践

在公司开发时,客户说需要支持大数据量excel导入,所以打算写一篇文章记录下思路和优化过程。 一、前期准备 首先我们选用的肯定是阿里出品的EasyExcel,对比poi和jxl占内存更少 easyexcel官方网站准备测试的数据库和excel文件,已经…

Zustand:让React状态管理更简单、更高效

Zustand 这个单词在德语里是状态的意思(发音:促stand) 1. 下载zustand npm i zustand 或者 yarn add zustand2.创建一个store import { create } from zustandconst useBearStore create((set) > ({bears: 0,increasePopulation: …

20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并连接adb

20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并连接adb 2024/8/24 15:56 缘起,由于我司对面积有极度的追求,所以将飞凌OK3588-C开发板使用的【9线】type-C接口(USB3.1?)降级为4线的USB2.0。 【micro USB/MINI USB。】 先决条件…

基于RK3588的多摄像头车辆与车道线检测系统(基于rk3588的车辆和车道线检测,可以带四个720p的摄像头,2个1080p的摄像头)

硬件配置: 处理器:Rockchip RK3588,这是一款高性能的嵌入式处理器,支持多路高清视频输入和处理。摄像头配置: 4个720p(1280x720)分辨率的摄像头2个1080p(1920x1080)分辨…

什么是持续集成(持续交付、部署)

文章目录 1 持续集成1.1 持续集成的好处1.2 持续集成的目的1.3 没有持续集成的状况 2 持续交付3 持续部署4 持续交付和持续部署的区别 1 持续集成 持续集成(Continuous integration,简称CI),简单来说持续集成就是频繁地&#xff…

拓扑排序,以及区间dp相关试题

目录 1.有向无环图(DAG图) 2.AOV网:顶点活动图 3.拓扑排序 4.实现拓扑排序 力扣.207课程表 牛客.最长回文子序列 1.有向无环图(DAG图) 入度:表示有多少条边指向它 出度:有多少条边向外指出他 2.AOV网:顶点活动图 3.拓扑排序 找到做事情的先后顺序 …

React学习笔记(三)——redux状态管理工具

1. Redux快速上手 1.1 什么是Redux? Redux 是 React 最常用的 集中状态管理工具 ,类似于 Vue 中的 Pinia(Vuex), 可以独立于框架运行 作用: 通过集中管理的方式管理应用的状态 1.2 Redux快速体验 不和任何…

【OpenGL学习笔记】--图像管线

图像管线(Image Pipeline)是计算机图形学中一个核心概念,尤其是在图形处理和渲染的上下文中。它是一个用于处理和渲染图像的流程,其中包括从场景数据的输入到最终图像输出的各个阶段。 图像管线的组成 顶点处理(Verte…

大模型入门到精通——使用Embedding API及搭建本地知识库(一)

使用Embedding API及搭建本地知识库 1. 基于智谱AI调用Embedding API实现词向量编码 首先,生成.env 文件,填写好智谱AI的API-key 参考:大模型入门到实战——基于智谱API key 调用大模型文本生成 读取本地/项目的环境变量。 find_dotenv(…

基于SSM的在线家教管理系统的设计与实现 (含源码+sql+视频导入教程+论文+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的在线家教管理系统拥有三个角色 管理员:用户管理、教师管理、简历管理、申请管理、课程管理、招聘教师管理、应聘管理、评价管理等 教师:课程管理、应聘…

Prometheus Operator部署管理

Prometheus Operator部署管理 Prometheus Operator & Kube-Prometheus & Helm chart 部署区别 Prometheus Operator 是 Kubernetes 原生的工具,它通过将 Prometheus 资源定义为 Kubernetes 对象(CRD)来简化 Prometheus 集群的管理。…

如何使用ssm实现公司项目管理系统设计与实现

TOC ssm136公司项目管理系统设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规…

Avg函数求比率的应用(SQL)

题目 在 SQL 中,AVG 函数用于计算一组数值的平均值。这个功能也可以用来计算比率或比例。 平均值 可以用来计算比率的原因: 二元值:在许多情况下,我们用 1 和 0 表示发生或未发生的事件。例如,在你的查询中&#xff0…

基于Java的C语言课程教学实践小程序的设计与实现(论文+源码)_kaic

基于Java的C语言课程教学实践小程序的设计与实现 摘 要 在当前信息技术迅猛发展的大背景下,为了学生更好地利用信息技术学习C语言,急需开发一款C语言课程教学实践小程序。‎这个小程序可以让学生不再局限于课堂学习‎的教学模式,而是能够随…

freeCAD与stl文件如何互切?

大家好,我是山羊君Goat。 作为硬件工程师,如果需要给自己的硬件主板做一个DIY的造型,比如说B站稚晖君DIY的小电视等等。 对于这个,那3D打印技术就必不可少了(怪不得说硬件学的东西都很杂 )。 FreeCAD是一款…

BeautifulSoup4通过lxml使用Xpath定位实例

有以下html。<a>中含有图片链接&#xff08;可能有多个<a>&#xff0c;每一个都含有一张图片链接&#xff09;。最后一个<div>中含有文字。 上代码&#xff1a; import requests from bs4 import BeautifulSoup from lxml import etreeurlhttps://www.aaabb…

动态规划类型题目汇总及解析(持续更新)

目录 数字三角形模型 摘花生 最低通行费 方格取数&#xff08;洛谷&#xff09; 传纸条&#xff08;洛谷&#xff09; 最长上升子序列模型 最长上升子序列&#xff08;洛谷&#xff09;&最长递增子序列&#xff08;leetcode&#xff09; leetcode674. 最长连续递…

Image-to-Image Translation 图像翻译任务中的输入成对图像拼接成一张图技术详解

引 言 在图像翻译任务中&#xff0c;近几年比较火热的Generative Adversarial Nets (GAN)模型以及各种变体深受视觉研究团体的青睐&#xff0c;在具体任务中取得不错的实验表现。图像翻译包含两部分内容&#xff1a;一个是图像内容(image content)显示内部存在的实体,用于区分不…

【C++ Primer Plus习题】4.5

问题: 解答: #include <iostream> using namespace std;typedef struct _CandyBar {string brand;float weight;int calorie; }CandyBar;int main() {CandyBar snack { "德芙",2.1,20};cout << "品牌:" << snack.brand << endl;…

计算机毕业设计 养老院管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…