导读

论文标题:MOCODA: Model-based Counterfactual Data Augmentation(NeurIPS 2022)
项目主页:https://sites.google.com/view/mocoda-neurips-22/
代码仓库:https://github.com/spitis/mocoda

面向离线强化学习(Offline RL)、多物体复杂环境的基于局部因果动力学模型的反事实数据增强框架,解决离线场景下分布外(OOD)泛化失效的核心痛点。

提供三种可调增强分布(MOCODA / MOCODA-U / MOCODA-P),可根据目标任务定向生成任务相关 OOD 样本,大幅提升训练效率。

在导航、机器人抓取两大连续控制任务证明:标准离线 RL 算法在原生数据集完全失败,搭配 MOCODA 后可实现零样本 OOD 任务求解。

背景动机

环境状态空间随物体数量指数增长,传统 RL 需要海量样本才能覆盖全部状态,样本效率极低。离线算法只能使用固定历史数据集,无法在线探索;标准离线约束(BCQ/CQL/TD3-BC)会强制策略局限于训练数据分布,面对训练中从未出现的物体组合、状态时完全失效。

普通数据增强使用随机扰动、领域随机化容易生成违背物理 / 因果规则的非法转移,误导策略学习;传统模型生成(Dyna)仅能在原始分布局部滚动,无法生成远距离 OOD 样本。

CoDA(无模型反事实增强)仅支持完全不重叠的因果父集,无法处理变量依赖交叉的真实环境;纯数据拼接生成样本,无法自主控制增强分布;不能生成原始数据完全不存在的全新状态组合,零样本泛化能力弱。

