查看原文
其他

【源头活水】A Little Introduction of Neural ODE

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—Maple小七

地址:https://www.zhihu.com/people/maplefalls


01

前言
随着深度学习的发展进入平缓期,越来越多的研究者渐渐将研究重心转向神经网络的理论基础,从更数学的角度去思考神经网络的本质,而不是去对各种网络结构进行修补和魔改,在各类公开数据集上刷指标。我们可以期待,那些看似过于抽象的数学分支能够越来越多地与深度学习产生交叉融合,Neural ODE就是神经网络和动力系统、微分方程交叉形成的产物。
当然,虽然Neural ODE的idea听上去很fancy,但它还处于发展初期,还有许多问题需要我们去思考去解决,实际上,不少极具创新的想法和优美的理论都难以经过实践的考验。比如深度学习之父Geoffrey Hinton曾提出的胶囊网络(Capsule Network)到现在都还没有流行起来,一个原因就是胶囊网络虽然能在MNIST这种简单的数据集上取得良好的表现,但在ImageNet等更实用的数据集上却没有带来明显的效果提升。同样的,Neural ODE原文也没有给出模型在更复杂的公开数据集上的测试结果,而作者在MNIST数据集上将ODENet与ResNet对比时,ODENet也并没有优于ResNet,而且当前在MNIST上测试的模型准确度全是99%以上,并没有什么可对比性。
那么Neural ODE有什么价值和前景呢?David Duvenaud在他对Neural ODE的报告《Bullshit that I and others have said about Neural ODEs》中提到了三个motivations:
  • ResNet的替代品
  • 非等距采样的时间序列建模
  • 连续标准化流

02

Neural ODE

目前的多层神经网络(如ResNet、RNN)大多由一个个重复的模块串联而成,每一个模块都有序的保留一定的信息,并在训练过程中得到优化,比如ResNet可以表示成
其中时刻的隐藏状态,当我们无限缩小时间步长,无限增加隐藏层层数时,左边就可以看作是对求导,从而得到了一个ODE:
给定一个初值,该方程的解便为一个确定的函数,它代表了隐藏状态随时间变化的序列,若能得出该常微分方程在时刻的数值解,那么就相当于完成了前向传播,的改变最终就代表着前向传播结果。这样,神经网络就变成了一个常微分动力系统,它的训练和预测都可以归结为ODE的求解问题。 这就是Neural ODE Network的创新所在。
实际上,微分方程与神经网络的结合已经被不少人探索过了,许多神经网络都可以理解为微分方程的离散化形式,ResNet其实就是ODE的前向欧拉法,类似的还有PolyNet(后向欧拉)、FractalNet(龙格-库塔),甚至dropout也可以理解为是基于布朗运动的随机微分方程的离散化,它刻画了动力系统对随机扰动的稳健性。
那么相比于Residual Networks, Neural ODE Network能带来什么好处呢?

03

