1. 流模型的应用

    1. 它将f_{\theta }拆成了多个函数相乘,对应神经网络的每一层,因为经过了多层函数转换,因此最后表现出来就是多个对应雅可比行列式相乘;
  2. 面临的挑战

    1. 主要是雅可比行列式的计算太耗时,需要特殊变换比如变为上三角矩阵,方便计算行列式;
  3. 怎么变为三角矩阵

    1. 让每个输出分量 xi​=fi​(z) 只依赖于前 i 个输入分量 z≤i​=(z1​,z2​,...,zi​),可以理解为当前值只与过去相关,屏蔽未来信息,是不是很熟悉,就是掩码自注意力机制里面提到的,这样你能得到一个下三角矩阵,相反如果让输出分量 xi​=fi​(z) 只依赖于后面 的输入,你就能得到一个上三角矩阵;

  4. 几种经典的流模型算法

  5. NICE算法

    1. 将随机变量拆成无关的两部分,求雅可比行列式时,一部分对另一部求导时可以为0,就可以形成三角矩阵,方便求行列式;

    2. 后部分的zd+1通过叠加m求x,反过来xd+1可以减去m求z,满足其可逆性;

    3. m是输入了一个d维参数,输出n-d维的神经网络

    4. 统一说一下,z是被默认设置为高维高斯随机变量,因为高斯分布的可逆、可计算等特性默认用分布都用高维高斯去做近似,因此后面的算法默认都用的多维高斯分布(重点

  6. NICE最后的重缩放层

    1. NICE前面层都是加性计算,相当于调整其均值,缺少了乘性变换,就是对方差的调整,补足了其表达能力;

  7. Real-NVP算法

    1. 基于NICE算法,Real-NVP算法的d+1部分不仅使用了加法,还用了缩放的乘法;

  8. 插值检验

    1. 如何插值的?分别将A,B图输入模型的得到Za和Zb,再用zinterp​=(1−α)⋅Za+α⋅Zb,其中α 是一个 0~1 之间的数,再将zinterp​反向输入到模型得到Za和Zb的中间状态,由此可以看到Za到Zb隐变量是连续的;

    2. 上图中使用了二维球面插值,z1、z2、z3、z4分别是4幅图中每幅图的左上、右上、左下和右下4个图,当 ϕ′ 从 0→π/2 时,你可以观察一下z是怎么变化的;

  9. NVP机制应用到自回归模型后

    1. xn都由zn乘法缩放和加法偏移计算得出,对比NVP,它是串行了,x1得出x2,x2得出x3,而NVP是并行直接得整个x;

  10. MAF  z->x

    1. 慢,后面的x依赖前面x,比如采样x2时,μ2是依赖x1的,所以要先采样出x1才能算x2,因此是串行的;

  11. MAF x->z

    1. 快,x是全的,μ可以并行计算,训练时,x作为输入,可以并行算出μ等参数,那就能并行算出z;

  12. IAF

    1. 与MAF相反,z->x方向快,z完整,可并行计算所有的μ,很快没区别在于μ等参数依赖的是z,而不是x;

  13. PWN

    1. 一开始老师的模型是已经训练好的MAF,但是不用来生成,因为慢,然后我们要去训练一个学生IAF,最后丢掉老师模型,用这个学生的模型去生成;

    2. 一训练学生时,一开始是z是标准正态分布,用z生成x(IAF很快),教师模型用这个x输出z,再用z计算t(x)和s(x),得到KL散度,用梯度下降或者反向传输调整学生模型的参数,最后训练出一个IAF的模型用来生成x(IAF生成快)

    3. ,要更详细就看论文吧。

  14. MintNet

    1. 使用卷积,通过一些掩码等方式可以定义可逆的卷积和,但是会丢失一些信息,让详细看论文去吧。

  15. 高斯流

    1. 你可以换个角度理解,这种模型其实就是旨在样本数据通过变换可以转换为标准高斯分布。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