3、注意力机制起源:Bahdanau Attention与Luong Attention,seq2seq中的对齐思想,注意力权重的计算方式

在2014年之前,序列到序列(Sequence-to-Sequence, seq2seq)模型主要依赖编码器-解码器架构,其中编码器将整个输入序列压缩为一个固定长度的上下文向量,解码器再基于该向量逐步生成输出。这种“固定长度瓶颈”在处理长句时表现急剧下降——输入越长,早期信息丢失越严重。2015年,Bahdanau等人首次将注意力机制引入神经机器翻译,打破了这一瓶颈;随后Luong等人进一步简化并扩展了注意力权重的计算方式。本章将系统梳理注意力机制的起源、seq2seq中的对齐思想,以及两种经典注意力模型的数学原理与工程实践。

seq2seq中的注意力对齐机制 输入序列 x₁ x₂ x₃ x₄ … x_T 双向RNN编码器 编码器隐状态 h₁ h₂ h₃ h₄ … h_T 注意力权重计算 对齐分数 e_ij score(hᵢ, sⱼ₋₁) Softmax归一化 α_ij = exp(e_ij)/Σexp(e_ik) 上下文向量 c_j = Σᵢ α_ij · hᵢ 解码器 RNN解码器 输出 y₁, y₂, …, y_m sⱼ₋₁ Bahdanau: e_ij = v_aᵀ · tanh(W_a · sⱼ₋₁ + U_a · hᵢ) Luong: e_ij = sⱼ₋₁ᵀ · W_a · hᵢ (dot / general / concat) 编码器 隐状态 注意力计算 解码器 输出

3.1 从固定向量到动态对齐:注意力机制的核心动机

3.1.1 固定长度瓶颈问题

传统seq2seq模型(Sutskever et al., 2014)将整个源语言句子编码为一个固定维度的向量,记为 c。这个向量需要承载源句的全部语义信息,无论句子长度是5个词还是50个词。实验表明,当句子长度超过20个词时,BLEU分数急剧下降。根本原因在于:RNN的隐状态在长距离传播中会发生梯度消失,末尾时间步的隐状态几乎不包含句子开头的信息;而解码器只能依赖这一个“压缩”后的向量,无法直接访问编码器的中间状态。

关键洞察:人类翻译员在翻译一个词时,并不会均匀地“关注”整个源句子,而是聚焦于与当前目标词最相关的源词。注意力机制正是将这种“选择性关注”形式化为可微分的计算过程。

3.1.2 对齐思想的形式化

在统计机器翻译中,“对齐”(Alignment)指源语言词与目标语言词之间的对应关系。Bahdanau等人将这一概念引入神经机器翻译:解码器在生成第 j 个目标词时,不再只依赖一个全局向量,而是动态计算一个上下文向量 cj,它是编码器所有隐状态 h1, h2, …, hT 的加权和:

c_j = Σᵢ α_ij · hᵢ

其中权重 αij 表示源词 xi 对生成目标词 yj 的重要程度。所有权重之和为1,即 Σᵢ αij = 1。这构成了一个概率分布,反映了解码器在每一步对源序列的“注意力分配”。

3.1.3 注意力权重的计算流程

注意力权重的计算分为三步:

  1. 计算对齐分数(Alignment Score):使用一个打分函数 score(hi, sj-1) 衡量编码器隐状态 hi 与解码器前一时刻隐状态 sj-1 的匹配程度。
  2. Softmax归一化:将分数转换为概率分布 αij = softmax(scoreij)。
  3. 加权求和:用归一化后的权重对编码器隐状态加权求和,得到上下文向量 cj。
步骤 数学表达式 作用
1. 对齐分数 eij = score(hi, sj-1) 衡量每个源词与当前解码位置的相关性
2. 归一化 αij = exp(eij) / Σkexp(ekj) 将分数转换为概率分布,保证权重和为1
3. 上下文向量 cj = Σi αij · hi 聚合所有源词信息,突出高权重词

3.2 Bahdanau Attention:加性注意力

3.2.1 核心原理

Bahdanau等人(2015)在《Neural Machine Translation by Jointly Learning to Align and Translate》中提出了加性注意力(Additive Attention)。其对齐分数定义为:

e_ij = v_aᵀ · tanh(W_a · sⱼ₋₁ + U_a · hᵢ)

