解码自我注意的魔力:深入了解其直觉和机制

news2024/11/18 7:43:50

一、说明

        自我注意机制是现代机器学习模型中的关键组成部分,尤其是在处理顺序数据时。这篇博文旨在提供这种机制的详细概述,解释它是如何工作的,它的优点,以及它背后的数学原理。我们还将讨论它在变压器模型中的实现和多头注意力的概念。本指南适用于任何有兴趣了解自我注意在时间序列分析中的作用的人,无论他们在该领域的专业水平如何。

        自我注意层提供了一种捕获顺序数据(如时间序列)中的依赖关系的有效方法。使用自我注意进行时间序列/序列分析背后的关键直觉在于它能够为输入序列中的不同步骤分配不同的重要性权重,使模型能够专注于输入中最相关的部分以进行预测。

        内容

  • 它是如何工作的?简化的理解方式
  • 自我注意的数学
  • 位置编码
  • 计算权重背后的直觉
  • 查询、键和值
  • 注意力层输入:词嵌入
  • 多头注意力
  • 自我注意,RNN,1D CONV
  • 变压器型号

二、它是如何工作的?一种简化的理解方式。

        以下是理解它的简化方法:

  1. 捕获长期依赖关系:传统的序列模型,如递归神经网络(RNN)及其变体(如LSTM和GRU),有时会由于梯度消失等问题而难以解决长期依赖关系。然而,自我注意可以捕获序列中任何两点之间的依赖关系,无论它们的距离如何。这种能力在时间序列分析中特别有价值,因为过去的事件,即使是遥远的过去事件,也可以影响未来的预测。
  2. 加权重要性:自我注意计算一个权重,该权重表示特定时间步长的其他时间步长的重要性或相关性。例如,在股票价格的时间序列中,模型可以学习更多地关注与重大市场事件相对应的时间步长。
  3. 并行化:与按顺序处理数据的 RNN 不同,自我注意力同时对整个序列进行操作,允许并行计算。这使得它在处理大型时间序列时更快、更高效。
  4. 可解释性:自我注意层可以提供一种形式的可解释性,因为注意力权重可以深入了解模型认为对每个预测重要的时间步长。

三、自我注意的数学

        在注意力机制中,给定一组向量值和一个向量查询,注意力根据查询和一组键向量计算值的加权和。查询、键和值都是向量;它们的维数是模型的一个参数,它们都是在训练过程中学习的。

        变形金刚中使用的特定注意力类型称为缩放点积注意力。以下是它的工作原理:

  1. 计算注意力分数:对于每个查询和键对,计算查询和键的点积。这将生成一个表示查询和键之间的“匹配”的数字。这是对所有查询键对完成的。
  2. 比例分数:然后通过将其除以查询/键向量维度的平方根来缩放分数。这样做是为了防止点积随着维数的增加而变得太大。
  3. 应用 softmax:接下来,将 softmax 函数应用于每个查询的这些缩放分数。这可确保分数为正且总和为 1。这使得它们可以用作加权总和的权重。
  4. 计算输出:最后,每个查询的输出计算为值向量的加权和,使用 softmax 输出作为权重。

        在数学上,它可以表示如下:

        注意 (Q, K, V) = SoftMax((QKT) / sqrt(dk)) V

        这里:

  • Q 是查询矩阵。
  • K 是键的矩阵。
  • V 是值的矩阵。
  • dk 是查询/键的维度。
  • 运算 QK^T 表示 Q 的点积和 K 的转置。

        此过程针对输入序列中的每个位置执行,允许每个位置以加权方式关注所有其他位置,权重由查询和每个键之间的兼容性确定。

自我注意层架构

四、位置编码

        位置编码是一种技术,用于为模型提供有关句子中单词相对位置的一些信息。

        变压器基于自我注意机制,它本质上不考虑句子中单词的顺序。这与 RNN 或 LSTM 等模型不同,后者按顺序处理输入,因此自然地合并单词的位置。

        位置编码在传递到自我注意层之前被添加到输入嵌入(表示单词)中。位置编码是对句子中单词的位置进行编码的向量。这些向量的设计方式使模型可以轻松地学习根据单词之间的距离来关注单词。

        位置编码的确切形式可能会有所不同。在原始变压器模型中,位置编码是使用涉及正弦和余弦函数的特定公式创建的。但是,其他形式的位置编码(例如学习的位置编码)也是可能的。

        在图中,位置编码表示为输入嵌入之后的单独步骤,但在实践中,位置编码通常在传递到自我注意层之前添加到嵌入中。

