32

文章目录

  1. 摘要
  2. 背景
  3. 详细内容
    1. 什么是可逆
    2. 残差网络何时可逆
    3. 残差网络的逆函数的表达式是什么
    4. 如何利用可逆残差网络进行生成
    5. 部分实验结果
      1. 图片生成
      2. 图片分类
  4. 结束语
  5. 引用

摘要

本文展示了如何将$ResNet$结构改变为可逆的结构,这种变更后的结构在分类、密度估计以及内容生成方面都适用。通常,强制网络结构可逆需要对网络进行维度划分并且需要限制网络结构。本文提出的方法仅需要在训练期间添加一个简单的规范化步骤,这在现有的机器学习框架中很容易实现。可逆的$ResNets$网络可以和现有的最好的图片分类器以及基于流的生成模型相媲美。这在之前,任何单个网络都是无法做到的。

背景

神经网络的一个优点就是:单个网络结构一般可以用于解决一系列相似的任务。但是许多目前比较好的网络结构都是为特定领域定制的。随着神经网络的发展,模型越来越细化,针对不同的任务可能会采用截然不同的模型结构。这样结构难以复用,并且也很难让模型从非监督学习中获益。另外,目前图像上最成功的残差网络用于判别任务和生成任务时的结构是截然不同的,从而导致彼此之间难以相互获利。目前不存在使用与判别模型同结构的生成模型。本文证明了可逆ResNets可以通过简单地改变标准ResNets的标准化方案来实现。

详细内容

什么是可逆

设有映射

$$ f: S \rightarrow T $$

若对于任意$x_1, x_2 \in S$, 若$x_1 \neq x_2$, 则$f(x_1) \neq f(x_2)$,那么$f$被称作单射

若对于任意$y \in T$, 存在$x \in S$,使得$f(x) = y$,则$f$被称为满射

若$f$即是单射又是满射,则$f$可逆。

对于一个判别的神经网络可逆的一个显而易见的好处是可以从特征反向生成图片。通常而言我们使用多层的残差网络从图片提取特征,然后用于后续分类,目标检测等任务,若神经网络可逆,则从特征可以生成回原始图片(正常残差网络显然是无法做到的)。

残差网络何时可逆

首先定义一层残差网络表示为

$$ f(x) = x + g(x) $$

其中

$$ x \in R^m, g: R^m \rightarrow R^m $$

注意到同一般残差网络不同之处在于我们默认经过神经网络g时维度不能发生变化,否则无法实现可逆。定义一个n层的残差网络为

$$ F(x) = [f_n\circ f_{n-1}, ...,\circ f_1] $$

那么$F(x)$可逆的一个充分条件是对于$F(x)$的任意一层$f(x) = x + g(x)$均满足$Lip(g) < 1$。其中$Lip(g)$为$g$的Lipschitz常数,表达为

$$ Lip(g) = \mathop{max}_{x_1 \neq x2}\frac{\Vert g(x_1) - g(x_2)\Vert _2}{\Vert x_1 - x_2\Vert _2} $$

我们来简单证明该命题,首先对于任意$f(x) = x + g(x)$,当$x_1 \neq x_2$时,

$$ \Vert f(x_1) - f(x_2)\Vert = \Vert x_1 - x_2 + g(x_1) - g(x_2)\Vert $$

由三角不等式和Lipschitz约束容易得到,

$$ \geq \Vert x_1 - x_2\Vert - \Vert g(x_1) - g(x_2)\Vert \gt 0 $$

由此得到$f(x)$为单射。

若函数$f(x)=x+g(x)$中的$g(x)$满足Lipschitz约束,则显然$f(x)$连续,若存在$y \in R^m$使得不存在$x\in R^m$让$f(x) = y$,那么$f(x)$不连续,产生矛盾,所以$f(x)$必定为满射。由此原定理得证。

作为神经网络,无论它是卷积还是全连接,我们都可以将$g(x)$写成

