深度神经网络的改进:微分、离散优化、高斯过程等

硬核NeruIPS 2018最佳论文,一个神经了的常微分方程

机器之心原创,作者:蒋思源。

这是一篇神奇的论文,以前一层一层叠加的神经网络似乎突然变得连续了,反向传播也似乎不再需要一点一点往前传、一层一层更新参数了。

在最近结束的 NeruIPS 2018 中,来自多伦多大学的陈天琦等研究者成为最佳论文的获得者。他们提出了一种名为神经常微分方程的模型,这是新一类的深度神经网络。神经常微分方程不拘于对已有架构的修修补补,它完全从另外一个角度考虑如何以连续的方式借助神经网络对数据建模。在陈天琦的讲解下,机器之心将向各位读者介绍这一令人兴奋的神经网络新家族。

在与机器之心的访谈中,陈天琦的导师 David Duvenaud 教授谈起这位学生也是赞不绝口。Duvenaud 教授认为陈天琦不仅是位理解能力超强的学生,钻研起问题来也相当认真透彻。他说:「天琦很喜欢提出新想法,他有时会在我提出建议一周后再反馈:『老师你之前建议的方法不太合理。但是我研究出另外一套合理的方法,结果我也做出来了。』」Ducenaud 教授评价道,现如今人工智能热度有增无减,教授能找到优秀博士生基本如同「鸡生蛋还是蛋生鸡」的问题,顶尖学校的教授通常能快速地招纳到博士生,「我很幸运地能在事业起步阶段就遇到陈天琦如此优秀的学生。」

本文主要介绍神经常微分方程背后的细想与直观理解,很多延伸的概念并没有详细解释,例如大大降低计算复杂度的连续型流模型和官方 PyTorch 代码实现等。这一篇文章重点对比了神经常微分方程(ODEnet)与残差网络,我们不仅能通过这一部分了解如何从熟悉的 ResNet 演化到 ODEnet,同时还能还有新模型的前向传播过程和特点。

其次文章比较关注 ODEnet 的反向传播过程,即如何通过解常微分方程直接把梯度求出来。这一部分与传统的反向传播有很多不同,因此先理解反向传播再看源码可能是更好的选择。值得注意的是,ODEnet 的反传只有常数级的内存占用成本。

如下展示了文章的主要结构:

  • 常微分方程
  • 从残差网络到微分方程
  • 从微分方程到残差网络
  • 网络对比
  • 神经常微分方程
  • 反向传播
  • 反向传播怎么做
  • 连续型的归一化流
  • 变量代换定理

常微分方程

其实初读这篇论文,还是有一些疑惑的,因为很多概念都不是我们所熟知的。因此如果想要了解这个模型,那么同学们,你们首先需要回忆高数上的微分方程。有了这样的概念后,我们就能愉快地连续化神经网络层级,并构建完整的神经常微分方程。

常微分方程即只包含单个自变量 x、未知函数 f(x) 和未知函数的导数 f'(x) 的等式,所以说 f'(x) = 2x 也算一个常微分方程。但更常见的可以表示为 df(x)/dx = g(f(x), x),其中 g(f(x), x) 表示由 f(x) 和 x 组成的某个表达式,这个式子是扩展一般神经网络的关键,我们在后面会讨论这个式子怎么就连续化了神经网络层级。

一般对于常微分方程,我们希望解出未知的 f(x),例如 f'(x) = 2x 的通解为 f(x)=x^2 +C,其中 C 表示任意常数。而在工程中更常用数值解,即给定一个初值 f(x_0),我们希望解出末值 f(x_1),这样并不需要解出完整的 f(x),只需要一步步逼近它就行了。

现在回过头来讨论我们熟悉的神经网络,本质上不论是全连接、循环还是卷积网络,它们都类似于一个非常复杂的复合函数,复合的次数就等于层级的深度。例如两层全连接网络可以表示为 Y=f(f(X, θ1), θ2),因此每一个神经网络层级都类似于万能函数逼近器。

因为整体是复合函数,所以很容易接受复合函数的求导方法:链式法则,并将梯度从最外一层的函数一点点先向里面层级的函数传递,并且每传到一层函数,就可以更新该层的参数 θ。现在问题是,我们前向传播过后需要保留所有层的激活值,并在沿计算路径反传梯度时利用这些激活值。这对内存的占用非常大,因此也就限制了深度模型的训练过程。

