我们通过组合K个transformation得到T变换,令 ,
我们可以将每个
2.2节我们知道了在合理的情况下,我们可以使用一个下三角雅可比矩阵将任意的概率分布
在正向计算中,因为输入
它的行列式就是对角线元素乘积,因此也非常好求
令
只要
仿射自回归流虽然很简单,但它的一大缺点是表达能力受限(limited expressivity),假如z属于高斯分布,那么z'也必属于高斯分布,但可以通过堆叠多个仿射变换来增强表达能力,但仿射自回归流是否是一个普遍的概率分布近似器就未知了。
不像上面连续使用K次变换,而是直接使用K个单调增函数
参数
为了克服非仿射变换不易求逆,可以使用K个分段函数作为transformer,每个区间
虽然ci可以是任意复杂的函数,比如神经网络,但每个zi都有一个ci的话,计算量和内存占用太大,解决的办法是参数共享
一种conditioner参数共享的方法是使用循环神经网络RNN/GRU/LSTM来实现,
这种方法的主要缺点是计算不再能并行化,因为计算
为了让
上面的计算过程是:开始不知道z,就随机化,但是z0是任意的,也就是我们可以直接得到h1,然后用z1’与它计算出z1,纠正随机初始化的z的第1个元素,之后以此类推,第D次迭代后,z被完全纠正。Masked conditioner 每次只能使用z(<i),即只能计算出hi。开始直接能得到h1,计算出z1后,再让z1通过conditioner函数得到h2,再用公式计算z2,以此类推。这里一共计算了D次c,而在正向计算时只用一次,求逆时计算代价是正向的D倍,对高维数据来说无法接受。一种解决办法是类似于牛顿法的更新公式(我们要求使 f(z) = z’成立的 z,即求g(z) = f(z) - z’的零点,那么更新公式 z = z - a * g(z)/g’(z) = z - a * (f(z)-z’)/J)
我们使用
掩码自回归流主要适用于不需要求逆或维度较低的情况。
Coupling layers是将z一分为二,前d个元素原封不动,d+1~D的元素依赖于前d的元素,h1~hd是常数,不依赖于z,hd+1~hD依赖于z<=d,计算公式类似上述几种方法
其雅可比矩阵左上角dxd是单位阵,右下角(D-d)x(D-d)为对角矩阵,其行列式即为右下角对角矩阵的行列式,即对角线乘积。
虽然coupling layers的计算效率更高,但表达能力受限,但我们可以通过堆叠多个coupling layer并在每层对z的元素进行重新排列来解决这个问题,比如第一层前d个元素被原封不动地copy,后D-d个元素通过神经网络,那第二层就原封不动地copy后D-d个元素,把前d个元素通过神经网络,如此交替多层,
在自回归流中输出zi'只依赖于z<=i,但元素的排列顺序有时是对模型学习有影响的,一种解决输入元素排列组合的方法是线性流,简单来说就是一个矩阵变换
雅可比矩阵就是W自身,我们需要保证W是可逆的,并且易于求逆和求行列式。
构建满足Lipschitz连续条件,且Lipschitz常数小于1的变换F
A为DxD的可逆矩阵,V、W为DxM的矩阵,M<D,有矩阵行列式引理如下
如果A是对角阵的话计算量从左式的
Planar flow是一个单层神经网络,只有一个神经元w
将Planar flow推广到有M个神经元W就是Sylvester flow,
假如标准化流有无数个连续的变换,即经过了无穷多个step的transformer,我们把这个step叫做时间,连续时间流可以通过下式构建
神经网络g接受时间t和状态zt作为输入,输出zt关于t的导数,我们可以通过求积分来得到变换的结果
逆变换为
log概率密度的导数可写为
一种近似求迹的方法如下,v是均值为0,协方差矩阵为单位阵的向量
对log概率密度积分,可以得到px与pu的关系式
推荐阅读
文心(ERNIE)3项能力助力快速定制企业级NLP模型,EasyDL全新升级!
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