Recurrent World Models
一句话定位
Recurrent World Models 是 World Models 的扩展版本,通过引入额外的循环架构改进动态建模质量,并优化了训练流程以支持更长的序列预测。
前置依赖
- World Models (Ha & Schmidhuber 2018):MDN-RNN 架构的基础
- RNN/LSTM 基础:循环神经网络的基本原理
- Sequence-to-Sequence 模型:编码器-解码器架构
核心思想
Recurrent World Models 的核心改进在于使用更强大的循环架构来处理世界动态建模。具体而言:
- 增强的循环架构:在原有 MDN-RNN 的基础上增加层归一化、残差连接等技术,改善梯度流动
- 改进的训练流程:引入 teacher forcing 和自由运行(free-running)相结合的策略
- 更精确的潜在变量建模:改进了 MDN 层的参数化方式
数学推导
增强的 RNN 动态模型
给定历史信息
预测分布:
训练目标
整体训练目标结合了重建损失和动态预测损失:
其中
训练细节
训练策略
Teacher Forcing + Free-Running 混合训练:
- Teacher Forcing 阶段:训练时使用真实的上一步输出作为下一步输入,加速收敛
- Free-Running 阶段:使用模型自己的预测作为下一步输入,训练模型从错误中恢复
模型架构
增强的 MDN-RNN 配置:
- 层归一化(Layer Normalization):应用于 RNN 的输入和输出
- 残差连接(Residual Connections):帮助深层网络的梯度流动
- Dropout:防止过拟合
架构图
┌─────────────────────────────────────────────────────────────────┐
│ Recurrent World Model 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入层 │
│ ┌─────────────────────────────────────┐ │
│ │ [z_t, a_t] ──▶ LayerNorm ──▶ RNN │ │
│ └─────────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ h_t │ │ h_{t+1} │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ MDN │ │ 预测 z_{t+1} │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
推理 / Rollout 过程
Latent Space Rollout
- 初始观察
通过 VAE 编码为 - 初始化
或学习到的初始状态 - 每个时间步:
- 控制器输出
- MDN-RNN 采样预测
- 更新隐藏状态
- 控制器输出
长序列稳定性
Recurrent World Models 改进了长序列预测的稳定性:
- 层归一化减少了内部协变量偏移
- 残差连接缓解了梯度消失问题
- 混合训练策略让模型学会从错误中恢复
优点与局限
优点
- 更好的梯度流动:层归一化和残差连接改善了深层 RNN 的训练
- 更长的记忆:改进了对长期依赖的建模能力
- 更稳定的 rollout:模型在长序列预测中更难出现坍缩
局限
- 仍然依赖 MDN 进行多模态建模,表达能力有限
- 缺乏对不确定性的显式处理(没有 variational inference)
- 控制器仍然使用 CMA-ES,难以扩展到高维动作空间
与前后内容的衔接
- 前承:World Models 的基本框架
- 后续:SimPLe 引入 variational approach 来处理 uncertainty
- 相关:Dreamer 系列的 RSSM 模型继承了循环架构的思想并加入 variational
可复现实现要点
PyTorch 伪代码
class RecurrentWorldModel(nn.Module):
def __init__(self, latent_dim, action_dim, hidden_dim=512, n_layers=2):
self.encoder = VAE_Encoder(latent_dim)
self.decoder = VAE_Decoder(latent_dim)
# 增强的 RNN
self.rnn = nn.LSTM(
latent_dim + action_dim,
hidden_dim,
num_layers=n_layers,
batch_first=True
)
self.layer_norm = nn.LayerNorm(hidden_dim)
self.mdn = nn.Linear(hidden_dim, n_mix * (2 * latent_dim + n_mix + 1))
def forward(self, z, a, h=None):
# Layer norm before RNN
x = torch.cat([z, a], dim=-1)
x = self.layer_norm(x)
if h is None:
out, h_next = self.rnn(x)
else:
out, h_next = self.rnn(x, h)
out = self.layer_norm(out)
return self.mdn(out), h_next训练流程
- 预训练 VAE(重建 + KL)
- 生成 latent 轨迹
- 使用 teacher forcing 预训练 RNN
- 切换到 free-running 微调
- CMA-ES 优化控制器
章节摘要
Recurrent World Models 是对原始 World Models 的改进版本,通过增强的循环架构(层归一化、残差连接)改善了动态建模质量和长序列预测的稳定性。虽然仍使用 MDN 而非 variational 方法,但其架构改进为后续 Dreamer 系列等更先进的工作奠定了基础。
关键词
- Recurrent World Models
- Layer Normalization
- Residual Connections
- Teacher Forcing
- Free-Running
- Mixture Density Network
- Latent Space Dynamics