神经常微分方程走了另一条道路,它使用神经网络参数化隐藏状态的导数,而不是如往常那样直接参数化隐藏状态。这里参数化隐藏状态的导数就类似构建了连续性的层级与参数,而不再是离散的层级。因此参数也是一个连续的空间,我们不需要再分层传播梯度与更新参数。总而言之,神经微分方程在前向传播过程中不储存任何中间结果,因此它只需要近似常数级的内存成本。

从残差网络到微分方程

残差网络是一类特殊的卷积网络,它通过残差连接而解决了梯度反传问题,即当神经网络层级非常深时,梯度仍然能有效传回输入端。下图为原论文中残差模块的结构,残差块的输出结合了输入信息与内部卷积运算的输出信息,这种残差连接或恒等映射表示深层模型至少不能低于浅层网络的准确度。这样的残差模块堆叠几十上百个就是非常深的残差神经网络。

如果我们将上面的残差模块更加形式化地表示为以下方程:

其中 h_t 是第 t 层隐藏单元的输出值,f 为通过θ_t 参数化的神经网络。该方程式表示上图的整个残差模块,如果我们其改写为残差的形式,即 h_t+1 - h_t = f(h_t, θ_t )。那么我们可以看到神经网络 f 参数化的是隐藏层之间的残差,f 同样不是直接参数化隐藏层。

ResNet 假设层级的离散的,第 t 层到第 t+1 层之间是无定义的。那么如果这中间是有定义的呢?残差项 h_t0 - h_t1 是不是就应该非常小,以至于接近无穷小?这里我们少考虑了分母,即残差项应该表示为 (h_t+1 - h_t )/1,分母的 1 表示两个离散的层级之间相差 1。所以再一次考虑层级间有定义,我们会发现残差项最终会收敛到隐藏层对 t 的导数,而神经网络实际上参数化的就是这个导数。

所以若我们在层级间加入更多的层,且最终趋向于添加了无穷层时,神经网络就连续化了。可以说残差网络其实就是连续变换的欧拉离散化,是一个特例,我们可以将这种连续变换形式化地表示为一个常微分方程:

如果从导数定义的角度来看,当 t 的变化趋向于无穷小时,隐藏状态的变化 dh(t) 可以通过神经网络建模。当 t 从初始一点点变化到终止,那么 h(t) 的改变最终就代表着前向传播结果。这样利用神经网络参数化隐藏层的导数,就确确实实连续化了神经网络层级。

现在若能得出该常微分方程的数值解,那么就相当于完成了前向传播。具体而言,若 h(0)=X 为输入图像,那么终止时刻的隐藏层输出 h(T) 就为推断结果。这是一个常微分方程的初值问题,可以直接通过黑箱的常微分方程求解器(ODE Solver)解出来。而这样的求解器又能控制数值误差,因此我们总能在计算力和模型准确度之间做权衡。

形式上来说,现在就需要变换方程 (2) 以求出数值解,即给定初始状态 h(t_0) 和神经网络的情况下求出终止状态 h(t_1):

如上所示,常微分方程的数值解 h(t_1) 需要求神经网络 f 从 t_0 到 t_1 的积分。我们完全可以利用 ODE solver 解出这个值,这在数学物理领域已经有非常成熟的解法,我们只需要将其当作一个黑盒工具使用就行了。

从微分方程到残差网络

前面提到过残差网络是神经常微分方程的特例,可以说残差网络是欧拉方法的离散化。两三百年前解常微分方程的欧拉法非常直观,即 h(t +Δt) = h(t) + Δt×f(h(t), t)。每当隐藏层沿 t 走一小步Δt,新的隐藏层状态 h(t +Δt) 就应该近似在已有的方向上迈一小步。如果这样一小步一小步从 t_0 走到 t_1,那么就求出了 ODE 的数值解。

如果我们令 Δt 每次都等于 1,那么离散化的欧拉方法就等于残差模块的表达式 h(t+1) = h(t) + f(h(t), t)。但是欧拉法只是解常微分方程最基础的方法,它每走一步都会产生一点误差,且误差会累积起来。近百年来,数学家构建了很多现代 ODE 求解方法,它们不仅能保证收敛到真实解,同时还能控制误差水平。