五、计算权重背后的直觉

        在自我注意机制中,步骤的重要性与该步骤的内容有着内在的联系。例如,考虑在自然语言处理任务中使用自我注意力的转换器体系结构。该模型为输入中的每个单词计算一组注意力分数(步骤的“重要性”),这些分数指示在将当前单词编码为上下文相关表示时应考虑多少其他单词。

        自我注意机制本质上考虑了整个输入序列,并根据每个单词的语义和句法关系确定每个单词对当前单词的重要性。此关系是通过计算查询向量(表示当前单词)和键向量(表示另一个单词)的点积来确定的。然后是 SoftMax 操作,以确保所有注意力分数的总和为 1。

        这些查询、键(和值)向量是在训练过程中学习的,因此一个单词的重要性(及其与另一个单词的关系)可以根据使用它的上下文而变化。注意力权重实质上在输入序列上形成一个分布,表示在对当前单词进行编码时哪些单词是重要的。因此,学习的重要性权重(注意力分数)确实与内容相关,并与特定单词相关联。每个单词的上下文(即它与序列中其他单词的关系)决定了模型在对序列中的不同单词进行编码时对该单词的关注程度。例如,如果你正在处理句子“黑色的猫坐在垫子上”,那么在编码单词“cat”时,自我注意机制可能会为“黑色”和“sat”分配高注意力分数,表明这些单词对于理解此句子中“cat”的上下文很重要。

六、查询、键和值

        通过乘以训练期间学习的三个不同的权重矩阵,将层的输入转换为查询、键和值向量。查询和关键向量用于计算注意力分数,这些分数确定对输入的每个部分的关注程度。然后使用值向量创建基于这些分数的加权组合。这种加权组合是自我注意层的输出。

        注意力机制中的键和值向量派生自输入嵌入,并且两者都扮演着不同的角色:

  1. 关键向量 (K):关键向量用于计算注意力分数。在句子或序列的上下文中,它们代表单词的“上下文身份”,用于注意力评分。句子中的每个单词都与一个键相关联,该键用于通过查询计算点积以计算注意力分数。此分数反映了与该键关联的单词与查询所表示的单词的相关性。
  2. 值向量 (V):值向量用于将 SoftMax 函数应用于注意力分数后的加权和的计算。它们是平均在一起形成注意力层输出的东西。在某种程度上,您可以将价值向量视为由注意力分数加权的“内容”。

        本质上,键用于确定“如何注意”,即它们计算与查询的兼容性分数,值用于确定“要注意什么”,即它们有助于基于注意力分数的最终输出。

        在句子中,为每个单词计算一个查询、一个键和一个值。特定单词的查询与所有键(包括其自身)交互以计算注意力分数,然后用于对值进行加权。

        例如,如果我们有句子“猫坐在垫子上”,在处理单词“sat”时,模型将使用与“sat”关联的查询,并使用与“The”、“cat”、“sat”、“on”、“the”和“mat”关联的键计算其点积。这将导致注意力分数,表示模型在尝试理解“sat”的含义时应该关注这些单词中的每一个。然后使用这些分数对与每个单词关联的值向量进行加权,并将它们相加以产生输出。

        请务必注意,查询、键和值未显式链接到特定字词或含义。它们是在训练期间学习的,模型确定如何最好地使用它们来完成训练的任务。

七、注意力层输入:词嵌入

        在机器学习中,模型不会像人类那样“理解”或“记住”单词。相反,它们以数字表示单词并学习这些表示中的模式。有多种方式可以对单词进行数字表示,例如单词袋、TF-IDF 和单词嵌入。

        深度学习模型中最常见的方法,如变形金刚,是使用词嵌入。以下是其工作原理的简化说明:

  1. 词嵌入:词汇表中的每个单词都映射到实数向量,形成其词嵌入。此向量通常有几百维长。这些向量最初是随机分配的。
  2. 上下文学习:在训练期间,模型根据每个单词出现的上下文调整单词嵌入。经常出现在类似上下文中的单词将具有类似的嵌入。因此,例如,“猫”和“小猫”最终可能会有类似的嵌入,因为它们都经常用于关于宠物的句子中。
  3. 反向传播和优化:学习是通过称为反向传播的过程完成的。该模型根据当前嵌入进行预测,然后计算这些预测与实际值之间的误差。然后,此错误用于调整嵌入,以使预测更接近实际值。
  4. 捕获含义:随着时间的推移,这些单词嵌入开始捕获语义和句法含义。例如,模型可能会了解到“猫”和“狗”彼此更相似(两者都是宠物),而不是“猫”和“汽车”。

        在像变形金刚这样的自我注意模型中,这些单词嵌入然后作为自我注意层的输入,其中不同单词之间的关系被进一步建模。每个单词不仅由其自己的嵌入表示,而且还受到句子中与之交互的单词嵌入的影响,从而允许每个单词的丰富,上下文相关的表示。

        重要的是要注意,该模型不会像人类那样“理解”单词。它不知道猫是一种小型的、典型的毛茸茸的、驯化的、肉食性的哺乳动物。它只知道它学到的数字表示和这些数字中的模式。它学习的语义关系纯粹基于它所训练的数据中的模式。

