改善预测与控制效果
效果不理想时,先区分是模型没有学好系统变化,还是策略没有实现业务目标。例如温控中,温度预测持续偏高应先检查世界模型;预测准确但动作频繁启停,则要结合奖励、动作变化代价和控制周期分析。
本页按现象给出检查顺序和参数调整方法。已经定位到少数参数、需要比较多个取值时,使用高级功能中的自动搜索参数。
定位问题
| 观察到什么 | 先检查什么 | 下一步 |
|---|---|---|
| 配置报错或训练出现非有限数值 | 字段层级、缺失值、数值尺度 | 预检与故障排查 |
| 训练误差一直较高 | 列顺序、监督目标、驱动变量与单位 | 降低预测误差 |
| 单步准确,连续推演偏离 | 误差随步数的变化、外生输入和过程滞后 | 多步训练 |
| 训练误差低,验证误差高 | 数据划分、工况覆盖与模型容量 | 数据设置和模型容量对照 |
| 模型内奖励高,动作却不合理 | 奖励方向、物理边界、模型未覆盖的动作区域 | 改善控制效果 |
| 效果可用但训练或推理太慢 | 数据读取、训练展开、验证频率和模型大小 | 效果与计算开销 |
先保存一份可运行的基线和报告,再改变一个参数或一组必须联合解释的参数。曲线、误差分布和业务工况的读法见分析训练结果。
降低预测误差
单步拟合与关键节点
先在相同数据和验证条件下比较学习率、训练轮数与网络容量:
| 现象 | 候选调整 | 如何判断 |
|---|---|---|
| 损失震荡或出现数值异常 | 检查输入和标签尺度,再降低 optimizer.lr | 异常是否消失,验证误差是否同步改善 |
| 训练和验证都欠拟合 | 增加 epochs,或比较更大的 network.hidden_dims | 两侧误差是否下降,耗时是否可接受 |
| 训练持续改善,验证开始变差 | 按验证指标选模,比较较小网络或 network.dropout | 固定验证集上的选中模型表现 |
| 少数关键节点误差较大 | 检查覆盖,再调整 node_weights、aggregation_mode | 关键节点与其他节点之间的取舍 |
这些参数应写在所选算法对应的位置,例如 BC 的学习率在 hyperparameters.optimizer.lr,REVIVE-P 的监督学习率在 hyperparameters.bc.optimizer.lr。完整层级见选择建模与控制算法。
多步训练与过程滞后
下面是在 BC 阶段中加入 4 步闭环训练的片段:
hyperparameters:
batch_size: 128
sequence_train:
enabled: true
train_mode: rollout
horizon: 4先用短长度确认训练稳定,再逐步延长,并根据内存占用减小批量。比较时固定最终验证长度,否则误差降低可能只是评估时间缩短。
温度相同但后续变化不同,可能是过去加热量与设备蓄热不同;水处理的出水变化可能对应更早的投加动作。这时应检查历史信息是否充分,再考虑历史窗口。有明确物理关系的中间量可用专家函数,可计算的滞后或工况特征可用专家特征。
算法、多步目标、历史输入和机理节点可以组合,但每次增加一个与当前问题相关的因素。ADM2 的专用结构、直接序列监督的网络接口和函数可微性均有使用条件,需先预检,再比较误差。缺少驱动量或训练工况时,单纯加长推演不能补齐信息。
检查 REVIVE-P 的对抗贡献
在相同监督起点和验证条件下,对照关闭、开启 adversarial 的结果。以下参数相对于 hyperparameters.adversarial:
| 参数组 | 调整目的 | 观察什么 |
|---|---|---|
start_epoch | 让监督模型先学习基本动态 | 对抗开启前后的监督误差 |
rollout.horizon、rollout.batch_size | 覆盖目标推演范围,控制片段数量 | 多步误差与显存 |
ood.weight、判别器窗口和更新参数 | 调整判别信号强度 | 配对条件下的判别能力与预测误差 |
safe_projection.max_adv_to_sup_norm | 限制对抗梯度相对监督梯度的强度 | 梯度比例、回退次数和验证误差 |
判别器接近 0.5 可能表示真假片段相似,也可能表示判别失效,应结合误差曲线判断。对抗开启后监督结果下降时,可以延长预热或降低对抗强度;变化是否有益,以目标工况与固定验证指标为准。
ADM2 则需先核对 target、drivers,再比较 max_adm_step、n_starts 和网络容量。增加预测步长或候选初始化会增加开销,应记录实际收益。
改善控制效果
先核对奖励是否表达了正确的业务方向、量纲与动作代价,再检查模型可用的推演范围。将策略与相同工况下的现有控制器、历史操作以及 Policy BC 比较;Policy BC 自身有拟合误差,不能直接等同于原始操作。
PPO:控制行为偏移与更新强度
参数位于 PPO 阶段的 hyperparameters 下。
| 现象 | 优先检查或调整 | 需要比较的结果 |
|---|---|---|
| 模型内奖励升高,动作离开已有覆盖区域 | 缩短 rollout_horizon,比较较大的 bpc_weight | 动作分布、推演误差与业务指标 |
| 训练后期剧烈波动 | 降低 optimizer.lr,检查 epsilon 与梯度裁剪 | KL、clip fraction、数值异常及选中模型 |
| 同一批数据更新过强 | 减少 ppo_runs,核对 ppo_batch_num、ppo_batch_size | 更新幅度与验证回报 |
| 不同种子差异较大 | 增加 num_rollout_trajs 并用固定种子组比较 | 平均表现、波动与开销 |
bpc_weight > 0 时行为约束生效,PPO 支持 bc、wpc;kl 不可作为启用的 bpc_type。约束过强可能压缩可改善空间,过弱可能让策略进入模型不准的区域。奖励尺度改变时,价值损失与正则项的相对权重也会改变,应作为一组设置记录。
SAC:平衡采样与价值更新
SAC 使用 rollout_length 设置采样长度。Q 值快速放大或出现非有限数值时,先检查奖励尺度,再比较较短推演、较小 critic_lr 或更少的 updates_per_step。将采样量、回放数据量与更新次数分别记录。
auto_alpha: true 自动调节探索强度。行为约束支持 none 与 bc,bpc_weight > 0 时应选择支持的类型。世界模型内得分提高但动作覆盖变差时,联合检查 bpc_weight、w_kl、推演长度和模型误差;不要仅凭算法名称推断稳定性。
用动力学扰动检查策略适应性
实际响应有小幅变化、希望策略训练覆盖相邻状态时,可以为 PPO/SAC 配置 dynamics_noise。例如三维状态中的第三列为角速度,可先比较小幅角速度扰动的影响:
# 策略阶段的 hyperparameters 片段
# states 对应三列 [cos_theta, sin_theta, theta_dot]
dynamics_noise:
enabled: true
keys:
states: [0.0, 0.0, 0.02]keys 填原始转移状态名,列表是各列在原始单位下的高斯标准差;长度与原始列数一致,值有限且非负。非连续列只能填 0。示例不独立扰动 sin/cos,避免破坏角度表示;守恒量等耦合变量也需按机理处理。
该设置默认 null,与世界模型训练的 sequence_train.state_noise 独立。策略训练期间环境权重保持冻结;raw-delta 图在增量合成下一状态前注入,direct-next 图在下一状态被下游使用前注入,奖励与终止判断使用同一步一致的节点值。SAC 的 rollout_clip 也约束扰动后的值,可能减小实际扰动幅度。
验证和正式推理关闭该训练扰动;训练随机性沿用 seed 与 checkpoint 的随机状态。标准差全部为 0 时不消耗额外随机数。比较时保留相同评估条件,以控制效果和约束表现判断是否保留。
整定控制器
| 控制器 | 先固定的业务条件 | 调整顺序 |
|---|---|---|
| MPC | 动作范围、可获得的未来输入、控制周期 | 先确定规划长度,再比较候选数、迭代数和 warm_start |
| FFPID | 误差方向、增益单位、采样周期、执行器能力 | 比例、积分、必要的微分与前馈;同时检验饱和恢复 |
| Residual PID | 基线控制器、修正幅度、变化率和积分限制 | 在工艺允许范围内搜索增益,检查持续饱和和响应迟缓 |
FFPID 的积分可减少稳态偏差,也可能增加超调;微分可能放大噪声,可结合 derivative_filter_tau 比较。Residual PID 的修正范围应按动作单位填写,不能直接沿用其他设备的数值。搜索最优点落在候选范围边缘时,先检查响应和工艺限制,再决定是否扩大范围。
控制限制与预测可靠性需要分别检查。需要识别不可靠工况时,接入不确定性评估并检查校准、误报与漏报。带历史、积分或隐藏状态的模型还需为每台设备维护独立会话,部署时正确 reset 和预热,见有状态推理。
平衡效果与计算开销
区分不同窗口与推演长度
先把业务时间换算为采样步数。例如每 5 分钟采样、输送滞后约 30 分钟,可以将 6 步作为历史长度的一个候选,再按误差曲线确认。
| 用途 | 配置位置 | 增大后主要影响 |
|---|---|---|
| 历史输入 | graph.nodes 中 inputs 的历史表达式 | 输入信息、维度和部署预热 |
| BC 序列训练 | hyperparameters.sequence_train.horizon | 多步损失与训练内存;REVIVE-P 位于 bc 下 |
| PPO 训练采样 | hyperparameters.rollout_horizon | 采样范围及模型误差累积 |
| SAC 训练采样 | hyperparameters.rollout_length | 采样范围与价值学习 |
| 验证推演 | validation.rollout.horizon | 评价覆盖时间与选模规则 |
| MPC 在线规划 | hyperparameters.horizon | 提前规划能力与推理延迟 |
各长度用途不同,不需要填写成同一个数值。验证应覆盖计划采用的时间范围;策略采样和规划长度还要结合模型误差。
从任务目录测量已有世界模型的误差随步数变化:
revive suggest-rollout --config config.yaml --data train.npz --model logs/baseline/models/env.pt结果对应当前数据和指标覆盖的区域。策略探索到的其他区域仍需验证,测量命令不会自动修改配置。
找出实际耗时来源
训练侧先区分数据读取、模型更新、验证和绘图耗时,再调整批量、读取进程、验证间隔或绘图频率。验证缓存设置见评估与选择模型。
MPC 的计算量随 horizon × num_samples × num_iterations 增加,但实际延迟还受批处理与硬件影响,应在部署设备上测量。训练加速后按相同更新次数比较结果,避免把多训练了若干轮误判为参数本身的改善。
比较实验结果
固定条件后再训练
保持数据划分、单位、奖励、选模指标、评估长度和计算预算一致。每个候选使用新的 run ID,修改超参数后重新训练;--resume 用于恢复同一次训练,--force 用于显式覆盖冲突记录。
revive validate --config candidate.yaml --train-data train.npz --val-data val.npz --show-defaults
revive train --config candidate.yaml --train-data train.npz --val-data val.npz --run-id candidate-001 --log-dir logs用 --show-defaults 与 config.resolved.yaml 确认修改生效,再比较选中模型,避免只比较最后一轮损失。历史窗口、评价定义和图结构变化会影响模型或续训兼容性,应建立新运行。
记录改动与结果
| 项目 | 建议记录 |
|---|---|
| 目标 | 哪个业务现象需要改善,例如温度回落阶段偏差大 |
| 改动 | 参数完整路径、原值、新值及理由 |
| 固定条件 | 数据、划分、种子、评价定义与训练预算 |
| 结果 | 选中模型、关键误差或回报、约束表现、耗时 |
| 决策 | 保留或撤回改动,以及还需要补充的证据 |
默认值用于起步,案例参数对应其数据与目标,新试验值需要通过对照验证。使用同一组随机种子重复比较,可以判断差异是否稳定;最终测试集留到方案确定后使用。
明确参数范围后,可用自动搜索参数批量执行候选。若多种设置都无法改善同一工况,应回到业务变量与数据,检查是否缺少必要信息。