想象你在公司年会上玩“传话游戏”:第一位同事把一段冗长的项目汇报从头到尾听完,边听边在脑子里消化每一句话,最后把全部理解浓缩成一张小纸条;第二位同事只拿到这张纸条,却要一个字一个字地把整段汇报重新讲出来。这就是 Seq2seq——序列到序列模型——的真实写照。它的编码器像那位认真的第一棒,把输入序列“读进去”并压成一个上下文向量(小纸条);解码器像那位复述的第二棒,凭这张纸条逐字生成输出序列。纸条太小会丢细节,于是有了注意力机制,让复述者随时回头翻原稿;复述者讲错会越跑越偏,于是有了 teacher forcing 训练技巧,像教练在场即时纠正。这套框架天然适合多步预测:给定过去一段观测,预测未来多个时刻——就像让第二棒一口气续写完整段未来故事。

岗位关联

掌握 Seq2seq 是理解机器翻译、对话系统、多步时序预测等一切“序列进、序列出”任务的地基,也是你从单点预测走向深度时序建模的必修课。

目录
  1. 可视化演示
  2. 1. 编码器结构
  3. 2. 上下文向量
  4. 3. 解码器生成
  5. 4. 注意力机制
  6. 5. 训练技巧
  7. 6. 多步预测应用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

Seq2seq编码-解码:序列到序列的映射 编码器逐步读入输入序列,将每个时间步的输入与上一时刻隐状态融合,最终压缩为上下文向量 c 解码器以 c 为初始状态,逐步生成输出序列,每步依赖上一步输出和上下文向量 切换"注意力机制"观察解码器如何动态关注编码器不同位置,缓解固定向量的信息瓶颈 hₜ = LSTM(xₜ, hₜ₋₁), c = hₙ sₜ = LSTM(yₜ₋₁, sₜ₋₁, c), ŷₜ = softmax(W·sₜ) 编码器压缩序列为上下文向量,解码器逐步生成多步预测输出

1. 编码器结构

传话游戏的第一棒是位训练有素的速记员。他不能只听最后一个词,而要逐字听完整个汇报,并且每听完一句都要更新自己对“故事讲到哪了”的理解。Seq2seq 里的编码器就是这个速记员,它的任务是把整个输入序列“读”进去,做成一份浓缩的心里摘要。

技术上,编码器接收输入序列 \(x_1, x_2, \dots, x_T\),每个时间步读入一个元素。它内部是一个循环神经网络单元(通常用 LSTM 或 GRU),每读一个元素就更新一次自己的记忆状态。这份记忆不是简单的缓存,而是对“到目前为止看到的所有信息”的压缩与提炼。

就这样,速记员一个词一个词地听,手里的“理解”不断更新换代。当最后一个词读完,他脑子里那份浓缩的摘要就成了整个故事的完整写照——这就是编码器的全部使命。

ht=f(xt, ht−1)h_t = f(x_t,\ h_{t-1})
这一步表示:新的记忆 h_t 由当前读入的内容 x_t 和旧记忆 h_{t-1} 共同决定,函数 f 在 LSTM 里就是那套精巧的“遗忘门、输入门、输出门”运算。
  1. 当前输入 \(x_t\)编码器此刻读到的第 t 个元素。在时序预测里,它是滑窗中某个历史时刻的数值;在翻译里,它是源语言的一个词向量。
    xtx_t
  2. 上一步记忆 \(h_{t-1}\)编码器读完前 t-1 个元素后脑子里的摘要,承载着历史信息。
    ht−1h_{t-1}
  3. 更新函数 \(f\)一个“融合器”,把新信息和旧记忆揉在一起。LSTM 通过门控机制决定哪些旧记忆要忘掉、哪些新信息要记住。
    f(⋅, ⋅)f(\cdot,\ \cdot)
  4. 新记忆 \(h_t\)融合后的最新状态,既是本步的“输出摘要”,也是下一步的输入起点。
    hth_t

2. 上下文向量

速记员听完最后一句,掏出一张便签纸,把这场汇报的核心思想浓缩成一句话写上去。这张便签纸就叫上下文向量。它不记录每句话的原词,只承载“这个故事到底讲了什么”。

在基本版 Seq2seq 里,这张纸条就是编码器最后时刻的隐藏状态。因为所有历史信息都经过一层层递推,最终沉淀在最后一步的状态里,所以只需把这个状态抽出来,就能代表整段输入。

