i-ResNet:通过变分解量化和结构设计改进流模型.
1. 流模型
流模型(flow-based model)是一种从观测变量xx到简单隐变量zz的可逆变换z=f(x)z=f(x),该变换可以通过叠加多个简单的可逆变换构造f(x)=f1◦⋯◦fL(x)f(x)=f1◦⋯◦fL(x),由于每个变换fifi可逆且容易求Jacobian行列式,因此采样过程也容易实现f−1(z)=f−1L◦⋯◦f−11(z)f−1(z)=f−1L◦⋯◦f−11(z)。
根据概率密度的变量替换公式和链式法则,观测变量xx的分布为:
p(x)=p(z)⋅|detL∏i=1∂fi∂fi−1|p(x)=p(z)⋅|detL∏i=1∂fi∂fi−1|其对数似然函数为:
logp(x)=logp(z)+L∑i=1log|det∂fi∂fi−1|logp(x)=logp(z)+L∑i=1log|det∂fi∂fi−1|此时不需要显式地计算分布p(x)p(x)的概率密度函数,而是通过初始分布p(z)p(z)的概率密度(常取标准正态分布)以及映射过程产生的Jacobian行列式计算即可。
由于必须保证逆变换简单和Jacobian行列式容易计算,则每次变换fifi的非线性变换能力都很弱。为了保证充分的拟合能力,模型必须堆得非常深,此时参数量和计算量非常大。
2. Invertible ResNet
本文作者在ResNet结构基础上增加了一些约束,使得模型可逆,同时保留了ResNet的基本结构和拟合能力。
下图为标准ResNet与可逆ResNet的对比图。可逆ResNet允许信息无损可逆流动,而标准ResNet在某处则存在信息瓶颈的“坍缩”现象。
ResNet的设计思路是用神经网络g(⋅)g(⋅)拟合输出与输入的残差:
y=x+g(x)y=x+g(x)(1)什么时候可逆?
上式可逆的一个充分条件是:
Lip(g)=maxx1≠x2||g(x1)−g(x2)||2||x1−x2||2<1Lip(g)=maxx1≠x2||g(x1)−g(x2)||2||x1−x2||2<1即函数g(⋅)g(⋅)的Lipschitz范数小于1。通常函数g(⋅)是由神经网络实现的,而神经网络是由矩阵运算和激活函数组合而成的:
g(x)=σ(Wx+b)若希望函数g(⋅)的Lipschitz范数小于1,则应有激活函数σ的Lipschitz范数不超过1且Wx+b的Lipschitz范数小于1。
激活函数σ是标量函数,其Lipschitz范数为导数值,常用的激活函数均满足导数不超过1。
Wx+b的Lipschitz范数小于1即矩阵W的谱范数小于1。可以对其做谱归一化然后乘以0~1之间的一个常数W←cW/||W||2。
(2)逆函数是什么?
若y=x+g(x)可逆,其逆函数为x=h(y)。则问题转变为求解非线性方程组。考虑如下迭代:
xn+1=y−g(xn)则迭代序列{xn}是y的函数,如果{xn}收敛到固定函数:
limn→∞xn(y)=ˆh(y)此时有ˆh(y)=y−g(ˆh(y)),ˆh(y)即为所求逆函数。因此如果上述迭代过程收敛,则收敛结果即为所求逆函数。
根据可逆的Lipschitz条件:
∀x1,x2||g(x1)−g(x2)||2≤Lip(g)||x1−x2||2有如下关系:
||xn+1−xn||2=||g(xn)−g(xn−1)||2≤Lip(g)||xn−xn−1||2=Lip(g)||g(xn−1)−g(xn−2)||2≤Lip(g)2||xn−1−xn−2||2⋯≤Lip(g)n||x1−x0||2因此序列{xn}收敛的一个充分条件是Lip(g)<1,这与可逆条件是吻合的。且逆函数为xn+1=y−g(xn)的不动点。数值计算时,只需要迭代一定步数,使得满足精度要求即可。
(3)如何计算Jacobian行列式
变换y=x+g(x)的Jacobian矩阵计算为:
Jy=∂∂x(x+g(x))=I+∂g∂x=I+Jg优化目标需要计算Jacobian行列式的对数值:
log|det(Jy)|=log|det(I+Jg)|=logdet(I+Jg)根据恒等式logdet(A)=Trace(log(A)),上式可以展开为级数:
logdet(I+Jg)=Trace(log(I+Jg))=Trace(∞∑n=1(−1)n−1Jngn)该级数收敛的条件是||Jg||2<1,即Lip(g)<1,这与可逆条件也是吻合的。对该无穷级数截断N项,则有:
Trace(log(I+Jg))=N∑n=1(−1)n−1Trace(Jng)n+O(Lip(g)N)上式把矩阵log(I+Jg)的迹的计算转换为矩阵Jng的迹的计算,需要计算矩阵的n次方。考虑p(u)是一个多元概率分布,其均值为0、协方差为单位矩阵,则对于任意矩阵A,有
Trace(A)=Eu~p(u)[uTAu]作者提出,对于每次迭代,从p(u)中只随机选择一个向量u,用uTAu作为Trace(A)的近似值:
Trace(log(I+Jg))≈N∑n=1(−1)n−1uTJngun,u~p(u)矩阵uTJngu的计算可以拆解成多次矩阵与向量的乘法uTJg(⋯(Jg(Jgu))),从而避开直接计算Jng。
3. 实验分析
作者首先设计了一个toy数据集,人为构造一些有规律的随机点,然后用生成模型去拟合它的分布。结果表明可逆ResNet产生了对称的、没有偏置的结果,而Glow的结果则是有偏。这可能是因为Glow需要以某种方式打乱输入并对半切分,对半之后两部分的运算是不一样的,这就带来了不对称。
作者测试了使用可逆ResNet的分类结果。在不同的c=Lip(g)数值下分类结果如下表:
作者也给出了一些图像生成结果:
Related Issues not found
Please contact @0809zheng to initialize the comment