Normalizing Flows入门(中)

2020 年 8 月 2 日 AINLP

Normalizing Flows入门(上)

3. 构建标准化流(一):有限组合的变换

我们通过组合K个transformation得到T变换,令

我们可以将每个 都设为一个参数为 的神经网络,下面用 来统一表示这两者,但是这带来的问题是,我们必须保证该神经网络是可逆的,并且能够容易计算,否则,上述的正向KL散度需要变换 来做sampling,逆向KL散度需要 来evaluating desity,如果变换 的逆不存在或不易求,则density evaluation或sampling将是效率极低的,甚至无法处理的。至于是否要求 有高效的求逆方法、 到底是使用 还是 ,则由具体的使用目的决定。下面忽略下标k,使用 表示神经网络, 表示输入, 表示输出。

3.1 自回归流 Autoregressive flows

2.2节我们知道了在合理的情况下,我们可以使用一个下三角雅可比矩阵将任意的概率分布 变换为均匀分布,自回归流就是这样的一种构建方法

就是我们的transformer, 是第i个conditioner,该变换是严格单调函数,因此必可逆。变换 的参数为 由conditioner决定,描述当输入的 变化时,输出 如何变。conditioner唯一的限制就是它只能将 作为输入,因此它可以是任意一个复杂的神经网络,不必关心是否可逆等问题。因此,可以看出, 的参数 其实就是conditioner的参数,但有时变换 也有它自己的额外参数(除了 )。上述变换的逆变换为

在正向计算中,因为输入 是完全已知的,那么所有的 可以同时一次性求出来,因此 也可以同时求出来,但是在求逆变换的计算时,要计算 前必须先把 都计算出来,因为 的输入。很明显,自回归流的雅可比矩阵是下三角形的,因为任意的 都不依赖 ,那么 关于 的偏导都为0,因此雅可比矩阵可写为

它的行列式就是对角线元素乘积,因此也非常好求

3.1.1 各种 Transformer 的实现

仿射自回归流(Affine autoregressive flows)

为下式

只要 不为0, 变换的逆就存在,我们可以令 ,这样 就是一个不受限制的参数了,该变换的雅可比行列式为

仿射自回归流虽然很简单,但它的一大缺点是表达能力受限(limited expressivity),假如z属于高斯分布,那么z'也必属于高斯分布,但可以通过堆叠多个仿射变换来增强表达能力,但仿射自回归流是否是一个普遍的概率分布近似器就未知了。

非仿射神经网络变换(Non-affine neural transformers)

不像上面连续使用K次变换,而是直接使用K个单调增函数 的锥组合(conic combinations),h中的参数皆大于0。其实就是给仿射变换加上一个激活函数,再线性组合K种不同参数下的结果。一般使用反向传播优化参数,缺点是该变换往往不可逆,或者只能不断迭代求逆。

积分变换(Integration-based transformers)

可以是任意的正值神经网络,导数很好求,就是 ,但积分缺乏analytical tractability,一种解决方法是让 为一个2L次的正多项式,积分结果就是关于 的2L+1次的多项式,由于任意的2L次多项式可以写为多个L次多项式的平方之和,我们可以定义 为K个L次多项式平方之和的积分,如下

参数 不受限制,仿射变换为L=0时的特例。由于5次及以上的方程没有根式解,因此当L>=2时,2L+1>=5,则无法直接求 ,只能使用二分搜索迭代求解。

神经样条流(Neural spline flows)

为了克服非仿射变换不易求逆,可以使用K个分段函数作为transformer,每个区间 是一个简单的低次单调函数,要求是在每个区间的端点必须与其相邻的区间连续,整个大区间两端的端点 可以随意。

3.1.2 各种 conditioner 的实现

虽然ci可以是任意复杂的函数,比如神经网络,但每个zi都有一个ci的话,计算量和内存占用太大,解决的办法是参数共享

循环自回归流(Recurrent autoregressive flows)

一种conditioner参数共享的方法是使用循环神经网络RNN/GRU/LSTM来实现,

这种方法的主要缺点是计算不再能并行化,因为计算 必须先计算 ,当处理高维数据,比如图片、视频时会很慢

掩码自回归流(Masked autoregressive flows)

为了让 不能依赖 ,可以通过将神经网络中这些连接给去掉,方式是给矩阵中这些位置乘上0,就像「Transformer」中的self-attention在计算softmax时用负无穷mask掉上三角的注意力权重,达到future blind的目的。但该方法的一大缺点是求逆时的计算量是正向计算的D倍

上面的计算过程是:开始不知道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

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个元素通过神经网络,如此交替多层,

3.2 线性流 Linear flows

在自回归流中输出zi'只依赖于z<=i,但元素的排列顺序有时是对模型学习有影响的,一种解决输入元素排列组合的方法是线性流,简单来说就是一个矩阵变换

雅可比矩阵就是W自身,我们需要保证W是可逆的,并且易于求逆和求行列式。