八、多头注意力

        多头注意力是转换器模型架构的关键组件,用于允许模型专注于不同类型的信息。

        多头注意力背后的直觉是,通过多次并行应用注意力机制(这些并行应用是“头”),模型可以捕获数据中不同类型的关系。

        每个注意力头都有自己的学习线性转换,它应用于输入嵌入以获取其查询、键和值。因为这些转换是分开学习的,所以每个头都有可能学会专注于不同的事情。在自然语言处理的背景下,这可能意味着一个头学会注意句法关系(如主谓一致),而另一个头可以学习关注语义关系(如单词同义词或主题角色)。

        例如,在处理句子“猫坐在垫子上”时,一个注意力头可能会关注“猫”和“坐着”之间的关系,捕捉猫是坐着的人的信息,而另一个头可能更关注“坐”和“垫子”之间的关系,捕捉关于坐在哪里发生的信息。

        然后,所有头部的输出被串联并线性变换,形成多头注意力层的最终输出。这意味着每个头部捕获的不同类型的信息被组合在一起,形成一个统一的表示。

        通过使用多个磁头,Transformers允许对输入进行比单一注意力机制应用更复杂和细致的理解。这在一定程度上有助于提高它们在广泛任务上的效力。

        没有一种直接的机制可以确保每个注意力头在训练期间学习不同的东西。相反,这种行为自然地出现在训练过程的随机(随机)性质以及每个注意力头以不同的随机初始化参数开始的事实中。

原因如下:

  1. 随机初始化:神经网络中的权重通常使用较小的随机值进行初始化。由于每个注意力头都有自己的一组权重,因此它们从重量空间的不同位置开始。
  2. 随机梯度下降:神经网络通常使用随机梯度下降的变体进行训练。这包括向模型显示一小批随机选择的训练数据,计算模型在此批次上产生的误差,以及调整模型的权重以减少此错误。由于选择这些批次涉及随机性,每个头可能会在数据中看到略有不同的模式,从而导致他们学习不同的东西。
  3. 反向传播:在反向传播期间,由于初始参数和学习过程的性质不同,每个磁头都会接收不同的误差信号(梯度)。这些不同的错误信号将每个头部的重量推向不同的方向,进一步鼓励他们学习不同的东西。

        然而,值得注意的是,上述因素只会让每个头脑都倾向于学习不同的东西。不能保证。在实践中,一些头部可能会学习类似甚至多余的表示。这是深度学习领域正在进行的研究领域,提出了各种正则化技术,以鼓励每个头部学习的表示更加多样化。

        此外,虽然目标是让不同的负责人学习数据的不同方面,但重要的是他们都学习对手头任务的有用信息。因此,这是鼓励多样性和确保每个头部都为模型的整体性能做出贡献之间的平衡。

九、自我注意,RNN,1D CONV

9.1 自我关注

        优点:自我注意,特别是以转换器模型的形式,允许并行计算,这大大加快了训练速度。它还捕获元素之间的依赖关系,而不管它们在序列中的距离如何,这对许多 NLP 任务都是有益的。

        缺点:自注意相对于序列长度具有二次计算复杂性,这可能使其对于非常长的序列效率低下。此外,它本身不会捕获序列中的位置信息,因此需要位置编码。

        应用:自我注意广泛用于NLP任务,如翻译,总结和情感分析。基于自我注意的变压器模型是BERT,GPT和T5等模型的基础。

计算需求:由于其二次复杂性,自我注意需要更多的内存,但它允许并行计算,这可以加快训练速度。