其中 Wa、Ua 是权重矩阵,va 是向量参数,三者均为可学习参数。该函数先将解码器隐状态 sj-1 和编码器隐状态 hi 分别线性变换到同一维度空间,相加后经过 tanh 激活,再与 va 做点积得到标量分数。

Bahdanau注意力的关键设计在于:

  • 双向编码器:编码器使用双向RNN(BiRNN),每个时间步的隐状态 hi = [hi→; hi←] 拼接前向和后向隐状态,从而同时捕捉前后文信息。
  • 逐词对齐:解码器在每一步都重新计算所有源词的权重,实现动态对齐。
  • 联合训练:注意力参数与编码器、解码器参数端到端联合优化,无需外部对齐标注。

3.2.2 案例拆解:英德翻译中的对齐可视化

以英文句子“the agreement on the European Economic Area”翻译为德语为例。当解码器生成德语词“Abkommen”(协议)时,注意力权重应集中在英文词“agreement”上。训练完成后,我们可以将注意力权重矩阵可视化:横轴为源词,纵轴为目标词,每个格子的颜色深浅表示权重大小。理想情况下,矩阵呈现近似对角线的带状分布,说明对齐关系清晰。

实际训练中可能出现以下现象:

  • 对角线偏移:德语动词常位于句末,导致“is”对应的注意力可能分散到多个源词上。
  • 长距离依赖:对于“not … but …”结构,注意力需要在两个远距离词之间切换。
  • 多义词消歧:英文“bank”在德译中可能对应“Bank”(金融机构)或“Ufer”(河岸),注意力权重会依据上下文自动调整。
经验提示:在训练初期,注意力分布通常接近均匀分布;随着训练进行,分布逐渐变得尖锐。如果训练数据不足或模型容量不够,注意力可能无法收敛到有意义的对齐,此时可考虑使用预训练词向量或增加训练轮次。

3.3 Luong Attention:三种打分方式的对比

3.3.1 核心原理

Luong等人(2015)在《Effective Approaches to Attention-based Neural Machine Translation》中提出了更简洁的注意力变体,称为乘法注意力(Multiplicative Attention)。其核心区别在于打分函数的选择,共有三种方式:

打分方式 数学表达式 计算复杂度 特点
Dot(点积) score(hi, sj-1) = sj-1ᵀ · hi O(d) 最简单,要求两者维度相同
General(一般) score(hi, sj-1) = sj-1ᵀ · Wa · hi O(d²) 引入可学习矩阵Wa,允许维度不同
Concat(拼接) score(hi, sj-1) = vaᵀ · tanh(Wa · [sj-1; hi]) O(d²) 与Bahdanau类似,但拼接而非相加

Luong注意力还引入了输入馈送(Input Feeding)机制:将上一时刻的上下文向量 cj-1 与解码器隐状态 sj-1 拼接后作为当前时刻的输入。这使得模型能够感知之前的对齐决策,避免重复翻译或遗漏。

3.3.2 两种注意力的对比分析

对比维度 Bahdanau Attention Luong Attention
提出时间 2015年(EMNLP) 2015年(ICML)
打分函数 加性:vaᵀ·tanh(Wa·sj-1 + Ua·hi) 点积/一般/拼接三种可选
上下文向量使用 仅用于计算解码器输入 可同时用于输入馈送
计算效率 较低(需两次矩阵乘法+tanh) 较高(点积方式最简)
对齐质量 在长句上表现稳定 General方式通常最优
后续影响 启发了Transformer中的Scaled Dot-Product Attention 为后续多头注意力提供基础

3.3.3 实战场景:选择哪种注意力?

在实际工程中,选择哪种注意力取决于具体任务和资源约束:

  • 机器翻译:Luong的General方式通常效果最好,因为可学习矩阵提供了更大的表达能力;若追求速度,可用Dot方式。
  • 文本摘要:Bahdanau的加性注意力在长文档上更稳定,因为tanh激活有助于缓解梯度消失。
  • 语音识别:输入序列较长,建议使用Luong的Dot方式配合输入馈送,减少计算开销。
  • 图像描述:两种方式均可,但需注意编码器特征维度较高时,General方式参数量过大,容易过拟合。
风险提示:当编码器隐状态维度 d 较大(如512以上)时,点积注意力的数值方差会增大,导致softmax梯度极小。Transformer中通过除以 √d 来缓解,但Luong原始未做此处理。若直接使用Luong的Dot方式训练深层模型,建议自行添加缩放因子。