陈天琦等研究者构建的 ODE 网络就使用了一种适应性的 ODE solver,它不像欧拉法移动固定的步长,相反它会根据给定的误差容忍度选择适当的步长逼近真实解。如下图所示,左边的残差网络定义有限转换的离散序列,它从 0 到 1 再到 5 是离散的层级数,且在每一层通过激活函数做一次非线性转换。此外,黑色的评估位置可以视为神经元,它会对输入做一次转换以修正传递的值。而右侧的 ODE 网络定义了一个向量场,隐藏状态会有一个连续的转换,黑色的评估点也会根据误差容忍度自动调整。

网络对比

在 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 实现,我们也可以通过它了解实现细节。

正如作者而言,训练一个连续层级网络的主要技术难点在于令梯度穿过 ODE Solver 的反向传播。其实如果令梯度沿着前向传播的计算路径反传回去是非常直观的,但是内存占用会比较大而且数值误差也不能控制。作者的解决方案是将前向传播的 ODE Solver 视为一个黑箱操作,梯度很难或根本不需要传递进去,只需要「绕过」就行了。

作者采用了一种名为 adjoint method 的梯度计算方法来「绕过」前向传播中的 ODE Solver,即模型在反传中通过第二个增广 ODE Solver 算出梯度,其可以逼近按计算路径从 ODE Solver 传递回的梯度,因此可用于进一步的参数更新。这种方法如上图 c 所示不仅在计算和内存非常有优势,同时还能精确地控制数值误差。

具体而言,若我们的损失函数为 L(),且它的输入为 ODE Solver 的输出:

我们第一步需要求 L 对 z(t) 的导数,或者说模型损失的变化如何取决于隐藏状态 z(t) 的变化。其中损失函数 L 对 z(t_1) 的导数可以为整个模型的梯度计算提供入口。作者将这一个导数称为 adjoint a(t) = -dL/z(t),它其实就相当于隐藏层的梯度。

在基于链式法则的传统反向传播中,我们需要从后一层对前一层求导以传递梯度。而在连续化的 ODEnet 中,我们需要将前面求出的 a(t) 对连续的 t 进行求导,由于 a(t) 是损失 L 对隐藏状态 z(t) 的导数,这就和传统链式法则中的传播概念基本一致。下式展示了 a(t) 的导数,它能将梯度沿着连续的 t 向前传,附录 B.1 介绍了该式具体的推导过程。

在获取每一个隐藏状态的梯度后,我们可以再求它们对参数的导数,并更新参数。同样在 ODEnet 中,获取隐藏状态的梯度后,再对参数求导并积分后就能得到损失对参数的导数,这里之所以需要求积分是因为「层级」t 是连续的。这一个方程式可以表示为:

综上,我们对 ODEnet 的反传过程主要可以直观理解为三步骤,即首先求出梯度入口伴随 a(t_1),再求 a(t) 的变化率 da(t)/dt,这样就能求出不同时刻的 a(t)。最后借助 a(t) 与 z(t),我们可以求出损失对参数的梯度,并更新参数。当然这里只是简要的直观理解,更完整的反传过程展示在原论文的算法 1。

反向传播怎么做

在算法 1 中,陈天琦等研究者展示了如何借助另一个 OED Solver 一次性求出反向传播的各种梯度和更新量。要理解算法 1,首先我们要熟悉 ODESolver 的表达方式。例如在 ODEnet 的前向传播中,求解过程可以表示为 ODEsolver(z(t_0), f, t_0, t_1, θ),我们可以理解为从 t_0 时刻开始令 z(t_0) 以变化率 f 进行演化,这种演化即 f 在 t 上的积分,ODESolver 的目标是通过积分求得 z(t_1)。

同样我们能以这种方式理解算法 1,我们的目的是利用 ODESolver 从 z(t_1) 求出 z(t_0)、从 a(t_1) 按照方程 4 积出 a(t_0)、从 0 按照方程 5 积出 dL/dθ。最后我们只需要使用 dL/dθ 更新神经网络 f(z(t), t, θ) 就完成了整个反向传播过程。

如上所示,若初始给定参数θ、前向初始时刻 t_0 和终止时刻 t_1、终止状态 z(t_1) 和梯度入口 ∂L/∂z(t_1)。接下来我们可以将三个积分都并在一起以一次性解出所有量,因此我们可以定义初始状态 s_0,它们是解常微分方程的初值。

