04-Seq2Seq:序列到序列的时间序列预测
导出时间:2026/1/14 20:36:27
1)研究背景:深度神经网络很强,但“只能处理固定长度输入输出”
传统神经网络 就像“固定模板机器”:
- 你喂进去的数据长度必须固定
- 输出也必须固定
但现实世界很多任务不是固定长度的,例如:
- 机器翻译:英文一句话可能 5 个词,法语可能 7 个词
- 语音识别:说 3 秒和说 30 秒长度完全不同
- 问答系统:问题和答案长度不确定
这些任务都更自然地表示成“序列到序列”的映射
论文明确指出:如果有一种领域无关的方法能学会
把一个变长序列映射成另一个变长序列
那么非常有价值。
通俗理解(放到时间序列预测里)
这就对应了你现在真正关心的预测任务:
输入过去 48 个点 → 输出未来 24 个点 输入过去 7 天小时数据 → 输出未来 1 天小时数据
这就是 Seq2Seq 的典型使用方式。
当时的困难:RNN 可以吃序列,但难以解决“输入输出不对齐”的问题
论文解释:标准 RNN 的一个问题是——
- 如果输入输出长度相同,并且对齐关系明确,很容易做
- 但如果输入序列和输出序列长度不同,且对齐关系复杂(非单调),就不清楚怎么做
Seq2Seq 的核心思路(动机落地):先“压缩理解”,再“展开生成”
论文提出的解决方案非常像人类做翻译/做预测的方式:
✅ Step A:Encoder(编码器):先把整段输入读完,变成一个“理解向量”
论文说:用一个 LSTM 逐步读取输入序列,生成一个固定维度向量表示。
你可以把它理解成:
Encoder = 把历史压缩成总结(提炼成一个“语义/状态”)
✅ Step B:Decoder(解码器):再根据这个总结,一步一步生成输出序列
论文说:再用另一个 LSTM 从这个向量里解码出目标序列。
你可以把它理解成:
Decoder = 拿着总结开始写答案(逐步生成未来)
如果一句话总结论文提出 Seq2Seq 的动机:
现实任务(翻译/语音/预测)大多是变长输入输出,而传统 DNN 不支持; RNN 虽能处理序列,但不擅长输入输出长度不同、依赖很长的场景; 因此提出 Encoder–Decoder LSTM:先把输入压缩成固定向量,再解码生成输出序列。
2、模型网络结构
这张图表达的是:
模型先把输入序列 “ABC” 全部读完(Encoder 阶段), 再根据读完后的“理解结果”,一步一步输出 “WXYZ”,直到输出
<EOS>结束(Decoder 阶段)。
换成人类语言就是:
先阅读理解题目 → 再开始写答案。
2)你图里的每个方块是什么?
图中一排排白色方块,本质上是:
同一个 LSTM 在不同时间步的展开(unroll)
也就是:
- 每个方块是一个时间步的 LSTM 单元(共享参数)
- 横向箭头代表“状态传递”(记忆在往后传)
你可以把它想象成“流水线处理器”:
- 每读一个符号/数据,更新一次内部记忆
- 记忆沿着箭头一路传下去
3)图为什么分成两段?左边是 Encoder,右边是 Decoder
你注意看:图其实分成两部分:
✅ 左半段:Encoder(编码器)
输入是 A → B → C
方块下面有向上的箭头,表示把 A/B/C 喂给 LSTM。
Encoder 的任务很像:
把整句 ABC 读完,并在脑子里形成“总结”
这时 LSTM 的隐藏状态/记忆状态相当于形成了一个浓缩理解。
✅ 中间那个 <EOS> 的方块:分界点
你会看到读完 C 后,紧接着给了一个
<EOS> 输入。
它的意义是:
告诉模型:输入到此结束了,接下来要开始输出了。
就像你读题目读到最后看到句号:
“题目读完了,可以开始回答了。”
✅ 右半段:Decoder(解码器)
右边开始输出 W → X → Y → Z →
<EOS>
注意这里有个关键现象:
- 每个方块下面输入的是上一步输出的词
- 每个方块上面输出的是当前预测的词
也就是说:
Decoder 每一步都是“自己喂自己”往后生成。
通俗点说就是:
模型写作文:写出第一个字 W,再根据 W 写 X,再根据 X 写 Y…
最后输出
<EOS> 表示:
答案写完了,停止。
4)为什么 Decoder 的输入也有 W/X/Y/Z?(很多人卡在这里)
你图里每个 Decoder 方块下面都有 W、X、Y、Z,看上去像“答案怎么提前知道了?”
这里要区分 训练 和 推理(预测) 两种情况:
✅ 训练时(Teacher Forcing)
训练阶段为了让模型学得更快、更稳定:
我们会把“正确答案”喂给 Decoder 作为输入
所以训练时确实是:
- 输入 W → 输出 X
- 输入 X → 输出 Y
- 输入 Y → 输出 Z
这个就叫 Teacher Forcing(教师强制)。
形象比喻:
老师一边提示正确的上句,你一边学习写下句。
✅ 推理/预测时(真正用模型时)
预测阶段,你没有真实 WXYZ(未来你并不知道),所以变成:
模型自己预测 W,把 W 喂回去,再预测 X,再喂回去…
这叫 自回归生成(autoregressive generation)。
5)这张图最核心的思想:先“压缩理解”,再“逐步生成”
你可以用一个超级形象的比喻来理解:
Encoder = 阅读理解
把 ABC 读完后,你脑子里形成一个“意思总结”。
Decoder = 翻译/写答案
拿着这个总结,开始一个字一个字写出 WXYZ。
所以 Seq2Seq 的本质就是:
输入的序列长度可以是 3(ABC),输出可以是 4(WXYZ),长度不要求相等。
这对时间序列预测特别重要,因为:
过去 48 步 → 未来 24 步(长度不同) 用 Seq2Seq 正好。
6)图注里提到的“反向读取输入”是什么意思?为什么这么做?
你图下方文字说:
LSTM 会反向读取输入句子(reverse input)
也就是说:
- 输入不是 A→B→C
- 而是 C→B→A
为什么反向读更好?
论文发现反向读取会更容易训练,因为:
它让“输入和输出”在时间上更接近,减少了长距离依赖,让优化更容易。
通俗解释:
- 你要输出 W 时,最相关的信息可能是输入句尾的 C
- 如果正向读 A B C,那 C 离输出 W 很远
- 反向读 C B A,C 离输出 W 很近,更容易记住、更容易训练