在机器学习中,注意力机制是一种非常强大的技术,它允许模型在做出预测时将“注意力”集中在输入数据中最关键的部分。通过为不同的元素分配不同的权重,它能帮助模型优先处理相关信息,而不是对所有输入一视同仁。可以说,它是如今高级模型(如 Transformer 和 BERT)的基石,并在自然语言处理(NLP)和计算机视觉领域得到了广泛应用。
- 它改进了模型处理长序列数据的方式。
- 它有助于捕捉序列中相距较远的元素之间的关系。
- 通过展示输入的哪些部分影响了输出,增强了模型的可解释性。
- 广泛应用于翻译、摘要生成、图像描述和语音处理等领域。
注意力机制的类型
- 软注意力:这是一种可微分的机制,使用 Softmax 函数,广泛用于 NLP 和 Transformer 模型中。
- 硬注意力:不可微分,使用采样来选择特定的部分。它通常通过强化学习进行训练。
- 自注意力:允许序列中的每个元素关注同一序列中的其他元素。
- 多头注意力:使用多个注意力头,从不同的表示子空间中捕捉多样化的特征。
- 加性注意力:使用前馈神经网络来计算注意力分数,而不是使用点积。
> 想了解更多关于注意力机制类型的细节,请阅读:Attention Mechanism 的类型。
工作原理
让我们把注意力机制的工作流程拆解为几个关键步骤:
步骤 1:输入编码:首先,我们使用编码器(如 RNN、LSTM、GRU 或 Transformer)对输入序列进行编码,生成代表输入上下文的隐藏状态。
步骤 2:查询、键和值向量:每个输入都会被转换为三个向量:
- 查询:代表我们正在寻找的内容。
- 键:代表每个输入包含的信息标识。
- 值:包含每个输入的实际信息。
这些是输入嵌入的线性变换。
步骤 3:键-值对创建:每个输入被表示为一对:
- 键:代表信息的“地址”或标识符。
- 值:代表实际的内容。
步骤 4:相似度计算:模型计算查询与每个键之间的相似度,以确定相关性。
> \text{Score}(s,i) = \begin{cases}hs \cdot yi & \text{(Dot Product)} \\hs^T W yi & \text{(General)} \\v^T \tanh(W[hs; yi]) & \text{(Concat)}\end{cases}
其中:
- h_s :位置 s 处的编码器隐藏状态
- y_i :位置 i 处的解码器隐藏状态
- W:权重矩阵
- v:权重向量
步骤 5:注意力权重计算:相似度分数会通过 Softmax 函数,将其转换为注意力权重:
> \alpha(s,i) = \text{softmax}(\text{Score}(s,i))
步骤 6:加权求和:利用注意力权重对值向量计算加权和:
> ct = \sum{i=1}^{Ts} \alpha(s,i) hi
这里, T_s 是键值对的总数。
步骤 7:上下文向量:上下文向量 c_t 汇总了输入序列中最相关的信息,并被馈送到解码器中。
步骤 8:整合:解码器结合自身的隐藏状态和上下文向量来生成下一个输出 Token。
注意力机制架构
注意力机制包含三个主要组件:编码器、注意力模块和解码器,它们协同工作以捕捉长期依赖关系并提高翻译准确性。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251029093447681289/stringconstantpool5.webp">stringconstantpool5带注意力机制的编码器-解码器结构
1. 编码器
编码器处理输入序列(例如一个句子),并将其转换为一系列隐藏状态,这些状态代表了关于每个 Token 的上下文信息。
- 它通常使用 RNN、LSTM、GRU 或基于 Transformer 的架构。
- 对于输入序列 x0, x1, x2, x3 ,编码器生成如下隐藏表示:
> h0, h1, h2, h3
- 每个隐藏状态都捕捉了当前输入以及之前时间步的信息:
> ht =f(h{t-1},x_t)
- 这些隐藏状态随后被传递到注意力层,用于计算输入的哪些部分与当前输出步骤最相关。
2. 注意力机制
注意力组件决定了在生成输出中的特定单词时,应该给予每个编码器隐藏状态多少重要性。其主要目标是创建一个上下文向量 C_t ,它捕捉了当前解码步骤中最相关的编码器输出信息。
步骤 1:前向对齐函数:解码器的当前隐藏状态 St 和每个编码器隐藏状态 hi 会组合