构筑 AI 理论体系:深度学习 100 篇论文解读 第十九篇:序列建模的焦点——注意力机制 Attention Mechanism (2015)
作者国籍机构(2015 年时)核心贡献白俄罗斯/加拿大University of Montreal (Yoshua Bengio 团队)注意力机制在机器翻译中的首次成功应用者。Kyunghyun Cho (赵竟玄)韩国GRU 的提出者,注意力机制的共同贡献者。加拿大深度学习三巨头之一。信息项详情论文题目发表年份2015 年出版刊物核心命题如何取代传统的固定长度上下文向量,让解码器在每一步生成输出时
构筑 AI 理论体系:深度学习 100 篇论文解读
第十九篇:序列建模的焦点——注意力机制 Attention Mechanism (2015)
I. 论文背景、核心命题与作者介绍 💡
在 2014 年,Encoder-Decoder(编码器-解码器) 架构在神经机器翻译(NMT)中取得了突破。这种架构使用一个 RNN(通常是 LSTM 或 GRU)将整个输入序列压缩成一个单一的固定长度向量(Context Vector)。当输入序列很长时,这种信息瓶颈会导致翻译质量急剧下降。
Dzmitry Bahdanau 及其团队在 2015 年提出的注意力机制(Attention Mechanism) 彻底解决了这个信息瓶颈问题。它允许解码器在每一步输出时,动态地、有选择性地关注输入序列中的相关部分。
核心作者介绍
| 作者 | 国籍 | 机构(2015 年时) | 核心贡献 |
|---|---|---|---|
| Dzmitry Bahdanau | 白俄罗斯/加拿大 | University of Montreal (Yoshua Bengio 团队) | 注意力机制在机器翻译中的首次成功应用者。 |
| Kyunghyun Cho (赵竟玄) | 韩国 | University of Montreal | GRU 的提出者,注意力机制的共同贡献者。 |
| Yoshua Bengio | 加拿大 | University of Montreal | 深度学习三巨头之一。 |
| 信息项 | 详情 |
|---|---|
| 论文题目 | Neural Machine Translation by Jointly Learning to Align and Translate |
| 发表年份 | 2015 年 |
| 出版刊物 | ICLR (International Conference on Learning Representations) |
| 核心命题 | 如何取代传统的固定长度上下文向量,让解码器在每一步生成输出时,能够动态地关注输入序列中最相关的部分,从而改善长序列的翻译质量? |
II. 核心机制:软对齐与动态上下文 ⚙️
注意力机制的核心思想是实现软对齐(Soft Alignment)。它为输入序列的每个隐藏状态分配一个权重(Attention Weight),这些权重是动态计算的。
1. 核心概念:隐藏状态 (hhh)
隐藏状态 hth_tht 是循环神经网络(RNN、LSTM 或 GRU)在处理序列数据时在时间步 ttt 产生的、对历史信息和当前输入进行概括的“记忆”。
- 本质: 它是对**从序列开始到时间步 ttt 为止的所有历史信息(上下文)**的压缩表示。
- 作用: 在 Encoder-Decoder 架构中,编码器产生的一系列隐藏状态构成了输入序列的完整信息库,解码器则使用自己的隐藏状态进行查询。
关于隐藏状态数量的澄清:
隐藏状态的维度(向量的宽度) 是一个超参数(由开发者手动设置),与句子长度和网络层数无关。但是,隐藏状态的数量(时间步 ttt 的总数) 是由输入序列的长度决定的:如果输入句子有 NNN 个词,则编码器将产生 NNN 个隐藏状态 {h1,h2,…,hN}\{h_1, h_2, \dots, h_N\}{h1,h2,…,hN}。
2. 关键输入与角色划分(Q, K, V 概念映射)
在编码器-解码器架构中,注意力机制工作的起点是:
- 输入序列信息(键 KKK 和值 VVV): 这是编码器处理输入句子后产生的所有时间步的隐藏状态 Hencoder={h1enc,h2enc,…,hTxenc}H_{encoder} = \{h_1^{enc}, h_2^{enc}, \dots, h_{T_x}^{enc}\}Hencoder={h1enc,h2enc,…,hTxenc}。
- 当前查询信息(查询 QQQ): 这是解码器在生成第 ttt 个目标词时使用的前一个隐藏状态 ht−1h_{t-1}ht−1。
符号解释:
- hench^{enc}henc: 隐藏状态,是编码器 RNN 单元在特定时间步输出的向量,代表了历史信息的压缩记忆。
- HencoderH_{encoder}Hencoder: 编码器生成的所有隐藏状态的集合。
- TxT_xTx: 输入序列的总长度(即隐藏状态的总时间步数)。
3. 步骤一:计算对齐分数(Scoring/Energy)
目标是计算查询 ht−1h_{t-1}ht−1 与所有输入状态 hiench_{i}^{enc}hienc 的相关性或“匹配度”。
- 计算: 使用对齐模型(Score Function)输出一个分数 score(ht−1,hienc)\text{score}(h_{t-1}, h_{i}^{enc})score(ht−1,hienc)。
公式解释:
- ht−1h_{t-1}ht−1: 表示解码器的前一个时间步的隐藏状态(查询 QQQ)。
- hiench_{i}^{enc}hienc: 表示编码器的第 iii 个时间步的隐藏状态(键 KKK/值 VVV)。
4. 步骤二:归一化与注意力权重的确定
将所有分数转换成概率分布,确保总和为 1。
- 计算:
αti=exp(score(ht−1,hienc))∑j=1Txexp(score(ht−1,hjenc))\alpha_{ti} = \frac{\exp(\text{score}(h_{t-1}, h_{i}^{enc}))}{\sum_{j=1}^{T_x} \exp(\text{score}(h_{t-1}, h_{j}^{enc}))}αti=∑j=1Txexp(score(ht−1,hjenc))exp(score(ht−1,hienc))- 结果: αti\alpha_{ti}αti 是最终的注意力权重。
公式解释:
- αti\alpha_{ti}αti: 注意力权重。表示在解码器 ttt 时刻,对输入序列中第 iii 个时间步的关注度。
- ∑j=1Txexp(… )\sum_{j=1}^{T_x} \exp(\dots)∑j=1Txexp(…): 对所有输入时间步 jjj(从 1 到 TxT_xTx)的分数进行求和,用于归一化。
5. 步骤三:计算动态上下文向量
根据注意力权重 αti\alpha_{ti}αti,对编码器隐藏状态 hiench_{i}^{enc}hienc 进行加权求和,得到动态上下文向量 ctc_tct。
- 计算:
ct=∑i=1Txαtihiencc_t = \sum_{i=1}^{T_x} \alpha_{ti} h_{i}^{enc}ct=i=1∑Txαtihienc- 结果: ctc_tct 是全新的、为当前解码步骤定制的上下文信息。
公式解释:
- ctc_tct: 动态上下文向量,专为解码器 ttt 时刻的输出而定制。
- ∑i=1Tx\sum_{i=1}^{T_x}∑i=1Tx: 对输入序列中的所有时间步 iii 进行求和。
6. 步骤四:解码器生成输出
解码器利用 ctc_tct 和 ht−1h_{t-1}ht−1 来计算并生成下一个输出词。
III. 历史意义与地位 👑
1. 解决信息瓶颈
注意力机制彻底打破了 RNN 编码器-解码器架构中固定上下文向量的限制。
2. 可解释性的革命
注意力权重 αti\alpha_{ti}αti 为深度学习模型提供了一种罕见的可解释性。通过可视化这些权重,我们可以清晰地看到模型在生成某个输出词时,“看”向了输入序列中的哪个词,实现了 对齐(Alignment) 的可视化。
3. Transformer 的催化剂
证明了注意力比循环更有效处理序列依赖关系,为 Transformer 架构的诞生奠定基础。
IV. 零基础理解:注意力机制做了什么? 👶
他们做了什么: 科学家给模型设计了一个机制,让它不再“一次性记住”整个长句子,而是动态地聚焦。
怎么做的:
- 改变记忆方式: 机器将输入的每个词都存放在一个单独的卡片上(即 hiench_{i}^{enc}hienc,隐藏状态)。
- 动态查找: 在翻译时,机器用当前状态(ht−1h_{t-1}ht−1,查询)询问所有卡片:“我当前最需要看哪个词?”
- 计算相关性: 机器计算当前状态与所有输入卡片的匹配度,转换为 0 到 1 之间的关注度比例(权重 αti\alpha_{ti}αti)。
- 形成焦点: 最后,机器将所有输入词语按这个权重比例加权平均,形成一个临时的、高度聚焦的上下文信息(ctc_tct)。
结果: 机器翻译长句子时不再“健忘”,每次都能将注意力集中在最关键的输入部分。
下一篇预告: 下一篇(第二十篇)我们将探讨另一项在 NLP 中至关重要的技术——**词嵌入(Word Embeddings)**的重大突破:Word2Vec (2013),它是如何用高效的浅层网络捕捉词语语义关系的。
更多推荐



所有评论(0)