Lesson 03 · 做梦
想象 rollout + Actor-Critic:为什么"做梦"能学到策略
世界模型只是"规则"。这一课讲 DreamerV3 怎么靠规则在脑中下无数盘棋、练出策略。
第 2 课的 RSSM 学会了"楼的热动力学"。但学会规则只是第一步——就像你背会了象棋规则,不等于会下棋。这一课讲 DreamerV3 的真正妙处:它用世界模型在脑中"做梦",在梦里下成千上万盘棋来练策略,几乎不碰真实的 EnergyPlus。这就是它比 PPO/SAC 省样本的根本原因,也是方案超参表里那个 imag_horizon(想象步数)在控制的东西。
核心机制:想象 rollout(在脑中前推 N 步)
想象 rollout(imagination rollout)就是让世界模型不碰真环境、纯靠想象往前推演。逻辑极简:
手里有一个起点状态 s_t(来自真实经验)。然后纯靠世界模型推演:
s_t ──动作a_t──▶[世界模型]──▶ s_{t+1}, r_{t+1} ← 第 1 步,纯想象
──动作a_{t+1}──▶[世界模型]──▶ s_{t+2}, r_{t+2} ← 第 2 步
──动作a_{t+2}──▶[世界模型]──▶ s_{t+3}, r_{t+3} ← 第 3 步
── ...... ──▶ s_{t+N}, r_{t+N} ← 推 N 步
这条 s_t → s_{t+1} → ... → s_{t+N} 就是"一条想象轨迹"。
N 就是方案超参表里的 imag_horizon(HVAC 推荐值 20)。
为什么这能省样本
对比一下就懂了。这里的关键是:想象轨迹几乎不要钱——它只是神经网络做几次前向计算,而真实走一步要让 EnergyPlus 算半天热平衡。
| 无模型 RL(PPO/SAC) | DreamerV3 | |
|---|---|---|
| 策略从哪学 | 真实环境里的每一步经验 | 想象轨迹里的大量经验 |
| 一条训练数据成本 | 贵:= 一次 EnergyPlus 仿真步 | 便宜:= 一次神经网络前向 |
| 需要的真实步数 | 几百万步 | 少得多(DreamerV3 的核心卖点) |
打个比方:PPO/SAC 是"每学一个教训都得真去撞一次墙",DreamerV3 是"真撞过几次墙之后,在脑子里模拟撞一万次墙来总结教训"。HVAC 仿真一步很慢(方案风险 T6),所以这个差距对我们是能不能训得动的生死线。
在想象轨迹上训练策略:Actor-Critic
有了大量想象轨迹,接下来就是在上面"练棋"。DreamerV3 用的是 Actor-Critic(演员-评论家),两个角色分工明确:
演员出招,评论家打分
Actor(演员 = 策略):给一个状态,输出控制动作(冷机功率、水泵频率……)。它就是我们要最终部署的那个"大脑"。
Critic(评论家 = 价值函数):给一个状态,估"从这个状态出发,按当前策略走,未来累计能拿多少奖励"。它不输出动作,只给 Actor 打分、指方向。
训练时,Actor 试着在想象轨迹上出招,Critic 评价"这步走得好不好",Actor 据此调整。整个过程都在世界模型里,不碰真环境。
对应到方案 [§6.2.4] 的映射表:Actor = 控制策略(输出冷机功率/水泵频率/AHU 风量),Critic = 价值评估(估当前策略的长期累积奖励)。第 5 课你会看到,推理时只用到 Actor——Critic 是训练时的"陪练",部署后不需要它。
把三步串起来:DreamerV3 的完整训练循环
┌─── ① 少量真实交互(在 EnergyPlus 里)────────────────┐
│ 智能体走几步,收集 (状态,动作,奖励,下状态) 存进回放缓冲 │
└──────────────────────────┬─────────────────────────────┘
▼
┌─── ② 训练世界模型(RSSM)──────────────────────────────┐
│ 用回放缓冲里的数据,更新 ②③④(编码/转移/解码/奖励头) │
│ (第 2 课) │
└──────────────────────────┬─────────────────────────────┘
▼
┌─── ③ 想象 rollout + Actor-Critic(本课)───────────────┐
│ 用刚训好的世界模型,从真实状态出发想象 N 步轨迹 │
│ 在想象轨迹上训练 Actor(策略)和 Critic(价值) │
│ (几乎不碰真环境 ← 省样本的秘密) │
└──────────────────────────┬─────────────────────────────┘
▼
Actor 进步了一点 ──▶ 回到 ① 用更好的策略再走几步
(如此循环,直到收敛)
这三步循环,对应方案代码骨架里 dreamer.py 训练循环的主体([§2.1.4])。看懂这个循环,你就看懂了 DreamerV3 的全部"精神"——剩下都是工程细节。
方案超参表里的 imag_horizon,到底在控什么
方案 [§2.1.5] 把 imag_horizon 从默认 15 调成 HVAC 推荐 20。现在你能看懂这个改动了:
| imag_horizon | 含义 | 影响 |
|---|---|---|
| 太小(如 5) | 每次只想象 5 步未来 | 短视:学不到"现在多制冷压住 2 小时后峰值"这类前瞻策略 |
| 方案选 20 | 每次想象 20 步未来 | 够覆盖 HVAC 的热惯性周期(方案说"热惯性大,延长想象步数") |
| 太大(如 100) | 每次想象 100 步未来 | 世界模型越往后推越不准(误差累积),想象轨迹尾部是噪声 |
这是一个典型权衡:想象步数 = 能前瞻多远 vs 模型预测有多准。HVAC 热惯性大,需要看得远一点,所以从 15 提到 20;但也不能太长,否则后半段想象就是瞎猜。同理,方案把 discount 从 0.997 微调到 0.99("更关注近期奖励,能耗即时性")——也是为了匹配 HVAC"即时能耗重要"的特点。
DreamerV3 用世界模型在脑中想象 rollout(前推 N 步,纯靠先验、不碰真环境),在想象轨迹上用 Actor-Critic 训练策略(Actor 出招、Critic 打分)。因为想象轨迹几乎不要钱,所以真实环境只要走很少几步——这是它省样本、能配 HVAC 慢仿真的根本原因。imag_horizon 控的是"前瞻多远",方案为 HVAC 的热惯性调到 20。
DreamerV3 训练 Actor-Critic 时,那些训练数据(想象轨迹)主要来自?
卡住了就问我:"想象 rollout 越往后越不准"如果让你疑惑,可以问我"那世界模型为什么不训练得更准",我会解释这是模型容量与误差累积的固有问题——也是方案 §4 安全门控存在的根本理由(用真实约束兜底模型的预测偏差)。