Lesson 02 · 发动机
世界模型(RSSM):把一栋楼"压缩"进潜在状态
第 1 课说 DreamerV3 "先学一个世界模型"。这一课拆开它——到底学的是什么。
第 1 课把 DreamerV3 的核心概括成"先学规则,再在脑中下棋"。这一课讲的就是那个"规则"——世界模型。它的学名叫 RSSM(Recurrent State-Space Model,循环状态空间模型)。方案 [§6.2.4] 那张"DreamerV3 组件 → HVAC 对应"的映射表,左边四行全是它。看懂 RSSM,你就拿到了读懂整篇方案的钥匙。
世界模型到底"学"什么
一句话:学一个函数,能在脑中预测"楼"的下一步。给它当前的楼状态 + 你要做的控制动作,它告诉你下一刻楼会变成什么样、会耗多少能。
真实的楼(或 EnergyPlus 仿真)每次都算很慢:
室温 25°C ──把冷机调到 60%──▶ [物理引擎算半天] ──▶ 室温 24.3°C,耗电 8kW
世界模型学到的,是一个"快得多"的替身:
室温 25°C ──把冷机调到 60%──▶ [世界模型一眨眼] ──▶ 室温 24.3°C,耗电 8kW(预测值)
注意:世界模型不需要知道物理方程(这是它和白箱 MPC 的本质区别)。它是纯数据驱动的——从我们收集的真实/仿真数据里,直接学出"状态怎么演化"。这正是调研报告 [§3.3.3] 说的"不需要白箱物理方程,适合 SaaS 平台快速复制到不同建筑"。
RSSM:四个零件
但"学一个预测函数"有工程难点:HVAC 状态是一大堆数(几十个传感器读数),直接在这些原始数字上建模又慢又难。DreamerV3 的办法是先把它"压缩"成一个紧凑的潜在状态,再在潜在状态上做预测。这套机制就是 RSSM,它有四个零件:
┌─────────────────────────────────┐
传感器观测 o_t │ RSSM 世界模型 │
(室温/水温/CO₂/...) ──▶│ │
│ ① 编码器 o_t ──▶ 潜在状态 s_t │
│ (几十维,紧凑) │
│ ┌──────────┴──────────┐ │
│ ▼ ▼ │
│ ② 转移模型(先验) ③ 解码器 │
│ "给 s_t 和动作 a_t, 从 s_t │
│ 下一状态 s_{t+1}" 还原回 o_t │
│ │ │ │
│ ▼ │
│ 潜在状态 s_{t+1} │
│ │ │
│ ▼ │
│ ④ 奖励头:从 s_t 预测奖励 r_t │
└─────────────────────────────────┘
| 零件 | 学名 | 干嘛的 | HVAC 含义 |
|---|---|---|---|
| ① 编码器 | Encoder | 把一堆传感器读数压缩成几十维的潜在状态 | 把室温/水温/CO₂/室外温…… 压成一个紧凑向量 |
| ② 转移模型 | Transition / 先验 | 预测:给当前状态 + 动作,下一步状态是什么 | 建筑热动力学(室温怎么随控制变化) |
| ③ 解码器 | Decoder | 从潜在状态还原回原始观测(自监督约束) | 确保压缩没丢物理信息 |
| ④ 奖励头 | Reward head | 从状态预测奖励(能耗 + 舒适度) | 预测这步会耗多少电、舒不舒适 |
为什么要有"编码 + 解码"这一进一出
这是新人最容易卡的一点:既然目标是预测下一步,为什么要先把观测压成潜在状态、又费劲地还原回去?
压缩是为了抓住"要点",过滤掉噪声
原始传感器读数里有大量冗余(同一房间的两个温度计读数几乎一样、室外温和湿度高度相关)。编码器把它们压成一个紧凑的潜在状态,相当于"提炼要点"。在要点上做预测,比在一堆噪声数字上做预测,又快又准。
解码器(把潜在状态还原回原始观测)是一个"考试"——它逼着编码器不能偷懒:如果你压缩出来的潜在状态还原不出原始读数,说明你把信息丢了,得回炉重炼。这一进一出是个自监督约束,保证潜在状态"信息够用"。
"先验"和"后验":做梦时和醒来时
RSSM 里"转移模型"常被叫成先验,它还有一个搭档叫后验。这一对名字看着吓人,其实是两个使用时机:
| 先验(transition) | 后验(posterior) | |
|---|---|---|
| 什么时候用 | 做梦时(想象未来,没有新观测) | 醒来时(真有新传感器读数进来) |
| 凭谁预测下一状态 | 只凭当前状态 + 动作 | 凭当前状态 + 动作 + 新观测(用观测修正) |
| HVAC 类比 | "我猜开大冷机后室温会降 0.7°C" | "温度计说实际降了 0.8°C,那我修正一下对楼的理解" |
关键认识:想象 rollout(第 3 课)时没有新观测,所以只能用先验一步步往前推;真实交互时每步都有新读数,所以用后验来"对齐现实"。训练时让两者尽量一致(KL 散度约束),这样模型"做梦"和"现实"才不会脱节——这正是后面安全门控要监控"预测误差"的原因(方案 [§4.3])。
训练它需要什么数据
世界模型是从数据里学出来的,所以方案 §3 花了整章讲数据采集。对 RSSM,它需要的就是最朴素的转移数据——一段段时间序列:
从 TimescaleDB 抽出的、按时间排好的状态序列(方案 §2.4): 时刻 t: 室温25 水温7 CO₂600 室外32 ──动作: 冷机60%──▶ 时刻 t+1: 室温24.3 水温6.8 CO₂580 室外32 ──动作: 冷机65%──▶ 时刻 t+2: 室温23.5 水温6.6 CO₂560 室外31 ──动作: ... ──▶ ... RSSM 从这种序列里学会:"给我 (状态, 动作),下一步状态大概是啥"
方案把它存成 HDF5 格式([§2.4.3]),因为 DreamerV3 的数据加载器原生吃这个格式。这也是方案 §6 阶段 1 要花 6 周搞数据 ETL + 质量处理的原因——世界模型再聪明,数据脏了它就学歪(方案风险 T3)。
DreamerV3 的"世界模型"学名叫 RSSM,它把一栋楼压缩成紧凑的潜在状态,再学会"给状态+动作,预测下一步状态 + 奖励"。它有四个零件:编码器(压缩)、转移模型/先验(做梦时预测)、解码器(还原,约束不丢信息)、奖励头(预测能耗舒适度)。它纯数据驱动、不靠物理方程,所以能从 TimescaleDB 的历史时序数据里直接学出来。
RSSM 里"解码器"(把潜在状态还原回原始观测)的主要作用是?
卡住了就问我:"先验/后验"如果让你绕晕,正常——它俩的差别只在"有没有新观测"。可以问我"训练时到底是先用哪个、再用哪个",我会用第 3 课的想象 rollout 流程把这条线串给你。