Seq2Seq 中为什么需要 Attention?
简化版
Seq2Seq Attention 在每个解码步根据当前 decoder state 对 encoder 各位置打分、softmax 得权重并加权上下文,缓解把整段输入压成单一向量的瓶颈。Mask 必须排除输入 padding。
详细版
-
Bahdanau 使用加性打分,Luong 常用点积/双线性。
-
权重在源序列位置归一化。
-
每步上下文随 decoder state 改变。
-
注意力权重可辅助对齐分析,但不自动等于因果解释。
-
标准 attention 每解码步扫描全部源位置,成本 O(TS)。
完整版教学
一、Attention 让 decoder 按需回看源序列
无 attention 的 encoder 要把所有信息塞进最终 state,长序列容易遗忘。
Attention 保留整条 encoder 输出,让 decoder 每一步动态选择相关位置。
对齐是软的:上下文为所有位置加权和,梯度可端到端传播;若 padding 未 mask,无效位置也会分走概率。
二、底层机制与公式
e_ti=v^T tanh(W_s s_(t-1)+W_h h_i)
a_t=softmax(e_t+pad_mask)
c_t=sum_i a_ti*h_i
三、带数字的推演
源序列 3 个有效位置打分 [2,1,0],softmax 约 [0.665,0.245,0.090];若第 3 位是 PAD,应先设 -inf,剩余权重重归一为约 [0.731,0.269,0]。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| 无 Attention | 状态小、快 | 长序列瓶颈 |
| 加性 Attention | 表达灵活 | 额外投影成本 |
| 点积 Attention | 矩阵计算高效 | 维度/尺度敏感 |
五、执行流程
encoder 输出 h_1:S -> decoder state s -> 打分 e_t1:S -> mask
-> softmax a -> 加权 c -> 预测 token -> 更新 decoder state
六、边界条件与工程代价
长源序列每步全扫描会增加延迟,可用局部/单调 attention 或缓存投影。
可视化权重只能说明模型内部加权,不证明某输入 token 对输出有因果贡献;需遮挡等忠实度验证。
记忆钩子:Attention 的四步是“打分、mask、softmax、加权和”。
七、常见误区与追问
-
误区:Attention 只使用权重最大的位置。 它通常是全部位置的加权和。
-
追问:为什么先 mask 再 softmax? 让无效位置不进入归一化分母。
-
误区:权重图就是可靠解释。 注意力分布不等于因果贡献。
-
追问:Bahdanau 与 Luong 区别? 典型是加性与点积/双线性打分。
-
追问:复杂度为什么是 O(TS)? T 个解码步各扫描 S 个源位置。
八、加强记忆
Attention 的四步是“打分、mask、softmax、加权和”。
它把单向量瓶颈变成逐步查阅整段 encoder 记忆。