小纸条有一个致命弱点:它容量有限。如果汇报长达两小时,便签纸却被规定只能写一句话,那必然丢细节。这就是著名的信息瓶颈——输入越长,最后状态要装的信息越多,越装不下,早期内容就越容易被“稀释”甚至遗忘。这个缺陷,正是后面注意力机制登场的理由。

c=hTc = h_T
上下文向量 c 直接取编码器最后一个时间步的隐藏状态 h_T。它把不定长的输入序列压成一份定长的“记忆纸条”。
  1. 序列长度 \(T\)输入序列总共有多少个时间步。无论多长的输入,最终都被压进同一个结构里。
    TT
  2. 最终状态 \(h_T\)编码器读完整个序列后保留的最后一份记忆,是所有历史信息的“收口”。
    hTh_T
  3. 上下文向量 \(c\)这张小纸条,是编码器交给解码器的唯一“传话内容”。
    cc

3. 解码器生成

第二棒是位想象力丰富的扩写员。他手里只有那张小纸条,却要一个字一个字地把汇报重新讲出来。问题来了:他不能哗啦一下倒出全部内容,而必须先说第一个词,再根据第一个词说第二个词,这样一句句接下去。

解码器的工作方式正是如此。它从“开始符”出发,每一步生成一个输出元素;每生成一个元素,这个元素又作为下一步的输入——也就是说,自己说的话会成为说下一句话的依据。这种“拿自己的输出当输入”的循环结构叫自回归。

扩写员就这样一句接一句地讲,讲到句号(结束符)或者讲够了预定步数就停下来。在小纸条信息充足的情况下,他能讲出一个连贯、完整的续篇——这就是解码器逐字生成输出的完整图景。

p(yt∣y1:t−1, c)=softmax⁡(Wsst)\displaystyle p(y_t \mid y_{1:t-1},\ c) = \operatorname{softmax}(W_s s_t)
解码器计算“下一个词是 y_t”的条件概率:它取决于已经生成的 y_1 到 y_{t-1} 以及小纸条 c。输出层把当前状态 s_t 映射成每个候选词的得分,再用 softmax 转成概率。
  1. 已生成前缀 \(y_{1t-1}\):前面已经讲出口的话,是生成下一步的“上下文”。
    y1:t−1y_{1:t-1}
  2. 解码器状态 \(s_t\)解码器自己的记忆,由 s_{t-1}、上一步输出 y_{t-1} 和纸条 c 递推更新而来。
    sts_t
  3. 打分矩阵 \(W_s\)一个线性层,把隐藏状态 s_t 映射成对所有候选词的原始打分。
    WsstW_s s_t
  4. softmax 归一化把一组任意大的分数压成总和为 1 的概率分布,然后取最大概率对应的词作为本步输出。
    softmax⁡(⋅)\operatorname{softmax}(\cdot)

4. 注意力机制

扩写员讲了一阵发现不对劲:纸条太简略,“3 号楼漏水”到底是哪一段的事?他干脆不猜了,直接回头翻原稿——讲到哪一段,就重点看原稿的对应位置。这就是注意力机制:解码器每一步不再只依赖那张小纸条,而是可以“回看”编码器的每一时刻状态,并按需取用。

具体做法是:解码器生成第 t 步时,先给编码器的每个位置 j 算一个相关度分数 e_{tj},再用 softmax 归一化成权重 α_{tj},最后按权重把编码器各时刻的状态加权求和,得到这一步专属的上下文 c_t。

有了注意力,扩写员再也不用担心纸条太小。他随时可以翻原稿,讲到哪里就看到哪里,这也让模型能把“输入的第几部分”和“输出的第几步”自动对齐——在翻译里,它学会了“德语的动词其实对应英文的这句”;在时序预测里,它学会了“预测明天要看过去哪几天的走势”。

αtj=exp⁡(etj)∑k=1Texp⁡(etk),ct=∑j=1Tαtjhj\displaystyle \alpha_{tj} = \frac{\exp(e_{tj})}{\sum_{k=1}^{T}\exp(e_{tk})}, \qquad c_t = \sum_{j=1}^{T}\alpha_{tj} h_j
注意力权重 α_{tj} 表示“生成第 t 步时,输入位置 j 有多重要”。c_t 是对所有编码器状态按重要性加权求和的结果,取代了原来那个固定的 c。
  1. 相关度打分 \(e_{tj}\)解码器当前状态与编码器第 j 个位置的匹配程度,就像扩写员扫一眼原稿某段,判断“是不是该看这段”。
    etje_{tj}
  2. softmax 归一化把各位置的分数变成一组总和为 1 的权重,分数越高权重越大。
    exp⁡(etj)∑k=1Texp⁡(etk)\frac{\exp(e_{tj})}{\sum_{k=1}^{T}\exp(e_{tk})}
  3. 注意力权重 \(\alpha_{tj}\)归一化后的权重,衡量每个输入位置对当前输出的贡献比例。
    αtj\alpha_{tj}
  4. 加权上下文 \(c_t\)把所有编码器状态按权重混合成一份“按需定制的纸条”。
    ct=∑j=1Tαtjhjc_t = \sum_{j=1}^{T}\alpha_{tj} h_j