注意第一个初值 z(t_1),其实在前向传播中,从 z(t_0) 到 z(t_1) 都已经算过一遍了,但是模型并不会保留计算结果,因此也就只有常数级的内存成本。此外,在算 a(t) 时需要知道对应的 z(t),例如 ∂L/∂z(t_0) 就要求知道 z(t_0) 的值。如果我们不能保存中间状态的话,那么也可以从 z(t_1) 到 z(t_0) 反向再算一遍中间状态。这个计算过程和前向过程基本一致,即从 z(t_1) 开始以变化率 f 进行演化而推出 z(t_0)。

定义 s_0 后,我们需要确定初始状态都是怎样「演化」到终止状态的,定义这些演化的即前面方程 (3)、(4) 和 (5) 的被积函数,也就是算法 1 中 aug_dynamics() 函数所定义的。

其中 f(z(t), t, θ) 从 t_1 到 t_0 积出来为 z(t_0),这第一个常微分方程是为了给第二个提供条件。而-a(t)*∂L/∂z(t) 从 t_1 到 t_0 积出来为 a(t_0),它类似于传统神经网络中损失函数对第一个隐藏层的导数,整个 a(t) 就相当于隐藏层的梯度。只有获取积分路径中所有隐藏层的梯度,我们才有可能进一步解出损失函数对参数的梯度。

因此反向传播中的第一个和第二个常微分方程 都是为第三个微分方程提供条件,即 a(t) 和 z(t)。最后,从 t_1 到 t_0 积分 -a(t)*∂f(z(t), t, θ)/∂θ 就能求出 dL/dθ。只需要一个积分,我们不再一层层传递梯度并更新该层特定的参数。

如下伪代码所示,完成反向传播的步骤很简单。先定义各变量演化的方法,再结合将其结合初始化状态一同传入 ODESolver 就行了。

def f_and_a([z, a], t):
    return[f, -a*df/da, -a*df/dθ]

[z0, dL/dx, dL/dθ] = 
        ODESolver([z(t1), dL/dz(t), 0], f_and_a, t1, t0)

连续型的归一化流

这种连续型转换有一个非常重要的属性,即流模型中最基础的变量代换定理可以便捷快速地计算得出。在论文的第四节中,作者根据这样的推导结果构建了一个新型可逆密度模型,它能克服 Glow 等归一化流模型的缺点,并直接通过最大似然估计训练。

变量代换定理

对于概率密度估计中的变量代换定理,我们可以从单变量的情况开始。若给定一个随机变量 z 和它的概率密度函数 z∼π(z),我们希望使用映射函数 x=f(z) 构建一个新的随机变量。函数 f 是可逆的,即 z=g(x),其中 f 和 g 互为逆函数。现在问题是如何推断新变量的未知概率密度函数 p(x)?

通过定义,积分项 ∫π(z)dz 表示无限个无穷小的矩形面积之和,其中积分元Δz 为积分小矩形的宽,小矩形在位置 z 的高为概率密度函数 π(z) 定义的值。若使用 f^−1(x) 表示 f(x) 的逆函数,当我们替换变量的时候,z=f^−1(x) 需要服从 Δz/Δx=(f^−1(x))′。多变量的变量代换定理可以从单变量推广而出,其中 det ∂f/∂z 为函数 f 的雅可比行列式:

一般使用变量代换定理需要计算雅可比矩阵∂f/∂z 的行列式,这是主要的限制,最近的研究工作都在权衡归一化流模型隐藏层的表达能力与计算成本。但是研究者发现,将离散的层级替换为连续的转换,可以简化计算,我们只需要算雅可比矩阵的迹就行了。核心的定理 1 如下所示:

在普通的变量代换定理中,分布的变换函数 f(或神经网络)必须是可逆的,而且要制作可逆的神经网络也很复杂。在陈天琦等研究者定理里,不论 f 是什么样的神经网络都没问题,它天然可逆,所以这种连续化的模型对流模型的应用应该非常方便。

如下所示,随机变量 z(t_0) 及其分布可以通过一个连续的转换演化到 z(t_1) 及其分布:

此外,连续型流模型还有很多性质与优势,但这里并不展开。变量代换定理 1 在附录 A 中有完整的证明,感兴趣的读者可查阅原论文了解细节。

最后,神经常微分方程是一种全新的框架,除了流模型外,很多方法在连续变换的改变下都有新属性,这些属性可能在离散激活的情况下很难获得。也许未来会有很多的研究关注这一新模型,连续化的神经网络也会变得多种多样。