CoDA 是纯数据驱动的无模型方法,核心是 拆旧样本、拼新样本:设父集完全不交,现有两条经验样本:
样本 1: s 1 = [ x 1 1 , x 1 2 ] ,   a 1 ,   s 1 ′ = [ x 1 ′ 1 , x 1 ′ 2 ] s_1=[x_1^1, x_1^2],\ a_1,\ s_1'=[x_1'^1, x_1'^2] s1=[x11,x12], a1, s1=[x1′1,x1′2]
样本 2: s 2 = [ x 2 1 , x 2 2 ] ,   a 2 ,   s 2 ′ = [ x 2 ′ 1 , x 2 ′ 2 ] s_2=[x_2^1, x_2^2],\ a_2,\ s_2'=[x_2'^1, x_2'^2] s2=[x21,x22], a2, s2=[x2′1,x2′2]
因为父集不交,第 1 个因果机制的输入输出和第 2 个完全无关。我们可以交叉拼接:
新样本的 P a ( X 1 ) Pa(X^1) Pa(X1) 取自样本 1,对应输出 x ′ 1 = x 1 ′ 1 x'^1 = x_1'^1 x′1=x1′1;新样本的 P a ( X 2 ) Pa(X^2) Pa(X2) 取自样本 2,对应输出 x ′ 2 = x 2 ′ 2 x'^2 = x_2'^2 x′2=x2′2。得到的新转移 ( s n e w , a n e w , s n e w ′ ) (s_{new}, a_{new}, s'_{new}) (snew,anew,snew) 依然符合真实动力学。

举个直观例子:两个完全独立的小球:
样本 A:球 1 在 (0,0)→(1,0);球 2 在 (10,10)→(11,10)
样本 B:球 1 在 (2,3)→(3,3);球 2 在 (5,5)→(6,5)
CoDA 拼接:取样本 A 的球 1 转移 + 样本 B 的球 2 转移,得到新样本:球 1 (0,0)→(1,0),球 2 (5,5)→(6,5)

如果两个因果机制的父集存在共享变量,拼接时会出现变量取值冲突:同一个共享变量在两个组件里取值不同,无法自洽。现有两条经验样本:
样本 1: x 1 = 1 ,   x 2 = 2 ,   x 3 = 3 → x 1 ′ = 10 ,   x 2 ′ = 20 x_1=1,\ x_2=2,\ x_3=3 \quad \to \quad x_1'=10,\ x_2'=20 x1=1, x2=2, x3=3x1=10, x2=20
样本 2: x 1 = 4 ,   x 2 = 5 ,   x 3 = 6 → x 1 ′ = 40 ,   x 2 ′ = 50 x_1=4,\ x_2=5,\ x_3=6 \quad \to \quad x_1'=40,\ x_2'=50 x1=4, x2=5, x3=6x1=40, x2=50
如果 CoDA 尝试拼接:取样本 1 的组件 1 ( x 1 ′ = 10 (x_1'=10 (x1=10,对应 x 1 = 1 , x 2 = 2 x_1=1,x_2=2 x1=1,x2=2)+ 样本 2 的组件 2( x 2 ′ = 50 x_2'=50 x2=50,对应 x 2 = 5 , x 3 = 6 x_2=5,x_3=6 x2=5,x3=6)。矛盾出现:组件 1 要求 x 2 = 2 x_2=2 x2=2,组件 2 要求 x 2 = 5 x_2=5 x2=5;一个状态里 x 2 x_2 x2 不可能同时等于 2 和 5,变量取值不自洽。

论文的关键洞察发现 环境动力学具备局部稀疏因果结构(局部因子化 Local Factored):下一时刻每个状态变量仅由少量局部父变量决定,全局耦合仅发生在局部邻域。基于此得到两个理论结论:

  • 利用已知局部因果结构训练动力学模型,样本复杂度指数级下降
  • 局部因子化动力学模型具备可证明的 OOD 泛化能力,能在大量未见过的 ( s , a ) (s,a) (s,a)上精准预测转移。

核心思路:用泛化能力更强的掩码局部因子动力学模型,生成可控、符合因果规则的反事实转移样本,扩充离线数据集,让策略学习到分布外最优行为。

训练一个带掩码的局部因子化动力学模型,直接学习因果机制 P i L ( x ′ i ∣ P a i L ) P_i^L(x'^i|Pa^L_i) PiL(xiPaiL) 本身。直接采样 s = ( x 1 = 1 , x 2 = 2 , x 3 = 6 ) s=(x_1=1, x_2=2, x_3=6) s=(x1=1,x2=2,x3=6);模型根据 P a ( X 1 ) = { 1 , 2 } Pa(X^1)=\{1,2\} Pa(X1)={1,2} 预测 x 1 ′ x_1' x1,根据 P a ( X 2 ) = { 2 , 6 } Pa(X^2)=\{2,6\} Pa(X2)={2,6} 预测 x 2 ′ x_2' x2

在这里插入图片描述

方法框架

局部因果模型 LCM(Local Causal Model)

因子化 MDP(FMDP):全局固定因果分解,所有状态变量的依赖关系全局统一;现实场景很难满足强全局独立假设(比如不同区域物体交互规则不同),适用性差。

标准 MDP 的转移函数是 P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a),其中状态 s 是高维向量。因子化 MDP 是对转移函数的强全局分解假设:状态由 n 个独立状态变量组成: s = [ x 1 , x 2 , … , x n ] ⊤ s = [x^1, x^2, \dots, x^n]^\top s=[x1,x2,,xn],动作同理可分解;每个下一时刻状态变量 x ′ i x'^i xi,仅由上一时刻的一小部分变量(称为父集 P a ( X i ) Pa(X^i) Pa(Xi))决定,与其他变量完全无关;这套因果依赖关系在整个状态空间全局成立,和当前 s , a s,a s,a 无关。

真实环境几乎不满足 全局固定因果:两个球靠近时会碰撞,此时 A 的下一刻位置必然和 B 有关,父集会发生变化。FMDP 的全局分解假设过强,无法处理物体交互、局部耦合的真实场景。

LCM 是本文核心建模工具,放松 FMDP 全局分解假设:

  • 状态 - 动作空间拆分为互不相交局部邻域 S × A = L 1 ⊔ L 2 ⋯ ⊔ L n S\times A = L_1 \sqcup L_2 \dots \sqcup L_n S×A=L1L2Ln
  • 每个局部邻域L拥有独立因果图 G L G^L GL,变量依赖仅在局部生效;
  • 掩码函数 M ( s , a ) M(s,a) M(s,a):输入当前 ( s , a ) (s,a) (s,a),输出对应局部因果图的邻接矩阵,约束动力学模型仅使用有效父变量做预测。

在这里插入图片描述

反事实数据增强 CoDA(前置工作):通过交换观测样本中独立因果组件拼接出新转移,但无动力学模型,仅能复用已有样本片段,父集重叠时失效。MOCODA 是 CoDA 的基于模型升级版。


Theorem 1:局部因子动力学的样本复杂度下界

有限状态离散 MDP 下,若对每个局部因果机制的父配置采样n个样本,可保证全局转移预测 ℓ 1 \ell_1 1误差小于 ϵ \epsilon ϵ
对比全维度无因子动力学模型:

  • 普通无因子模型:复杂度 O ( ∣ S ∣ 2 ∣ A ∣ ) O(|S|^2|A|) O(S2A),随状态空间超线性爆炸;
  • 局部因子模型:复杂度 O ( m k 2 ⋅ ( ∣ S ∣ 2 ∣ A ∣ / m 2 ) 1 / k ) O(mk^2 \cdot (|S|^2|A|/m^2)^{1/k}) O(mk2(S2A∣/m2)1/k),指数级降低样本需求。

模型所需样本总量远小于状态 - 动作空间总规模,因此必然能在大量未观测 ( s , a ) (s,a) (s,a)上准确预测,天然具备 OOD 泛化能力。

一个全局状态 - 动作对 ( s , a ) (s,a) (s,a) 是分布外(OOD)的,指的是:这个完整的联合组合从未在训练数据里出现过;但组成它的每一个局部因果父集的取值配置,都在训练数据里出现过。

  • 训练数据里,我们见过 A 球在 ( 1 , 2 ) (1,2) (1,2) 时的运动,也见过 B 球在 ( 3 , 4 ) (3,4) (3,4) 时的运动;但我们从来没见过 A 在 ( 1 , 2 ) (1,2) (1,2) 且 B 在 ( 3 , 4 ) (3,4) (3,4) 这个全局组合 ( 1 , 2 , 3 , 4 ) (1,2,3,4) (1,2,3,4)
  • 对全连接动力学模型来说, ( 1 , 2 , 3 , 4 ) (1,2,3,4) (1,2,3,4) 就是纯 OOD,没见过就很容易预测不准;但对局部因子化模型来说,A 的转移只和 A 的父集有关,B 的转移只和 B 的父集有关,两个局部机制都已经学准了,拼在一起的全局结果自然是准的。
    .
    因果机制是局部独立的,局部学准了,全局新组合自然准。

泛化可以看成组件复用,训练一个达到指定精度的局部因子化动力学模型,所需的样本总量,远远小于全局状态 - 动作空间的总规模。既然样本数远小于状态总数,那模型必然能在大量从未见过的 ( s , a ) (s,a) (s,a) 上做出准确预测

适用边界:只有当这个 OOD 的 ( s , a ) (s,a) (s,a) 中,每一个局部父集的取值配置,都在训练数据里有足够的样本支撑时,模型才能泛化准。
这也正是 MOCODA 为什么要设计 “最大熵边际匹配分布”:专门生成那些 “父集都在训练分布里、但全局组合是新的” 的 OOD 样本,既充分利用模型的泛化能力,又不超出模型的可靠范围。

为什么价值函数 / 策略无法直接 OOD 泛化?

动力学可以局部稀疏分解,但长期回报预测存在时间纠缠(蝴蝶效应):短期局部独立的物体,长时间演化会发生耦合碰撞,价值函数的依赖无法被局部结构简化。

解决方案:不能直接在原始数据训练策略,必须用局部因子动力学生成大量 OOD 转移样本扩充数据集,再训练策略,让策略学习分布外行为。


MOCODA 完整框架

在这里插入图片描述

Step1:建模并生成增强父分布 P ~ θ ( s , a ) \tilde{P}_\theta(s,a) P~θ(s,a)

父分布:用于生成待预测的 ( s , a ) (s,a) (s,a)样本,再送入动力学模型得到下一状态 s ′ s' s。论文提供 3 种可控分布:

  1. 基础 MOCODA 分布(最大熵边际匹配)

约束每个局部父集的边缘分布和原始经验数据 P E M P P_{EMP} PEMP保持一致,在该约束下取最大熵分布;保证所有生成 ( s , a ) (s,a) (s,a)的父配置都在训练数据中有充足观测,动力学模型预测误差低。

原始数据内稀有父组合会在增强分布中极度稀疏,无关状态过多拖慢训练。

  1. MOCODA-U(均匀重平衡)

对 MOCODA 分布加权,拉平支撑域内样本概率,缓解稀有组合缺失问题;适合因果因子数量较少的场景。

  1. MOCODA-P(任务优先加权)

引入目标任务先验(专家轨迹、任务目标区域),通过拒绝采样将增强分布集中在任务关键状态区域;复杂机器人任务最优方案(论文 HookSweep2 实验效果最强)。

Step2:局部掩码因子动力学模型生成增强转移

掩码动态模型结构,将掩码 M ( s , a ) M(s,a) M(s,a)作为额外输入,强制每个子变量 s j ′ s'_j sj仅由掩码标记的父变量计算,屏蔽无关维度;

先嵌入每组父集,再用掩码筛选有效嵌入求和,预测子变量。

从增强父分布 P ~ θ \tilde{P}_\theta P~θ采样 ( s , a ) (s,a) (s,a),输入动力学 P ϕ ( s ′ ∣ s , a ) P_\phi(s'|s,a) Pϕ(ss,a)得到完整转移三元组 ( s , a , s ′ ) (s,a,s') (s,a,s),即反事实增强数据。

Step3:混合原始数据 + 增强数据训练离线 RL

将增强样本与原始经验池混合,标注任务奖励 r ( s , a ) r(s,a) r(s,a),输入任意离线 RL 算法(BCQ、CQL、TD3-BC)训练策略;

离线约束(行为克隆正则)可直接作用在扩充后的 MOCODA 分布上,既避免分布偏移,又扩大策略可覆盖的状态范围。

实验分析

验证两大假设

  • H1:局部因子动力学模型在 MOCODA 增强分布上泛化误差远低于无因子 / 全局因子模型;
  • H2:使用 MOCODA 增强数据集训练的离线 RL,可解决标准算法完全失效的 OOD 任务。

实验环境 1:2D 导航连续控制
设定:原始数据仅覆盖 L 型区域,最优路径需要穿过完全未观测的对角线区域;右上角象限动力学全局耦合(全局因子模型会失效)。

动力学建模误差结果:局部因子模型在 EMP/DYNA/MOCODA/MOCODA-U 全部分布上误差显著低于无因子、全局因子模型;DYNA 短视滚动生成的 OOD 样本误差极高,证明随机滚动无法产出高质量分布外数据。
在这里插入图片描述

离线 RL 性能:所有主流离线算法(SAC/BCQ/CQL/TD3-BC)在原始 EMP 数据集表现极差;搭配 MOCODA/MOCODA-U 后步数大幅下降,成功学到对角线最优策略。

在这里插入图片描述
实验环境 2:HookSweep2 机器人抓取(核心高难度离线 OOD 任务)

任务设定:Fetch 机械臂用钩子推动箱子;原始数据仅包含单个箱子被推到一侧的轨迹,目标任务要求两个箱子同时推到同侧(原始数据完全无对应状态,纯 OOD)。
可视化对比:

  • EMP:目标区域完全无样本覆盖;
  • MOCODA:少量目标区域样本;
  • MOCODA-P:箱子联合位置均匀覆盖整张桌面,目标区域充足。

成功率结果:

  • 原生 EMP 数据集:BCQ/TD3-BC 成功率几乎为 0,标准离线算法完全失败;
  • MOCODA:小幅提升成功率;MOCODA-P:TD3-BC 达到 84% 超高成功率;

消融实验:使用无因子动力学生成 MOCODA 样本,成功率大幅下跌,证明局部因子结构是 OOD 泛化的核心前提。

在这里插入图片描述
对比四类数据生成方案:

  • EMP:仅原始离线数据(基准最差);
  • DYNA:原始分布短视滚动生成样本;
  • RAND:全局随机采样状态动作(模型泛化误差极大);
  • CODA:无模型反事实增强;
  • MOCODA/MOCODA-U/MOCODA-P:本文方法,全场景最优。

总结与思考

方法依赖先验因果掩码 M ( s , a ) M(s,a) M(s,a):需要提前知晓环境局部因子结构;高维图像输入场景无法直接获取掩码,需要配套因果发现 / 物体表征算法;MOCODA 原生分布存在样本不平衡:稀有父组合生成概率极低,必须依赖 MOCODA-U/P 加权修正;增强分布支撑域过大时训练开销上升,需要任务先验做筛选;
未融合不确定性评估:无法区分动力学模型高 / 低置信度的 OOD 样本,低置信度样本仍会轻微损害训练。

未来针对高维视觉场景,可以学习局部因子化物体表征(Slot Attention、Recurrent Independent Mechanisms),自动推断掩码,摆脱手工因果先验;只使用动力学置信度高的 OOD 样本做增强,过滤无效预测;

额外补充:样本复杂度计算

学习转移分布 P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a),对任意一个输入 ( s , a ) (s,a) (s,a),它对应的输出是 ∣ S ∣ |S| S 种下一状态(离散表格设定),估计单个分布需要 O ( ∣ S ∣ ) O(|S|) O(S) 样本;

  • 无因子模型:不拆分因果结构,所有 ( s , a ) (s,a) (s,a) 独立;
  • 局部因子模型:把 S × A S\times A S×A 拆成 m 个互不相交局部邻域 L 1 , . . . , L m L_1,...,L_m L1,...,Lm;每个邻域内转移拆成 k 个独立因果子机制。

普通无因子模型复杂度 O ( ∣ S ∣ 2 ∣ A ∣ ) O(|S|^2|A|) O(S2A) 推导

  • 输入总数:所有唯一的 ( s , a ) (s,a) (s,a) 组合,数量 ∣ S ∣ ⋅ ∣ A ∣ |S|\cdot|A| SA
  • 每一组 ( s , a ) (s,a) (s,a) 对应一个输出分布,该分布有 N = ∣ S ∣ N=|S| N=S 种结果,需要 O ( ∣ S ∣ ) O(|S|) O(S) 样本才能估准;
  • 总样本需求 = 输入数量 × 单输入样本量 N full ∝ ∣ S ∣ ⋅ ∣ A ∣ ⋅ ∣ S ∣ = ∣ S ∣ 2 ∣ A ∣ N_{\text{full}} \propto |S|\cdot|A| \cdot |S| = |S|^2 |A| NfullSAS=S2A

∣ S ∣ |S| S 是状态维度,多物体场景下 ∣ S ∣ |S| S 随物体数量指数增长; ∣ S ∣ 2 |S|^2 S2 会让样本量爆炸式上涨,稍微复杂一点的环境根本无法采集足够数据。

局部因子模型复杂度公式拆解

公式原文: O ( m k 2 ⋅ ( ∣ S ∣ 2 ∣ A ∣ m 2 ) 1 k ) O\left(m k^2 \cdot \left(\frac{|S|^2 |A|}{m^2}\right)^{\frac{1}{k}}\right) O(mk2(m2S2A)k1)
符号定义

  • m:局部邻域数量 ( S × A (S\times A (S×A 被划分为 m 块独立局部区域,每块有专属因果图)
  • k:每个局部邻域内,动力学拆分为 k 个独立因果子机制
  • ∣ S ∣ ∣ A ∣ m \displaystyle \frac{|S||A|}{m} mS∣∣A:单个局部邻域内的 ( s , a ) (s,a) (s,a) 总数量(全局均分)

单个局部邻域的输入总数: ∣ S ∣ ∣ A ∣ m \displaystyle \frac{|S||A|}{m} mS∣∣A每个邻域拆成 k 个因子,等价于把邻域内的状态动作拆成 k 组独立变量;若邻域总输入规模为 T = ∣ S ∣ ∣ A ∣ m T=\frac{|S||A|}{m} T=mS∣∣A,则单个因果因子的输入规模为: T 1 / k = ( ∣ S ∣ ∣ A ∣ m ) 1 k T^{1/k} = \left(\frac{|S||A|}{m}\right)^{\frac{1}{k}} T1/k=(mS∣∣A)k1每个因子要预测下一状态分量,输出规模等价于输入规模,因此单因子样本需求 ∝ ( T 1 / k ) 2 = ( ∣ S ∣ 2 ∣ A ∣ m 2 ) 1 k \propto \big(T^{1/k}\big)^2 = \displaystyle \left(\frac{|S|^2|A|}{m^2}\right)^{\frac{1}{k}} (T1/k)2=(m2S2A)k1,单个邻域有 k 个因子,引入常数项 k 2 k^2 k2(理论证明里的集中不等式常数,不影响量级);全局一共 m 个邻域,乘以 m;最终得到总复杂度: O ( m k 2 ⋅ ( ∣ S ∣ 2 ∣ A ∣ m 2 ) 1 k ) O\left(m k^2 \cdot \left(\frac{|S|^2 |A|}{m^2}\right)^{\frac{1}{k}}\right) O(mk2(m2S2A)k1)

指数 1 k \boldsymbol{\frac{1}{k}} k1 带来指数级降幅对比无因子 O ( ∣ S ∣ 2 ∣ A ∣ ) O(|S|^2|A|) O(S2A),局部因子把全局二次项放到 1 / k 1/k 1/k 次方里;k 越大(拆分出越多独立因果组件),括号整体的数值会急剧缩小,样本需求指数级下降。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