ODE-inspired Network Design for Single Image Super-Resolution

title

这篇文章是用常微分方程的思想来设计网络结构用于SISR的,思路还是比较清奇。

ODE,也就是常微分方程,在很多情况下是没有闭式解的,所以研究者们开发出了一系列的算法用来计算常微分方程和偏微分方程的数值解,所谓的数值解其实就是方程的离散解,这篇文章将SISR看成一个动态系统,将网络的初始输入看成待求解函数的初始状态y0y_0,将网络的深度看成是自变量,网络的输入是经由原始输入、被积函数和网络深度共同求解得到的。

Euler公式法与Residual block

对于常微分方程:

y(x)=f(x,y);y(a)=y0;(axb)y^{'}(x)=f(x,y); y(a)=y_0;(a\leq x \leq b)

在求解区间[a,b][a,b]上作等距的剖分,步长为h=bamh=\frac{b-a}{m},则有

xn=xn1+h,n=1,2,...,mx_n = x_{n-1} + h,n=1,2,...,m

用前向的商差来近似y(x0)y^{'}(x_0),即

y(x0)y(x1)y(x0)hy^{'}(x_0)\approx \frac{y(x_1)-y(x_0)}{h}

将这种近似代入原方程,得到

yn+1yn=hf(xn,yn)y_{n+1}-y_n=hf(x_n,y_n)

这就是所谓的前向欧拉方程,当我们把xnx_n看成网络深度,再令G(yn)=hf(xn,yn)G(y_n)=hf(x_n,y_n),就可以得到

yn+1=yn+G(yn)y_{n+1}=y_n+G(y_n)

这就是Residual block的搭建公式,是17年一篇文章里头讲的。

ODE与CNN的关联

说得更加数学化一点,神经网络的本质是在找一个能够模拟想要的功能的函数,也就是说给定一个深度x和初始输入y0y_0​,我们要求的是一个映射:

Φ(y0,x)=y(x;y0)\Phi(y_0,x)=y(x;y_0)

假设p(y0)p(y_0)输入y0y_0的分布,Ω\Omega是分布所在的域,对做SR的CNN而言,我们优化的目标函数就是

L=ΩΦ(y0,x)ydp(y0)L=\int_{\Omega}\left\|\Phi\left(y_{0}, x\right)-y\right\| \mathrm{d} p\left(y_{0}\right)

而为了求解这个复杂的映射函数,我们所拥有的是一系列的CNN基本组成单元,也就是对一个组成好的block而言,我们可以知道的或者可以学习的,是这些小的组块的输入和输出之间的关系,也就是与公式(4)中类似的,每个小层输入与输出之间的关系。通过串联这些小的组成块,我们可以接出deep的网络,从而实现更加复杂的函数模拟。

因此从上述分析可以看出,如果把神经网络看成是个离散的动态系统,也就是一个数值解法下的常微分方程,那么每一层网络的设计,其实就是对

dydx=f(x,y)\frac{dy}{dx}=f(x,y)

这个常微分方程如何进行数值估计的问题,如果是前向欧拉公式的估计方法,那么就是普通的residual block的形式,如果用别的ODE数值解法来模拟的话,是否能够建立更好的模拟方式呢?

17年的那篇A Proposal on Machine Learning via Dynamical System讲到,深度神经网络可以被看作是连续动态系统的离散化,从动态系统离散化的角度,这里有很多可能性,例如adaptive time step size,也就是自适应地选择layers,或者更高阶的数值解法、隐式的离散化等等。

从(1)到(5)的计算当中可以看出,欧拉公式是一种ODE一阶近似解,更高阶的方法能够提供更加准确的对连续动态系统的估计,因此如果使用更加高阶的近似方法,将提供更好的近似效果,能够对想要拟合的函数有更准确的拟合。

ODE-inspired CNN

ODE-block

ODE的高阶数值解法也有很多种,文章中使用了两种解法,一种是LeapFrog方法,它是一种二阶近似解,常用于分子动力学的计算,其数值解公式为

yn+1=yn1+2hf(xn,yn)y_{n+1}=y_{n-1}+2hf(x_n,y_n)

为了能够在输出中出现yny_n,文章一次引入三个上述的block,组成一个单元,从而得到了LF-Block:

ODE-blocks

上图中的b图,就是建立出来的LF-block。

Runge-Kutta方法是用于非线性常微分方程的很重要的一类迭代方法,它可以自定义阶数,从而可以自己平衡截断误差和计算复杂度,文章使用了二阶和三阶的Runge-Kutta方法,具体公式可见文章,图解的block是上图的c和d。

从上面的四个ODE-block可以看出,使用ODE建立深度神经网络的block的基本步骤是:求解数值解公式,推导出输入与输出之间的关系、将未知函数设为可学习单元,也就是动态layers、搭建网络。

这里我其实有两个疑惑:

  1. 我们知道神经网络的层级结构是深度神经网络的独有特征,17年那篇文章提出能够将深度神经网络看成是一个动态系统,输入输出以流的形式从每一层的输入到输出,但是和常微分方程如何细致地对应还是一个让我有点迷茫的地方。

    对常微分方程

    dzdt=f(t,z),z(0)=x\frac{dz}{dt}=f(t,z), z(0)=x

    在固定时间值T的时候,定义flow map为

    xz(T,x)x\rightarrow z(T,x)

    可以看出,上述定义是一个与x有关的函数,它一般是非线性的,对于有监督学习而言,其实就是不断地tune f函数,使得z函数能够与监督子接近的过程。因此把常微分方程的右边看作是可调的拟合单元,左边看作是网络输出对单元所在位置的导数,也就是差分,那么对常微分方程数值解的每一级求解,就可以类比为深度神经网络中每一层的输入到输出,这个很直观。

    我的问题在于,文章说更高阶的近似可以提供截断误差更小的解,这没问题,但是对于神经网络而言,用更高阶的近似意味着什么呢?意味着对z更准确的求解吗?

  2. 在常微分方程里f是一个固定的函数,在基于ODE的神经网络里,G是不同layer在自适应变化的,如果能够将ODE用到递归神经网络,是否有更好的解释性和适配性?

基于ODE-block的神经网络

在搭建好ODE-block之后,文章搭建起了神经网络用于SR,网络图如下:

OISR

其实就是把它当成和residual block一样的block而已,至于block中的G,文章介绍了一些形式,并且提出G也有可以改进的空间:

G

文中有一个很有意思的点,那就是在讲为什么要用PReLU,我们知道G=hfG=hf,f函数我们使用可学习的卷积层来模拟,这里的h是求解常微分方程数值解的时候用于定义域域内等距分割用的,它趋近于0的时候,截断误差是趋于0的,因此使用PReLU,让它来放缩f,起到和h一样的作用,自适应地选择h能够同时提升常微分方程求解的效率和收敛稳定性(1991年一篇求解常微分方程的文章)。

实验结果可以看出,前面提到的更高阶的数值解方法能够得到更好的效果是对的,因为RK-3能够给出比RK-2以及LF更好的结果同时保持相同的收敛速度,而对于G函数也有说法,简单的G能够让网络更深,从而使得h值变小,而更复杂的G能够提供一个更好的局部估计,如果不考虑计算资源,那么设计更复杂精细的G和增加OI-block的数量都能够使得网络效果更好。

小结

文章提出使用ODE来指导建立神经网络结构,是个非常有意思的点子,文章提出了更高阶数值解近似、G的复杂程度以及block数量对网络效果的影响,并且通过ODE的理论成功地解释了其中的道理,OISR在保持参数相近的同时,能够得到更好的效果,验证了ODE-based的方法在提供网络可解释性的同时也为网络的更优化设计提供了很好的思路。

文章目录
  1. 1. Euler公式法与Residual block
  2. 2. ODE与CNN的关联
  3. 3. ODE-inspired CNN
    1. 3.1. ODE-block
    2. 3.2. 基于ODE-block的神经网络
  4. 4. 小结
|