因果生成模型 (Causal Generative Models)
一句话定位
因果生成模型结合结构因果模型(SCM)对因果变量进行因果建模,与生成解码器(decoder)将因果变量映射到观测空间,是因果表示学习的主流方法之一。
前置知识
- 因果表示学习基础:编码器、表示空间
- SCM:结构因果模型、因果机制、do算子
- 变分推断:ELBO、KL散度、重新参数化
- 生成模型:VAE、GAN、 normalizing flows
核心直觉
因果生成模型的核心思想是:数据的生成过程包含两个层次:
- 因果层次:底层因果变量
按照因果结构(SCM)生成 - 观测层次:因果变量
通过解码器生成观测数据
这种分离有什么好处?假设我们有一个图像数据集,其中图像由少数几个因素决定(如物体位置、旋转角度、光照)。如果我们能学到这些因素的因果表示,那么:
- 我们可以通过干预(do)某个因素来生成反事实图像
- 我们可以理解每个因素对最终图像的贡献
- 我们可以推广到新的条件组合
传统的生成模型(如VAE)只关心如何从低维表示重建图像,但不关心这些表示之间的因果关系。因果生成模型明确地建模了因果变量之间的关系。
问题形式化
模型结构
因果生成模型包含三个组件:
- 先验网络
:定义因果变量的先验分布,强制因果结构 - SCM/因果机制
:描述因果变量之间的生成关系 - 解码器/观测模型
:将因果变量映射到观测空间
生成过程
数据生成过程:
其中
与标准生成模型的区别
标准 VAE:
- 先验
通常是简单的分布(如单位高斯) - 潜在变量
之间的统计独立性不编码因果关系 - 重建是唯一目标
因果生成模型:
- 先验
由因果结构决定 - 潜在变量
之间的依赖关系编码因果关系 - 重建 + 因果结构约束
数学框架
ELBO 推导
给定观测数据
使用变分推断,引入近似后验
其中 ELBO:
因果先验的分解
由于
这与标准 VAE 中的
因果结构约束
我们希望学到的表示满足因果结构:
其中第二个惩罚项强制后验分布与因果先验一致。
识别条件
因果生成模型的可辨识性来自以下条件:
- 解码器可逆性:
足够灵活,可以区分不同的 - 因果结构约束:
由稀疏因果结构决定 - 干预数据(可选):干预数据可以帮助识别因果方向
定理:在满足一定条件下,因果生成模型可以识别出真实的因果结构和因果变量。
训练与估计
变分 CRL 训练
训练循环:
for x in data:
# 编码
q_z_x = encoder(x)
# 采样
z = reparameterize(q_z_x)
# 重构
x_recon = decoder(z)
# 计算损失
recon_loss = -log_prob(x_recon, x)
kl_loss = kl_divergence(q_z_x, causal_prior(z))
loss = recon_loss + beta * kl_loss
loss.backward()因果结构学习
除了学习表示,我们还需要学习因果结构
其中
对抗训练
一些方法使用对抗训练来增强可辨识性:
其中生成器
VAE-based CRL 实现
class CausalGenerativeModel(nn.Module):
def __init__(self, dim_x, dim_z, causal_graph):
self.encoder = nn.Sequential(
nn.Linear(dim_x, 256),
nn.ReLU(),
nn.Linear(256, dim_z * 2) # 均值和对数方差
)
self.decoder = nn.Sequential(
nn.Linear(dim_z, 256),
nn.ReLU(),
nn.Linear(256, dim_x)
)
self.causal_graph = causal_graph # 邻接矩阵
def prior(self, z):
"""
构建因果先验:p(z) = prod_i p(z_i|Pa_i)
"""
# 实现因果先验分解
return prior_probs
def forward(self, x):
# 编码
h = self.encoder(x)
mu, log_var = h.chunk(2, dim=-1)
sigma = log_var.exp()
# 重参数化
z = mu + sigma * torch.randn_like(mu)
# 解码
x_recon = self.decoder(z)
return z, x_recon
def elbo_loss(self, x, beta=1.0):
z, x_recon = self.forward(x)
# 重建损失
recon_loss = F.mse_loss(x_recon, x)
# KL 损失(使用因果先验)
q_z_x = torch.distributions.Normal(
self.encoder(x)[:, :dim_z],
self.encoder(x)[:, dim_z:].exp()
)
p_z = self.prior(z)
kl_loss = torch.sum(q_z_x.log_prob(z) - p_z.log_prob(z), dim=-1).mean()
return recon_loss + beta * kl_loss推理与干预
编码与解码
给定观测
给定因果表示
do 操作
在因果生成模型中,do 操作作用在因果变量上:
干预后的采样:
反事实生成
反事实生成的步骤:
- 给定原始观测
和干预 - 推断原始因果表示:
- 应用干预:
- 生成反事实观测:
因果效应计算
给定干预
其中:
优点与局限
优点
- 可解释性:因果结构明确,建模了变量之间的因果关系
- 干预能力:支持 do 操作,可以预测干预效果
- 反事实推理:可以生成反事实观测
- 组合性:因果变量可以组合生成新样本
- 可辨识性:因果结构约束增强了可辨识性
局限
- 模型复杂度:需要同时建模因果结构和生成模型
- 可辨识性挑战:在没有足够约束的情况下,因果结构可能不可辨识
- 训练难度:需要平衡重建质量和因果结构约束
- 假设依赖:可辨识性依赖于对因果结构的假设(如稀疏性)
与其他笔记的联系
- 因果表示学习基础:因果生成模型是 CRL 的一种主要方法
- 可辨识性问题:因果生成模型的可辨识性来自因果结构约束
- 可控反事实生成:因果生成模型可以用于反事实生成
- 解耦表示与因果变量:因果生成模型可以促进解耦
可重现性笔记
常用数据集
- Shapes3D:包含6个独立因素的3D图像
- MPI3D:机器人操作数据集,多种独立因素
- Sprites:精灵图像数据集,可控因素
- CIFAR-CO:带标注的因果图像数据集
评估指标
- 离散因素度量(DCI):评估解耦程度
- MIG(Mutual Information Gap):评估因素的可识别性
- 重建误差:评估生成质量
- 干预效果:评估 do 操作的效果
章节总结
- 因果生成模型结合 SCM 和生成解码器
- SCM 描述因果变量
之间的因果机制 - 解码器将因果变量映射到观测空间
- 变分 CRL 使用 ELBO 进行训练
- 因果生成模型的可辨识性来自结构约束
- ELBO 分解为重建损失和 KL 散度
- 因果先验
强制因果结构分解 - 生成模型和因果结构的联合学习是挑战
- VAE-based CRL 是因果生成模型的典型实现
- 应用:图像生成、数据增强、反事实推理、可解释AI
关键词
causal generative models, SCM, variational CRL, VAE, generative decoder, ELBO, causal prior, causal structure, intervention, counterfactual generation, identifiability