实验四:LSTM模型训练优化与超参数调优
实验目的:
- 探索深度学习模型的超参数调优方法,理解超参数(如学习率、批大小、隐藏单元数、网络层数等)对模型训练动态和最终性能的影响。
- 学习通过实验试验和验证集评估来优化模型:掌握网格搜索、随机搜索等调参思路,在有限计算资源下找到提升模型精度的有效组合。
- 引入防止过拟合和提高泛化性能的技巧,如正则化(Dropout、L2权重衰减)和早停法,提高模型在未见数据上的鲁棒性。
- 借助可视化工具(如TensorBoard)监控不同参数下模型训练曲线, 训练学生分析和比较不同实验结果的能力。通过调优使模型预测误差进一步降低,朝满足误差<1°C目标迈进。
实验资源要求:
- 数据: 与实验三相同的训练集和验证/测试集。
- 软件环境: Python 3.x,PyTorch深度学习框架。可能需要额外的调参支持库,例如 Optuna 或 scikit-learn 的 GridSearchCV(若执行自动调参,可选)。TensorBoard或Matplotlib用于可视化训练过程比较。
- 计算环境: 高性能计算资源。调参需要多次训练模型,为节省时间,可并行或顺序尝试不同参数,建议在计算能力允许范围内一次只调整少量参数以评估影响。
实验时长: 約3小时
实验内容: 在获得初步可用的LSTM模型后,本实验将通过系统的优化和调参提升模型表现。首先,指导学生确定需要调优的主要超参数:学习率决定梯度更新步幅,是影响训练收敛和最终性能的关键参数;隐藏单元数和LSTM层数决定模型容量,需平衡欠拟合与过拟合;批大小影响梯度估计噪声和训练速度;序列长度窗口(如实验三中设定的T)也可能影响模型对依赖的捕捉。还有正则化系数(如L2惩罚项权重)和Dropout率等。这些超参数空间庞大,不可能穷举所有组合,因此本实验将采取分步调优策略:固定某些参数,集中考察其中一两个对性能影响,逐步逼近较优解。

图1 学习率对比(同图显示 train/val 曲线,便于观察收敛速度与震荡)
实验开始时,学生可先检查基线模型训练日志和曲线,分析是否存在学习率不当(如损失震荡或降不下),或模型容量不足/过剩的迹象(如训练误差远高于验证误差表示欠拟合,反之训练误差远低于验证且验证误差较高则过拟合)。基于这些观察确定初步调参方向。例如,如果基线训练收敛缓慢且最终精度不够,可考虑适当增大学习率;如果训练不稳定损失震荡,则减小学习率。又如验证集误差始终明显高于训练误差,考虑引入Dropout正则化抑制过拟合。
在明确思路后,学生将进行超参数试验。可采用手动调参结合网格搜索:例如选择学习率{1e-3, 5e-4, 1e-4}三档,隐藏单元数{50, 100}两档,组合形成6种配置依次训练模型(如时间不足也可仅尝试影响最大的参数)。每种配置训练若干epoch并记录最终验证集误差。为了效率,可以将epoch数调少一些观察总体趋势,然后挑选最优的组合深入训练。实验过程中引导学生有条理地记录每次试验的参数值及结果,学会构建调参日志表。若具备条件,可以使用Optuna等工具自动搜索,但需确保理解其原理和结果评价方式。

图2 学习率对比(同图显示 train/val 曲线,便于观察收敛速度与震荡)
训练多个模型难免混乱,可借助TensorBoard等工具对比不同试验的学习曲线。学生可为每组参数设置不同的运行名,将损失曲线同时绘制在一张图上,以直观比较收敛快慢和最终水平。例如,可能发现学习率=0.001时初期下降快但最终震荡较大,而0.0005下降稍慢但最终验证损失更低更平稳,则后者更优。隐藏单元从50增至100可能降低误差但训练时间增加,也可能引入过拟合需配合正则。通过可视化手段,学生将深化对超参数影响的直观认识。

