STORM: Transformer-based World Model for Planning

一句话定位

STORM是一种基于Transformer的世界模型,利用自注意力机制进行时序建模和规划,在高维观察空间中实现高效的世界模型学习和多步规划能力。

前置依赖

  • World Models (2019): Haarnoja et al. 的VAE + MDN-RNN分离式世界模型
  • Dreamer (2020): RSSM架构下的世界模型学习
  • MuZero (2020): 隐式世界模型 + MCTS规划
  • Transformer (2017): Vaswani et al. 的自注意力机制
  • Decision Transformer (2021): 将Transformer应用于序列决策
  • RSSM (Recurrent State Space Model): Dreamer中的循环状态空间模型

核心思想

STORM的核心洞察是:Transformer的自注意力机制天然适合建模长程依赖和复杂的状态交互

传统RSSM-based世界模型的局限:

  1. RNN的局部性: LSTM/GRU的隐藏状态是压缩的全局向量,长程依赖建模困难
  2. 固定容量: RNN隐藏维度固定,无法根据任务动态调整
  3. 顺序处理: 无法并行化时序模拟

STORM使用Transformer替代RNN作为世界模型核心:

  • 并行时序模拟: 一次前向计算H步想象轨迹
  • 自适应感受野: 注意力机制自动关注相关状态
  • 长程建模能力: 适合长视界规划任务

模型结构图

                    ┌─────────────────────────────────────────────────────┐
                    │                    STORM 整体架构                      │
                    └─────────────────────────────────────────────────────┘

输入观察序列:
o_0, o_1, o_2, ..., o_t
    │   │   │       │
    ▼   ▼   ▼       ▼
┌───────────────────────────────────────────────────────────────────────┐
│                     编码器 (Encoder) f                                  │
│  将每个观察编码为潜在状态 z_t = f(o_t)                                  │
└───────────────────────────────────────────────────────────────────────┘
    │
    ▼
┌───────────────────────────────────────────────────────────────────────┐
│              Transformer世界模型 g (核心创新)                            │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐    │
│  │                    Transformer Block                         │    │
│  │  LayerNorm ──▶ Multi-Head Self-Attention ──▶ MLP            │    │
│  └─────────────────────────────────────────────────────────────┘    │
│                                                                     │
│  输入: [z_t, a_{t-1}, r_{t-1}, h_{t-1}]                              │
│  输出: 下一状态预测和奖励预测                                          │
│                                                                     │
│  (使用GPT风格的causal attention, 只Attend到过去状态)                 │
└───────────────────────────────────────────────────────────────────────┘
    │
    ▼
┌───────────────────────────────────────────────────────────────────────┐
│                      预测头 (Prediction Heads)                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐               │
│  │ 策略头 π     │  │ 价值头 V     │  │ 奖励头 h     │               │
│  │ π(a_t|z_t)  │  │ V(z_t)      │  │ r(z_t,a_t)  │               │
│  └──────────────┘  └──────────────┘  └──────────────┘               │
└───────────────────────────────────────────────────────────────────────┘

STORM的Transformer架构详解

时间步:     t=0        t=1        t=2        ...       t=H
            │          │          │                   │
            ▼          ▼          ▼                   ▼
         ┌─────┐    ┌─────┐    ┌─────┐            ┌─────┐
         │ z_0 │    │ z_1 │    │ z_2 │   ...       │ z_H │
         └─────┘    └─────┘    └─────┘            └─────┘
            │          │          │                   │
            ▼          ▼          ▼                   │
         ┌─────┐    ┌─────┐    ┌─────┐               │
         │ a_0 │    │ a_1 │    │ a_2 │               │
         └─────┘    └─────┘    └─────┘               │
            │          │          │                   │
            ▼          ▼          ▼                   │
         ┌─────┐    ┌─────┐    ┌─────┐               │
         │ r_0 │    │ r_1 │    │ r_2 │               │
         └─────┘    └─────┘    └─────┘               │
            │          │          │                   │
            ▼          ▼          ▼                   ▼
    ══════════════════════════════════════════════════════════════
    ║                    Transformer Block (causal)               ║
    ║                                                             ║
    ║   Cross-Attention: Query=z_t, Key/Value=[z_{<t}, a_{<t}]  ║
    ║                                                             ║
    ══════════════════════════════════════════════════════════════
            │          │          │                   │
            ▼          ▼          ▼                   ▼
         ┌─────┐    ┌─────┐    ┌─────┐            ┌─────┐
         │ z_1'│    │ z_2'│    │ z_3'│   ...      │ V_H │ (价值)
         │ r_0 │    │ r_1 │    │ r_2 │            └─────┘
         └─────┘    └─────┘    └─────┘