离散优化代替反向传播:Pedro Domingos提出深度学习新方向

选自arXiv 

作者:Abram L. Friesen & Pedro Domingos

机器之心编译

在改革深度学习、抛弃反向传播的道路上我们不仅看到了 Geoffrey Hinton 的努力。近日,《终极算法》一书作者,华盛顿大学计算机科学教授 Pedro Domingos 也提出了自己的方法——离散优化。

神经分类的原始方法是学习单层模型,比如感知机(Rosenblatt, 1958)。但是,将这些方法扩展至多层比较困难,因为硬阈值单元(hard-threshold unit)无法通过梯度下降进行训练,这类单元在几乎所有情况下导数都为 0,且在原点处非连续。因此,研究社区转向带有软激活函数(如 Sigmoid、ReLU)的多层网络,这样梯度可以通过反向传播进行高效计算(Rumelhart et al., 1986)。

该方法获得了巨大成功,使研究者使用数百层来训练网络,学得的模型在大量任务上取得非常高的准确率,效果超越之前的所有方法。但是,随着网络变得更深、更宽,出现了一种趋势:使用硬阈值激活函数进行量化,实现二元或低精度推断,可以大幅降低现代深层网络的能耗和计算时间。除量化以外,硬阈值单元的输出规模独立(或者不敏感)于输入规模,这可以缓解梯度消失和爆炸问题,帮助避免使用反向传播进行低精度训练时出现的一些反常现象(Li et al., 2017)。避免这些问题对开发可用于更复杂任务的大型深层网络系统至关重要。

出于以上原因,我们研究使用硬阈值单元学习深层神经网络的高效技术。我们观察到硬阈值单元输出离散值,这表明组合优化(combinatorial optimization)可能提供训练这些网络的有效方法,因此本论文提出了一种学习深层硬阈值网络的框架。通过为每个隐藏层激活函数指定离散目标集,该网络可分解成多个独立的感知机,每个感知机可以根据输入和目标轻松进行训练。学习深层硬阈值网络的难点在于设置目标,使每个感知机(包括输出单元)要解决的问题是线性可分的,从而达到目标。我们证明使用我们的混合凸组合优化框架可以学得这样的网络。

基于这一框架,随后我们开发了递归算法,一个可行的目标传播(FTPROP),用来学习深度硬阈值网络。由于这是一个离散优化问题,我们开发了启发法以设置基于每层损失函数的目标。FTPROP 的小批量处理版本可用于解释和证明经常使用的直通的评估器(straight-through estimator/Hinton, 2012; Bengio et al., 2013),现在这可被视为带有每层损失函数和目标启发法的一个特定选择的 FTPROP 实例。最后,我们开发了一个全新的每层损失函数,它能提升深度硬阈值网络的学习能力。我们实际展示了我们的算法在 CIFAR10 的直通评估器为两个卷积网路所带来的提升,以及在 ImageNet 上为带有多个硬阈值激活函数类型的 AlexNet 和 ResNet-18 所带来的提升。

图 1:在设置了一个深层硬阈值网络的隐藏层目标 T1 之后,该网络分解成独立的感知机,进而可通过标准方法被学习。

可行的目标传播

前面部分的开放性问题是如何设置隐藏层的优化目标。一般来说,对整个网络一次性生成优秀的、可行的(feasible)优化目标是十分困难的。相反,在一个层级上单次只提供一个优化目标却十分简单。在反向传播中,因为神经网络最后一层的优化目标是给定的,所以算法会从输出层开始,然后令误差沿着反向传播,这种反向传播就成功地为前面层级设定了优化目标。此外,因为获取优化的先验知识是非常困难的,那么如果某层级的目标对于一个给定的网络架构是可行的,我们就可以有一个简单的替代方案。该方案为层级 d 设置一个优化目标,然后优化前面层级已有的权重(即 j<=d 的层级权重)以检查该目标是不是可行。因为在优化层级时的权重和设置其上游目标(即其输入)时的目标相同,我们称之为诱导可行性(induce feasibility),即一种设置目标值的自然方法,它会选择减少层级损失 Ld 的优化目标。