9.2 RNN

        优点:RNN 擅长处理序列,可以捕获序列中接近的元素之间的依赖关系。它们也相对简单,并且已广泛使用多年。

        缺点:RNN存在消失和爆炸梯度问题,这使得它们难以在长序列上进行训练。它们还按顺序处理序列,这会阻止并行计算并减慢训练速度。

        应用:RNN 用于许多 NLP 任务,包括语言建模、翻译和语音识别。

        计算需求:RNN的内存要求低于自我注意,但它们无法并行处理序列使得训练速度变慢。

9.3 转换1D

        优点:Conv1D 可以捕获本地依赖关系,并且比 RNN 更有效,因为它允许并行计算。它也不太容易出现消失和爆炸梯度问题。

        缺点:Conv1D具有固定的感受野,这意味着它可能无法捕获长期依赖关系以及自我注意或RNN。它还需要仔细选择内核大小和层数。

        应用:Conv1D 通常用于涉及时间序列数据的任务,例如音频信号处理和物联网数据中的异常检测。在 NLP 中,它可用于文本分类和情感分析。

计算需求:在内存和计算方面,Conv1D 比 RNN 和自我注意力更有效,特别是对于涉及本地依赖的任务。

十、变压器型号

        Vaswani等人在论文“注意力是你所需要的一切”中介绍的变压器模型由编码器和解码器组成,每个解码器都由一堆相同的层组成。反过来,这些层主要由两个子层组成:多头自注意力机制和位置全连接前馈网络。

        让我们回顾一下每个组件:

  1. 多头自注意力机制:自我注意机制允许模型根据输入序列中不同单词与当前正在处理的单词的相关性对其进行权衡和编码。多头注意力允许模型捕获单词之间的不同类型的关系(例如,句法、语义)。
  2. 按位置全连接前馈网络:这是一个标准的前馈神经网络,可独立应用于每个位置。它用于转换自我注意层的输出。虽然自我注意层帮助模型理解单词之间的上下文关系,但前馈网络帮助模型了解单词本身。
  3. 残差连接和层归一化:变压器层中的两个子层(自注意和前馈)中的每一个都有围绕它的残差连接,然后是层归一化。这有助于缓解梯度消失问题,并使模型在堆叠到深度架构中时能够得到有效训练。
  4. 变压器层的体系结构。具有可训练参数的图层以橙色显示

        堆叠多个 Transformer 层背后的关键直觉与任何深度学习模型相同:模型中的每一层都有可能学习捕获不同级别的抽象。在语言的上下文中,较低层可能会学习理解简单的句法结构,而较高层可能会学习理解更复杂的语义。

        例如,在句子“黑白相间的猫坐在垫子上”中,较低层可能侧重于理解相邻单词之间的局部关系,而较高层可能会学习理解句子的整体结构以及“黑与白”提供有关“猫”的额外信息的事实。

法尔扎德·卡拉米

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

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

相关文章

设计模式-10--多例模式(Multition pattern)

一、什么是多例模式(Multition pattern) 多例模式(Multition pattern)是单例模式的一种扩展,它属于对象创建类型的设计模式。在多例模式中,一个类可以有多个实例,并且这些实例都是该类本身。因…

实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务

文章目录 1. 前言2. 本地文件服务器搭建2.1 python的安装和设置2.2 cpolar的安装和注册 3. 本地文件服务器的发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用…

设计模式-5--适配器模式(Adapter Pattern)

一、什么是适配器模式(Adapter Pattern) 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式主要用于解决不兼容接口之间的问题,使得原本…

Windows安装jdk

Windows安装jdk 小白教程,一看就会,一做就成。 1.准备安装包(需要的滴滴我) 2.安装 我是在d盘创建jdk目录,把jdk包解压到jdk里 计算机右键---属性---高级系统设置—环境变量 (系统变量里)--新…

小兔鲜儿 - 地址模块

目录 小兔鲜儿 - 地址模块 准备工作​ 静态结构​ 地址管理页​ 地址表单页​ 动态设置标题​ 新建地址页​ 接口封装​ 参考代码​ 地址管理页​ 接口调用​ 参考代码​ 修改地址页​ 数据回显​ 更新地址​ 表单校验​ 操作步骤​ 删除地址​ 侧滑组件用法…

Leetcode 剑指 Offer II 042. 最近的请求次数

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 写一个 RecentCounter 类来计算特定时间范围内最近的请求。 请实…

4.2 实现基于栈的表达式求值计算器(难度4/10)

本作业主要考察:解释器模式的实现思想/栈结构在表达式求值方面的绝对优势 C数据结构与算法夯实基础作业列表 通过栈的应用,理解特定领域设计的关键作用,给大家眼前一亮的感觉。深刻理解计算机语言和人类语言完美结合的杰作。是作业中的上等…