数学推导

1. 编码器

编码器 将观察编码为潜在状态:

STORM使用轻量级CNN编码器(区别于MuZero的深度ResNet):

2. Transformer世界模型

设世界模型 为多层Transformer,输入序列:

输出:

2.1 自注意力机制

对输入序列中的位置 ,计算:

其中 , ,

2.2 因果注意力(Causal Attention)

为确保只使用过去信息构建未来:

这确保 只Attend到

2.3 多头注意力

通常 个头,

3. 状态转移建模

STORM使用Transformer建模完整的状态-动作-奖励序列:

关键优势:

  • 任意时间步的状态可以通过Attention直接获取,无需RNN的隐藏传播
  • 支持跳跃连接: 直接从 建立依赖关系( 可以很大)

4. 规划与想象轨迹

STORM的规划通过并行想象轨迹实现:

给定初始状态 z_0:

# 并行生成H步想象
Z = [z_0]  # 状态序列
A = []     # 动作序列
R = []     # 奖励序列

for h in range(H):
    # 使用Transformer预测下一状态和奖励
    (z_pred, r_pred) = transformer(Z, A, R)
    
    # 采样动作
    a_h = policy_head(z_pred)
    
    Z.append(z_pred)
    A.append(a_h)
    R.append(r_pred)

# 计算累积回报
G = Σ γ^i R[i] + γ^H V(Z[H])

5. 与RSSM的比较

RSSM使用RNN进行状态转移:

STORM使用Transformer:

关键差异:

特性RSSM (Dreamer)STORM
状态传递隐藏向量 完整序列
依赖建模局部(RNN hidden)全局(Attention)
并行性顺序完全并行
容量固定动态(序列长度×维度)
长程依赖困难自适应

6. 训练目标

STORM的联合训练目标:

6.1 价值损失

其中 是n步回报估计。

6.2 策略损失

使用策略梯度估计

6.3 奖励损失

6.4 动力学重建损失

7. Transformer与规划的数学洞见

Transformer的核心优势可以从数学上解释:

设序列长度 ,隐藏维度

RNN的表示容量: — 所有历史压缩到固定维度向量

Transformer的表示容量: — 完整历史作为键值对存储

这意味着:

  1. 长视界任务: Transformer可以精确保持长期记忆
  2. 跳步依赖: 允许 直接依赖 ,不经过中间传播
  3. 条件生成: 给定任意状态子集,可以精确推断其他状态

推理过程

Planning循环

def plan_with_storm(model, z_init, horizon=20, num_actions=1):
    """
    STORM的规划过程
    model: STORM Transformer世界模型
    z_init: 初始编码状态
    horizon: 想象视界
    """
    # 初始化序列
    Z = [z_init]  # 状态序列
    A = []        # 动作序列  
    R = []        # 奖励序列
    
    for h in range(horizon):
        # 使用因果Transformer预测
        # 输入: [z_0, a_0, r_0, z_1, a_1, r_1, ..., z_h]
        context = build_sequence(Z, A, R)
        
        # Transformer前向
        z_pred, r_pred = model(context)
        
        # 策略头采样动作
        a = model.policy_head(z_pred)
        
        # 追加到序列
        Z.append(z_pred)
        A.append(a)
        R.append(r_pred)
    
    # 返回第一个动作
    return A[0]

树搜索变体

STORM也可以结合树搜索:

  1. 从根节点 开始
  2. 使用Transformer估计先验
  3. 对每个动作,Transformer计算
  4. 评估 作为backup值
  5. UCB选择下一动作

优点与局限

优点

  1. 长程建模能力强: 自注意力直接建模任意时间步依赖
  2. 并行计算效率高: Transformer可并行处理整个序列
  3. 表示容量大: vs RNN的
  4. 可解释性强: Attention weights显示状态间相关性
  5. 迁移学习友好: 预训练的GPT/PViT可直接使用
  6. 条件生成: 可在任意历史节点注入观测

局限

  1. 计算复杂度高: Self-Attention是
  2. 内存随序列增长: 长视界规划需要大量内存
  3. 位置编码问题: 时序位置需要精心设计
  4. 训练不稳定: 大型Transformer训练需要高级优化技巧
  5. 局部交互建模弱: 可能过度关注全局而忽略局部结构

