阅读归一化流小综述
Normalizing Flows: An Introduction and Review of Current Methods
他喵的读文章读了好几天,日常很烦躁。
这篇文章是关于流模型的一个小综述,发在TPAMI(Early Access)上我是想不到的,截至2021/01/28影响因子17.8。去年5月刊出,现在有2次被引
https://ieeexplore.ieee.org/document/9089305
NF概述
总结就是流这个东西属于生成模型建模的一部分,现在的Normalizing流
在保证生成效果的同时要求生成过程可逆,也就是可以来回变。这个变来变去的过程一般包括采样,所以还需保证采样效率良好,这三个其实就是目前主要的模型改进方向
Normalizing流
没有正式翻译,我姑且称为归一化流。本来是从简单初始分布一步步到复杂数据分布的过程嘛,要求可逆可微(后者应该可以退化成连续)。那么流有两个方向,简单到复杂就是生成方向;反之称为normalizing方向,意思是复杂分布统统归一化为简单分布,就是这个意思
它的应用方向似乎不少,但是比较专,和生成模型相关的都可以,数据生成什么的也沾边
NF基础理解
基础的流理论,主要是概率分布之间的变化,那么自然有Jacobi的引入,后续针对它的结构、行列式计算也有很多改进。另外是基础理论,这个真的觉得难度一下子就上去了,涉及测度论
注意一个区别,微分同胚和双射不同!微分同胚是更强的,双射比较弱,原文是这么说的。自己感觉的话,微分同胚连续可微,双射不一定连续
流理论的两种主要应用,密度估计和变分推断,涉及流的两个方向的使用。正向即生成方向是直接计算复杂分布的概率密度的,因此这个过程要计算Jacobi。所以在密度估计问题中,由于这个密度指的是已知数据条件下,从复杂分布推导前面简单分布的概率密度,如果建模生成方向的话,则要计算其Jacobi的逆,这样复杂了,所以对密度估计一般建模归一化方向可能方便一点。
至于变分推断,就是一般的推断过程,需要重参数化技巧。不过我自己还没有见过有关这方面的流模型文章
NF方法分类
一图胜千言系列,文章也是按这个顺序介绍的,而且对应的方法相对前一种多有针对性的改进
逐点流,其实是逐维度的流,维度分开。显然表达能力比较欠缺,维度之间没有相关性
线性流,线性指线性变换。在逐点流的基础上维度之间线性组合,即进行线性变换,不妨设形式$Ax+b$。具体又分$A$对角,上下三角,置换,正交,$A$矩阵分解,$A$取卷积阵等,这些都算线性流!
其中的Periodic Convolutions可能和XQ师兄提到的变换基的卷积有所关系!
线性流的缺点还是表达能力,毕竟是线性(如果直接引入非线性特征变换,线性套非线性变换的话会很奇怪,为什么不直接非线性变换)
平面流&径向流,试图突破线性流,取非线性变换
- 平面流加了方向,见文中$(10)$式$x+uh(w^Tx+b)$,观察知,有一点残差的味道,前面弄出来个$x$好像是有利于Jacobi行列式估计的;另外,后面的$h$非线性,先线性再非线性,前面还有个所谓的方向$u$,这大概是平面流名称的由来
- 径向流用的是那种中心点的形式,有点像核函数的那种形式,见文中$(14)$式
耦合(coupling)流,有技巧的非线性变换,耦合函数也叫conditioner。一般的操作是维度拆开,一部分id,一部分用耦合函数作用,以前看的NICE就是这个套路,还取了名字叫加性耦合函数。
- 问题一:哪一部分变量取耦合作用,这些可能涉及到顺序的问题。常用的套路是每次非线性变换一部分变量,到后面,还能id的变量维度是减少的,因为先前非线性变换的信息已经够多
- 问题二:回去即归一化的方向,在问题一的假设中,此方向id的维度依次增多,语义信息保留,指的是高阶信息逐渐变成id,且还能在归一化的过程中保留
针对问题一,耦合往往使用分割维度的方式,其顺序可以随机置换,也有mask方式和选择Jacobi对角值更高的维度(信息更多吧)
中间插一段各种耦合函数的介绍:
- 直接仿射变换
- 非线性的二次变换
- 连续的混合密度
- 样条(插值?),又包括分段线性,分段二次,三次样条,etc
- 神经网络建模的自回归耦合方式,应该是依次套层
- 多项式平方和
- 分段双射耦合
自回归流,其实就是上述耦合函数作用对象变化,依次作用在先前所有的输入上
这样做的一个缺点是逆不好算;且由于是顺序的,难以并行计算
以残差网络为代表的流,正逆向建模的都有
正向是自然理解,用了耦合coupling的手段,维度分开,用残差加性处理加性和前面说的还不是太一样,对每次的输出也有耦合作用,见$(30)$式
逆向需要所谓re-arrange,这个记不清了,暂时不太明白
缺点是Jacobi难算,一个方案是采用det估计,由Lipschitz控制把det转换为计算迹,其中还有采样近似估计的trick。估计的方式不少,有偏无偏都有
对于这一类流,一个理解是ODE系统,这类网络可设计为可逆,有文中命题7保证,要求残差block被常数1,Lipschitz控制。但不好控制,一般需要控制网络的结构,由此又衍生出一些模型
连续流,字面上指离散得足够精细,也可依据上面ODE理解,中间状态足够精细就逼近连续系统。但是直接加深ResNet深度太SB了。基于此,这个分两类,ODE-based和SDE-based
前者即熟知的NODE+adjoint方法
相关改进有陈天琦参与的FFJORD,估计迹,降低计算和存储(连续流)复杂度,还有个思路是正则限制
ODE方法类也有缺点,一条path上Jacobi行列式不变号,解决方式是维度增广ANODE,以前读ANODE的时候一直对这个path不交叉有点迷惑,现在又多了一个解释!
我看的DDNF他们也介绍了,路径由许多微分同胚构成
SDE-based没怎么看过(Langevin flows):大概就是ODE与时间相关了,有随机项,也有固定的偏移项之类的东西
NF常用数据
实验数据方面比较固定。除了人工数据,参考文中表2、4即可。分别是UCI和常用实际数据
似乎UCI的数据都连续化了de-quantized,方式是对离散数据加均匀噪声,看成连续数据
NF挑战
这个文章提的挑战不多,感觉很多核心的东西没有明说,我也没看出来太多
从基础理论开始,自然是测度论太难做了,基测度,即初始分布的选取可以看成一种先验,也就是大家说取简单的好采样的就完事了。有生成的复杂度和效果之间的权衡?
另外,微分同胚的建模也很重要,上一篇看的DNNF就是
还有一点是损失函数的选取,现在普遍KL,也有其它距离介导的损失
再提一个理论上的东西,从欧氏空间到非欧空间哈哈。黎曼来袭,怎么把欧式转为黎曼。计算上必然复杂。这其中涉及到黎曼几何课上学习的东西,哈哈什么测地完备则测地线可以无限延伸,即空间中处处可以转换,也有切空间近似方式,亦或是考虑特定的黎曼空间,李群结构什么的😄
最后至于不连续流,个人觉得是特定应用场景下再使用就算了,而且一般也就是离散流de-quantized近似为连续流
参考文献
[1] Kobyzev, I., Prince, S., & Brubaker, M. (2020). Normalizing Flows: An Introduction and Review of Current Methods. IEEE Transactions on Pattern Analysis and Machine Intelligence, 1-1. https://doi.org/10.1109/TPAMI.2020.2992934