查看原文
其他

【源头活水】以因果为先验的解耦表示 | 生成模型——CausalVAE及其扩展

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—yearn
地址:https://zhuanlan.zhihu.com/p/261106464
Disentanglement是一个很有意思的课题,自从19ICML best paper指出了没有任何先验知识而且完全的无监督根本不可能实现真正意义上的解耦表示,大量的工作都开始抛弃隐变量独立假设,开始使用因果关系,少量标签或者人工干预来在隐变量相互影响的情况下学到解耦表示,这篇文章讲的都是第一类+第二类,下面的链接是第三类。
ICLR2021 | 通过干预的无监督解耦表示
文章列表:

CausalVAE: Disentangled Representation Learning via Neural Structural Causal Models

https://arxiv.org/abs/2004.08697

Disentangled Generative Causal Learning

https://openreview.net/pdf?id=agyFqcmgl6y

这两篇最大的亮点就是抛弃了隐变量独立假设,将结构化因果模型作为先验引入并进行训练,同时引入了少量的样本进行监督。效果挺好,有因果关系的因子也可以得到disentangled representation,同时也可以利用因果信息进行生成。个人感觉先看实验部分可能会有助于理解文章的目的。

01

INTRODUCTION
这里有几个概念需要理清或者说需要知道
BGM: bidirectional generative models
给定输入数据,以及从先验中抽样得到的,我们希望学一个编码器一个解码器,VAE就是传统BGM的一种。而大量的工作表明,如果我们能学到一个解耦表示  ,对可解释性和下游工作都有莫大的好处,所谓的解耦即每个  只表示  中的一个属性。
Structured Causal Model (SCM)
输入    的各个属性通常是耦合在一起的,即相互关联,存在因果关系。因此这里使用结构化的因果模型作为先验知识,学习一个解耦的因果表示。既可以通过控制因来影响果,也可以让他们相互独立的影响输入。这部分不熟悉建议看看下文
https://zhuanlan.zhihu.com/p/33860572
接下来依次过一下两篇文章的重要部分

02

CausalVAE:GENERATIVE MODEL WITH A CAUSAL PRIOR
这一部分是重点,是CausalVAE内容,之后很多文章都会使用这种方式引入因果先验。模型结构如下,Causal层将独立的外生因素 (  的编码)转化为因果图的内生因素(可以看作是建模    之间的因果),然后通过Mask机制传递因果影响生成相互作用后的  ,然后将    解码。
Transforming Independent Exogenous Factors into Causal Representations
所谓的外生变量就是不受自变量和因变量控制的部分,作为系统的条件。在这里外生变量就是    的隐变量于是一个线性因果模型就可以写成如下形式
这里    是因果图的邻接矩阵,是需要学习的参数。    是结构化的因果表示,  是独立的高斯外生变量。这里同时引入了与真实因果信息相关联的监督信号    。    在model中使用了两次
1. 使用了一个条件先验    来正则化    带来的影响。
2. 使用    来学习因果结构    。
Structural Causal Model Layer
邻接矩阵的因果强度。那么我们根据上述的因果模型可以得到    的计算公式
  是非线性可逆函数,  是他的参数。之所以不直接使用线性因果模型,是因为这里引入非线性结果更加stable。然后我们有以下几个优化目标:
使用label作为约束
最小化隐变量的重构误差
邻接矩阵必须可以表达一个DAG:
A Probabilistic Generarive Model for CausalVAE
Generative Model和上述稍有不同,因为这里没有    ,所以内生外生变量都是采样得到的。其中外生变量,此时不再经过causal模块,内生变量    以监督信号   (maybe真实的因果图表示) 为先验进行采样

,然后生成的过程记为

因为  都是采样得到,因此
生成器的训练依赖于ELBO
重构损失一般无二,不过KL散度由两部分组成,一个是  相关的KL散度,一个是    相关的KL散度,分别对应了encoder和causal模块推断出的隐变量。
总体损失为
CsuasalVAE效果很好,但是有一点被下文诟病,就是他的因果是基于全监督的范式进行学习的。

03

Disentangled Generative Causal Learning
这篇文章使用了上述类似的想法将因果图作为先验,但是处理方式有几点不同,但是文章的目标大相径庭,都是为了一个解耦表示和一个因果可控的生成模型。接下来主要分析一下不同之处
首先文章引入了监督学习,直接对latent vector进行监督训练。其中    就是:输入  的第  维的隐变量,  是他的标签。如果标签是二值化向量,那么  是交叉熵损失(如下),是sigmod函数。如果标签是连续值那么该损失就是预测属性与标签的L2损失。值得注意的是,我们并不需要所有样本都具有标签,我们只需要一个小样本集  远远小于总样本数目    。只需要少量的标签,model的能力就可以得到巨大提升。
将因果先验融入生成模型:类似的线性因果模型:
  同样是因果DAG的邻接矩阵,模型整体结构如下(这图画的也太寒酸了),作者假设了因果图的结构是已知的,因此这里SCM只需要学习非零邻接元素的权值来表示因果的影响力。
所以联系一下上下文,我们的生成过程是这样的:首先得到  ,可以从  解码得到,也可以从先验  采样得到。然后我们就能计算噪声,然后通过线性因子模型两边求逆的形式(下式迭代)计算 ,最后用生成的包含因果知识的隐变量重构这一步相当于在原有的隐变量表示下,多次施加因果作用。
此时生成模型的损失如下,不同之处在于生成模型引入了  
其中  即线性因子模型(需要学习的参数包括邻接矩阵  ,可逆函数  )。
那么加上之前所说的监督损失,整体的损失函数就出来了


04

Experiments
因为抛弃隐变量独立假设的风潮也还没开始多久,所以并没有一个统一的matric,只能通过图看了。它的实验主要验证了两部分内容:
1. 将隐变量一个维度  改变,其余维度固定,用以验证disentanglement,如(a)(b)图,可以看到传统的方法在隐变量相互关联时并没有很好的解耦,而是将他们混合在了一起。每一行对应一个变量。
2. 将隐变量的一个维度  改变,其余维度顺其自然,这就是文中提到的因果生成,我们改变cause,effect就会随之改变,反之不成立,这个可以看作是使用了因果图的副产品吧。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存