
文章插图
网络对比
在 David 的 Oral 演讲中,他以两段伪代码展示了 ResNet 与 ODEnet 之间的差别 。如下展示了 ResNet 的主要过程,其中 f 可以视为卷积层,ResNet 为整个模型架构 。在卷积层 f 中,h 为上一层输出的特征图,t 确定目前是第几个卷积层 。ResNet 中的循环体为残差连接,因此该网络一共 T 个残差模块,且最终返回第 T 层的输出值 。
def f(h, t, θ): return nnet(h, θ_t) def resnet(h): for t in [1:T]: h = h + f(h, t, θ) return h 相比常见的 ResNet,下面的伪代码就比较新奇了 。首先 f 与前面一样定义的是神经网络,不过现在它的参数θ是一个整体,同时 t 作为独立参数也需要馈送到神经网络中,这表明层级之间也是有定义的,它是一种连续的网络 。而整个 ODEnet 不需要通过循环搭建离散的层级,它只要通过 ODE solver 求出 t_1 时刻的 h 就行了 。
def f(h, t, θ): return nnet([h, t], θ) def ODEnet(h, θ): return ODESolver(f, h, t_0, t_1, θ) 除了计算过程不一样,陈天琦等研究者还在 MNSIT 测试了这两种模型的效果 。他们使用带有 6 个残差模块的 ResNet,以及使用一个 ODE Solver 代替这些残差模块的 ODEnet 。以下展示了不同网络在 MNSIT 上的效果、参数量、内存占用量和计算复杂度 。

文章插图
其中单个隐藏层的 MLP 引用自 LeCun 在 1998 年的研究,其隐藏层只有 300 个神经元,但是 ODEnet 在有相似参数量的情况下能获得显著更好的结果 。上表中 L 表示神经网络的层级数,L tilde 表示 ODE Solver 中的评估次数,它可以近似代表 ODEnet 的「层级深度」 。值得注意的是,ODEnet 只有常数级的内存占用,这表示不论层级的深度如何增加,它的内存占用基本不会有太大的变化 。
神经常微分方程
在与 ResNet 的类比中,我们基本上已经了解了 ODEnet 的前向传播过程 。首先输入数据 Z(t_0),我们可以通过一个连续的转换函数(神经网络)对输入进行非线性变换,从而得到 f 。随后 ODESolver 对 f 进行积分,再加上初值就可以得到最后的推断结果 。如下所示,残差网络只不过是用一个离散的残差连接代替 ODE Solver 。

文章插图
在前向传播中,ODEnet 还有几个非常重要的性质,即模型的层级数与模型的误差控制 。首先因为是连续模型,其并没有明确的层级数,因此我们只能使用相似的度量确定模型的「深度」,作者在这篇论文中采用 ODE Solver 评估的次数作为深度 。
其次,深度与误差控制有着直接的联系,ODEnet 通过控制误差容忍度能确定模型的深度 。因为 ODE Solver 能确保在误差容忍度之内逼近常微分方程的真实解,改变误差容忍度就能改变神经网络的行为 。一般而言,降低 ODE Solver 的误差容忍度将增加函数的评估的次数,因此类似于增加了模型的「深度」 。调整误差容忍度能允许我们在准确度与计算成本之间做权衡,因此我们在训练时可以采用高准确率而学习更好的神经网络,在推断时可以根据实际计算环境调整为较低的准确度 。

文章插图
如原论文的上图所示,a 图表示模型能保证在误差范围为内,且随着误差降低,前向传播的函数评估数增加 。b 图展示了评估数与相对计算时间的关系 。d 图展示了函数评估数会随着训练的增加而自适应地增加,这表明随着训练的进行,模型的复杂度会增加 。
c 图比较有意思,它表示前向传播的函数评估数大致是反向传播评估数的一倍,这恰好表示反向传播中的 adjoint sensitivity 方法不仅内存效率高,同时计算效率也比直接通过积分器的反向传播高 。这主要是因为 adjoint sensitivity 并不需要依次传递到前向传播中的每一个函数评估,即梯度不通过模型的深度由后向前一层层传 。
反向传播
师从同门的 Jesse Bettencourt 向机器之心介绍道,「天琦最擅长的就是耐心讲解 。」当他遇到任何无论是代码问题,理论问题还是数学问题,一旦是问了同桌的天琦,对方就一定会慢慢地花时间把问题讲清楚、讲透彻 。而 ODEnet 的反向传播,就是这样一种需要耐心讲解的问题 。
ODEnet 的反向传播与常见的反向传播有一些不同,我们可能需要仔细查阅原论文与对应的附录证明才能有较深的理解 。此外,作者给出了 ODEnet 的 PyTorch 实现,我们也可以通过它了解实现细节 。
- 教你正确区分巴沙鱼和多利鱼 多利鱼图片
- windows如何快速移动文件 windows文件夹的移动
- 喷墨打印机打印重影如何解决 打印机打印重影怎么解决
- 我的电脑图标不见了找回方法 电脑上图标不见了如何找回
- iphone如何设置来电拒接 iphone手机来电如何拒接
- ID卡和IC卡的区别 如何区别ic卡与id卡
- excel如何对文本进行排序 excel中怎么给文本排序
- 如何取消苹果系统更新提醒 如何关闭苹果手机的系统更新提醒
- 教你用百花鱼做酸爽的酸菜鱼 百花鱼怎么做
- 三十分钟教你快速入门隶书书法 初学隶书该做什么