5. 训练技巧

新来的扩写员嘴上没把门,经常讲着讲着就跑偏。教练想了个办法:练习时,每当他该说下一个词的时候,教练直接把标准答案塞给他,让他照着正确答案往下接。这样他至少不会因为自己讲错而越错越远。这就是 teacher forcing(教师强制)。

训练时,解码器本应拿自己上一步的预测值作为下一步输入,但 teacher forcing 改为拿真实目标值作为输入。这样模型每一步都在“看着标准答案”的条件下学习,梯度信号更清晰,训练收敛也快得多。损失函数就是让模型给标准答案分配尽可能高的概率:

teacher forcing 虽然好用,却埋了一个雷:训练时喂的是标准答案,推理时只能喂自己的预测,两边输入分布不一致。一旦推理时第一步就错了,错误会像滚雪球一样放大,这就是曝光偏差。常见的缓解手段是计划采样:训练初期多用真实值,后期逐渐多用预测值,让模型慢慢“断奶”。

L=−∑t=1Tylog⁡p(yt∣y1:t−1, x)\displaystyle L = -\sum_{t=1}^{T_y} \log p(y_t \mid y_{1:t-1},\ x)
这个损失叫负对数似然:模型给真实答案的概率越高,log 值越大,负号后整体损失越小。求和把所有时间步的“遗憾”加在一起,优化时让总遗憾最小。
  1. 真实值 \(y_t\)第 t 步的标准答案,也就是教练递过来的正确台词。
    yty_t
  2. 条件概率 \(p(y_t \mid y_{1t-1},\ x)\):模型在给定输入和前面真实答案时,给 y_t 打出的概率。
    p(yt∣y1:t−1, x)p(y_t \mid y_{1:t-1},\ x)
  3. 取对数 \(\log\)概率是 0 到 1 的小数,乘法会越乘越小;对数把连乘变连加,数值更稳定。
    log⁡(⋅)\log(\cdot)
  4. 负号与求和最大化总概率等价于最小化负对数之和,这正好匹配梯度下降的优化方向。
    −∑t=1Ty-\sum_{t=1}^{T_y}

6. 多步预测应用

回到开头那个传话游戏:如果主持人要求第二棒不只是讲完这句话,而是一口气把接下来一整段故事都续写出来,这就对应了多步预测。给定过去一段时间的观测值,预测未来 H 个时刻的数值——比如根据过去 12 小时的电力负荷,预测未来 3 小时每一小时的负荷。

实现时,把历史观测窗口作为编码器的输入序列,把未来 H 步作为解码器的输出序列。训练时用 teacher forcing 加速收敛,推理时解码器用自己的预测逐点滚动生成。多步预测的常用损失是均方误差:

至此整个链条打通了:编码器像速记员把历史压成纸条,解码器像扩写员凭纸条续写未来,注意力让他随时回看原稿,teacher forcing 让他在练习时被即时纠正。这套“听一段、讲一段”的能力,正是多步预测、机器翻译、对话系统共同的内核。

L=1H∑h=1H(y^T+h−yT+h)2\displaystyle L = \frac{1}{H}\sum_{h=1}^{H}\left(\hat{y}_{T+h} - y_{T+h}\right)^2
均方误差把每一步预测值与真实值的差距平方后取平均。平方让大误差被放大惩罚,平均让所有预测步一视同仁。
  1. 预测步数 \(H\)要往前看多远,多步预测的“步数”。
    HH
  2. 预测值 \(\hat{y}_{T+h}\)模型输出的第 h 步未来估值。
    y^T+h\hat{y}_{T+h}
  3. 真实值 \(y_{T+h}\)第 h 步未来实际发生的数据。
    yT+hy_{T+h}
  4. 平方与平均先逐项平方消除正负抵消,再求和除以 H 得到平均误差,数值越小预测越准。
    1H∑h=1H(⋅)2\frac{1}{H}\sum_{h=1}^{H}(\cdot)^2

