3、注意力机制起源:Bahdanau Attention与Luong Attention,seq2seq中的对齐思想,注意力权重的计算方式
在2014年之前,序列到序列(Sequence-to-Sequence, seq2seq)模型主要依赖编码器-解码器架构,其中编码器将整个输入序列压缩为一个固定长度的上下文向量,解码器再基于该向量逐步生成输出。这种“固定长度瓶颈”在处理长句时表现急剧下降——输入越长,早期信息丢失越严重。2015年,Bahdanau等人首次将注意力机制引入神经机器翻译,打破了这一瓶颈;随后Luong等人进一步简化并扩展了注意力权重的计算方式。本章将系统梳理注意力机制的起源、seq2seq中的对齐思想,以及两种经典注意力模型的数学原理与工程实践。
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 注意力权重的计算流程
注意力权重的计算分为三步:
- 计算对齐分数(Alignment Score):使用一个打分函数 score(hi, sj-1) 衡量编码器隐状态 hi 与解码器前一时刻隐状态 sj-1 的匹配程度。
- Softmax归一化:将分数转换为概率分布 αij = softmax(scoreij)。
- 加权求和:用归一化后的权重对编码器隐状态加权求和,得到上下文向量 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方式参数量过大,容易过拟合。
3.4 注意力机制的训练与调优
3.4.1 训练流程
注意力模型的训练与标准seq2seq类似,使用交叉熵损失函数,但需注意以下几点:
- 初始化:注意力参数(Wa, Ua, va)使用均值为0、标准差为0.01的正态分布初始化,避免初始分数过大导致softmax饱和。
- 梯度裁剪:RNN训练中梯度范数容易超过阈值,建议将梯度范数裁剪到5.0以内。
- 学习率调度:使用Adam优化器,初始学习率0.001,每5个epoch衰减0.5。
- Dropout:在解码器输入和注意力计算前施加dropout(0.2~0.3),防止过拟合。
3.4.2 注意力可视化与诊断
训练完成后,可通过以下方式诊断注意力质量:
- 对齐矩阵热力图:检查是否存在明显的对角线模式;若出现“跳跃”或“空白”,说明对齐不准确。
- 注意力熵:计算每步注意力分布的熵,熵过高表示模型“犹豫不决”,熵过低表示过度自信。
- 覆盖度惩罚:在训练损失中加入覆盖度惩罚项 λ·Σi(max(0, 1 - Σjαij)),鼓励每个源词至少被关注一次,减少漏译。
3.4.3 案例复盘:低资源语种翻译的注意力调优
背景:某跨境电商平台需要将中文商品描述自动翻译为泰语,但平行语料仅5万句对,属于低资源场景。初始使用Bahdanau注意力训练,验证集BLEU仅为18.3。
诊断过程:
- 可视化注意力矩阵发现:泰语语序与中文差异较大(泰语形容词后置),导致对齐矩阵出现大量“交叉”现象。
- 计算注意力熵发现:平均熵为3.2(最大熵为log(50)≈3.91),说明分布过于分散。
- 检查漏译情况:约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)框架正是从这里的打分-归一化-加权流程演化而来。