图3 地平线误差曲线(滚动多步 MAE 随 horizon 变化,基线 vs 调优)
在多轮试验后,确定一套相对最佳的超参数配置。例如:学习率0.0005,隐藏单元100,加入一层Dropout(p=0.2),两层LSTM堆叠等(假定调参结果指向这些值)。最后,使用最佳超参数配置重新训练模型。训练时可适当增加epoch数,让模型充分拟合。同时采用Early Stopping策略:监测验证集损失,如果超过若干epoch(如10次)未提升则提前停止训练,防止过拟合并节省时间。最终模型训练完成后,在验证集上应达到明显优于基线模型的误差水平。
然后在测试集上评估新模型性能,与实验三的基线结果对比。预计调整后的模型在整体误差上有下降,尤其针对之前发现的薄弱环节有所改善。例如,可能原模型在降温初期误差较大,通过增加序列长度和隐藏单元,模型捕捉到了初始陡降的模式,使得早期阶段预测更加准确。计算新的MAE、最大误差,看是否接近或达到1°C以内的目标。如果仍未完全达标,也应相比之前大幅改善。模型泛化性能亦需验证:确保并未通过调参过度拟合训练集,从验证/测试结果看,训练误差与验证误差接近且均降低,表明模型提升是真实有效的。
实验步骤:
1. 确定调优参数列表
目标: 明确待调超参的优先级、候选集合/连续区间与相互作用假设,形成“由粗到细”的搜索路线图。
操作清单
优先级分层(P1/P2/P3):
P1(最优先):学习率 lr(对收敛与最终误差最敏感,先粗后细,建议对数网格);网络容量(hidden_size、num_layers)。
P2:正则化强度(weight_decay/L2)、dropout;序列窗口 T_in(影响可观测时长与输入维度)。
P3:batch_size、梯度裁剪阈值、学习率调度器类型与超参(如 Cosine/OneCycle 的峰值与周期)。
候选空间与边界:
lr ∈ {1e-3, 5e-4, 1e-4}(首轮);若最优落在端点,次轮在其一侧加密(如 2e-3, 1e-3, 7e-4, 5e-4)。
hidden_size ∈ {50, 100}(若 100 显著更优且不过拟合,次轮可试 128/160);
num_layers ∈ {1, 2}(若 2 层带来验证反弹,保守回退到 1 层);
dropout ∈ {0.0, 0.2}(若明显过拟合,再加 0.3/0.4 做二次对比);
weight_decay ∈ {0, 1e-5, 5e-5}(与 dropout 互补,先单独评估再联动)。
相互作用假设(待验证):
大 hidden_size/多层通常需要更强正则(更高 dropout 或 weight_decay);
更长 T_in 对 较小 lr 更友好(大 lr 易震荡);
小 batch_size → 噪声更大 → 训练曲线抖动增加,可用更小 lr 或梯度裁剪稳定。
实验预算约束: 设定总试验预算(如 24 次短训),并按 P1→P2→P3 分配名额(示例:P1 12 次,P2 8 次,P3 4 次)。
质量门控与验收
每个超参给出闭区间或离散集合与调参方向假设;
列出禁区(例如 lr>3e-3 训练不稳定、dropout>0.5 容量塌缩等);
形成 search_plan.yaml(含优先级、候选值、预算、停止准则)。
产出物:search_plan.yaml、risk_assumptions.md(相互作用与风险假设)。
2. 设计实验方案
目标: 采用逐次网格搜索 + 缩放加密的策略,单/双因子递进,确保可归因与高性价比探索。
操作清单
阶段 A(学习率扫描):固定(hidden_size=50, num_layers=1, dropout=0, weight_decay=0, batch_size=64, T_in=60),训练 N_warm=20 个 epoch:
比较 val MSE 曲线形态(下降速率、是否震荡、尾段地板);
记录 最佳 epoch(早停点)与泛化间隙(val_min - train_min)。
阶段 B(容量微调):以 A 中最稳、最低 val MSE 的 lr* 为基准,扫描 hidden_size × num_layers:
若 num_layers=2 带来改善,同时观测曲线是否出现过拟合反弹;
若 hidden_size=100 改善有限但训练时间显著上升,倾向保守选择。
阶段 C(正则化与 Dropout):在 (lr*, hidden*, layers*) 固定下,单因子或双因子试验:
先单因子 dropout ∈ {0, 0.2, 0.3};
再与 weight_decay ∈ {0, 1e-5, 5e-5} 组合做局部 2×3 小网格。
阶段 D(必要时):T_in 与 batch_size 小幅扫描(T_in ∈ {45, 60, 90};batch_size ∈ {32, 64}),仅当阶段 B/C 仍难达目标时开启。
停止准则与闸门:
若阶段 A/B 已在验证上显著优于基线(如 val MSE 降低 ≥15%),C/D 可缩减规模;
若出现过拟合明显(泛化间隙扩大 ≥50%),优先加正则或回退容量,再继续。
质量门控与验收
每轮只改变≤2 个因子;
记录负例与失败训练(如发散/梯度爆炸)及应对;
每阶段都有“进入下一阶段的闸门指标”(如 val MSE 相对改善阈值)。
产出物:phase_A_B_C_D_design.md、阶段性 runlist.csv(列出将要运行的配置)。
3. 执行调参试验
目标: 用短训对比快速收敛趋势,构建统一口径的日志与曲线,以供横向比较与溯源。
操作清单
统一训练协议(短训版):
epoch=20(或 30),固定随机种子;关闭学习率调度器(避免混杂影响);启用梯度裁剪(如 1.0)。
日志:每 epoch 记录 train_loss, val_loss, lr, grad_norm_p50/p95,以及早停候选点。
可视化与对比:
同屏曲线:把不同 lr 的 train/val 曲线画在同一图(命名规则:run_name = lr-<val>_H-<size>_L-<layers>_p-<dropout>_wd-<wd>);
热力图:以 val MSE min 为 Z 值,对 lr × hidden_size/dropout × wd 画热力图,便于肉眼锁定“洼地”。
日志表结构(示例): run_id, lr, hidden, layers, dropout, wd, batch, T_in, epochs, val_mse_min, train_mse_min, gen_gap, best_epoch, status, notes
趋势判读规则:
高 lr:初期下降快、后期震荡/反弹;
低 lr:平滑但未触底;
容量↑:训练更低、验证可能反弹;
正则↑:验证更稳,但过大易欠拟合(训练与验证都高)。
失败自愈:若某 run 出现发散/NaN,自动降 lr 一档并重试;若仍失败,记录入 status=fail.
质量门控与验收
每个 run 均有完整行的指标记录与曲线;
gen_gap(验证-训练)在可接受范围(例如 <0.05)或有正则解释;
前 12 名(val_mse_min 最低)进入候选池。
产出物:tuning_trial_log.csv、curves/*.png、heatmaps/*.png、failures.log.
4. 选择最佳参数组合
目标: 在多个候选间做稳健决策,避免只盯住单次最小值,兼顾方差与可复现。
操作清单
Top-K 重复试验:对 val_mse_min 最好的 K=3~5 个配置重复 3 次(不同随机种子),统计均值±标准差。
加权评分(示例):
其中 可取 0.5/1.0 量级。
复杂度与收益权衡:若两配置 score 相近,优先选层数更少/参数更少的一方(便于后续扩展与部署)。
失败情景的排除:剔除在任一复现实验中出现发散/异常的配置。
最终锁定:给出 cfg* = {lr*, hidden*, layers*, dropout*, wd*, batch*, T_in*},并写明拒选原因(例如“两层带来 0.3% 改善但代价过高/不稳定”)。
质量门控与验收
复现实验完成且 score 最优;
决策记录有“反事实说明”(为何不选第二名)。
产出物:best_config.json、selection_report.md(含重复实验统计与对照图)。
5. 训练最终模型
目标: 以完整训练周期在 cfg* 上获得稳健模型,并通过早停避免后期过拟合。
操作清单
训练协议(完整版):
epoch=100(或根据早停平均触发点 + 额外余量设定);
启用学习率调度(如 CosineAnnealingLR(T_max=E) 或 OneCycleLR),并保留无调度的对照一次;
仍保持梯度裁剪与固定 dtype(float32);
早停:patience=10, min_delta=1e-4,保存 “最佳验证损失模型” 与 “最后一次” 两份权重。
监控与度量:
逐 epoch 记录 train/val 曲线、grad_norm 分位数、学习率轨迹;
每隔 K=10 epoch 固定一段验证子序列,输出“真实 vs 预测”曲线,检查是否出现“初期滞后/趋稳振荡”。
稳定性回归:训练完成后重新加载最佳权重,在验证集复算指标,与在线日志一致性核对(防腐败)。
可解释性辅助(可选):输出对关键特征的输入扰动敏感性(在小幅噪声下的 ΔMAE),避免对单一特征过度依赖。
质量门控与验收
早停触发前后指标一致,重载无误差;
val MSE/MAE 明显优于基线(设目标:≥15% 相对改善);
日志、曲线与模型权重齐全,可复现。
产出物:best.ckpt、last.ckpt、training_curve_full.csv、lr_schedule.csv、fixed_segment_plots/*.png.
6. 评估改进效果
目标: 在未参与调参的测试集上,定量+定性证明真实提升且非过拟合假象。
操作清单
统一评估口径:与基线一致的切分与指标:MSE/MAE/RMSE/MaxAE,以及地平线误差曲线 MAE(h)(多步滚动)。
分阶段评估:冷启动段(0–300s)、快速降温段、趋稳段分别报告;若项目目标要求 MaxAE ≤ 1°C,重点给出覆盖率(如 95% 时间点误差 < 1°C)。
场景复盘:对基线表现最差的 2–3 个测试场景复绘“真实 vs 预测”,标注改善幅度与可能原因(如更长 T_in 捕捉了初始陡降)。
统计显著性(如有多会话):对会话级 MAE 做配对检验(t/Wilcoxon),报告 p 值与效应量(Cohen’s d)。
稳健性检查:在输入叠加小扰动(不改变分布)的条件下复测,确保改进非脆弱性带来。
质量门控与验收
测试集零泄漏;
与基线相比,MAE 与 MaxAE 均下降(报告绝对/相对降幅);
MAE(h) 的增长斜率显著变小(滚动误差扩散得到抑制)。
产出物:test_metrics.csv(含分阶段与 MAE(h))、baseline_vs_tuned_plots/*.png、significance_report.md.
7. 结果记录与小结
目标: 系统沉淀结论、经验与风险,确保可审计、可复现、可对外展示与后续复用。
操作清单
关键发现清单(示例模板):
有效因子:lr 中档(5e-4)最稳;hidden_size=100 较 50 更优但需 dropout=0.2 抑制过拟合;num_layers=2 收益有限。
无效/负效因子:过大 lr 导致尾段震荡;过强 weight_decay 造成欠拟合。
机制解释:更大容量帮助刻画初期陡降的快速动力学;正则抑制了趋稳段的微振荡。
成本与权衡:训练时间↑(给出倍数),但换取 MAE ↓ X%、MaxAE ↓ Y°C;若上线受限,可给出“轻量版”备选(较小 hidden_size + 稍小 T_in)。
资产化与归档:
保存最终配置、权重、调参日志、曲线与图表、数据版本信息(data_version, split_indices);
编写 experiment_card.md(问题定义、数据、模型、超参、指标、已知局限与下一步计划);
CHANGELOG.md 记录与前一版的变化与直接收益。
下一步路线图(展望):
方法:直接多步监督(减少滚动误差)、残差头/注意力、分段建模(阶段标签);
训练:学习率暖启动、余弦退火 + 早停组合、困难样本重加权;
评估:不确定性估计(MC Dropout/分位回归),将“1°C 约束”扩展为置信下界。
质量门控与验收
产物目录完整、带哈希校验;
报告中每个结论有图/表/数值支撑;
在全新环境可一键重现“基线 vs 最优”的关键图表与指标。
产出物:best_config.json、best.ckpt、tuning_trial_log.csv、experiment_card.md、baseline_vs_tuned_plots/、CHANGELOG.md、artifacts_manifest.json.
附:建议的文件/目录组织
experiments/
├─ configs/
│ ├─ search_plan.yaml
│ └─ best_config.json
├─ runs/
│ ├─ phaseA_lr_sweep/
│ ├─ phaseB_capacity/
│ └─ phaseC_reg/
├─ logs/
│ ├─ tuning_trial_log.csv
│ └─ failures.log
├─ artifacts/
│ ├─ best.ckpt
│ ├─ last.ckpt
│ ├─ training_curve_full.csv
│ └─ baseline_vs_tuned_plots/
├─ reports/
│ ├─ selection_report.md
│ ├─ significance_report.md
│ ├─ experiment_card.md
│ └─ CHANGELOG.md
└─ meta/
├─ data_version.txt
└─ split_indices.json
最后更新于