Seq2Seq(Sequence-to-Sequence,序列到序列)工作原理
Seq2SeqSequence-to-Sequence序列到序列 是一种基于 Encoder-Decoder编码器-解码器 架构的深度学习模型核心是将任意长度的输入序列转换为任意长度的输出序列主要用于机器翻译、文本摘要、对话生成等序列生成任务。B站动画讲解seq2seq 包教包会一、Encoder-Decoder 通用结构图1. 整体架构总图标准Seq2Seq输入序列 x₁ x₂ x₃ ... xₘ ↓ ┌──────────┐ │ Encoder │ 编码器RNN/LSTM/GRU/Transformer │ 编码压缩 │ └────┬─────┘ │ 上下文语义向量 C │ ┌────┴─────┐ │ Decoder │ 解码器RNN/LSTM/GRU/Transformer │ 逐步生成 │ └────┬─────┘ ↓ 输出序列 y₁ y₂ y₃ ... yₙ2. 带细节完整版结构图含时序、隐藏态、起止符SOS 起始符 EOS 结束符 输入 x₁ → x₂ → x₃ → … → xₘ ↓ ↓ ↓ ↓ ┌──────────────────────┐ │ Encoder 编码器 │ │ 逐时刻更新隐藏状态 │ └──────────┬───────────┘ │ 最终语义向量 C │ ┌──────────┴───────────┐ │ Decoder 解码器 │ SOS│ 自回归逐词生成 │→ y₁ y₁ →→│ │→ y₂ y₂ →→│ │→ y₃ y₃ →→│ │→ yn y₃ →→│ │→ EOS └──────────┬───────────┘3.加Attention 注意力版结构图解决固定语义向量瓶颈输入序列 x₁ x₂ x₃ ... xm ↓ ┌──────────┐ │ Encoder │ → 输出所有时刻隐藏态 h₁,h₂...hm └────┬─────┘ │ ┌────┴─────┐ │ Attention│ 计算权重动态聚焦输入每个位置 └────┬─────┘ │ ┌────┴─────┐ │ Decoder │ 每生成一个词都看输入最相关部分 └────┬─────┘ ↓ 输出 y₁ y₂ ... yn4.一句话总结Encoder吃进去变长输入序列提炼全局语义输出表征向量/全部隐藏态中间层普通版是固定上下文向量CAttention版是加权语义上下文Decoder接收语义信息从SOS开始自回归逐个生成输出直到EOS二、核心组件1. 编码器 (Encoder)功能读取并理解输入序列将其压缩为一个固定长度的上下文向量 (Context Vector)也叫“语义向量”或“思想向量”。结构通常由循环神经网络RNN、LSTM、GRU,或者transform 构成。工作过程将输入序列如句子[我, 爱, 中, 国]的每个元素转为词向量 (Word Embedding)。按顺序输入编码器逐时间步更新隐藏状态 (Hidden State)。处理完所有输入后最后一个时间步的隐藏状态即为上下文向量 c。2. 解码器 (Decoder)功能基于上下文向量 c逐词生成输出序列。结构由循环神经网络RNN、LSTM、GRU,或者transform 构成。推理/真实预测(自回归生成) 训练使用的是Teacher Forcing初始化将编码器的上下文向量 c 作为解码器的初始隐藏状态。起始以特殊符号SOS(Start of Sentence) 作为第一个输入。循环生成输入上一步生成的词y t − 1 y_{t-1}yt−1 当前隐藏状态h t − 1 ′ h_{t-1}ht−1′输出预测下一个词y t y_tyt并更新隐藏状态h t ′ h_tht′结束当预测到特殊符号EOS(End of Sentence) 时停止。3.自回归生成[Decoder 解码器] ↓ [全局上下文语义向量] SOS ────▶ 解码器 ────▶ 输出 y₁ │ ▼ y₁ ────▶ 解码器 ────▶ 输出 y₂ │ ▼ y₂ ────▶ 解码器 ────▶ 输出 y₃ │ ▼ y₃ ────▶ 解码器 ────▶ 输出 EOS 停止自回归 本质一句话图生成一个词 → 传回给自己 → 再生成下一个三、训练机制Teacher Forcing1.什么是 Teacher ForcingTeacher Forcing教师强制/强制教学是 Seq2Seq 模型训练时 的一种输入策略训练时不使用模型上一步的预测结果作为输入而是直接使用真实标签 (Ground Truth) 作为输入。目的防止早期错误累积加速训练收敛。二、先看懂不使用 Teacher Forcing 会怎样SOS → 模型预测 y1 y1 → 模型再预测 y2 y2 → 模型再预测 y3 ……直到 EOS问题前面预测错一个词后面全部跟着错 → 误差逐级累积越错越离谱。训练早期模型很菜动不动就预测错错误一路往后传模型很难收敛、训练极慢、还容易不稳定。三、使用 Teacher Forcing 训练流程核心先约定符号SOS句子起始符y 1 , y 2 , y 3 y_1,y_2,y_3y1,y2,y3真实标准答案y ^ 1 , y ^ 2 , y ^ 3 \hat y_1,\hat y_2,\hat y_3y^1,y^2,y^3模型自己预测的结果设真实正确句子y1 y2 y3 EOS训练时 Decoder 输入是解码器每一步输入用【真实标签】 SOS ────→ 预测 ŷ1 y1(真实) ─→ 预测 ŷ2 y2(真实) ─→ 预测 ŷ3 y3(真实) ─→ 预测 EOS一句话训练时喂给解码器的是“标准答案”不是模型自己的“猜测答案”。四、Teacher Forcing 实例输入中文我爱吃苹果真实英文标签I like eating apple EOSDecoder 输入SOS→ I(预测)Decoder 输入 (真实) I → love(预测)Decoder 输入 (真实) like → drink(预测)Decoder 输入 (真实)eating → banana(预测)Decoder 输入 (真实) apple → EOS(预测)全程用标准答案当输入不用模型自己预测的词。Teacher Forcing 核心优点加速模型收敛每一步都给正确上下文模型学得快、梯度更新更准。避免误差累积不会因为前一步预测错误带偏后面所有训练步骤。训练更稳定、梯度更干净输入都是真实标签噪声小容易训练深层Seq2Seq、Transformer。五、自回归推理 vs Teacher Forcing 训练先约定符号SOS句子起始符y 1 , y 2 , y 3 y_1,y_2,y_3y1,y2,y3真实标准答案y ^ 1 , y ^ 2 , y ^ 3 \hat y_1,\hat y_2,\hat y_3y^1,y^2,y^3模型自己预测的结果Teacher Forcing训练用 特点每一步输入都给正确答案不看模型猜得怎么样无错误传递训练快、收敛稳。解码器每一步输入用【真实标签】 SOS ────→ 预测 ŷ1 y1(真实) ─→ 预测 ŷ2 y2(真实) ─→ 预测 ŷ3 y3(真实) ─→ 预测 EOS普通自回归推理/预测时、不用TF 特点自己猜的当下一步输入前面错一个后面全跑偏 → 误差累积。解码器每一步输入用【自己上一步的预测】 SOS ────→ 预测 ŷ1 ŷ1(模型猜的) ─→ 预测 ŷ2 ŷ2(模型猜的) ─→ 预测 ŷ3 ŷ3(模型猜的) ─→ 预测 EOS六、典型应用1.机器翻译最经典Seq2Seq案例场景中文句子 → 英文句子Encoder编码器输入中文整句逐词读进去把整句话语义压缩成一个向量。Decoder解码器拿着Encoder的语义向量逐词生成英文直到生成结束符。工作流程输入我今天很开心进 EncoderEncoder 提炼整句含义Decoder 从SOS开始一个词一个词吐出I→am→very→happy→EOS2.智能对话机器人场景用户问句 → 机器人回答Encoder理解用户发的一句话「今天天气怎么样」Decoder根据理解的语义自动生成回复「今天晴天适合出门」3.文本摘要长文→短摘要场景长篇新闻文章 → 一两句话摘要Encoder读完整篇长新闻抓取核心事件、人物、时间。Decoder浓缩核心信息自动生成简短摘要。4.语音识别语音→文字场景语音声波序列 → 汉字文本Encoder输入音频波形/频谱特征把语音特征编码成语义表征。Decoder把语音表征解码逐字输出汉字。5.语音合成 TTS文字→语音场景文字 → 人声音频Encoder输入文本句子理解语义、语气、断句。Decoder根据文本语义逐帧生成语音波形合成人声。6.图片描述 Image Caption看图说话场景一张图片 → 自动生成一句话描述Encoder用CNN/ViT把图片特征编码理解图里有什么人、狗、草坪。Decoder基于图像特征生成文字一个小孩在草地上遛狗。7.代码生成自然语言→代码场景文字需求 → 自动写Python代码Encoder理解自然语言需求「写一个求和函数」。Decoder逐行逐字符生成Python代码。8.时间序列预测股票/气温预测场景过去7天温度 → 预测未来3天温度Encoder编码历史时间序列数据捕捉趋势、周期。Decoder一步步输出未来连续预测值。