$$ g(x) = \mathop{act_1}(W_1 \mathop{act_2}(W_2x + b_2) + b_1) $$

即线性变换加激活函数的组合,由于常见激活函数都满足上述Lipschitz约束,所以$g(x)$可逆的一个充分条件是$\mathop{Lip}(W_i) < 1$,也就是每一层的矩阵$W_i$的谱范数$\Vert W_i\Vert _2$全部小于1。

计算机直接计算谱范数是一个比较困难的问题,这里对谱范数进行了一个很常见的近似,使用迭代公式

$$ x_i = W^TWx_{i - 1} $$

然后迭代后的下界估计为$\frac{\Vert Wx_n\Vert _2}{\Vert x_n\Vert _2}$,这个结论这里不进行证明,感兴趣读者可以自行查找矩阵谱范数的计算方法。

我们将$\Vert W_i\Vert _2$的值用上式估计的下界表示为$\sigma_i$,那么对于任何一个残差网络中的参数$W_i$都可以重新进行谱归一化,新的矩阵表示为$\hat{W_i}$,它的表达式为

$$ \hat{W_i} = \begin{cases} \frac{cW_i}{\sigma_i} &\text{if }\frac{c}{\sigma_i} \lt 1 \\\ W_i & \text{else}\end{cases} $$

其中$c < 1$为一个指定的常数。

残差网络的逆函数的表达式是什么

当残差网络已经确定可逆时,下一个问题是得到逆函数的表达式。由于神经网络的复杂性,我们很难得到一个直接解析的表达式。但幸运的是,当确定一个函数可逆时,我们可以使用不动点迭代来从输出得到输入。

我们通过公式$y = x + g(x)$从初始点$y$来进行不动点迭代,我们得到

$$ x_{n+1} = y - g(x_n) $$

首先我们证明序列$\{x_n\}$收敛,设有自然数$n$

$$ \Vert x_{n+1} - x_n\Vert _2 = \Vert g(x_{n}) - g(x_{n-1})\Vert $$

由Lipschitz连续性得

$$ \begin{align} &\leq Lip(g) \Vert x_n - x_{n-1}\Vert \\\ &\leq Lip^2(g) \Vert x_{n-1} - x_{n-2}\Vert \\\ & \ldots \\\ &\leq Lip^n(g) \Vert x_1 - x_0\Vert \end{align} $$

然后引入整数$k > 0$

$$ \begin{align} \Vert x_{n+k} - x_n\Vert _2 &= \Vert x_{n+k} - x_{n+k-1} + x_{n+k-1} ... -x_n\Vert _2\\\ &\leq \Vert x_{n+k} - x_{n+k-1}\Vert _2 + ... + \Vert x_{n+1} - x_{n}\Vert _2 \\\ &\leq Lip^{n+k-1}(g) \Vert x_{1} - x_{0}\Vert _2 + ... + Lip^{n}(g) \Vert x_{1} - x_{0}\Vert _2 \\\ &= \frac{1 - Lip^k(g)}{1 - Lip(g)} Lip^n(g)\Vert x_1 - x_0\Vert _2 \\\ &\leq \frac{Lip^n(g)}{1 - Lip(g)}\Vert x_1 - x_0\Vert _2 \end{align} $$

由于当$Lip(g) < 1$时,取$n = \lceil{log_{Lip(g)}} \cfrac{\epsilon(1 - Lig(g))}{\Vert x_1 - x_0\Vert }\rceil$时,对任意$\epsilon > 0$,$\Vert x_{n+k} - x_n\Vert < \epsilon$恒成立,于是序列$\{x_n\}$为Cauchy序列,即收敛。这样就证明了通过这种不动点迭代,迭代一些步骤后可以通过输出得到输入。同时从上述证明可以注意到,该迭代收敛速度与迭代次数是指数关系,从而保障了收敛速度。

如何利用可逆残差网络进行生成