内存优化
不论是什么结构的神经网络,其本质就是在拟合一个复杂的非线性复合函数,复合的次数就是神经网络的层数,要找到参数的梯度,很容易就想到链式法则,然而,这要求我们在前向传播时需要保留所有层的激活值,并在反向传播时利用这些激活值计算梯度,这对内存的占用非常大,对深度模型的训练过程来说是一个不小的限制。
对于Neural ODE来说,若直接通过积分器来做反向传播,则需要对一个积分求微分,内存开销会很大,且计算的误差会逐渐累加,因此,作者采用伴随灵敏度方法(adjoint sensitivity method) 来计算ODE的梯度,该方法将梯度的计算归结为解一个ODE,该ODE能够简单地调用ODE Solver求解,其思想来源于Pontryagin在论文《The mathematical theory of optimal processes》提出的庞特里亚金最大化原理,具体推导可见Understanding Adjoint Method of Neural ODE(https://zhuanlan.zhihu.com/p/337575425)。值得注意的是,如果让参数依赖于时间,那参数就不是一系列离散的值了,而是一个连续的高维函数。


04

自适应计算
绝大多数常微分方程都很难找到解析解,因此往往通过数值求解,比如最简单的Euler法,还有更复杂一点的Runge-Kutta法,近百年来,数学家对ODE的求解已经研究得很深入了,现代的ODE Solver也已经非常成熟,它们不仅能保证收敛到真实解,同时还能控制误差水平,会根据给定的误差容忍度选择适当的步长逼近真实解。在评估或训练过程中,通过显式地改变数值积分的精度,我们可以自由地权衡模型的速度和精度,比如,我们可以花更多的时间去训练一个高精度的模型,而在评估预测时降低精度以提高系统的响应速度。

05

连续标准化流
Normalizing Flows指的是概率分布的一系列可逆变换,通过非线性可逆变换,我们可以将简单的分布转化为复杂的分布,反过来也可以将复杂的分布转化为简单的分布,概率分布变换公式为
可以看到,分布的变换需要计算个Jacobi行列式,而行列式的计算量高达,这也是大多数Normalizing Flow的性能瓶颈。但是,如果我们将分布的变换连续化为Continuous Normalizing Flow(CNF)呢?作者指出,在是全局Lipschitz连续的条件下,变换公式就简化成了
也就是 个行列式运算变为了一个迹运算,同时,迹运算还有一个很好的性质:线性
因此,我们可以将变换公式右端扩展为函数的和,这里的可以看作是隐藏单元的大小,且隐藏层单元的大小与计算量为正比关系,这样,而一般的标准化流只有一个隐藏单元。因此一般的NF超参数为深度,而对于CNF来说,超参数为宽度。 另外,我们还可以对模型进行扩展,比如让依赖于时间,或是加上门控机制(Gating Mechanism)。

06

Neural ODE在监督学习中的应用
作者将Neural ODE用于MNIST手写数字识别来展示了其在监督学习中的应用,其中ODE-Net采用的ODE求解方法是隐式的Adams method,而RK-Net采用的是显式的Runge-Kutta method,其结果表明ODE-Net和ResNet的效果相当,同时在参数数量内存占用上都显著优于ResNet,这得益于adjoint method只要求恒定内存,不储存任何前向传播的参数,且每层的参数都绑定在了一起,而在时间复杂度上,ResNet的时间复杂度与隐藏层数有关,而ODE-Net没有层数的概念,其时间复杂度取决于ODE求解器的精度,这实际上可以认为是一个隐式的隐藏层数,可以动态调节。
之前提到,ODE-Net允许我们在速度和精度上做tradeoff,在训练时采用高精度,而在测试时切换到低精度,这一点从下图就可以看出来,同时我们还可以发现前向传播的函数评估数大致是反向传播评估数的一倍,这恰好表明了反向传播的adjoint sensitivity method不仅内存效率高,同时计算效率也比直接通过积分器的反向传播高。


07

Neural ODE在密度估计中的应用
作者还比较了NF和CNF在密度估计上的表现,对于NF而言,其训练目标是最小化KL散度。而对于CNF而言,其正向和反向变换的复杂度相同,因此可采用更为准确的最大似然估计来做密度估计。
从作者的实验结果来看,CNF分布估计的结果和过程都比NF要更准确且更平滑,在第一个实验中,NF的估计过程很不直观,而CNF的估计过程相当流畅,在第二个实验中,NF没能准确估计该分布,而CNF做得相当好。

08

Neural ODE在时间序列中的应用
目前大多数模型都会假设样本是从总体中均匀采样的,然而现实往往并非如此,不规则采样的情况非常普遍,比如一个时间序列(如网络流量)的观测或采样间隔是不均匀的,而像RNN之类的一些方法又不得不假设这些观测和潜在变量的间隔是固定的,这往往导致估计的分布与总体分布偏离。而Neural ODE便能很好地避免这些问题,Neural ODE将时间序列建模为一个连续变化的轨迹,能够更好的利用数据的时间戳信息,而且在预测的时候可以对任意时间点做预测
作者利用Latent ODE Model和RNN对方向不同的两个二维螺旋进行了时序建模,其采样的时间点是不规则的,并加入了高斯噪声。从下图可以看到,Latent Neural ODE给出的拟合和外推结果都更加准确、平滑,而RNN没能准确捕捉到序列的变化规律,在两种螺旋上都出现了过早收敛的现象。


09

Scope and Limitation
  • 小批量学习有可能会成为Neural ODE的性能瓶颈,因为需要联合计算多个求解器的误差,然而在作者的实验中,目前还没发现什么大问题。
  • ODE有唯一解的条件由Picard’s existence theorem给出,也就是要保证网络的权值有限并且全局Lipschitz连续(如Tanh和ReLU,不能是阶跃函数)
  • 模型的训练需要指定求解器的精度,这个参数需要靠经验来选择,太小了会很慢,太大了会不准。
  • 由于求解器给出的是近似解,因此模型对训练集中的数据进行反向预测时可能出现偏差,不过这个问题可以通过设置checkpoint来解决。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存