Lesson-8 Attention
我们为什么需要 Attention?
Attention 是为了解决传统序列模型在处理长序列时的信息压缩瓶颈和长距离依赖难以捕获问题而提出的。
它通过对输入序列中每个位置的动态加权,允许模型灵活地捕获全局信息,显著提升了性能和效率。
换言之:
- 解决了信息瓶颈问题:Attention机制避免了将整个输入序列压缩成一个固定长度的上下文向量,它能够动态地选择输入序列的不同部分并进行加权,从而更好地捕捉输入中的重要信息,解决了长序列中信息丢失的问题。
- 缓解梯度消失问题:Attention通过分配不同的权重给输入序列的各个部分,使得模型能够更加关注与目标序列相关的部分,有助于缓解梯度消失问题
- 提供了一定的可解释性:Attention的权重是可视化的,它能够提供对模型决策过程的直观理解
Attention 的流程
- 首先,Encoder 输出了一系列隐藏状态 \(h_1,h_2,...,h_N\)(其中\(N\)为输入序列的长度);
- Decoder 也输出了当前时间步的隐藏状态\(s_t\)
- 接下来,我们根据上面两个隐藏状态来计算 Attention Score:即点积计算 Query(Decoder 隐藏状态\(s_t\))和 Key(Encoder 隐藏状态\(h_i\))的相似性:
\[e^t = [s_t^Th_1,...,s_t^Th_N]\]
- 然后,我们利用 Attention Score,来计算权重,这里,我们使用 Softmax:
\[\alpha^t = \text{Softmax}(e^t)\]
- 最后,根据得到的权重,我们对 Encoder 的隐藏状态进行加权,然后得到输出:
\[a^t = \sum_{i=1}^N \alpha_i^th_i\]
一般性理解:
从更广泛的角度来看,Attention机制本质上是在序列处理任务中通过动态加权的方式关注输入序列的不同部分。它允许模型在每个时间步根据当前状态灵活选择与当前任务相关的信息,因此可以更有效地捕捉长距离依赖关系。与传统的固定长度上下文向量相比,Attention的优势在于它能够根据具体任务自适应地选择信息,从而提高模型的表达能力和翻译质量。
通过Attention机制,模型能够对输入的每个部分进行不同程度的关注,尤其是在处理长序列、复杂句子结构时,能够显著提高模型的性能。
Attention 的变种
这里,Attention 的变种都出现在如何计算 Attention Score 中:
- Multiplicative Attention:在点积的基础上,引入了一个权重矩阵进行变换,来增强灵活性:
\[e_i = s^T W h_i \quad \in \mathbb{R}\]
- Reduced-Rank Multiplicative Attention:这里将\(s^t\)和\(h_i\)分别映射到低维空间后,再点积求相似性:
\[e_i = s^T (U^T V) h_i = (U s)^T (V h_i) \quad \in \mathbb{R}\]
- Additive Attention:通过对\(h\)和\(s\)进行线性变换(通过权重矩阵\(W_1\)和\(W_2\)然后再将它们的加和通过非线性激活函数(如tanh)。最后通过一个向量\(v\)进行点积,得到最终的 attention score:
\[e_i = v^T \tanh(W_1 h_i + W_2 s) \quad \in \mathbb{R}\]
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用