构筑 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}ht1

符号解释:

  • hench^{enc}henc: 隐藏状态,是编码器 RNN 单元在特定时间步输出的向量,代表了历史信息的压缩记忆
  • HencoderH_{encoder}Hencoder: 编码器生成的所有隐藏状态的集合。
  • TxT_xTx: 输入序列的总长度(即隐藏状态的总时间步数)。
3. 步骤一:计算对齐分数(Scoring/Energy)

目标是计算查询 ht−1h_{t-1}ht1所有输入状态 hiench_{i}^{enc}hienc相关性或“匹配度”。

  • 计算: 使用对齐模型(Score Function)输出一个分数 score(ht−1,hienc)\text{score}(h_{t-1}, h_{i}^{enc})score(ht1,hienc)

公式解释:

  • ht−1h_{t-1}ht1: 表示解码器的前一个时间步的隐藏状态(查询 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(ht1,hjenc))exp(score(ht1,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=1Txαtihienc
    • 结果: ctc_tct全新的、为当前解码步骤定制的上下文信息。

公式解释:

  • ctc_tct: 动态上下文向量,专为解码器 ttt 时刻的输出而定制。
  • ∑i=1Tx\sum_{i=1}^{T_x}i=1Tx: 对输入序列中的所有时间步 iii 进行求和。
6. 步骤四:解码器生成输出

解码器利用 ctc_tctht−1h_{t-1}ht1 来计算并生成下一个输出词。


III. 历史意义与地位 👑

1. 解决信息瓶颈

注意力机制彻底打破了 RNN 编码器-解码器架构中固定上下文向量的限制。

2. 可解释性的革命

注意力权重 αti\alpha_{ti}αti 为深度学习模型提供了一种罕见的可解释性。通过可视化这些权重,我们可以清晰地看到模型在生成某个输出词时,“看”向了输入序列中的哪个词,实现了 对齐(Alignment) 的可视化。

3. Transformer 的催化剂

证明了注意力循环更有效处理序列依赖关系,为 Transformer 架构的诞生奠定基础。


IV. 零基础理解:注意力机制做了什么? 👶

他们做了什么: 科学家给模型设计了一个机制,让它不再“一次性记住”整个长句子,而是动态地聚焦

怎么做的:

  1. 改变记忆方式: 机器将输入的每个词都存放在一个单独的卡片上(即 hiench_{i}^{enc}hienc隐藏状态)。
  2. 动态查找: 在翻译时,机器用当前状态ht−1h_{t-1}ht1,查询)询问所有卡片:“我当前最需要看哪个词?
  3. 计算相关性: 机器计算当前状态所有输入卡片匹配度,转换为 0 到 1 之间的关注度比例(权重 αti\alpha_{ti}αti
  4. 形成焦点: 最后,机器将所有输入词语按这个权重比例加权平均,形成一个临时的、高度聚焦的上下文信息ctc_tct)。

结果: 机器翻译长句子时不再“健忘”,每次都能将注意力集中在最关键的输入部分。


下一篇预告: 下一篇(第二十篇)我们将探讨另一项在 NLP 中至关重要的技术——**词嵌入(Word Embeddings)**的重大突破:Word2Vec (2013),它是如何用高效的浅层网络捕捉词语语义关系的。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