【论文阅读17】ODE-Net——从离散化的ResNet到连续化ODE的模拟

读不懂PDE-Net,所以想先操作下ODE-Net

结果是瞎读文章真心难读也读不明白😭😭😭

为什么读

  • 在阅读PDE-Net的时候被卡了,读得比较不明白,在搜资料的时候发现了知乎上ODE-Net的讨论,好介绍哇,觉得现在先看ODE-Net是个不错的选择
  • 搜资料的时候才发现这是NIP2018最佳论文

文献链接:Neural Ordinary Differential Equations,原作者提交于2018/01,最后修改于2019/12,可见打磨的功夫还是下了不少的。

文献总结

将ODE与神经网络结合,用神经网络来模拟ODE的动态性质。

思想很简单,联想神经网络的隐层嵌套性,联系ResNet的残差(差分)形式并推广,就得到了利用ResNet模拟ODE的思想。细节就麻烦多了看不动看不动…

文献内容

目的

将ODE与神经网络结合,用神经网络来模拟ODE的动态性质,和总结一致。

另外如果能有办法用网络模拟ODE系统,那一定是应用超级友好的!

背景

好像没啥背景,我理解的背景就是这个思想的来源,就够了。文章里的related work我暂时不感兴趣。

方法

这要从ODE与神经网络的一个共性讲起:

神经网络的嵌套隐层结构可以表示为$h_{t+1} = f(h_t, \theta_t)$,每一层都由前一层前向传播得到,现在用ResNet的结构则有意思起来了:$h_{t+1} = h_t + f(h_t, \theta_t)$,这种残差的形式与ODE的差分形式很“相似”:

这样ResNet的每一层$f$都相当于当前时刻$t$的一个差分,如果这个$t$不再离散,而是连续化,那么就可以近似为导数,残差神经网络也可以近似为ODE了。当然前提是(1)连续化可行;(2)连续化后能保持ODE的基本衍化性质;(3)不知道能不能证明其它性质诸如求解等等。

那么现在基本的模型其实已经构思好了,下面是实现的技术细节。要使得ResNet成为ODE的近似,首先要考虑可训练的性质,其监督信息由已知的ODEsolver求解,这些solver目前一般都是精度可控的,网络本身作为一个黑箱ODEsolver来训练;前向传播应该比较容易,关键是反向传播会比较麻烦,因为损失的回传需要对参数求导,这些势必要涉及大量参数,会引起高昂的计算代价。

那么该文怎么进行反向传播的呢,直接算?不是,它绕过去了。

先看看损失函数,直接定义为:

其中把ODE最后的target函数记为$z(t)$,ODE初值记为$z(t_0)$,待预测的时刻$t_1$时的值为$z(t_1)$。左边相当于监督信息,用标准的值,右边两个式子都用黑箱网络来近似就可以了。

由于现在考虑把ResNet变成连续化的模型,因此此时不好用差分的形式,而要采用积分的形式,所以现在预测值是和时刻$t_0$和$t_1$中每个值都要有关系,这提示我们采用链式法则寻找这些值之间的关系。当然这些值太多乃至无穷,我们也只能尽可能多地进行离散近似,其实就是网络的深度(层数),有几层,就意味着我们考虑了时刻$t_0$和$t_1$之间几个中间状态。

这种近似考虑的方式称为adjoint sensitivity method(1962老文章🐂🍺+🐂🐸!),如下的原文图2所示,这里为了表示方便,记号与上文不同,图中的$z(t_N)$相当于上文的$z(t_1)$,意思大家一定能明白,就是多考虑上文中的中间时刻状态。

感觉是这样推导的,我们想要的目标是损失$L$对网络参数$\theta$的导数:

其中第一个等号用链式法则和爱因斯坦求和约定表示;第二个等号是因为$z(t_i) \approx z(t_0) + \int_{t_0}^{t_i} f(z(t), t, \theta)dt$,然后直接求导就得了,其中积分从哪里开始都可以,不一定要$t_0$;第三个等号搞了新定义,把$a(t)$叫做伴随adjoint,它怎么求呢,文章给了$\dfrac{da(t)}{dt} = -a(t)^T\dfrac{\partial f(z(t), t, \theta)}{\partial z}$,但我没看懂,我猜是1962那篇文章的结论。

上面分析了主要的思路,应该还可以了,下面开始水😂,日常写烂尾文章/(ㄒoㄒ)/~~

上面的推导就是原文的(5)式,具体计算不是直接BP,因为考虑连续性,和中间状态都有关系了,中间层现在是可以很多的,BP压力很大。现在直接看完整版的算法2,直接想办法计一个积分算梯度(参考了机器之心的文章加深理解),不过很可惜我没太看明白具体计算的过程,可能是直接自动求导,只是不再一层一层计算梯度了?这样真的能减少计算量么?

后面的流模型和生成式模型没有看了,留着看苏剑林的博客吧,感觉和那个关系比较大。

优缺点

我理解的优点:

  • 应用必定是真正有用的应用,且范围很广,涉及ODE的领域实在是太多啦
  • 思路很棒!从ResNet的差分形式过渡到ODE的模拟,我很喜欢
  • 文章提到的内存占用小的优点,不过有人杠这一点,我目前没看明白算法2,只好持保留态度了

缺点:

实验

看不动,和参考资料里的是一样的啊,而且有评论说作者放出来的代码和文章不一致,那么轻松复现是不存在的了…

扫了一眼,文章的实验主要是模拟了一些不那么复杂,但也不是很简单的ODE系统。

补充资料——参考链接阅读

在略读了文章第一遍之后有些疑惑,因此搜了一些相关的网页看一看,觉得其中大部分讲的都不错,因此记录于此。

参考文献

[1] Tian Qi Chen, Yulia Rubanova, Jesse Bettencourt and David Duvenaud. Neural Ordinary Differential Equations[EB/OL]. https://arxiv.org/abs/1806.07366, 2018.

[2] 思源.硬核NeruIPS 2018最佳论文,一个神经了的常微分方程[EB/OL]. https://www.jiqizhixin.com/articles/122302, 2018/12/23.

[3] 匿名用户. 如何评价ODENet?[EB/OL]. https://www.zhihu.com/question/306937011/answer/561576636, 2018-12-30.

[4] 机器之心Pro. 「神经常微分方程」提出者之一David Duvenaud:如何利用深度微分方程模型处理连续时间动态[EB/OL]. https://www.sohu.com/a/405309910_129720, 2020-07-02.

[5] AI火箭营. 一个深度学习突破的方向:神经常微分方程ODE[EB/OL]. https://www.toutiao.com/a6703302712311677452/, 2019-06-17.

[6] 苏剑林. (2018, Jun 23). 《貌离神合的RNN与ODE:花式RNN简介 》[Blog post]. Retrieved from https://kexue.fm/archives/5643

最后一条按照原文提供的参考文献格式了~