在 Seq2Seq 模型中,编码器和解码器各负责什么功能?
编码器与解码器的功能分工整体数据流输入序列 x₁ x₂ x₃ EOS ↓ ↓ ↓ ┌─────────────────┐ │ 编码器 │ ← 理解输入 │ (Encoder RNN) │ └────────┬────────┘ │ 上下文向量 c ← 输入序列的语义压缩 │ ┌────────┴────────┐ │ 解码器 │ ← 生成输出 │ (Decoder RNN) │ └────────┬────────┘ │ 输出序列 y₁ y₂ y₃ EOS编码器将变长输入压缩为固定向量核心功能理解输入序列将其语义信息编码为上下文向量 c。逐步编码: h₁ f(h₀, x₁) ← 读取第一个 token h₂ f(h₁, x₂) ← 结合历史记忆读取第二个 h₃ f(h₂, x₃) ← ... c h_T ← 最后一步隐藏状态 整个序列的语义摘要具体职责职责说明序列读取逐个 token 读入输入序列维护隐藏状态作为运行记忆语义压缩将任意长度的输入序列压缩为一个固定维度的向量 c信息承载c 需要编码输入序列的全部关键信息语义、结构、顺序双向编码可选常用 BiLSTM/BiGRU使 c 同时包含前向和后向上下文关键约束无论输入序列多长输出 c 的维度固定如 256/512 维这是信息瓶颈所在。解码器从固定向量展开为变长输出核心功能以上下文向量 c 为起点自回归地逐步生成输出序列。初始化: s₀ c ← 用上下文向量初始化解码器隐藏状态 第1步: s₁ f(s₀, SOS) ← 输入起始符生成第一个词 y₁ softmax(W · s₁) ← 输出概率分布取概率最高或采样 第2步: s₂ f(s₁, y₁) ← 上一步生成的词作为当前输入 y₂ softmax(W · s₂) 第3步: s₃ f(s₂, y₂) y₃ softmax(W · s₃) ...直到生成 EOS 停止具体职责职责说明状态初始化用编码器输出的 c 初始化解码器的隐藏状态自回归生成每步以上一步输出为输入逐步生成下一个 token长度决定自行决定输出何时结束生成EOS即停止分布输出每步输出词表上的概率分布通过 argmax 或采样得到具体词训练 vs 推理的关键差异训练Teacher Forcing: s₁ f(c, SOS) → y₁ 输入: SOS s₂ f(s₁, y₁*) → y₂ 输入: 真实标签 y₁*而非预测 ŷ₁ s₃ f(s₂, y₂*) → y₃ 输入: 真实标签 y₂* ↑ 每步用真实标签梯度稳定收敛快 推理自回归: s₁ f(c, SOS) → ŷ₁ 输入: SOS s₂ f(s₁, ŷ₁) → ŷ₂ 输入: 自己的预测 ŷ₁ s₃ f(s₂, ŷ₂) → ŷ₃ 输入: 自己的预测 ŷ₂ ↑ 误差逐步累积可能偏离正确轨道编码器与解码器的对比维度编码器解码器角色理解输入生成输出输入完整输入序列上下文向量 c 上一步输出输出上下文向量 c逐步生成的 token 序列方向通常双向BiRNN单向因果只能看已生成部分长度由输入决定由模型自行决定遇EOS停止信息流逐步压缩T 个 token → 1 个向量逐步展开1 个向量 → T’ 个 token参数独立的权重矩阵独立的权重矩阵与编码器不共享信息瓶颈与注意力机制的引入基本 Seq2Seq 中编码器的全部输出仅为一个向量 c解码器只能通过这一个窗口访问输入信息无注意力: 编码器: x₁ x₂ x₃ x₄ x₅ → c一个向量 解码器: c → y₁ y₂ y₃ y₄ ← 生成 y₄ 时仍只能访问 c早期信息已模糊 有注意力: 编码器: x₁ x₂ x₃ x₄ x₅ → h₁ h₂ h₃ h₄ h₅保留所有隐藏状态 解码器: 每步动态计算 cₜ Σ αₜᵢ · hᵢ ← 生成 y₄ 时可重点回看 h₂注意力机制让解码器在每一步都能动态聚焦于编码器的不同位置而非依赖单一压缩向量这是从 Seq2Seq 到 Transformer 的关键演进。总结编码器负责读将变长输入序列逐步编码为固定维度的上下文向量 c是信息从序列到向量的压缩过程。解码器负责写以 c 为起点自回归地逐步生成变长输出序列是信息从向量到序列的展开过程。两者通过 c 连接参数独立各自承担理解与生成的职责。基本架构中 c 是唯一的信息桥梁这一瓶颈催生了注意力机制最终演化为 Transformer。