Partial Observability下的CRL (CRL with Partial Observability)
一句话定位
部分可观测下的因果表示学习处理存在未被观测的隐变量(混杂因子)影响因果变量和观测变量的复杂情况,需要重新审视可辨识性边界和识别条件。
前置知识
- 因果表示学习基础:编码器、解码器、ELBO
- 可辨识性理论:完全可观测情况下的可辨识性条件
- 因果推断:混杂因子、do算子、后门准则
- 变分推断:近似后验、ELBO、重新参数化
核心直觉
在真实的因果系统中,我们通常无法观测到所有的变量。考虑一个视觉场景:图片中的因果变量可能包括物体位置、光照方向等,但我们只能看到像素级别的图像。在这个过程中,可能存在一些隐变量(latent variables)同时影响着因果变量和观测变量,使得因果关系的识别变得困难。
例如,假设我们想从视频中学习物体的运动规律(速度、加速度等因果变量)。但可能存在一个隐变量”摄影师的手抖程度”,它同时影响了:
- 物体的实际运动(如果我们能直接测量的话)
- 视频中观测到的像素运动
这个隐变量就是一个混杂因子(confounder),它使得从观测数据中直接识别因果关系变得不可能,除非我们做出额外的假设或收集干预数据。
关键洞察:在部分可观测情况下,我们不能直接区分:
- 因果变量
对观测 的真实效应 - 隐变量
对两者的共同影响
问题形式化
基本设置
设观测变量为
隐变量
其中
生成模型
完整的生成模型:
边际化
边际化
隐变量 vs 观测变量
在部分可观测设置中,变量分为三类:
- 完全观测的因果变量
:我们可以直接建模的因果变量 - 观测变量
:我们实际观察到的数据 - 隐变量
:未被观测但可能影响 和 的变量
隐变量
- 混杂
和 的关系: 可能同时影响 和 ,导致它们之间出现虚假相关性 - 增加不确定性:引入隐变量增加了模型的不确定性
- 降低可辨识性:隐变量使得从
辨识 更加困难
数学框架
部分可观测下的 SCM
完整的 SCM 包括:
其中
可辨识性分析
定义(部分可观测可辨识性):在部分可观测设置下,如果从
不可辨识性来源:
-
混杂歧义:给定
,无法区分以下两种情况: 导致 (直接因果效应) 同时导致 和 (混杂效应)
-
隐变量歧义:不同的隐变量配置可能产生相同的
-
因果方向歧义:即使没有
,从 也无法确定因果方向
完备性条件
定义(部分 SCM 完备性):如果对于每个因果机制
形式上:
这个条件在部分可观测下更难满足,因为
最小隐变量假设
为了使可辨识性成立,我们需要假设隐变量满足某些条件:
假设(最小性):隐变量
假设(稀疏性):
假设(条件独立性):给定
但这个假设通常过于强,在实践中难以满足。
训练与估计
变分推断扩展
在部分可观测设置下,我们需要推断隐变量
变分下界:
其中
隐变量发现
我们需要同时学习:
- 因果表示
- 隐变量
的模型 - 隐变量与
、 的关系
常用方法:
- VAE 扩展:引入额外的隐变量层
- 层次模型:将
建模为更高级别的隐变量 - 对抗训练:使用 GAN 风格的训练来确保隐变量的一致性
算法框架
class PartialObservabilityCRL(nn.Module):
def __init__(self, dim_x, dim_z, dim_u):
# 编码器:观测 -> 因果变量 + 隐变量
self.encoder_z = Encoder(dim_x, dim_z)
self.encoder_u = Encoder(dim_x, dim_u)
# 解码器:因果变量 + 隐变量 -> 观测
self.decoder = Decoder(dim_z + dim_u, dim_x)
# 先验网络
self.prior_net = PriorNetwork(dim_z, dim_u)
def forward(self, x):
# 推断后验
q_u = self.encoder_u(x)
q_z = self.encoder_z(x)
# 采样
u = sample_from(q_u)
z = sample_from(q_z)
# 重构
x_recon = self.decoder(concat(z, u))
return z, u, x_recon
def elbo_loss(self, x, beta=1.0):
z, u, x_recon = self.forward(x)
# 重建损失
recon_loss = F.mse_loss(x_recon, x)
# KL 损失(包含先验约束)
p_u, p_z = self.prior_net(z)
kl_loss = kl_divergence(q_u, p_u) + kl_divergence(q_z, p_z)
return recon_loss + beta * kl_loss推理与干预
后验推断
给定观测
注意:在部分可观测下,
(边缘化 ) 是特定于 的后验
do 操作分析
在部分可观测设置下,do 操作变得更加复杂:
观测 do 操作(只干预
隐变量 do 操作(干预
混杂效应
部分可观测的核心挑战是混杂效应:
定义(混杂):如果存在变量
为了正确估计因果效应,我们需要”控制”
反事实推理
反事实推理在部分可观测下更加困难:
- 需要推断隐变量
的值 - 需要模拟
不变情况下干预的效果 - 反事实的一致性依赖于
的正确推断
优点与局限
优点
- 现实建模:部分可观测设置更接近真实世界的因果系统
- 处理混杂:可以显式地建模和处理混杂因子
- 灵活性:可以处理更复杂的因果结构
局限
- 可辨识性弱:部分可观测下的可辨识性比完全可观测更弱
- 推断困难:需要推断未观测的隐变量,增加计算复杂度
- 假设依赖:可辨识性依赖于对隐变量的假设(如稀疏性、条件独立性)
- 验证困难:验证隐变量模型的正确性非常困难
与其他笔记的联系
- 因果表示学习基础:部分可观测是CRL的扩展
- 可辨识性问题:部分可观测降低可辨识性
- 多视图CRL:多视图可以部分缓解部分可观测问题
- 稀疏性原则:稀疏性假设可以帮助处理部分可观测
- 因果生成模型:生成模型需要考虑隐变量
可重现性笔记
合成数据生成
def generate_partial_observability_data(n_samples, dim_z, dim_u, dim_x):
"""
生成部分可观测的合成数据
"""
# 定义 SCM
# 生成隐变量
u = np.random.randn(n_samples, dim_u)
# 生成因果变量(受隐变量影响)
z = f_z(u) + np.random.randn(n_samples, dim_z)
# 生成观测(受因果变量和隐变量共同影响)
x = g_x(z, u) + np.random.randn(n_samples, dim_x)
return x, z, u模型选择
在部分可观测设置下,模型选择需要考虑:
- 隐变量的维度选择
- 隐变量与观测变量的连接方式
- 稀疏性假设的强度
章节总结
- 部分可观测设置引入隐变量
影响观测和因果变量 - 隐变量
是”混杂因子”,可能导致不可辨识 - 部分 SCM 完备性条件决定哪些量可以辨识
- 最小隐变量假设帮助缩小搜索空间
- 存在
时, 和 之间的因果关系可能被混淆 - 需要区分直接因果效应和混杂效应
- 部分可观测下的可辨识性比完全可观测更弱
- 干预可以帮助辨识部分可观测下的因果结构
- 隐变量发现是部分可观测 CRL 的核心任务
- 实用方法:假设
的稀疏性或使用领域知识
关键词
partial observability, causal representation learning, latent confounders, hidden variables, SCM completeness, confounding, variational inference, ELBO, identifiability, intervention