AI 应用场景

场景一:机器翻译(神经机器翻译)

阶段:模型训练与推理部署

解决的问题:传统统计机器翻译需要人工设计大量对齐特征和语言规则,维护成本极高。Seq2seq 把翻译看作“听一段话→写一张纸条→重新讲一段话”,端到端学习源语言到目标语言的映射,无需人工规则。

具体案例:跨境电商平台的客服工单需要中英互译。将中文工单逐词输入编码器,解码器逐词生成英文回复,注意力机制自动对齐“中文的哪几个词对应英文的哪个短语”。相比规则系统,翻译流畅度大幅提升,冷门表达也能覆盖。

场景二:电力负荷多步预测

阶段:特征工程与模型评估

解决的问题:电网调度需要提前 24 小时、逐小时预知负荷,传统单步预测只能给出下一个时刻,无法支撑调度规划。Seq2seq 天然支持“历史滑窗进、未来多步出”的序列映射。

具体案例:某省级电网用过去 168 小时(一周)的负荷、温度、节假日特征作为编码器输入,解码器逐小时生成未来 24 小时负荷曲线。训练时用 teacher forcing 快速收敛,推理时滚动生成,配合 MAE、RMSE 评估各小时精度,为机组启停计划提供依据。

场景三:对话系统回复生成

阶段:数据准备与模型微调

解决的问题:任务型客服机器人需要根据用户的多轮发言生成自然回复。Seq2seq 把对话历史编码成上下文,解码器逐词生成回答,注意力机制让模型聚焦用户最近提到的关键信息(如订单号、退款金额)。

具体案例:银行客服机器人把用户问题“我上周的退款为什么还没到账”编码后,解码器生成“您好,查询到您的退款已于 3 个工作日内原路返回,请注意查收”。遇到长对话时,注意力会实时定位“上周”“退款”等关键词,避免答非所问。

Python 演示

python66 行
import torchimport torch.nn as nn torch.manual_seed(0)WIN = 12HORIZON = 3  class Encoder(nn.Module):    def __init__(self, in_dim, hid_dim):        super().__init__()        self.lstm = nn.LSTM(in_dim, hid_dim, batch_first=True)     def forward(self, x):        _, (h, c) = self.lstm(x)        return h, c  class Decoder(nn.Module):    def __init__(self, out_dim, hid_dim):        super().__init__()        self.lstm = nn.LSTM(out_dim, hid_dim, batch_first=True)        self.fc = nn.Linear(hid_dim, out_dim)     def forward(self, h, c, tgt_in):        outs = []        for step in range(HORIZON):            y, (h, c) = self.lstm(tgt_in[:, step:step + 1, :], (h, c))            outs.append(self.fc(y))        return torch.cat(outs, dim=1)  class Seq2seq(nn.Module):    def __init__(self, dim, hid_dim):        super().__init__()        self.encoder = Encoder(dim, hid_dim)        self.decoder = Decoder(dim, hid_dim)     def forward(self, src, tgt_in):        h, c = self.encoder(src)        return self.decoder(h, c, tgt_in)  raw = torch.sin(torch.arange(300, dtype=torch.float32) / 8.0).view(-1, 1, 1)src_list, in_list, out_list = [], [], []for i in range(len(raw) - WIN - HORIZON):    src_list.append(raw[i:i + WIN])    in_list.append(raw[i + WIN - 1:i + WIN - 1 + HORIZON])    out_list.append(raw[i + WIN:i + WIN + HORIZON])src = torch.stack(src_list)tgt_in = torch.stack(in_list)tgt_out = torch.stack(out_list) model = Seq2seq(1, 32)opt = torch.optim.Adam(model.parameters(), lr=0.01)loss_fn = nn.MSELoss()for epoch in range(30):    opt.zero_grad()    pred = model(src, tgt_in)    loss = loss_fn(pred, tgt_out)    loss.backward()    opt.step()    if epoch % 10 == 0:        print('epoch', epoch, 'loss', round(loss.item(), 4))print('sample pred:', model(src[:1], tgt_in[:1]).detach().numpy().reshape(-1).round(3))print('sample truth:', tgt_out[:1].numpy().reshape(-1).round(3))
目的:用 PyTorch 实现一个最小 Seq2seq,以 12 步正弦波历史为输入,预测未来 3 步,演示编码器-解码器 + teacher forcing 的训练流程。
  1. _, (h, c) = self.lstm(x)编码器丢弃逐时刻输出,只保留最终记忆状态,对应“小纸条”的产生。
  2. y, (h, c) = self.lstm(tgt_in[:, step:step + 1, :], (h, c))解码器每步把上一步记忆传回循环网络,这就是自回归的引擎。
  3. outs.append(self.fc(y))把隐藏状态经线性层映射成预测数值。
  4. torch.cat(outs, dim=1)把逐点预测拼接成完整的未来 H 步序列。
  5. src_list.append(raw[i:i + WIN])滑窗截取 12 步历史,作为编码器输入。
  6. in_list.append(raw[i + WIN - 1:i + WIN - 1 + HORIZON])构造解码器的教师信号(上一步真实值)。
  7. loss = loss_fn(pred, tgt_out)用均方误差衡量多步预测的整体偏差。
  8. loss.backward()反向传播,让编码器和解码器的参数一起被优化。

