文章结合清晰的图表和李沐老师的优化代码,为您提供对 Transformer 运作原理的全面理解。请关注收藏后观看。
本文提供了:
- 对 Transformer 架构的深入解析
- 编码器和解码器的详细说明
- 自注意力机制的工作原理
探索 Transformer 的核心:注意力机制
深入了解 Transformer 的注意力模块,揭晓其强大的能力。通过透彻的计算原理分析,了解它如何有效捕捉文本中的相关性,从而实现高效的语言处理任务。
深入探讨技术背后的机制,了解其工作原理,更重要的是,为何如此。本系列文章将引领您踏上技术探索之旅,超越表面,揭开其内在运作秘密。
Transformer:革新自然语言处理
Transformer 模型引领着自然语言处理的变革,超过了 RNN 的性能。其独特的架构依赖于自注意力机制,允许它捕捉文本中的远程依赖关系,从而提高准确性。Transformer 在训练和推理期间使用高效的平行化技术,使其成为大规模数据集和复杂任务的理想选择。
理解 Transformer 架构的逐层运作机制。本文深入解析 Transformer,从数据维度和矩阵变换的角度,揭示其端到端的运作原理。通过图解方式展示 Transformer 的内部工作机制,让您清晰掌握其处理数据、变换矩阵的过程。
深度解析多头注意力机制,揭秘 transformer 核心架构。多头注意力让模型能同时关注输入序列的不同子空间,提升特征提取能力。它在 transformer 中担任枢纽角色,将不同位置的信息进行加权整合,极大增强了模型对长序列处理和捕获语义关系的能力。
一、输入序列怎样传入注意力模块?
在英语-西班牙语翻译中,"The ball is blue" 被翻译为 "La bola es azul",准确率为 100%。这一示例说明了机器翻译在跨语言沟通中的有效性和准确性。
源序列通过嵌入层和位置编码层得到每个单词的嵌入。嵌入随后被馈送到编码器,其中注意力模块赋予关键信息权重。
Attention 模块的核心在于三个矩阵:Query、Key、Value。它们通过嵌入序列,再经过三个线性层获得。每个矩阵的行与源序列的单词一一对应。这些矩阵用于计算注意力得分,从而实现模型对输入序列的关注。
二、进入注意力模块的矩阵的每一行,都是原序列中的一个词理解 Attention 机制:通过追踪源序列中单个词的路径,在 Transformer 中观察 Attention 机制的工作原理。这揭示了每个词与其他词的动态交互方式,提供了对其在 Attention 模块中行为的清晰洞察。
关注 Attention 模块对每个词的操作,以及每个向量如何映射回原始输入词。忽略矩阵形状、计算细节和注意力头数量等与词语去向无关的细节。
为了简化解释和可视化,让我们忽略嵌入维度,将一个“行”作为一个整体进行理解。
三、每一行,都会经过一系列可学习的变换操作每一行文字都通过一系列可训练操作(嵌入、位置编码等)从源词生成。这些操作中的权重通过模型输出进行学习,不是预先确定的。
Transformer 通过训练中的注意力机制确定最佳权重组合,赋予不同输入特征适当的重要性,从而产生最佳输出。
四、如何得到注意力分数
Attention模块包含多个步骤:* 线性层:提取特征向量
* 注意力得分:衡量特征向量之间的相关性
Attention模块:
提取特征向量和计算注意力得分,衡量特征向量之间的相关性。
Attention模块的第一步是Query矩阵与Key矩阵转置的点积运算,计算每个单词与所有其他单词的相关性。因子矩阵是 Query 和 Key 转置进行点积形成的。它包含每个词向量之间的矩阵乘法结果,为后续评分和检索提供中间信息。因子矩阵呈现 Q 向量与 K 向量之间的点积关系。第 4 行中的每一列表示 Q4 向量与对应 K 向量之间的点积,而第 2 列则表示每个 Q 向量与 K2 向量之间的点积。
因子矩阵与 V 矩阵矩阵相乘,生成注意力分数。Q4 矩阵与所有对应的 K 和 V 相乘,得到输出矩阵的第 4 行。
注意力得分为词语分配的“编码值”,由因子矩阵加权而来。因子矩阵的权值是单词Query和Key向量的点积。
注意力得分:衡量单词重要性
注意力得分表示单词在文本中的重要性,由以下步骤计算:
* 查询向量与键向量的点积产生注意力权重。
* 权重与值向量的加权和得到编码值。
* 编码值是单词的注意力得分,反映其在语境中的意义。
五、Query、Key、Value的作用在注意力机制中,Query 向量代表当前计算的词,Key 向量和 Value 向量表示正在比较的相关词。通过计算 Query 与 Key 的相似度,算法确定 Value 中包含多少与 Query 相关的信息。
探索文本相似性和语法分析模型的强大功能,发现关系密切的单词和短语。我们的模型分析每个句子中每个单词的注意力分数,构建一个全面、交互式的数据视图。通过交互式界面,您可以深入了解单词对之间的关系,揭示隐藏的见解。
注意力的计算涉及除法和 Softmax 运算,但这些运算不会改变词嵌入的位置或参与词之间的相互作用。它们只是改变嵌入中的数值,使其更适合下游任务。
六、点积:衡量向量之间的相似度Attention Score 利用点乘和求和,揭示特定单词与其上下文之间的关系。它允许 Transformer 模型通过矩阵乘法,精准地捕捉单词之间的相关性。通过计算每个单词与其上下文中所有其他单词的点积,Transformer 可以分配权重,以突出重要单词对之间的联系,从而理解文本中的语义含义。
深入了解向量运算:
Query、Key、Value行实为具有嵌入维度的向量。矩阵乘法将这些向量相乘,计算相关性分值。
当我们在两个向量之间做点积时,我们将一对数字相乘,然后相加:
如果一个数字是正数,另一个是负数,那么乘积将是负数。乘积将减少最后的总和。如果乘积是正数,两个数字越大,它们对最后的总和贡献越大。这意味着,如果两个向量中相应数字的符号是一致的,那么最终的和就会更大。
七、Transformer 如何学习单词之间的相关性
点积适用于计算注意力分数。一致性较高的词向量会导致更高的注意力分数。Transformer 旨在提高相关词对之间的注意力分数,同时降低无关词对的注意力分数。
在语言理解中,为了获取词语之间的关联,模型需要学习识别单词的相关程度。以“黑猫喝了牛奶”为例,“牛奶”与“喝”高度相关,“黑”与“牛奶”相关性较低。理想情况下,模型应产生以下输出:
* “牛奶”和“喝”:高相关性
* “牛奶”和“猫”:中等相关性
* “牛奶”和“黑”:无关
词向量是衡量单词相似性的数学表征。相似单词的词向量具有较高的相似性分数,而不同单词的词向量具有较低的相似性分数。例如,"milk" 和 "drank" 的相似性分数很高,表明它们在语义上相似。相比之下,"milk" 和 "cat" 的相似性分数较低,而 "milk" 和 "black" 的相似性分数很低,表明它们在语义上不同。
Transformer 利用自注意力机制,动态地调整权重,以识别最有利于预测的输入特征组合,从而得到最佳结果。
Transformer 通过学习词嵌入和线性层权重生成词向量。这使它能够学习语言的各种特征,包括词义、语法和语义。
换句话说,它将以这样的方式学习这些嵌入和权重:
关联词语具有相似词向量,高关注分数,提升用户注意力。不关联词语词向量不一致,低关注分数,降低用户注意力。
文本嵌入分析显示:
"milk" 与 "drank" 的嵌入高度相似,体现出强关联(高分)。
"milk" 与 "cat" 的嵌入存在差异,表现出中等关联(中分)。
"milk" 与 "black" 的嵌入显著不同,表明低度关联(低分)。
这就是注意力模块的原理。
八、总结
通过点积计算 query 和 key 间的相关性,将其作为影响因子,对所有 value 向量进行加权求和。此加权和的输出即为注意力分数。
Transformer 通过对嵌入向量的学习,使彼此相关的词更加一致。
通过引入线性层,Attention 模块可获得更多参数,使其具备学习调整词向量的能力,为精准语义理解提供支持。
九、回顾:Transformer 中的几种 Attention module
Transformer 中共有三处使用到了注意力机制:
1. Encoder 中的自注意力机制:源序列与自身的注意力计算;
2. Decoder 中的自注意力机制:目标序列与自身的注意力计算;
注意力机制优化了编码器-解码器模型,通过计算目标序列元素对源序列元素的注意力权重,增强了模型对长序列的处理能力。
在编码器自注意力机制中,我们评估源序列中每个单词与其他单词的相关性。此过程发生在编码器堆栈中的所有编码器中。
Decoder Self Attention 在 Encoder Self Attention 的基础上,具有独特的 ню 差异:
* 输入不同:Decoder 输入为 Encoder 输出,而 Encoder 输入为原始序列。
* 因果关系约束:Decoder 注意力必须仅关注之前的时间步,以避免信息泄露。
* 输出概率分布:Decoder 输出的概率分布用于生成目标序列的下一个元素。
加入解码器自注意力机制,量化目标序列中单词之间的相关性,深度挖掘文本语义,提升翻译准确性和流畅性,带来极致语言转化体验。
注意力机制中的 "Encoder-Decoder" 结构运用 "Query-Key-Value" 方式关联目标句与源句。Query 来自目标句,而 Key/Value 来自源句。通过计算相关性,模型确定目标句中每个词与源句中每个词之间的联系,为机器翻译和自然语言理解等任务提供有效的信息。
-对此,您有什么看法见解?-
-欢迎在评论区留言探讨和分享。-