然而,因为优化目标是离散的,目标空间就显得十分巨大且不平滑,它也不能保证在实际执行优化时能同时降低损失。因此启发式方法(heuristics)是很有必要的,我们会在本论文的下一部分详细解释这种启发式方法。d 层优化目标的可行性能通过递归地更新层级 d 的权重而确定,并根据 d-1 层的目标给出 d 层的优化目标。

这一递归过程会继续进行,直到传播到输入层,而其中的可行性(即线性可分型)能通过给定优化目标和数据集输入后优化层级的权重而简单地确定。层级 d 的优化目标能够基于从递归和层级 d-1 的输出而获得的信息增益中得到更新。我们称这种递归算法为可行的目标传播(FTPROP)。该算法的伪代码已经展示在算法 1 中。FTPROP 是一种目标传播 (LeCun, 1986; 1987; Lee et al., 2015),它使用离散型替代连续型而优化设置的目标。FTPROP 同样和 RDIS (Friesen & Domingos, 2015) 高度相关,该优化方法是基于 SAT 求解器的强大非凸优化算法,它会递归地选择和设置变量的自己以分解潜在的问题为简单的子问题。但 RDIS 仅适用于连续问题,但 RDIS 的思想可以通过和积定理(sum-product theorem/Friesen & Domingos, 2016)泛化到离散变量优化中。

当然,现代深层网络在给定数据集上不总是具备可行的目标设置。例如,卷积层的权重矩阵上有大量结构,这使得层输入对目标是线性可分的概率降低。此外,保证可行性通常会使模型与训练数据产生过拟合,降低泛化性能。因此,我们应该放松可行性方面的要求。

此外,使用小批量处理而不是全批处理训练有很多好处,包括改善泛化差距(参见 LeCun et al. 2012 或 Keskar et al. 2016),减少内存使用,利用数据增强的能力,以及为其设计的工具(比如 GPU)的流行。幸运的是,把 FTPROP 转化为一个小批量算法并放宽可行性需求非常简单。尤其是,由于不过度使用任何一个小批量处理非常重要,FTPROP 的小批量版本 (i) 每次只使用一个小批量的数据更新每一层的权重和目标;(ii) 只在每一层的权重上采取一个小的梯度下降步,而不是全部优化;(iii) 设置与更新当前层的权重并行的下游层的目标,因为权重不会改变太多; (iv) 删除对可行性的所有检查。我们把这一算法称作 FTPROP-MB,并在附录 A 算法 2 中展示了其伪代码。FTPROP-MB 非常类似于基于反向传播的方法,通过标准库即可轻松执行它。

算法 2. MINI-BATCH 可行目标传播

图 2:(a)-(c)显示了不同层的损失函数(蓝线)及其导数(红色虚线)。(d)显示量化 ReLU 激活函数(蓝线),它是阶梯函数的总和,对应饱和的合页损失导数(红色虚线)总和,逼近这个总和的软合页损失性能最佳(黄色虚线)。

表 1. 在 CIFAR 10 或 ImageNet 上进行符号、qReLU 和全精度激活函数训练时,各种网络的 Top-1 准确度。硬阈值激活函数由 FTPROP-MB、逐层软合页损失函数(FTP-SH)与饱和直通估计(SSTE)训练。粗体显示了表现最好的激活函数

图 3. 不同激活函数的 alexNet 在 imageNet 上的 Top-1 训练(虚线)与测试(实线)准确度。小图显示了最后 25 个 epoch 的测试准确度。在两个大图中带有软合页损失(FTP-SH,红色)的 FTPROP-MB 要比饱和直通估计(SSTE,蓝色)要好。左图显示了带有标志激活的网络。右图展示了新方法(FTP-SH)使用 2-bit 量化 ReLU(qReLU)训练的表现与全精度 ReLU 几乎相同。有趣的是,在这里饱和 ReLU 的表现超过了标准 ReLU。

论文:Deep Learning as a Mixed Convex-Combinatorial Optimization Problem

论文链接:https://arxiv.org/abs/1710.11573

随着神经网络变得越来越深,越来越宽,具有硬阈值激活的学习网络对于网络量化正变得越来越重要,还可以显著减少时间和能量的需求,用于构建高度集成的神经网络系统,这些系统通常会有不可微的组件,确保能避免梯度消失与爆炸以进行有效学习。然而,由于梯度下降不适用于硬阈值函数,我们尚不清楚如何以有原则的方式学习它们。