常见误区

误区总觉得 Seq2seq 是“翻译专用模型”,看到别人拿它预测股票、预测电量就觉得很奇怪。

正解Seq2seq 的本质是“任意输入序列 → 任意输出序列”的映射框架,翻译只是它最出名的应用。只要任务能描述成“听一段话、再讲一段话”,比如历史负荷进、未来负荷出,它就是一个合格的候选模型。

为何常见:教科书和论文几乎都用翻译举例,导致大家把“最典型的应用”当成了“唯一的应用”。

误区以为 Seq2seq 一上来就有注意力,上下文向量是编码器所有状态按权重加出来的。

正解基本版 Seq2seq 的上下文向量只是编码器最后一个隐藏状态,是“一张固定的纸条”;注意力机制是在它基础上做的升级,让解码器每一步都能动态加权所有编码器状态。两者是两代模型,不能混为一谈。

为何常见:现在主流课程默认直接讲带注意力的版本,让初学者误以为注意力是 Seq2seq 的原配部件。

误区训练时把真实值喂给解码器效果很好,那推理时也把它自己的预测值继续喂回去不就行了?

正解推理时根本没有真实值可用,解码器只能拿自己的预测当输入。训练和推理的输入来源不一致,正是“曝光偏差”的根源。计划采样就是为了弥合这个鸿沟。

为何常见:训练和推理的代码长得几乎一样,只是输入来源不同,容易让人忽略这个关键差异。

误区上下文向量装不下长序列信息,那把 LSTM 的隐藏单元从 64 加到 1024 不就行了?

正解加宽能缓解容量不足,但治标不治本。瓶颈的本质是“所有信息都要挤过最后一步这一个出口”;注意力让解码器直达每个时刻的状态,才真正绕开了这个单点瓶颈。

为何常见:看到“瓶子太小”自然想换大瓶子,却没意识到问题在于“只有一个瓶口”。

误区听说编码器用 LSTM,就觉得 LSTM 和 Seq2seq 是同一个东西。

正解LSTM 是一个可重复使用的循环单元,负责“怎么融合新旧信息”;Seq2seq 是由编码器、上下文向量、解码器组成的整体框架,负责“怎么把一段序列变成另一段序列”。LSTM 可以装在 Seq2seq 里,也可以单用;Seq2seq 也可以换成 GRU 甚至 Transformer 来做单元。

为何常见:LSTM 名气太大,而教程常以“LSTM 实现 Seq2seq”为例,两个概念在叙述中边界模糊了。

面试题

Q1. 在基本 Seq2seq 中,上下文向量来自哪里?

单选题 · easy

  • A.编码器最后时刻的隐藏状态← 正确答案
  • B.解码器第一时刻的隐藏状态
  • C.输入序列所有值的简单平均
  • D.注意力加权后的上下文向量

答案:A。基本版 Seq2seq 把编码器最后一个时间步的隐藏状态 h_T 直接当作上下文向量 c,相当于“最后一张纸条”。D 是注意力版本的产物,属于升级形态;B 和 C 在结构上都不存在。

Q2. 解码器逐步生成时,每一步的新输入是什么?

单选题 · mid

  • A.上一步的真实值或模型输出← 正确答案
  • B.编码器每一时刻的原始输出
  • C.上下文向量的一个加权副本
  • D.从整个词汇表中随机抽取一词

答案:A。解码器的自回归特性决定了:训练时喂上一步真实值(teacher forcing),推理时喂上一步自己的预测值。B 是编码器的事,C 只是上下文的一部分,D 与生成逻辑无关。