钉钉机器人消息推送composer拓展 laravel-dingbot

钉钉机器人消息发送 介绍 企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统、交易系统、监控报警系统等等。通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群。 laravel-dingbot 是一款钉钉机器人消息推送的Laravel扩展&#xff…

vscode c语言代码自动格式化

1、在vscode扩展商店里面搜索Clang-format,安装第1个插件 2、快捷键Ctrl逗号,输入format,选择Clang-Format configuration进行配置(其实默认就可以) 3、vscode打开文件夹的源码,在该文件夹里面新建一个文件…

[前端必看,后端福利❤]如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送

最近在写注册功能的自动发送邮箱告知验证码的功能,无奈根本没有学过前端,只有写Qt的qss基础,只好借助网页设计自己想要的邮箱格式,最终效果如下: 也推销一下自己的项目ShaderLab,可运行ShaderToy上的大部分着色器代码&…

js只保留数组对象的某个属性,合并公共类型的数据,选择树形结构的数据,并保留每个节点的name

嗨,今天周二了哎! 期待周五 文章目录 一、js只保留数组对象的某个属性二、合并公共类型的数据二、选择树形结构的数据,并保留每个节点的name 一、js只保留数组对象的某个属性 let data [{ id: 1, name: 哈哈 }, { id: 2, name: 嘻嘻 }]let n…

ModaHub魔搭社区——大模型能力落地和核心就是应用场景

从今年3月百度率先发布语言大模型生成式AI产品“文心一言”后,各大科技互联网巨头纷纷入局,国内大模型瞬间遍地开花。包括阿里、华为、商汤科技、科大讯飞、360、腾讯等,纷纷推出各类大模型。 人工智能正在进入大规模落地应用关键期。 在IDC近日发布的《中国人工智能公有云…

本地虚机Jumpserver使用域名访问报错 使用IP+端口没有错误

背景: 我在本地Windows VMware 15的环境中部署了CentOS7.5,下载jumpserver-offline-installer-v2.28.1-amd64-138.tar.gz并安装部署。 需求: 1、能使用http:ip访问堡垒机。达成; 2、能使用http:域名访问堡垒机。达成&#xff…

FPGA时序分析与约束(2)——时序电路时序

一、前言 在之前的内容中,我们介绍了组合电路的时序问题和可能导致的毛刺,强烈推荐在阅读前文的基础上再继续阅读本文, 前文链接:FPGA时序分析与约束(1)——组合电路时序 这篇文章中,我们将继续…

Android安卓webview,网页端生成安卓项目(极速生成)教程

Android安卓webview,网页端生成安卓项目(极速生成)教程 一,前言 当自己做了一个PC端的页面,也就是前端的页面,或者已经上服的页面,但也想生成一个安卓端供用户使用,本教程详细讲解…

九种情况,要知道灵活变通

九种情况,要知道灵活变通 【安志强趣讲《孙子兵法》第27讲】 第八篇:九变 【全篇大白话】 战场千变万化,胜败看实力,还要看将帅的应变能力。 【原文】 孙子曰:凡用兵之法,将受命于君,合军聚众&a…

解决计算机视觉模型中的种族和性别偏见问题,Meta开源 FACET工具

Meta 公司最新推出的 FACET 工具是为了解决计算机视觉模型中存在的种族和性别偏见问题。该工具经过三万张图片的训练,并含有五万人的图像,特别强调了性别和肤色方面的感知能力。 通过评估计算机视觉模型在不同特征上的表现,FACET 工具可以回答…

vscode远程调试php

使用vscode远程调试php的方法 1.安装remote ssh插件 2.连接服务器 可以点击左下角的绿色按钮,或者ctrlshiftp打开命令框输入remote ssh应该也有。 3.在服务器端vscode安装php debug插件 4.安装xdebug xdebug是用来调试php的软件,原本和vscode没什么关…

无涯教程-JavaScript - GAMMADIST函数

GAMMADIST函数取代了Excel 2010中的GAMMA.DIST函数。 描述 该函数返回伽马分布。您可以使用此功能来研究可能具有偏斜分布的变量。伽马分布通常用于排队分析。 语法 GAMMADIST(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which you want t…

Ubuntu18.04安装docker-io

1. 安装docker 1.1 网上一搜,全是更新仓库、下载依赖、添加docker的gpg密钥、添加docker仓库、安装docker-ce的步骤,但是在安装docker-ce时却提示“package "docker-ce" has no installation candidate”,就很迷。 1.2 安装docke…