在本论文中,我们通过观察发现硬阈值隐藏单元的设置目标以最小化损失是一个离散的优化问题,这正好是问题的解决方式。离散优化的目标是找到一系列目标,使得每个单元,包括输出内容都有线性可分的解。因此,网络被分解成一个个感知机,它们可以用标准的凸方法来学习。基于这个方式,我们开发了一种用于学习深度硬阈值网络的递归小批量算法,包括流行但难以解释的直通估计(straight-through estimator)函数作为范例。实验证明,对比直通估计函数,新的算法可以提升多种网络的分类准确度,其中包括 ImageNet 上的 AlexNet、ResNet-18。

本文为机器之心编译,转载请联系本公众号获得授权。


神经网络碰上高斯过程,DeepMind论文开启深度学习新方向

选自arXiv,机器之心编译。

神经网络目前是最强大的函数近似器,而高斯过程是另一种非常强大的近似方法。DeepMind 刚刚提出了两篇结合高斯过程与神经网络的研究,这种模型能获得神经网络训练上的高效性,与高斯过程在推断时的灵活性。DeepMind 分别称这两种模型为神经过程与条件神经过程,它们通过神经网络学习逼近随机过程,并能处理监督学习问题。

函数近似是机器学习众多问题的核心,而过去深度神经网络凭借其「万能近似」的属性在函数近似方面无与伦比。在高级层面,神经网络可以构成黑箱函数近似器,它会学习如何根据大量训练数据点来参数化单个函数。

除了使用神经网络这种参数化的方法逼近一个函数,我们还可以根据随机过程执行推断以进行函数回归。随机过程会从概率的角度选择目标函数的可能分布,因而也能通过样本采样逼近真实的目标函数,随机过程在强化学习与超参数搜索方面比较常用。随机过程中最常见的实例就是高斯过程(GP),这种模型与神经网络有着互补的属性:高斯过程不需要昂贵的训练阶段,并且可以直接根据一些观察值对潜在的真实函数进行推断,这使得这种方法在测试阶段有非常灵活的属性。

但是高斯过程也有着很多局限性,首先 GP 在计算上是非常昂贵的。在原始方程中,计算复杂度随数据点的数量增加成立方地增加,即使在当前最优的近似方法中,那也是成平方地增加。此外,可用的核函数通常在函数形式上受到很大的限制,并且需要额外的优化过程来确定最合适的核函数,其可以看作高斯过程的超参数。

而最近 DeepMind 连发两篇论文探讨结合神经网络与高斯过程的方法,他们首先在论文《Neural Processes》中探讨了使用神经网络学习逼近随机过程的方法,随后又在论文《Conditional Neural Processes》讨论了结合神经网络与高斯过程解决监督学习问题的端到端的方法。

在论文《Neural Processes》中,DeepMind 介绍了基于神经网络的形式化方法,以学习随机过程的近似,他们将这种方法称之为神经过程(NP)。NP 能展示 GP 的一些基本属性,即学习目标函数的一个分布以逼近真实函数,NP 能根据上下文观察值估计其预测的不确定性,并将一些工作负载从训练转移到测试的过程中,这使得模型拥有更高的灵活性。更重要的是,NP 以高效计算的方式生成预测。给定 n 个上下文点和 m 个目标点,使用已训练 NP 进行推断对应着深度网络中的前向传播过程,它的时间复杂度为 O(n+m) 而不是经典高斯过程所需要的 O((n+m)^3)。此外,模型可以直接通过数据学习隐式的核函数,从而克服很多函数设计上的限制。

在论文《Conditional Neural Processes》中,DeepMind 提出了一族模型,可用于解决监督学习问题,并提供了端到端的训练方法,其结合了神经网络和类似高斯过程的特征。DeepMind 称这族神经网络为条件神经过程(CNP),以表明它们在给定一系列观察数据时定义函数的条件分布。CNP 对观察数据的依赖由一个神经网络参数化,其在输入的置换排列下保持不变。该架构的测试时间复杂度为 O(n+m),其中 n、m 分别是观察样本数和目标数。

论文:Neural Processes

