Density estimation using Real NVP

Dinh L, Sohl-Dickstein J. and Bengio S. Density estimation using real nvp. ICLR, 2017.

一种可逆的 flow, 感觉很 diffusion 已经非常非常像了. 果然, 伟大的成果从来不是一蹴而就的.

Motivation

  • x 是原始数据, z 是隐变量, 作者希望找到一个可逆变换 f 满足:

    1. z=f(x) 服从一个简单的分布, 比如正态分布;
    2. 逆变换 f1 是容易操作的.
  • 如此一来, 我们就可以直接从一个简单的分布 pZ 中采样 z, 然后通过

    x=f1(z)

    就完成了 generation 的过程.

Real NVP

  • 至于怎么找到这个变换 f() 就是借用 flow 的思想了.

  • 我们知道, 对于 z=f(x)

    pZ(z)=pX(f1(z))|det(xf)|1pX(x)=pZ(f(x))|det(xf(x))|.

  • 我们假设 pZ(z) 服从一个简单的分布 (比如高斯分布), 如此一来只需要极大化对数似然即可:

    maxflog(pX(x))=log(pZ(f(x)))+log(|det(xf(x))|).

  • 整体的可行性要求:

    1. f() 具有较强的表达能力, 使得它能够将 x 映射到一般的简单分布中去;
    2. det(xf(x)) 是容易求解的.

Coupling layers

  • 作者介绍了一种 coupling layers, 符合我们所需的条件.

  • 每一层, 我们将输入 x 切分为 [x1,x2], 然后根据如下变换得到输出:

    y1=x1y2=x2exp(s(x1))+t(x1),

    其中 s,t 是可训练的 scale, translation function.

  • 容易证明:

    xy=[Id0x1y2diag(exp(s(x1:d)))],

    为一下三角矩阵, 所以它的行列式就是对角元素的乘积.

  • 如果给定 y, 反向求解 x 也是容易的:

    x1=y1,x2=(y2t(y1))exp(s(y1)).

  • 假设我们用了两层:

    z=f(y)=fg(x),

    xz=yfxg,

    det(xz)=det(yf)det(xg),

    只需一层层算就可以了.

  • 显然, 该思想可以很容易扩展到多层. 另外, 需要注意的是, 每一层, 输入的切分应当是各异的以避免一部分特征始终不变.

posted @   馒头and花卷  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2022-05-25 Neural Factorization Machines for Sparse Predictive Analytics
点击右上角即可分享
微信分享提示