【写在前面】该论文发表于AAAI2020,提出了一个采用深度学习在数据存在缺失的情况下进行因果关系发现的框架,框架中采用了GAN和VAE,GAN网络主要用来进行数据补全,VAE则进行生成一个无向因果图,然后利用了加噪模型对因果图关系的方向进行确定。
论文链接:https://arxiv.org/abs/2001.05343v1
论文源码:未找到源码
Abstract: 通过对事件之间的一系列因果关系进行编码,因果网络可以方便地预测来自给定动作的影响,并分析其潜在的数据生成机制。由于数据的缺失,直接在部分观测数据上执行现有的因果发现算法可能会导致不正确的推理。该论文提出了 归因因果学习 (Inputated Causal Learning, ICL),去迭代地进行缺失数据归因和因果结构发现。
1. Introduction
因果网络可以进行精准决策、鲁棒性的不确定推理、可靠的故障诊断以及进行冗余消除。
巴拉巴拉,主要介绍了一些相关内容
2. Related Work
完整数据上的因果发现
从完整数据上进行因果关系发现的方法主要有两个:1)利用DAG上的马尔科夫属性;2)利用函数因果模型(FCM)中变量对的不对称性。第一种方法无法解决X-Y之间的方向问题,因为这是一种马尔科夫等价类,但是可以采用第二种方法解决该问题。
第一种方法包括基于约束的方法、基于分数的方法和混合方法。基于约束的方法是在DAG的变量之间发现条件独立性,例如PC、FCI算法等;基于分数的方法在马尔科夫等价类的搜索空间撒花姑娘使用评分标准执行结构学习,例如GES、DAG-GNN算法等;混合方法则是结合了基于约束和基于分数的思想,利用条件独立图,限制了基于分数的搜索空间。
第二种方法用来确定因果的方向。
不完整数据上的因果发现
从不完整数据上发现因果关系的方法也主要有两个:1)只使用可用的部分观测数据进行因果结构发现;2)输入缺失的条目,以恢复整个观察结果。
第一种方法对因果发现前所有具有缺失值的条目(行)执行(1)列表删除(2)测试式删除只会有效地忽略包含条件独立(CI)测试中涉及的缺失值的变量,当缺失机制不能被忽略,底层分布不太可能被恢复时,这些方法是合适的。
第二种方法尝试在执行因果发现之前推断缺失的值。以前的工作都使用期望最大化法或吉布斯采样法来进行归因,这些方法需要对底层结构的先验知识,因此是不实用的,但是这种方法又十分重要。
3. Imputed Causal Learning
本模型首先以不完全观测数据
X
‾
\overline{X}
X作为输入,然后同时开始进行缺失数据归因和结构学习来对因果框架和恢复的数据评估(Module A and B),然后进行成对的因果方向识别,并揭示了最终潜在的因果图
G
G
G (Module C)。
Preliminary
G上的线性因果架构可以被一个线性结构方程模型(SEM)表示:
X
j
=
∑
K
∈
p
a
j
G
β
i
j
X
i
+
u
j
X_j = \sum_{K \in pa_j^G} \beta_{ij}X_i+u_j
Xj=K∈pajG∑βijXi+uj
上式中的关系等价于
X
=
B
T
X
+
U
X=B^TX+U
X=BTX+U,
B
∈
R
d
×
d
B \in R^{d \times d}
B∈Rd×d是一个严格的上三角阵,
B
i
,
i
=
0
B_{i,i}=0
Bi,i=0,
B
i
,
j
≠
0
B_{i,j} \neq 0
Bi,j=0表示
X
i
X_i
Xi和
X
j
X_j
Xj之间有边。
U
:
=
(
u
1
,
u
2
,
.
.
.
,
u
d
)
∈
R
n
×
d
U:= (u_1, u_2, ..., u_d) \in R^{n \times d}
U:=(u1,u2,...,ud)∈Rn×d是一个噪声矩阵。进一步,SEM模型可以表示为
X
=
B
T
f
(
x
)
+
U
X=B^Tf(x)+U
X=BTf(x)+U。
3.1 从不完全数据中因果框架发现
问题定义
在缺失数据的情况下,假设输入数据中不存在混杂因子,这意味着我们可以观察到所有的变量,但有些样本可能会被遗漏。我们定义不完全版本下的
X
‾
:
=
{
X
‾
1
,
X
‾
2
,
.
.
.
,
X
‾
d
}
\overline{X} := \lbrace \overline{X}_1,\overline{X}_2,...,\overline{X}_d \rbrace
X:={X1,X2,...,Xd},
R
=
(
R
1
,
R
2
,
.
.
.
,
R
d
)
R=(R_1,R_2,...,R_d)
R=(R1,R2,...,Rd)是相应的masks,
R
∈
{
0
,
1
}
R \in \lbrace 0, 1 \rbrace
R∈{0,1}是一个二进制随机变量
X
‾
i
=
{
X
i
,
i
f
R
i
=
1
∗
,
o
t
h
e
r
w
i
s
e
\overline{X}_i = \begin{cases} X_i, if R_i=1 \\ *, otherwise \end{cases}
Xi={Xi,ifRi=1∗,otherwise
* 表示缺失数据。
本论文中从不完整数据中因果框架发现就是从不完全的观测数据 X ‾ \overline{X} X中推断出B,做法就是迭代归因 X ‾ \overline {X} X并且更新B。
迭代归因 X ‾ \overline {X} X
在输入不完全数据 X ‾ \overline {X} X后,首先就是根据 X ‾ \overline {X} X恢复潜在的联合概率分布 P ( X ) P(X) P(X),然后根据现有结构去表示 P ( X ‾ ) = ∏ i ( X ‾ i ∣ P A i ) P(\overline {X}) = \prod_i(\overline {X}_i|PA_i) P(X)=∏i(Xi∣PAi), P A i PA_i PAi表示节点i的父节点,恢复的数据用 X ^ ∈ R n × d \hat{X} \in R^{n \times d} X^∈Rn×d表示,在该部分需要做的就是最小化 P ( X ) P(X) P(X)和 P ( X ‾ ) P(\overline {X}) P(X).
更新B
每次更新的迭代 X ‾ \overline {X} X之后,都会都会推断 X ^ = B T f ( X ^ ) + U \hat{X} = B^T f(\hat{X}) + U X^=BTf(X^)+U中的回归参数B。
迭代更新
对于Module A和Module B进行迭代联合学习。
文章方法
文章的整个方法是基于GAN和VAE,其中Module A为GAN结构,它包括了一个生成器(G)和鉴别其(D);Module B是一个VAE结构,包括了编码器和解码器,两个模块进行联合训练,前者负责恢复缺失的数据,后者负责生成因果结构B。
缺失数据归因
由于GAN无法将NaN值作为输入,因此使用一个服从标准正态分布 N ∼ N ( 0 , I ) N\sim N(0, I) N∼N(0,I)的噪声变量 N = ( N 1 , N 2 , . . . , N d ) N=(N_1, N_2,...,N_d) N=(N1,N2,...,Nd)初始化归因过程,将NaN值采用 X ‾ = R ⨀ R + ( 1 − R ) ⨀ N \overline{X} = R \bigodot R +(1-R) \bigodot N X=R⨀R+(1−R)⨀N替换。
生成器以
X
‾
,
R
,
N
\overline{X},R, N
X,R,N作为输入,计算公式如下:
X
~
=
G
(
R
,
X
‾
,
(
1
−
R
)
⨀
N
)
\tilde{X} = G(R, \overline{X},(1-R)\bigodot N)
X~=G(R,X,(1−R)⨀N)
将生成器得到的对应缺失位置的数据与原来的数据进行结合,就可以得到归因之后的数据:
X
^
=
R
⨀
X
‾
+
(
1
−
R
)
⨀
X
~
\hat{X} = R \bigodot \overline{X} + (1-R)\bigodot \tilde{X}
X^=R⨀X+(1−R)⨀X~
鉴别器D的作用就是判定生成器G生成的数据
X
^
\hat{X}
X^中的数据是生成的补全数据还是真实的数据,
因果结构学习
该部分采用了一篇论文中的因果结构发现算法,将该任务看成一个连续优化问题,其目的就是为了发现一个因果图
G
~
\tilde{G}
G~满足下面的公式:
G
~
=
g
(
a
r
g
m
i
n
G
∈
R
d
×
d
S
D
(
G
)
)
s
.
t
.
h
(
G
)
=
t
r
[
(
I
+
α
B
∘
B
)
d
]
−
d
=
0
\tilde{G} = g(argmin_{G \in R^{d \times d}} S_D(G)) \\ s.t. h(G) = tr[(I+\alpha B \circ B)^d] - d = 0
G~=g(argminG∈Rd×dSD(G))s.t.h(G)=tr[(I+αB∘B)d]−d=0
h(G)=0是为了确保G是无环图。
编码器和解码器都采用了多层感知机(MLP),具体公式如下:
f
(
U
)
=
(
I
−
B
T
)
M
L
P
(
X
^
,
W
1
)
X
~
=
M
L
P
(
(
I
−
B
T
)
−
1
(
f
(
U
)
,
W
2
)
)
f(U) = (I-B^T)MLP(\hat{X}, \boldsymbol{W_1}) \\ \tilde{X} = MLP((I-B^T)^{-1}(f(U),\boldsymbol{W_2}))
f(U)=(I−BT)MLP(X^,W1)X~=MLP((I−BT)−1(f(U),W2))
以上两个公式分别表示Module B VAE模型的编码器和解码器,其中U是噪声向量,B是邻接矩阵,
B
i
,
j
≠
0
B_{i,j} \neq 0
Bi,j=0说明节点i和节点j之间有依赖关系。
联合训练
损失函数主要分为两个部分,补全缺失数据Loss和结构学习Loss。
在GAN网络中,使用极小最大值的loss计算方式,
m
i
n
G
m
a
x
D
L
i
(
D
,
G
)
min_{G} max_D L_i(D,G)
minGmaxDLi(D,G), 其中GAN的损失函数如下:
L
i
(
D
,
G
)
=
E
X
‾
,
R
,
N
[
R
T
l
o
g
D
(
G
(
R
,
X
‾
,
(
1
−
R
)
⨀
N
)
)
+
(
1
−
R
T
)
l
o
g
(
1
−
D
(
G
(
R
,
X
‾
,
(
1
−
R
)
⨀
N
)
)
)
]
L_i(D,G) = E_{\overline{X},R,N}[R^T logD(G(R, \overline{X},(1-R)\bigodot N)) + (1-R^T)log(1-D(G(R, \overline{X},(1-R)\bigodot N)))]
Li(D,G)=EX,R,N[RTlogD(G(R,X,(1−R)⨀N))+(1−RT)log(1−D(G(R,X,(1−R)⨀N)))]
GAN训练生成器去最小化R的预测精度,鉴别器最大化R的预测精度。
因果关系学习的损失函数如下:
L
e
=
−
E
q
(
U
∣
X
^
)
[
l
o
g
p
(
X
^
∣
U
)
+
D
K
L
(
a
(
U
∣
X
^
)
∣
∣
p
(
U
)
)
]
L_e = -E_{q(U|\hat{X})}[logp(\hat{X}|U) + D_{KL}(a(U|\hat{X})||p(U))]
Le=−Eq(U∣X^)[logp(X^∣U)+DKL(a(U∣X^)∣∣p(U))]
设
Φ
\Phi
Φ和
Θ
\Theta
Θ是GAN和学习框架的参数集合,规范化之后的损失函数为:
m
i
n
Φ
f
(
Φ
)
=
L
i
(
G
,
D
)
m
i
n
B
,
Θ
=
−
L
e
,
s
.
t
.
h
(
B
)
=
0
min_{\Phi} f(\Phi) = L_i(G,D) \\ min_{B,\Theta} = -L_e,s.t. h(B)=0
minΦf(Φ)=Li(G,D)minB,Θ=−Le,s.t.h(B)=0
具体算法如下:
3.2 因果关系方向识别
在因果关系方向判别上主要面临的问题就是等价类问题。对于这个问题可以采用加性噪声模型解决,本论文使用的是级联加性噪声模型(CANM)。
加性噪声模型原理:
CANM中的对数边缘似然公式如下:
最终根据以下公式来决定因果边的方向:
在得到因果图G之后,我们要保证它是一个有向无环图,遍历因果图中的路径,查看是否存在环,如果存在环,则将环中分数最小的一个边去掉。
4. 实验
实验数据:人造数据
实验结果:
此外还在一个真实数据集上进行了实验,AutoMPG,实验结果如下:
【写在最后】自己也是在逐渐进行论文学习,如果有什么不正确或者不明白的地方,大家可以留言或私信进行讨论哦~