zoukankan      html  css  js  c++  java
  • CausalVAE: Disentangled Representation Learning via Neural Structural Causal Models

    Yang M., Liu F., Chen Z., Shen X., Hao J. and Wang J. CausalVAE: disentangled representation learning via neural structural causal models. arXiv preprint arXiv:2004.086975, 2020.

    隐变量的因果表示.

    主要内容

    我们通常希望隐变量(z)能够表示一些特别的特征, 通过改变(z)使得生成的图形某些属性发生相应的变换, 但是这种设定的方式并不具备因果的关系, 比方说

    image-20210606210209320

    这个摆锤, 其隐变量(z)是光照, 摆锤的角度, 影子的长短.

    我们可以改变摆锤的角度, 一般的生成模型摆锤的角度变了, 但是光照和影子长短没有发生变化, 实际上由于摆锤角度的变化, 对于的隐变量:影子的长短也应该发生相应的变化以满足物理的规律. 如何把这些因果关系融入到普通的VAE中是本文的独到之处.

    模型

    image-20210606210649943

    Encoder 部分:

    [epsilon = h(x, u) + zeta, ]

    (epsilon)可以看成是一个临时的隐变量;

    [z = (I - A)^{-1} epsilon. ]

    Decoder部分:

    [z_i = g_i(A_i circ z) + epsilon_i, ]

    这一部分是重构(z), 正是这一步的存在使得我们能够干预(z_i)使得其它的(z_j)也发生相应的改变.

    [x = f(z) + xi. ]

    联合分布为:

    [p_{ heta}(x, z, epsilon|u) = p_{ heta}(x|z, epsilon, u)p_{ heta}(epsilon, z|u), \ p_{ heta}(x|z,epsilon,u) = p_{ heta}(x|z) = p_{xi}(x-f(z)), \ p_{ heta}(epsilon,z|u) = p_{epsilon}(epsilon) p_{ heta}(z|u), quad p_{epsilon}(epsilon) = mathcal{N}(0, I), \ p_{ heta}(z|u) = prod_{i=1}^n p_{ heta}(z_i|u_i), quad p_{ heta}(z_i|u_i) = mathcal{N}(lambda_1(u_i), lambda_2^2(mu_i)). ]

    估计的后验分布为:

    [q_{phi}(z, epsilon|x, u) = q(z|epsilon)q_{zeta}(epsilon - h(x, u)), \ q(z|epsilon) = delta (z=(I-A)^{-1}epsilon). ]

    注: (z, u, epsilon in mathbb{R}^n, x in mathbb{R}^d.)

    ELBO

    由此可以推出ELBO:

    [mathbb{E}_{q_{mathcal{X}}}[mathbb{E}_{epsilon, zsim q_{phi}}[log p_{ heta}(x| z, epsilon,u)] - mathbb{D}(q_{phi}(epsilon, z|x, u))| p_{ heta}(epsilon, z|u)]. ]

    由于(p(z|epsilon) = delta(z=(I-A)^{-1}epsilon)), 所以上式可以进一步化为:

    [mathbb{E}_{q_{mathcal{X}}}[mathbb{E}_{q_{phi(z|x,u)}}[log p_{ heta}(x|z)] - mathbb{D}(q_{phi}(epsilon|x,u)|p_{epsilon}(epsilon))-mathbb{D}(q_{phi}(z|x,u)|p_{ heta}(z|u))]+mathrm{const}. ]

    关于(A)

    正如在这儿所论述的, (A)需要对应一个有向无环图, 本文采取的策略是:

    [H(A) = mathrm{tr}((I+frac{c}{n}A circ A)^n) - n =0, ]

    这里(c)是任意正数.

    同时为了满足(z)重构, 需要以下条件满足:

    [l_m = mathbb{E}_{q_{phi}} sum_{i=1}^n |z_i-g_i(A_i circ z)|^2 le kappa_2, ]

    注: 这里(z_i)是重构前的.

    特别的, 为了更好地用额外信息(不是很认同, 感觉得看实际情况吧):

    [l_u = mathbb{E}_{q_{mathcal{X}}} |u - sigma(A^Tu)|_2^2 le kappa_1, ]

    所以最终的损失为:

    [mathcal{L} = -mathrm{ELBO} +alpha H(A) + eta l_u + gamma l_m, ]

    注: 本文不像别的方法一样用augmented Lagrange 求解.

    注: 作者设计的实验实在是非常有趣.

  • 相关阅读:
    python3 解决tcp黏包方法一
    python3 udp不黏包但丢数据
    python3 类的单例模式
    python3 day07 练习题
    python3 tcp黏包情况二
    python3 tcp黏包情况一
    python3 subprocess模块
    python3 UDP协议下的socket
    python3 TCP协议下的socket
    python3 socket网络通信的整个流程
  • 原文地址:https://www.cnblogs.com/MTandHJ/p/14860202.html
Copyright © 2011-2022 走看看