小注包括:
1)以个人视角,分析了作者提出的新框架的动机,做一些讨论;
2)给出了一些关键公式的简单证明或说明;
记号约定:
1)向量用小写粗体字母表示;2)矩阵用大写字母表示;3)函数用小写非粗体表示;4)随机向量用大写字母表示;5)用下标取向量、矩阵的元素时,使用对应的小写字母,例如取的第d个元素为;
动机
在 VAE 模型中,我们通过优化对数似然函数的一个变分下界来进行训练;在 GAN 中,我们直接避免优化难处理的对数似然函数,转而训练一个判别网络产生误差信号来训练生成网络。而在这两篇文章中,作者返璞归真,从随机变量的可逆映射出发收获了一个生成式建模的新思路,即:已知和,求。
与 VAE 的思想类似,我们期望对一个可处理的概率分布进行采样,并通过一个确定性神经网络来生成数据样本,或者反过来有;其中为网络参数,为了保持简洁,下面的讨论将省去这些记号。由下面的变量变换公式,我们得到一个计算数据似然的公式:
为了达到上面的变换,显然我们需要:
a)让随机向量的定义空间与随机向量的定义空间,即的定义域(domain)和上域(codomain)具有 一样的维度,我们设维度均为;
b)我们需要 是 所在的空间到所在的空间的 微分同胚 (Diffeomorphism)。若,,n 至少大于等于 1;且需要雅可比行列式不为 0,即是一个局部满秩映射;根据 隐函数定理 我们就可以得到这样的一个 可微 双射(bijective) 。
讨论:我们要求是一个微分同胚,是否要求太高呢?
在深度学习的后向传播框架下,我们使用的都是基于梯度的优化算法,因此网络一阶可导是最基本的要求;的确,网络中的线性变换或者仿射变换层显然是无穷次可导的,而大部分激活函数也都是无穷次可导的;即便是Relu函数也仅在0点不可导;拿某一个神经元来讲,它可以写为,其中为内积运算;
若参数 为 向量,则我们可以直接忽略对应的维度;否则,使得线性函数等于 0 的集合构成了原空间的一个超平面,是原空间中测度为 0 的集合;因此有限个Relu单元的神经网络总体上还是几乎处处可导的,并且是连续可导的。因此,我们认为神经网络不可导的概率为 0,我们下面默认网络是一个微分同胚。
不过,我们无法保证一个神经网络在训练过程中始终保持非 0 的雅可比行列式,更甚是远离 0 的雅可比行列式;所以,作者在后面手动设计了一类 耦合层 ,只把不影响 雅可比矩阵的稳定性 的那部分参数交给神经网络来学习,所以只要神经网络不涉及 雅可比矩阵 对角线上的元素,则只要是连续可导的函数类即可,否则还是需要保证雅可比矩阵的满秩性。
Proof of formula (1):
设,而分别为空间中的包含的区域,且为至少 1 阶的微分同胚,则:
再对下式作变量变换,而根据 积分的变量变换公式 有:
由于上两式对任意小的包含的 区域 都成立,令其体积 得:
由于:
1)逆函数的雅可比矩阵等于函数的雅可比矩阵的逆;
2)逆矩阵的行列式等于原矩阵的行列式的逆(乘法逆,即倒数,这么说只是为了顺口点);
3);
因此:
即:
有了上面的变量变换公式,我们的对数极大似然目标函数为:
就像 VAE 模型中只能优化对数似然的变分下界一样,现在我们必须对上(2)式中涉及到的组件作出一些限制,使得我们可以处理这样的目标函数,并同时保留较强的表示能力。
1)首先,我们希望先验分布 是容易采样的;显然,当它是各维度不相关的基础分布(如,标准多元高斯分布、isotropic多元高斯分布)时,我们可以直接对其采样;
2)其次,我们希望(2)式中的雅可比行列式是容易计算的;
3)再有,我们希望(2)式中的函数的逆映射是容易计算的,以便可以轻易地采样;
如何达到上面的期望呢?
NICE准则
既然我们假设是可分解成若干组独立概率分布的乘积,我们不妨一步到位,假设每组只包含一个变量 ,相当于把建模压力基本上全部给到神经网络;即;则我们把展开写为:,代入(2)式得:
我们称上式为 non-linear independent components estimation 准则,即 NICE 准则。
模型架构
为了达到上面的(2)、(3)的期望,我们考虑那些容易计算雅可比行列式和逆阵的矩阵,先从下面两组视角来讨论作者提出目标架构的动机:
动机探讨1:线性代数
从线性代数中,我们知道每个矩阵可以只通过左乘一系列基础矩阵得到行阶梯形矩阵(row echelon form);特别地,当为方阵时,可以通过基础矩阵化为上三角矩阵;即可逆方阵,为基础矩阵;作行变换时,这里的除了交换两行外都是下三角矩阵,所以我们不妨把交换矩阵全部提到最前面,统一将的行预排列好,即我们使用一个排列矩阵,使得我们仅通过下三角变换就能将变为上三角阵;即,;又下三角的逆阵也是下三角阵,因此有:或者。
我们得到了矩阵的LU分解;如果方阵可逆,我们能将其分解为基础矩阵的乘积;这里的每个基础矩阵只对一行进行变换,更详细点我们可以认为在对向量作变换时,用的视角来看,相当于在及联变换序列中,每次只对输入向量的一个维度进行变换;其中若是交换两行的矩阵,则事实上它只是交换了两个变量,它对全局的行列式的贡献只是 +1 或是 -1 ,而我们的变量变换会使用绝对值,所以事实上这种交换并没有带来什么麻烦。
所以我们可以对线性变换(对应的矩阵)进行分解,使得我们得到一系列的可逆矩阵,每个基础矩阵的行列式是容易计算的,并且基础矩阵的逆阵的计算也是平凡的。
因此,我们有了一个处理复杂雅可比矩阵的方法。
动机探讨2:多元微分学
由于我们处理的是更加一般的可微向量值函数,并不是简单的线性函数,因此不可避免地,我们需要微分学相关的推理。我们仍然期望向量值函数可以像线性变换那样化为若干个简单、易处理的函数的复合,这是否可以呢?不要忘了这里的函数是微分同胚(即至少1次连续可导、可逆、逆函数也具有同样的光滑程度),多元微分学中的相关定理告诉我们,这是可以的:微分同胚可以化为若干个最简微分同胚的复合,每个最简微分同胚只对输入变量中的某一个维度进行变换,而保持其它的维度不变;即:,其中只对一个维度进行变换;例如,我们将变换详细写开来,如下:
其对应的雅可比矩阵为:
显然,这样简单矩阵的行列式是容易计算的。
根据复合映射求导定理:复合映射的雅可比矩阵等于各个映射的雅可比矩阵的复合,有:
其中:,
再根据行列式的性质:,若每个容易计算,则复合函数的雅可比矩阵,也会容易计算。
另外,顺便提一下复合函数的逆等于各函数的逆的复合:,令其左乘和右乘都能得到恒等映射,便可验证。
动机探讨3:耦合律
为了引出下面的 耦合律(coupling law),我们分析一下上面的矩阵(4):若函数和变量无关,则计算逆和行列式是 trivial 的。不过,矩阵(4)是一个极端情况,我们可以考虑稍微复杂一点的映射。其实,如果我们只想要雅可比矩阵容易求逆,容易计算行列式;则只要保证其是三角矩阵即可;据此启发,我们何不考虑这样的变换:
我们啰嗦一点,我们再来分析一下上式是个可行的方案,需要满足条件:
1)每个函数关于的偏导数不为0;
2)希望是个可逆映射,即给定反解出:当可逆时,我们可以算出,代入得到一个关于的函数,若给定的情况下关于又是一个可逆函数,则我们同样能反解出;依此类推,当给定的条件下,关于是可逆的,则又能解出。
若有了上面的性质,则我们就可以得到一个可处理的方案,再例如下式:
其中:只要保证是和无关的连续可导函数;且连续可导函数关于的导数不为0,比如说单调函数。
不过,像上面这样设计的可导映射,的确满足了可处理性,但如此细致的分解是不利于工程中的构造,比如:神经网络的设计。所以,一般情况下,我们可以考虑把变量分为若干组;比如说 2 组,就像作者所做的那样。
动机的总结:
综上,不论从线性变换的矩阵分解的角度,还是从微分同胚分解的角度,我们的目标都是把复杂的函数分解为可逆的、简单的函数组的复合,不过我们上面讨论的是极端的情况,即:把函数彻底分解为最简单的函数的复合;不过,跟作者类似地,我们把变元分解的更细一点,然后堆叠的模块更多一点会有什么不一样的效果呢,留作以后再分析吧。
下面,我们引出作者的构想:
耦合层
为了引入下面的耦合层(coupling layer),设,为索引集的一个划分,即:且,其中。记,,则映射为:
其中:满足给定第二个参数的条件下,关于第一个参数是可逆映射,称之为耦合律。
不妨对方程组(5)进行重排,使得中对应的变量全部排到前面(因为这个操作仅仅对应着一个线性变换,更确切地说,是一个置换矩阵),则方程组(5)对应的雅可比矩阵为:
显然,当为对角矩阵时,有;不过我将在一般的情况下简单证明一下这个结论:
命题:设,则:,其中:,为阶 0 矩阵,。
Proof:
我想,正儿八经的证明应该使用数学归纳法,比较简单清晰;不过我尝试用眼瞪+口述法从行列式的展开式定义来说明这个结果是对的,考虑矩阵 的行列式的多项式展开定义:
其中:为 D 元对称群,也就是所有长度为 D 的排列全体;为排列对应的符号;为矩阵的第行,第列的元素。
因为矩阵的右上角的的子矩阵为 0 矩阵,所以定义(6)中的单项式,只要前 d 项有一个包括在 0 矩阵中,则该项直接为 0;因此,我们只能考虑那些前 d 项在子矩阵中选的单项式。
由行列式的定义,每行每列只能挑选一个元素;因此,后 D-d 项也只能从子矩阵中挑选了。由此,我们发现可以将所有的单项式进行因式分解:因为每个固定的单项式前 d 个元素的乘积都对应着子矩阵的所有可能的单项式,利用乘法关于加法的分配律得:
由于对于所有的的可能组合,都能提取到相同的因子;而的所有可能的组合就是:。
余下的就是确认符号是否成立了,从符号的逆叙数定义来看:
设的逆序数为,则;而的逆序数分别为,即:;但是对于那些不为 0 的单项式,它的前 d 个元素保持在前 d 列之中,后 D-d 个元素保持在后 D-d 列之中;也就是前 d 个元素的任何一个都排在后 D-d 个元素之后,不会对逆序数有任何贡献;即,的确有成立,因此有成立,最终有下式成立:
加性耦合层
有了上面的公式,我们的耦合层所定义的映射的雅可比行列式就能简单写为:,并且当我们考虑加性耦合层:时,我们的行列式就是 1 ,即对 NICE 准则的贡献为 0。此时,耦合层的定义为:
该耦合层的逆映射为:
所以,计算该层的前向映射与计算该层的逆映射的复杂度是一样的。另外,我们没有对函数作出任何限制,因此我们可以使用输入为 d 个单元,输出为 D-d 个单元的任何神经网络来充当。
以上,我们仅对 D 个变量中的 D-d 个变量作了复杂的变换,而保持另外 d 个维度不变;因此要想获得更一般的变换,我们至少还需要对前 d 个维度进行类似的变换,但是同样为了得到可处理性,我们反过来要另外 D-d 个维度保持不变,即:
维度的思考
另外,上面我们忽略了一个细节;假设上面的,则事实上光滑映射即便是满秩映射,它的像也只能构成了空间的一个子流形;也就是在局部看来,映射 只对 D-d 个维度中的 d 个有效维度进行变换,剩余的 D-2d 个有效维度并没有得到变换。
为此,我认为要么使用 d = D-d 的配置,要么使用 的配置(即维度之间有重叠);这样保证 特征的变换 能覆盖到的整个空间。事实上,作者就是按前者来配置的,令为奇数下标,为偶数下标。
作者也提了一句,说根据观察训练过程,发现需要至少 3 个耦合层,才能很好地让所有维度之间互相影响,并且作者使用了 4 层;这其实很好理解,因为理论归理论,就像神经网络虽然具有普适性,也不能学习到任意想要的网络一样。
虽然我们通过构造让具有非 0 雅可比行列式,但不意味着神经网络 就能学习到满秩映射。所以,为了能让输入、输出的维度之间能充分影响彼此,实际工程中,应该多叠几层 耦合层。不过,换个角度看,当神经网络 不能学习到满秩映射的时候,只要最终拟合成功了,那么可以认为网络在学习一个更加紧凑的特征,毕竟我们的输入的所有维度中也存在着大量的冗余维度。
说到这里,其实我想到了作者提到的,我们可以通过 对角矩阵 加上一个 秩-1校正矩阵 来构造线性变换矩阵,并且这种矩阵可以通过通过公式计算 逆 和 行列式;在这里,虽然不能像可逆线性变换存在全局的逆矩阵一样,我们仍然可以在局部存在可逆映射,用上面的术语,在这里我们构造的映射就好比是:对角映射 加一个 秩-k校正映射, 其中。
尺度缩放
本篇最后讨论一下作者一开始提到的观点就是变量变换过程中的 体积 缩放问题,回到最开始我们得到的公式:
众所周知,一个方阵的行列式是以这个方阵的行(列)向量为边的平行六面体(parallelogram)的有向体积。而可逆映射仅仅通过压缩数据在空间中的体积,就能使得似然值变大;比如:模型可以不用努力地学习样本集在空间中的分布结构,而仅仅通过把整个样本空间往的 mode 处收缩,就能提高逆向概率的值;但是,在这里还有一个 体积 项,优化该项使得向量占据更大的体积,因此就抵消了简单地收缩数据空间带来的无效优化。
但是,在上面的 加性耦合层 中,我们的行列式恒为 1 ;因此作者提出了,再增加一层线性缩放层,即:,来弥补上面构造的模型的缺陷,该缩放层的雅可比行列式显然为 。最终,我们的 NICE 准则变为:
这说明,越大,对应的数据维度越收到极大似然的挤压,因此也就是越不重要;相反那些重要的维度,比如说共个,可以视为模型学到的空间的子流形,该流形的维数就是。
好吧,本篇先到此为止了,到目前还没涉及到 Real NVP 论文,放到下篇写吧。(TODO)
我们接着在本篇稍微讨论一下后面两篇论文吧,就不单独写一篇了,因为大概看了一下,感觉都差不多。
Real NVP , Glow 相关讨论
后面这两篇论文,基本上就是在 NICE 论文的基础上,做一些进一步的探索:1)在 Real NVP 中提出用能力更强的 affine coupling layer,而在 Glow 中使用的也是 仿射耦合层,可以看作前面讨论的一般耦合层的一个具体案例;2)而Real NVP 和 Glow 中均提到了的 输入向量的维度排列 问题,这个问题在后者被当作一个重要问题来探索。
本质上,上面这两种探索均属于 耦合律 的具体实现,下面我们稍微再讨论一下 Glow 中的一些主要的改进。
可逆 卷积
如同我在前面所讨论的一样,Glow 的作者同样也认为变量之间的互相作用是否能高效地实现,对网络捕获随机变量 与 之间的关系非常重要。但是 Glow 的作者果然技高一筹,直接使用一个卷积,来进行所谓的 general permutation;相对这种广义的变量维度的排列,NICE 文中相当于仅仅在两组固定的变量之间作 轮流交换,因此不是最优的。
在深度学习早期的 NIN 这一系列论文中,就有人提出 “使用一个小的 MLP 替代线性卷积核 等价于 直接用线性卷积核 再加上一个卷积层“(当然每层都需要加上非线性激活函数),这是容易理解的。类似地,这里作者把的卷积核 视为的方阵,意味着在通道维度作线性变换;当 为 标准正交矩阵 时,就是一个坐标轴 旋转变换,所以作者认为这是 坐标轴之间的 Permutation 的一种推广。
不过,这里的维度之间的融合仅仅发生在每个像素点对应的那些通道之间,并不涉及不同像素点 之间的融合;因此,全局的维度之间的互相作用还是要靠 coupling layer 来实现,而作者仅仅是用了按通道划分为两组 交替变量 的方式。
步长为的 可逆卷积层 定义的映射为:
,其中:是长度为的通道构成的向量;
因为,其中:
则该卷积层的雅可比行列式为:
其中:为零矩阵,为按长、宽、通道 展开的长为的向量;
根据之前的命题中的 分块上三角矩阵 行列式的证明,我们显然可以由归纳得出:。
一个细节
只要矩阵 保持满秩,则即便不是 标准正交矩阵,我们也可以认为它 是在局部的通道维度之间作融合(广义排列);但是在训练过程中,未必始终能保持满秩状态,作者好像没有作出相关的讨论。所以,关于这篇论文的核心模块的这个细节,作者似乎是回避了这个问题。
不过,从线性代数中,我们知道那些所有 不可逆的阶方阵全体 仅仅构成全体阶方阵的 边界。举个例子:让你随机从平面挑选两个向量,那么这两个向量几乎一定是不相关的;同样,在 维空间中,随机挑选出 个向量,那么这些向量几乎一定是不相关的,即它们构成空间的一个基,即它们构成的矩阵是可逆的。
参考:
1. Laurent Dinh, David Krueger, Yoshua Bengio, 《NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION》
2. Laurent Dinh, Jascha Sohl-Dickstein, Samy Bengio, 《DENSITY ESTIMATION USING REAL NVP》
3. Diederik P. Kingma, Prafulla Dhariwal, 《Glow: Generative Flow with Invertible 1×1 Convolutions》