3.4 注意力机制的训练与调优

3.4.1 训练流程

注意力模型的训练与标准seq2seq类似,使用交叉熵损失函数,但需注意以下几点:

  1. 初始化:注意力参数(Wa, Ua, va)使用均值为0、标准差为0.01的正态分布初始化,避免初始分数过大导致softmax饱和。
  2. 梯度裁剪:RNN训练中梯度范数容易超过阈值,建议将梯度范数裁剪到5.0以内。
  3. 学习率调度:使用Adam优化器,初始学习率0.001,每5个epoch衰减0.5。
  4. Dropout:在解码器输入和注意力计算前施加dropout(0.2~0.3),防止过拟合。

3.4.2 注意力可视化与诊断

训练完成后,可通过以下方式诊断注意力质量:

  • 对齐矩阵热力图:检查是否存在明显的对角线模式;若出现“跳跃”或“空白”,说明对齐不准确。
  • 注意力熵:计算每步注意力分布的熵,熵过高表示模型“犹豫不决”,熵过低表示过度自信。
  • 覆盖度惩罚:在训练损失中加入覆盖度惩罚项 λ·Σi(max(0, 1 - Σjαij)),鼓励每个源词至少被关注一次,减少漏译。

3.4.3 案例复盘:低资源语种翻译的注意力调优

背景:某跨境电商平台需要将中文商品描述自动翻译为泰语,但平行语料仅5万句对,属于低资源场景。初始使用Bahdanau注意力训练,验证集BLEU仅为18.3。

诊断过程:

  1. 可视化注意力矩阵发现:泰语语序与中文差异较大(泰语形容词后置),导致对齐矩阵出现大量“交叉”现象。
  2. 计算注意力熵发现:平均熵为3.2(最大熵为log(50)≈3.91),说明分布过于分散。
  3. 检查漏译情况:约12%的源词未被任何目标词关注。

优化措施:

  • 改用Luong的General注意力,增加可学习参数以适配语序差异。
  • 在损失函数中加入覆盖度惩罚,λ=1.0。
  • 使用预训练的中文和泰语词向量初始化嵌入层。

结果:BLEU提升至24.7,漏译率降至3.5%。注意力矩阵的对角线模式明显改善,但仍有少量合理偏移(如泰语形容词后置导致的右移)。

复盘经验:低资源场景下,注意力机制的表达能力比模型深度更重要;覆盖度惩罚是简单有效的正则化手段;可视化诊断应贯穿训练全程,而非仅在最终评估时检查。

3.5 常见误区与总结

3.5.1 常见误区

  • 误区一:注意力权重等同于可解释性。注意力权重只是模型内部计算的中间产物,并不保证与人类直觉的对齐一致。有研究(Jain & Wallace, 2019)表明,注意力权重可以被随机扰动而不影响预测结果,因此不能直接作为解释依据。
  • 误区二:Bahdanau一定优于Luong。两种方法在不同任务上各有优劣,需通过实验验证。Luong的Dot方式在长序列上可能因数值不稳定而失效。
  • 误区三:注意力可以完全替代RNN。注意力机制本身不具备序列顺序感知能力,需要配合位置编码或RNN使用。Transformer中的位置编码正是为了解决这一问题。
  • 误区四:上下文向量维度越高越好。过高的维度会增加参数量,在低资源场景下容易过拟合,且注意力分布可能变得过于尖锐。

3.5.2 总结复盘

本章的核心脉络可以概括为:

  • 问题驱动:固定长度向量无法处理长序列,催生了注意力机制。
  • 对齐思想:将翻译中的词对齐形式化为可微分的加权求和过程。
  • 两种经典实现:Bahdanau的加性注意力(先加后激活)与Luong的乘法注意力(点积/一般/拼接),后者计算更高效。
  • 工程要点:注意力可视化、覆盖度惩罚、输入馈送是提升对齐质量的关键手段。
  • 历史意义:这两种注意力奠定了后续Transformer中自注意力(Self-Attention)的基础,其核心的“查询-键-值”(Query-Key-Value)框架正是从这里的打分-归一化-加权流程演化而来。
核心公式回顾:无论哪种注意力变体,其本质都是计算一个加权平均。区别仅在于打分函数的设计。理解这一点,就能轻松迁移到Transformer、BERT、等现代架构中。