与前后内容的衔接

前置依赖

STORM继承了多代世界模型的发展:

  • World Models: 分离式世界模型架构(encoder/dynamics/reward)
  • Dreamer RSSM: 状态空间模型的建模思想
  • MuZero: 隐式世界模型+规划框架
  • Decision Transformer: 将Transformer引入序列决策

后置发展

STORM的思想影响了后续工作:

  • TransDreamer (2022): 在Dreamer架构中用Transformer替代RNN
  • Video Transformer World Models (2024): 处理视频输入的Transformer世界模型
  • Genie (2024): 基于Transformer的通用世界模型

可复现实现要点

核心Transformer实现

class TransformerWorldModel(nn.Module):
    def __init__(self, latent_dim, action_dim, d_model=256, nhead=8, n_layers=4):
        super().__init__()
        self.d_model = d_model
        
        # 嵌入层
        self.state_embed = nn.Linear(latent_dim, d_model)
        self.action_embed = nn.Linear(action_dim, d_model)
        self.reward_embed = nn.Linear(1, d_model)
        
        # Transformer
        encoder_layer = nn.TransformerEncoderLayer(
            d_model=d_model, 
            nhead=nhead, 
            dim_feedforward=4*d_model,
            dropout=0.1
        )
        self.transformer = nn.TransformerEncoder(encoder_layer, num_layers=n_layers)
        
        # 预测头
        self.state_head = nn.Linear(d_model, latent_dim)
        self.reward_head = nn.Linear(d_model, 1)
        self.policy_head = nn.Linear(d_model, action_dim)
        self.value_head = nn.Linear(d_model, 1)
    
    def forward(self, states, actions, rewards):
        # states: [B, L, D]
        # actions: [B, L, A]
        # rewards: [B, L, 1]
        
        # 嵌入
        s_emb = self.state_embed(states)
        a_emb = self.action_embed(actions)
        r_emb = self.reward_embed(rewards)
        
        # 组合输入 (causal mask自动应用)
        x = s_emb + a_emb + r_emb
        
        # Transformer前向
        h = self.transformer(x)
        
        # 预测下一步
        z_next = self.state_head(h[:, :-1])  # 预测状态
        r_pred = self.reward_head(h[:, :-1]) # 预测奖励
        pi = self.policy_head(h[:, -1:])     # 策略(最后位置)
        V = self.value_head(h[:, -1:])        # 价值(最后位置)
        
        return z_next, r_pred, pi, V

Causal Mask实现

def create_causal_mask(seq_len, device):
    """创建因果掩码,确保只Attend到过去"""
    mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1)
    mask = mask.masked_fill(mask == 1, float('-inf'))
    return mask.to(device)

Planning实现

def storm_plan(model, z_init, horizon=20):
    """STORM的多步规划"""
    B = z_init.size(0)
    
    # 初始化序列
    states = [z_init]
    actions = []
    rewards = []
    
    for h in range(horizon):
        # 打包序列
        seq_len = len(states)
        state_seq = torch.stack(states, dim=1)  # [B, H, D]
        action_seq = torch.stack(actions, dim=1) if actions else torch.zeros(B, 0, model.action_dim)
        reward_seq = torch.stack(rewards, dim=1) if rewards else torch.zeros(B, 0, 1)
        
        # 获取下一步预测
        with torch.no_grad():
            _, r_pred, a_pred, V_pred = model(state_seq, action_seq, reward_seq)
        
        actions.append(a_pred[:, -1])
        rewards.append(r_pred[:, -1])
        
        # 使用dynamics预测下一状态
        z_next = model.state_predict(states[-1], actions[-1])
        states.append(z_next)
    
    return actions[0]  # 返回第一个动作

章节摘要

STORM是将Transformer引入世界模型学习的重要尝试,核心创新在于用自注意力替代RNN进行状态转移建模。相比Dreamer的RSSM,STORM具有更强的长程建模能力和并行计算优势;相比MuZero的MCTS,STORM的想象轨迹更加高效且可并行生成。Transformer的全局感受野使其在需要长期记忆的任务中表现出色,但也带来了 的计算和内存开销。STORM展示了世界模型架构演进的一个重要方向。

关键词

  • STORM, Transformer世界模型, 自注意力, 时序建模
  • 因果注意力, 并行想象轨迹, 规划
  • RSSM对比, 长程依赖, 状态空间模型