机器学习中的注意力机制2025年2月3日 | 阅读 6 分钟 引言为了提高机器翻译任务的性能,注意力机制被纳入了编码器-解码器模型的流程中。传统的信号编码器/解码器架构将整个输入序列压缩成一个固定大小的向量,该向量包含了上下文信息,但这并不理想,因为当序列长或复杂时,重要数据可能会丢失,从而产生糟糕的翻译结果。注意力机制通过允许解码器在翻译时选择并关注输入序列的特定区域来解决这个问题。 该机制的工作方式是,将所有编码输入序列的输入向量相加,并将更多权重分配给在解码当前步骤中重要的向量。与仅限于一个特定的上下文向量不同,解码器能够控制输入信号中至关重要方面的强度。这种动态聚焦能力使模型能够有效地执行更困难的翻译任务。 注意力机制允许解码器“查看”输入句子中用于生成更充分、更准确翻译的不同部分。所提出的方法有助于在模型方面实现更高的灵活性,并确保其在不同类型的机器翻译任务中表现更好。 注意力机制注意力机制由 Bahdanau 等人(2014 年)提出,旨在解决使用固定长度编码向量时出现的账户号码瓶颈问题,该问题限制了解码器获取源信息的途径。这被认为是由于指示符的长度和/或复杂性而成为一个问题,因为它们的维度将不得不等同于紧凑或基本序列的维度。请注意,Bahdanau 等人的注意力机制分为对齐分数、权重和上下文向量的逐步计算。 1. 对齐分数对齐分数用于解码过程中,以从编码的隐藏状态表示 hi(其中 i 定义输入序列中的位置)和最后一个解码器的输出 St-1 计算分数 et,i。对齐模型由函数 a(.) 表示,该函数可以通过前馈神经网络实现。 e_(t,i)=a.(s_(t-1),h_i ) 2. 权重上述权重 αt,i 是通过对 et,i 上先前计算的对齐分数应用 softmax 变换获得的。 α_(t,i)=softmax(e_(t,i)) 3. 上下文向量在这种情况下,上下文向量是唯一的,并且在每个时间步传递给解码器。它是通过对所有编码器隐藏状态进行加权求和来计算的。 ![]() Bahdanau 等人使用 RNN 系统地执行编码器和解码器操作。然而,最初,注意力机制是在 LTSM 框架内为基于序列到序列映射的 seq2seq 模型描述的,而在这种情况下,信息可能不是顺序的。 通用注意力机制通用注意力机制由三个主要组件组成:为此,它定义了查询 Q、键 K 和值 V 的模式。将这些组件与 Bahdanau 等人提出的注意力机制进行编译,查询 Q 将类似于先前的解码器输出。换句话说,值 V 将对应于编码的输入 hi,而底线 St−1 将对应于预测的目标 St。 在 Bahdanau 的注意力机制中,键 K 和值 V 都是相同的向量。通用注意力机制涉及以下计算: 1. 分数计算:将每个查询向量 q = St-1 与由一些键组成的数据库进行比较,以生成分数。此匹配操作通过查询向量 q 与每个键向量 ki 的点积来执行。 Eq, ki = q. ki 2. 权重生成:然后将分数通过 softmax 操作,然后生成权重。 α_(q,ki)=softmax(e_(q,ki)) 3. 注意力计算:通过对值向量 Vki 求和来获得广义注意力,其中每个值向量都与相应的键配对。 ![]() 在提及 MT 时,查询-ID、键和值向量被提供给输入语句的每个单词。这些向量是通过将单词的编码器表示与在学习阶段训练的三个唯一权重矩阵的点积来计算的。 换句话说,当通用注意力机制作用于单词序列时,它会将特定单词的查询向量通过数据库,并测量该向量与每个键的相似性。这传达了单词相对于序列中其他单词的全部含义。然后根据从上述分数得出的注意力权重来缩放值,这使得模型能够主要关注被认为与查询最相关的单词。此过程会为正在考虑的单词生成注意力输出。 通用注意力机制:使用 NumPy & SciPy 进行编译本节将重点介绍使用 NumPy 和 SciPy 库在 Python 中实现通用注意力机制的可行解决方案。 实现通用注意力机制的步骤 步骤 1:定义词嵌入 对于学习阶段,手动生成四个不同词的嵌入,因为在这种情况下,这些嵌入将由编码器产生。 步骤 2:生成权重矩阵 为查询、键和值创建三个随机初始化的矩阵,其形状与词嵌入相同。 步骤 3:生成查询、键和值 您通过矩阵乘法计算查询、键和值的向量,其中权重矩阵中的元素是嵌入向量乘以单词。 步骤 4:分数计算 通过将第一个单词的查询向量与所有键向量的点积来获得分数。 步骤 5:归一化和 Softmax 将分数归一化,并将结果值除以键向量维度的平方根以获得注意力权重,然后对它们应用 softmax。 步骤 6:计算注意力输出 通过将注意力权重与每个值向量的乘积相加,来计算第一个单词的注意力输出。 步骤 7:推广到所有单词 以矩阵形式重复所有步骤以处理这四个单词,以获得所有四个单词的注意力输出。 代码 输出 [[0.98522025 1.74174051 0.75652026] [0.90965265 1.40965265 0.5 ] [0.99851226 1.75849334 0.75998108] [0.99560386 1.90407309 0.90846923]] 说明 代码是使用 NumPy 和 SciPy 实现通用注意力机制的典型示例结构。词嵌入是手动指定的,查询、键和值的特定权重矩阵是任意随机选择的。在这种情况下,查询、键和值是通过矩阵运算获得的。注意力分数通过查询和转置键的点积获得,然后进行缩放并进一步通过 softmax 函数获得权重。最后,通过将所有单词的值向量与每个值向量的权重相乘来获得注意力输出。 结论注意力机制大大优于传统的编码器-解码器结构,因为它能够让模型关注输入序列中最重要的部分。该机制弥补了固定长度编码向量的缺陷,这些向量可能会在长而复杂的序列中丢失大量信息。注意力机制通过计算对齐分数(进而产生注意力权重)以及创建上下文向量,以灵活高效的方式帮助提高翻译质量。使用 NumPy 和 SciPy 进行的这种分析过程展示了如何高效地执行注意力输出。总的来说,注意力机制是一种灵活的方法,可以提高模型在复杂翻译场景下的性能,因此,它是当今 NLP 方法的重要组成部分。 |
我们请求您订阅我们的新闻通讯以获取最新更新。