You need to enable JavaScript to run this app. PyTorch实现LSTM序列到序列自编码器时序重构欠拟合仅输出平均值求助
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch实现LSTM序列到序列自编码器时序重构欠拟合仅输出平均值求助

根因定位

模型仅输出序列平均值的问题由三处核心代码缺陷直接导致,而非训练调参问题:

  1. 张量拼接维度错误,导致时序轴错位
    解码器内所有时间步输出默认沿第0维(批量轴)拼接,而非时间步轴。当批量大小为1时,拼接后的张量刚好能凑出和目标匹配的形状(不会抛出显式维度错误),但拼接逻辑本质是把不同时间步的输出当成批量维度堆叠。
    更关键的是,解码器的设计目标是从序列最后一个元素开始逐次向前重构,即模型输出序列的时间顺序固定为[t=N, t=N-1, ..., t=0]。但损失计算环节直接将这个逆序序列和正序的原始输入序列对比,没有做顺序对齐,导致模型无法学到任何时序关联,只能输出能最小化错位损失的全局常数——也就是输入序列的平均值。
  2. 学习率设置严重偏低,权重更新步长不足
    训练函数默认将Adam优化器的学习率设为1e-6,比常用的初始学习率低三个数量级。即使是单序列过拟合场景,极低的学习率也会让权重更新步长极小,最终模型只会收敛到最简单的局部最优,没有能力拟合序列的时序波动。
  3. 动态图初始化逻辑存在梯度截断风险
    解码器拼接张量时直接用空的torch.tensor([])作为初始值,在小批量训练时会触发动态图的梯度截断,进一步降低模型的有效学习率。
修复方案

按优先级执行:

  1. 修正解码器拼接逻辑与顺序对齐
    • 明确指定所有时间步输出沿时间维度拼接,替换默认的第0维拼接逻辑,确保单个时间步输出经过堆叠后,整体形状为(batch, seq_len, n_features),完全匹配目标张量形状。
    • 对齐生成顺序:由于模型输出为逆序序列,计算损失前需要将原始输入沿时间维度翻转,与模型输出顺序保持一致。
    • 替换空张量初始化逻辑:循环前将第一个生成的时间步输出作为初始张量,后续每步将新输出沿时间维度堆叠,避免空张量带来的动态图问题。
      修复后的解码器核心代码:
    def forward(self, hs_0, seq_len):
        hs_i, cs_i = hs_0
        # 生成第一个时间步(原序列最后一个元素)
        x_i = self.dense(hs_i)
        # 调整形状为 (batch, 1, n_features) 作为初始堆叠张量
        x = x_i.unsqueeze(1)
        for _ in range(1, seq_len):
            hs_i, cs_i = self.cell(x_i, (hs_i, cs_i))
            x_i = self.dense(hs_i)
            # 沿时间维度拼接,而非默认第0维
            x = torch.cat([x, x_i.unsqueeze(1)], dim=1)
        return x
    
    对应整合类的输出逻辑修正(移除冗余的维度调整):
    def forward(self, x):
        seq_len = x.shape[1]
        hs = self.encoder(x)
        hs = tuple([h.squeeze(0) for h in hs])
        out = self.decoder(hs, seq_len)
        return out
    
    损失计算逻辑修正:
    x_hat = model(x)
    # 翻转输入匹配模型的逆序生成逻辑
    x_target = torch.flip(x, dims=[1])
    loss = criterion(x_hat, x_target)
    
  2. 调整学习率到合理范围
    将默认学习率从1e-6提升到1e-3,配合Adam优化器的默认参数即可实现单序列过拟合。如果训练过程中损失波动过大,可小幅降至1e-4,不可维持极低学习率。
  3. 补充基础验证逻辑
    训练初期打印模型输出、输入、损失值的维度,确保三者在各维度上完全匹配,避免隐式广播导致的形状错配。
    单序列过拟合场景下,观察训练损失是否能持续下降到1e-3以下;如果损失长期停留在固定值(等于序列的全局方差),说明权重更新未生效,需要优先检查学习率设置。

之前排查的隐式广播问题确实存在,但并不是提前平均目标值,而是解码器拼接逻辑错误、生成顺序未对齐共同作用的结果,和同类参考案例的根因存在差异。

内容的提问来源于stack exchange,提问作者rocksNwaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 14:54:06