解耦表示与因果变量 (Disentangled Representations and Causal Variables)

一句话定位

解耦表示关注统计独立性,而因果变量强调干预不变性和因果机制,两者的结合是通往可解释、可操控表示的关键。

前置知识

  • 解耦表示学习:β-VAE、InfoGAN、独立分量分析
  • 因果表示学习:SCM、do操作、可辨识性
  • 变分推断:ELBO、KL散度
  • 信息论:互信息、条件熵

核心直觉

考虑一个数据集,其中图像由几个独立因素生成:物体颜色、形状、大小、位置等。

统计解耦(如β-VAE)的目标是:学到的表示 中,每个 统计上是独立的,即

因果解耦的目标是:学到的表示中,每个 可以独立地干预,即干预 不会影响其他 )的值。

关键洞察:统计独立不等于因果独立

举例:考虑两个变量 ,它们在统计上是相关的(),但如果我们知道它们的关系(如 ),我们可以独立地控制它们。这意味着即使在统计上不独立,变量也可以在因果意义上独立。

反过来,统计上独立的变量(如 )可能在因果上是相关的,因为它们可能有共同的原因。例如,如果 都是某个隐变量 的独立结果,它们统计上可能看起来独立,但并非因果独立——干预 不会影响 ,但它们都由 决定。

问题形式化

解耦表示

定义(统计解耦):表示 是统计解耦的,如果:

这意味着 之间没有统计相关性。

β-VAE 目标

足够大时, 被迫接近 ,从而实现解耦。

因果表示

定义(因果解耦):表示 是因果解耦的,如果:

  1. 存在因果结构 描述 之间的关系
  2. 每个因果机制 是独立的
  3. 干预某个 不影响其他

因果分解:

注意:这与统计解耦不同,因为 可能非空。

独立可控因素

定义(独立可控因素):如果表示 的每个维度 都可以独立地被干预并产生可预测的变化,则称 的因素是独立可控的。

形式上,对于任意干预

这意味着干预 不影响其他变量。

数学框架

ACL (Autonomous Causal Learning) 目标

ACL 的目标是学习可自主控制的因果机制:

其中:

  • 是在干预 的条件下, 和观测 之间的互信息
  • 之间的互信息(鼓励独立性)

因果与统计独立的区别

考虑一个简单例子:

统计上: 不是独立的,但条件分布 是确定性的。

因果上:如果真实因果关系是 ,则干预 会改变 ,但反过来不成立。这说明即使统计相关,因果方向也是确定的。

信息论视角

统计独立性

因果独立性

关键区别:因果独立性涉及干预下的条件互信息,而统计独立性涉及边缘互信息。

解耦 vs 因果变量

属性统计解耦因果变量
目标$p(z) = \prod_i p(z_i
独立性边缘独立条件独立(干预下)
可控性不保证保证
可辨识性需要假设需要更强的假设
解释性统计上因果上

训练与估计

统计解耦训练

使用 β-VAE 或类似方法:

def beta_vae_loss(x, x_recon, q_z_x, p_z, beta=1.0):
    recon = F.mse_loss(x_recon, x)
    kl = kl_divergence(q_z_x, p_z)
    return recon + beta * kl

因果解耦训练

使用 ACL 目标:

def acl_loss(model, x, i):
    """
    计算第i个因子的ACL损失
    """
    # 编码
    z = model.encoder(x)
 
    # 干预第i个因子
    z_cf = intervene(z, i, random_sample())
 
    # 重构
    x_cf = model.decoder(z_cf)
 
    # 编码反事实
    z_cf_recon = model.encoder(x_cf)
 
    # ACL损失:干预的因子应该改变,其他应该保持
    loss = 0
    for j in range(dim_z):
        if j == i:
            loss += (z_cf_recon[j] - z_cf[j])**2  # 干预的因子应该匹配
        else:
            loss += (z_cf_recon[j] - z[j])**2  # 其他因子应该保持
 
    return loss

结合统计和因果解耦

综合目标:

其中:

  • 是重构损失
  • 鼓励统计独立(如 β-VAE)
  • 鼓励因果独立(如 ACL)

推理与干预

统计独立推理

给定观测 ,推断解耦表示

每个 可以独立推断,但这不保证因果独立性。

干预不变性

定义(干预不变性):表示 具有干预不变性,如果对于任意 和任意干预

这意味着干预某个维度不影响其他维度。

因果推理

因果推理需要:

  1. 确定因果结构
  2. 根据 计算干预效果
  3. 干预时保持因果机制不变

优点与局限

优点

  1. 解释性:因果变量提供了更强的解释性
  2. 可控性:因果变量可以独立操控
  3. 泛化性:因果结构通常在分布转移下更稳定
  4. 组合性:因果变量更容易组合

局限

  1. 可辨识性:无监督解耦在理论上不可辨识
  2. 因果结构学习:学习因果结构是困难的
  3. 假设依赖:需要额外的归纳偏置
  4. 计算成本:联合学习表示和因果结构成本高

与其他笔记的联系

  • 因果生成模型:因果变量可以用于生成模型
  • 可控反事实生成:独立可控因素使反事实生成更容易
  • 可辨识性问题:统计解耦和因果解耦的可辨识性条件不同
  • Multi-View CRL:多视图可以辅助解耦

可重现性笔记

评估指标

解耦指标(DCI)

  • 缺失性:每个因素是否只由少数观察决定
  • 清晰性:每个观察是否由少数因素决定

MIG(Mutual Information Gap)

其中 是真正因素对应的观察集合。

代码框架

class DisentangledCausalRepresentation(nn.Module):
    def __init__(self, dim_x, dim_z, causal_graph):
        self.encoder = Encoder(dim_x, dim_z)
        self.decoder = Decoder(dim_z, dim_x)
        self.causal_graph = causal_graph
 
    def forward(self, x):
        z = self.encoder(x)
        x_recon = self.decoder(z)
        return z, x_recon
 
    def statistical_loss(self, z):
        """鼓励统计独立"""
        # 计算协方差矩阵
        cov = torch.cov(z.T)
        # 惩罚非对角元素
        return torch.sum(cov ** 2) - torch.sum(torch.diag(cov) ** 2)
 
    def causal_loss(self, x, i):
        """ACL损失"""
        z = self.encoder(x)
        z_cf = intervene(z, i, random_intervention())
        x_cf = self.decoder(z_cf)
        z_cf_recon = self.encoder(x_cf)
        # ... 计算ACL损失

章节总结

  • 解耦和因果表示既有联系又有区别
  • 统计独立(β-VAE)和因果独立不同
  • 独立可控因素是更强的监督信号
  • 因果分解 编码因果依赖
  • ACL 目标强制每个因素可以独立控制
  • 解耦可能不涉及因果结构,因果结构不一定解耦
  • 干预不变性是因果表示的核心特征
  • 无监督解耦在理论上不可辨识,需要归纳偏置
  • 未来方向:结合统计解耦和因果结构的优点

关键词

disentangled representations, causal variables, independently controllable factors, causal factorization, ACL, intervention invariance, statistical independence, causal independence, beta-VAE, autonomous causal learning