当网络可逆时,利用网络进行生成属于标准化流的内容(Normalizing Flow),标准化流本质是一个分布变换。我们可以定义一个简单的生成模型:设有$x\in R^m$为我们的生成目标,我们从$z\in R^m$中采样。再假设$z\sim p_z(z)$,$x\sim p_x(x)$,且$x = \Phi(z)$为它们之间的映射函数,若$\Phi$可逆,我们定义$F = \Phi^{-1}$。则$x$的对数似然函数为

$$ log p_x(x) = log p_z(z) + log|det(J_F(x))| $$

其中$det(J_F(x))$为F的雅可比行列式的值。

但该式带来一个问题,每次更新参数时我们都不得不计算行列式的值,这是十分复杂的一个问题,所有我们对$log|det(J_F(x))|$进行了一个简单的变换,我们这里只考虑$J_F(x)$可以被对角化的情况,严格证明感兴趣读者可以参考论文原文附录。

$$ \begin{align} log(det(J_F(x)))&=log(det(P\Lambda P^{-1}))\\\ &=log(det(P)det(\Lambda)det(P^{-1})) \\\ &=log(det(\Lambda))\\\ &=det (log(\Lambda)) \\\ &=Tr(log(\Lambda))\\\ &= Tr(log(J_F(x))) \end{align} $$

通过这个变换将复杂的行列式问题转换成了矩阵的迹,可以大量节省计算资源。然后进一步由于残差网络的形式,我们可以将上式改写为

$$ Tr(log(I + J_g)) $$

其中$I$为单位矩阵,$g$是一个神经网络定义与之前相同。我们再对对数展开成无穷级数的形式

$$ \begin{align} &\ Tr(log(I + J_g)) \\\ =&\ Tr(\sum_{n=1}^{\infty}(-1)^{n-1}\frac{J_g^n}{n})\\\ =&\ \sum_{n=1}^{\infty}(-1)^{n-1}\frac{Tr(J_g)^n}{n} \end{align} $$

但这个展开仍然存在一个问题,我们需要累加计算矩阵的n次幂,所以我们再进一步用概率方式优化这个表达式。现在假设有$m$维度随机变量$u$,且$E(u) = 0, Cov(u) = I$,那么

$$ \begin{align} Tr(A) &= Tr(AI) \\\ &= Tr(AE(uu^T)) \\\ &= E(Tr(Auu^T)) \\\ &= E(u^TAu) \end{align} $$

整个计算过程可以写成

$$ \sum_{n=1}^{\infty}(-1)^{n-1}\frac{u^TJ_g^nu}{n} $$

再注意到$Tr(A^{n + 1}) = E(u^TA^{n-1}Au)$,我们可以迭代的累加上一步结果并且用向量与矩阵乘积代替了矩阵之间的乘积。

部分实验结果

这里简单展示部分结果。

图片生成

使用不动点迭代进行图片生成

上图显示了使用不动点迭代的方法可以ResNets和原始ResNets生成图片的对比。显然无Lipschitz限制的ResNets无法成功生成图片。

图片分类

图片分类

上图显示了可逆ResNet与ResNet-164在分类问题上的性能对比。Vanilla为无Lipschitz约束的可逆ResNets,$c$为约束系数。通过对比可以看出,变更后的ResNets不会太损害模型的分类性能。

结束语

我们引入了一种新的体系结构可逆ResNets,它对于网络结构要求宽松(只需要输入输出维度一样),而且修改后网络很容易应用到密度估计上。

当前工作仍有若干挑战有待解决:

  • 文中对对数行列式的估计是有偏的,最近已经有一些工作在对数行列式无偏估计方面取得了一些进展,这可能提高生成模型的性能
  • 学习和设计具有Lipschitz约束的网络具有挑战性:比如需要约束块中的每个线性层,而不是能够直接控制一个块的Lipschitz常数

引用

[1] Behrmann, Jens, et al. "Invertible residual networks." International Conference on Machine Learning. PMLR, 2019.