Q3. 引入注意力机制主要是为了解决什么问题?

单选题 · mid

  • A.上下文向量体积有限导致的信息瓶颈← 正确答案
  • B.解码器参数过多引起的过拟合问题
  • C.编码器无法并行读取完整输入序列
  • D.训练时损失函数下降缓慢不收敛

答案:A。固定长度的上下文向量装不下长序列信息,这是核心痛点。注意力让解码器直接访问所有编码器状态,绕开“只有最后一步记得”的瓶颈。其他选项不是注意力的主要动机。

Q4. 以下哪些属于 Seq2seq 的典型应用?

多选题 · mid

  • A.机器翻译把源语言转换成目标语言← 正确答案
  • B.多步时序预测未来多个时刻的数值← 正确答案
  • C.图像分类判断图片属于哪个类别
  • D.对话系统根据上文生成一段回复← 正确答案

答案:ABD。Seq2seq 解决“序列进、序列出”的任务。翻译、多步预测、对话生成都符合;图像分类输出的是单个类别标签,不是变长序列,属于分类问题而非序列生成问题。

Q5. Teacher forcing 在训练时的做法是?

单选题 · easy

  • A.用模型上一时刻的输出作为输入
  • B.用真实目标值替换模型的输入← 正确答案
  • C.强制每一时刻输出相同的结果
  • D.用随机噪声扰动每一步的输入

答案:B。teacher forcing 在训练时把真实目标值喂给解码器当输入,让模型每一步都在“标准答案”条件下学习,收敛更快。A 是推理时的自回归方式;C、D 与教师强制无关。

Q6. 曝光偏差指的是哪种现象?

单选题 · mid

  • A.训练时用真实值而测试时用预测值← 正确答案
  • B.模型在训练集上表现好但测试集差
  • C.注意力权重全部集中到同一位置
  • D.输入序列超出模型能支持的长度

答案:A。teacher forcing 让训练输入分布是真实值,推理输入分布是模型预测,两者不一致导致误差逐级放大,这就是曝光偏差。B 是过拟合,C 是注意力退化,D 是长度外推问题。

Q7. 哪些做法有助于缓解信息瓶颈?

多选题 · hard

  • A.引入注意力机制按需取用历史信息← 正确答案
  • B.增大编码器隐藏状态的向量维度← 正确答案
  • C.把编码器各时刻状态都传给解码器← 正确答案
  • D.缩短输入序列以减少被压缩的信息

答案:ABC。注意力让解码器直达所有时刻状态;加大隐藏维度提升纸条容量;把每时刻状态都传出去相当于放开单一出口——三者都能缓解瓶颈。缩短输入序列只会丢失信息,是错误方向。

Q8. 多步预测中,预测步数通常用哪个符号表示?

单选题 · easy

  • A.用 H 表示需要预测的未来步数← 正确答案
  • B.用 H 表示编码器隐藏单元数量
  • C.用 H 表示训练数据批量大小
  • D.用 H 表示滑窗的历史时间长度

答案:A。在多步预测语境下,H(horizon)约定俗成地表示预测视野,即未来要预测多少步。隐藏单元数常用 hid_dim,批量大小常用 batch_size,历史长度常用 WIN 或 lookback。

Q9. 关于计划采样(Scheduled Sampling),下列说法正确的是?

单选题 · hard

  • A.训练初期多用真实值后期多用预测值← 正确答案
  • B.全程都用真实值作为解码器输入
  • C.推理时对概率分布重复随机采样
  • D.对注意力权重做随机丢弃防过拟合

答案:A。计划采样让模型在训练中按概率混合真实值和预测值,且随训练推进逐步提高预测值比例,让模型“慢慢断奶”,缓解曝光偏差。B 是纯 teacher forcing,C 是解码策略,D 是 Dropout 思路。

Q10. 用 Seq2seq 做时序多步预测时,需要做哪些改造?

多选题 · mid

  • A.把历史观测窗口作为编码器输入← 正确答案
  • B.把未来多个时刻目标作为解码输出← 正确答案
  • C.计算预测值与真实值的均方误差← 正确答案
  • D.用图像增强扩充时间序列样本数

答案:ABC。滑窗历史进、未来多步出是核心改造;均方误差是常用的多步回归损失。图像增强(翻转、裁剪)不适合时间序列,时序数据增强应使用滑窗、加噪等方式,D 明显是张冠李戴。