论文地址:https://arxiv.org/abs/1807.01622摘要:神经网络是一类参数化函数,可以通过梯度下降来高精度地逼近标记数据集。另一方面,高斯过程(GP)是一种概率模型,其定义了可能函数的分布,并通过概率推理规则和数据来更新。GP 是概率性、数据高效和灵活的,然而它们的计算很昂贵,因而应用受限。我们引入了一类神经隐变量模型,称为神经过程(NP),其结合了两者的优点。和 GP 类似,NP 定义了函数的分布,可以快速适应新的观察数据,并可以评估预测的不确定性。类似神经网络,NP 在训练和评估过程中的计算是高效的,并且能学习将先验概率引入到数据中。我们在一系列学习任务上展示了 NP 的性能,包括回归和优化,并和相关文献的模型进行对比。

图 1:神经过程模型。(a)神经过程的图模型。x 和 y 对应着 y = f(x) 的数据,C 和 T 分别是上下文点和目标点的数量,而 z 表示全局隐变量。此外,灰色背景表示变量是已经观察到的。(b)为实现神经过程的计算图。圆圈里面的变量对应着这(a)中图模型的变量,方框里面的变量为 NP 的中间表征。而没有框的加粗字母分别表示以下计算模块:h 为编码器、a 为汇集器(aggregator)、g 为解码器。在该实现中,h 和 g 分别对应神经网络,而 a 对应均值函数。最后,实线描述了生成过程,而虚线描述了推断过程。

图 2:相关模型(a-c)和神经过程(d)的图模型。灰色阴影表示变量已被观察。C 代表上下文变量,T 代表目标变量(即给定 C 的预测变量)。

图 5:在 1-D 目标函数利用神经过程的 Thompson sampling。图中展示了五次迭代的优化过程。每个预测函数(蓝色)通过采样一个隐变量进行绘制,以上下文点数的增加为条件(黑色圆)。真实函数由一个黑色点线表示。红色三角形对应采样 NP 曲线的最小值的下一个评估点。下一次迭代中的红色圆对应该评估点及其真值,作为 NP 的下一个上下文点。

论文:Conditional Neural Processes

论文地址:https://arxiv.org/abs/1807.01613

摘要:深度神经网络在函数近似中表现优越,然而通常对每个新函数它们都需要从零开始学习。另一方面,贝叶斯方法,例如高斯过程(GP)利用了先验知识在测试时快速推理新函数的形状。不过 GP 的计算很昂贵,并且设计合适的先验可能很困难。在本文中我们提出了一族神经模型:条件神经过程(CNP),其结合了前述两者的优点。CNP 由随机过程例如高斯过程的灵活性所启发,但其结构是神经网络式的,并通过梯度下降来训练。CNP 仅观察了少量训练数据点之后就可以执行准确的预测,并能扩展到复杂函数和大规模数据集上。我们在一系列标准的机器学习任务(包括回归、分类和图像补全)上展示了该方法的性能和通用性。

图 1:条件神经过程。a)数据描述;b)传统监督深度学习模型的训练方式;c)本文提出的模型。

4. 实验结果

图 2:1-D 回归。用 5 个(左列)和 50 个(右列)上下文点(黑点)得到的 1-D 曲线(黑线)回归结果。前两行展示了 GP(红色)和 CNP(蓝色)进行回归的预测平均值和方差,它们只使用单个潜在核函数。最后一行展示了用交换核参数得到的 CNP 预测曲线。

图 3:在 MNIST 上的像素级图像回归。左:不同观察样本数下的图像回归的两个示例。研究者向模型提供了 1、40、200 和 728 个上下文点(顶行),并查询完整的图像。图中展示了每张图像在每个像素位置得到的平均值(中行)和方差(底行)。右:随着观察样本数的增加的模型准确率变化,其中两条曲线分别是随机(蓝色)或按最高方差(红色)选择像素。

图 4:在 CelebA 上的像素级图像补全。不同观察样本数下的 CelebA 图像回归的两个示例。研究者向模型提供 1、10、100 和 1000 个上下文点(顶行)并查询完整的图像。图中展示了每张图像在每个像素位置得到的平均值(中行)和方差(底行)。

表 1:在 Celeb A 数据集上随着上下文点的增加(10、100、1000)在图像补全任务上的所有图像像素的像素级均方误差。这些点或者是随机选择的,或者是按左下到右上的顺序选择的。在提供更少的上下文点的情况下,CNP 超越了 kNN 和 GP。此外,CNP 在点选择顺序排列的情况下也能表现良好,而 GP 和 kNN 在点顺序排列的时候表现变差很多。

猜你喜欢

转载自www.cnblogs.com/cx2016/p/11444544.html
今日推荐