3.3 残差流 Residual flows

是一个输出D维向量的神经网络,我们需要对其加以合适的限制,以让其可逆

3.3.1 Contractive residual flows

构建满足Lipschitz连续条件,且Lipschitz常数小于1的变换F

3.3.2 Residual flows based on the matrix determinant lemma

A为DxD的可逆矩阵,V、W为DxM的矩阵,M<D,有矩阵行列式引理如下

如果A是对角阵的话计算量从左式的 降到了

Planar flow

Planar flow是一个单层神经网络,只有一个神经元w

是一个可微的激活函数例如tanh,假设 处处大于0,且有上界S,则当 时,雅可比行列式大于0

Sylvester flow

将Planar flow推广到有M个神经元W就是Sylvester flow, ,S(z)是对角矩阵,元素是 的对角线上的元素

4. 构建标准化流(二):连续时间的变换

假如标准化流有无数个连续的变换,即经过了无穷多个step的transformer,我们把这个step叫做时间,连续时间流可以通过下式构建

神经网络g接受时间t和状态zt作为输入,输出zt关于t的导数,我们可以通过求积分来得到变换的结果

逆变换为

log概率密度的导数可写为

一种近似求迹的方法如下,v是均值为0,协方差矩阵为单位阵的向量

对log概率密度积分,可以得到px与pu的关系式


推荐阅读

文心(ERNIE)3项能力助力快速定制企业级NLP模型,EasyDL全新升级!

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
0

相关内容

【TAMU】最新《时间序列分析》课程笔记,527页pdf
专知会员服务
177+阅读 · 2020年9月12日
【文本生成现代方法】Modern Methods for Text Generation
专知会员服务
43+阅读 · 2020年9月11日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
神经常微分方程教程,50页ppt,A brief tutorial on Neural ODEs
专知会员服务
70+阅读 · 2020年8月2日
《常微分方程》笔记,419页pdf
专知会员服务
70+阅读 · 2020年8月2日
专知会员服务
61+阅读 · 2020年3月4日
一文读懂线性回归、岭回归和Lasso回归
CSDN
33+阅读 · 2019年10月13日
激活函数还是有一点意思的!
计算机视觉战队
12+阅读 · 2019年6月28日
再谈变分自编码器VAE:从贝叶斯观点出发
PaperWeekly
13+阅读 · 2018年4月2日
入门 | 一文看懂卷积神经网络
算法与数学之美
7+阅读 · 2018年2月22日
【入门】数据分析六部曲
36大数据
17+阅读 · 2017年12月6日
最近流行的激活函数
计算机视觉战队
6+阅读 · 2017年11月27日
入门 | 一文概览深度学习中的激活函数
深度学习世界
4+阅读 · 2017年11月3日
蒙特卡罗方法入门
算法与数学之美
6+阅读 · 2017年9月26日
自然语言处理 (三) 之 word embedding
DeepLearning中文论坛
19+阅读 · 2015年8月3日
Real-time Scalable Dense Surfel Mapping
Arxiv
5+阅读 · 2019年9月10日
Learning Implicit Fields for Generative Shape Modeling
Arxiv
10+阅读 · 2018年12月6日
Arxiv
6+阅读 · 2018年10月3日
Arxiv
23+阅读 · 2018年10月1日
Arxiv
21+阅读 · 2018年5月23日
Arxiv
6+阅读 · 2018年3月12日
VIP会员
相关VIP内容
【TAMU】最新《时间序列分析》课程笔记,527页pdf
专知会员服务
177+阅读 · 2020年9月12日
【文本生成现代方法】Modern Methods for Text Generation
专知会员服务
43+阅读 · 2020年9月11日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
神经常微分方程教程,50页ppt,A brief tutorial on Neural ODEs
专知会员服务
70+阅读 · 2020年8月2日
《常微分方程》笔记,419页pdf
专知会员服务
70+阅读 · 2020年8月2日
专知会员服务
61+阅读 · 2020年3月4日
相关资讯
一文读懂线性回归、岭回归和Lasso回归
CSDN
33+阅读 · 2019年10月13日
激活函数还是有一点意思的!
计算机视觉战队
12+阅读 · 2019年6月28日
再谈变分自编码器VAE:从贝叶斯观点出发
PaperWeekly
13+阅读 · 2018年4月2日
入门 | 一文看懂卷积神经网络
算法与数学之美
7+阅读 · 2018年2月22日
【入门】数据分析六部曲
36大数据
17+阅读 · 2017年12月6日
最近流行的激活函数
计算机视觉战队
6+阅读 · 2017年11月27日
入门 | 一文概览深度学习中的激活函数
深度学习世界
4+阅读 · 2017年11月3日
蒙特卡罗方法入门
算法与数学之美
6+阅读 · 2017年9月26日
自然语言处理 (三) 之 word embedding
DeepLearning中文论坛
19+阅读 · 2015年8月3日
相关论文
Top
微信扫码咨询专知VIP会员