总览-对CS236课程Lecture 8的整理

-
如何将上节课的数据想法实现成模型

- 它将
拆成了多个函数相乘,对应神经网络的每一层,因为经过了多层函数转换,因此最后表现出来就是多个对应雅可比行列式相乘;
- 它将
-
流模式现存的困难

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

- 让每个输出分量 xi=fi(z) 只依赖于前 i 个输入分量 z≤i=(z1,z2,...,zi),可以理解为当前值只与过去相关,屏蔽未来信息,是不是很熟悉,就是掩码自注意力机制里面提到的,这样你能得到一个下三角矩阵,相反如果让输出分量 xi=fi(z) 只依赖于后面 的输入,你就能得到一个上三角矩阵;
- 让每个输出分量 xi=fi(z) 只依赖于前 i 个输入分量 z≤i=(z1,z2,...,zi),可以理解为当前值只与过去相关,屏蔽未来信息,是不是很熟悉,就是掩码自注意力机制里面提到的,这样你能得到一个下三角矩阵,相反如果让输出分量 xi=fi(z) 只依赖于后面 的输入,你就能得到一个上三角矩阵;
-
接下来介绍几种流模型的算法,第一个是NICE算法,其中的加性耦合层如下

-
将随机变量拆成了两个分量,使用上一篇文章末尾的两维流模型的雅可比行列式,可以得到以上结论;
-
NICE算法中这样拆的目的就是让其雅可比行列式称为三角行列式方便求解。
-
-
NICE最后的重缩放层

-
NICE前面层都是加性计算,相当于调整其均值即偏差,缺少了乘性变换,就是对方差的调整,补足了其表达能力;
-
只和
有关,如果
对其他z求偏导就是为0的,而对
求偏导是等于
,因此其雅可比行列式是等于
的连乘。
-
-
NICE生成的图像如下

-
仔细看生成的效果确实不太行,人脸有点别扭;
-
-
NICE的自然扩展Real-NVP

-
基于NICE算法,Real-NVP算法的d+1部分不仅使用了加法,还用了缩放的乘法;
-
为了让缩放因子大于0,就使用了exp,缩放比例用
;
-
区别于NICE,其雅可比行列式不等于1;
-
-
Real-NVP机制应用到自回归模型后成为MAF

-
xn都由zn乘法缩放和加法偏移计算得出,对比NVP,它是串行了且很慢,x1得出x2,x2得出x3,而NVP是并行使用
生成了
,
也是一次性生成的;
-
-
MAF x->z

-
快,x是全的,μ可以并行计算,训练时,x作为输入,可以并行算出μ等参数,那就能并行算出z;
-
总结就是MAF编码器提取隐变量快,解码器生成数据慢;
-
-
IAF

-
与MAF相反,z->x方向,z完整,可并行计算所有的μ即生成数据快,区别在于μ等参数依赖的是z,而不是x;
-
总之,MAF训练快,IAF生成快,有一种将两种结合起来的方式,PWN如下。
-
-
PWN

-
一开始先用MAF训练一个老师的模型,但是不用来生成,因为慢,然后我们要去训练一个学生IAF,最后丢掉老师模型,用这个学生的模型去生成;
-
训练学生IAF时,一开始的z1使用标准正态分布,用z1生成x1(IAF很快),教师模型用这个x1输出z2,再用z1和x1计算s(x)和,用z2和x1计算t(x),得到KL散度,用梯度下降或者反向传输调整学生模型的参数,最后训练出一个IAF的模型用来生成x(IAF生成快)。
-
-
MintNet

-
借鉴PixelCNN中的掩码卷积来让雅可比行列式成为三角行列式,然后通过让雅可比矩阵的对角线元素都不为0,使其可逆;
-
-
贴个对比图

-
总结一下
-
流模型应用时,会将f分成多层,这也符合流的概念;
-
因为流模型中雅可比行列式的计算难度高,因此通过掩码的方式可将其变换为三角矩阵;
-
介绍了两种流模型,NICE和Real-NVP,NICE算法通过将Z拆分成两段,通过互求偏导为0来构造三角雅可比行列式,而NVP则是将加性耦合和缩放放同一层中;
-
通过这种使用加性耦合和缩放的方式应用到自回归中诞生了MAF、IAF、MAF+IAF和MintNet,MAF训练快生成慢,IAF训练慢生成快,通过总和他们的优点诞生了蒸馏法即PWN,而MintNet则是PixelCNN通过其掩码卷积来使用雅可比行列式,再通过让雅可比矩阵的对角线元素都不为0,使其可逆,就可用流模型的计算方式。
-
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)