03.06 是否可以通过增加神经网络的深度来提高其性能?

嘘树开花了


深度学习的根本理论问题之一是「深度有何作用」?虽然增加神经网络的层数可以提高其性能,但是训练和优化的难度也随之增加。本文却给出了一个相反观点,有时增加深度反而可以加速网络优化;同时提出端到端更新规则,证明深度网络过度的参数化(overparameterization)也可能是件好事。


深度学习理论中有一个根本的问题:即「网络的深度有何作用?」传统观点(如:Eldan & Shamir 2016; Raghu et al. 2017; Lee et al. 2017; Cohen et al. 2016; Daniely 2017)认为添加隐藏层可以提升网络表现力。但是往往这种能力的提升需要付出一定的代价——网络越深,优化越难(此即梯度消失或梯度爆炸问题)。最近有关「landscape characterization」的工作其实就隐含地采用了这种世界观,虽然看起来不明显(Kawaguchi 2016; Hardt & Ma 2017; Choromanska et al. 2015; Haeffele & Vidal 2017; Soudry & Carmon 2016; Safran & Shamir 2017)。他们证明了在深度网络目标中有关局部最小值与鞍点的理论。本文作者与 Sanjeev Arora 以及 Elad Hazan 合作的新论文《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》给出了一个反直观的观点,文章认为,有时增加深度反而可以加速网络优化。


有关深度网络过度参数化(overparameterization)可能是件好事是近来刚兴起的一种观点,作者的工作可说是支撑这一观点的又一个证据。相反,经典统计学并不推荐给模型设置更多的参数,没有必要,因为这会导致过拟合现象。


ℓ_p 回归


我们从一个非常简单的学习问题出发——ℓ_p 损失的标量线性回归(我们的理论和实验应用在当 p>2 的情况下):



这里代表一个训练集,它由一对(x,y)组成,其中 x 是一个表征事件的向量,y 是一个表征其标签的(数值)标量;w 是我们想要学习的参数向量。现在,让我们用向量 w_1 乘上标量ω_2 替换向量 w,把线性模型转换成一个非常简单的深度为 2 的网络。显然,这种过参数化操作并没有改变网络的表现力,但却生成了非凸目标函数(non-convex):



如论文所示,如果在 w_1 和ω_2 上应用梯度下降,学习速率很低,初始化接近零(深度学习的常见操作),那么在整个(端到端)模型 w=w_1·ω_2 上产生的动态影响可以写作:



其中ρ^(t) 和μ^(t,τ) 可被恰当地定义为(依赖时间的)系数。因此,看似一个正常的乘法标量的加法将普通的梯度下降转换成了一个以某种方式记录了过往的梯度(momentum 方法的关键特征)以及随时间变化学习速率有所差异的组合形式。尽管对 momentum 方法之精确好处的理论分析绝不容易,但是一项基于 UCI 机器学习库的「Gas Sensor Array Drift at Different Concentrations」数据集的简单实验(p=4)为我们展示了如下的效果:



这里我们注意到,过度参数化不仅仅加速了梯度下降,而且其加速效果还优于两个著名的梯度下降方案——AdaGrad 和 AdaDelta,在本实验中,前者并没有真正起到加速作用。在其它设置中,我们也观察到了类似的加速。


所以在这里发生了什么?与深度网络相对应的非凸目标函数比起凸目标函数来说是否更容易优化?这是一个普遍现象,还是只限于上述这种简单问题?我们首先来解决这些问题。


过参数化:表现性的解耦优化


一项有关深度对优化影响的综合研究表明了一个固有的问题存在——由于其优秀的表现力,更深的网络似乎收敛的更快。换句之,如果深度网络的优化过程进展得比浅层网络快,那么或许并不能显而易见地认为,这是一种真正加速现象的结果,或者说它仅仅是以下事实的副产品,即浅层模型不能达到和深层模型一样的损失。通过研究那些表征能力与网络深度无关的模型——线性神经网络(这是最近很多研究的主题),我们解决了这个难题。对于线性网络来说,增加层数并不会改变网络的表现力。只有当矩阵参数被矩阵乘积所替代——即过参数化,这才会发生。因此,如果这导致了收敛过程的加速,那么我们可以确定这并不是任何现象的结果,而是用于优化的深度的良好属性。


深度所带来的隐性动态过程


假设我们有兴趣来学习一个线性模型,其参数化由矩阵 W 完成,通过一些训练损失函数 L(W) 极小化来得到。我们不直接用使用矩阵 W,而是将其替代为一个深度为 N 的线性神经网络,例如我们将其过参数化成 W=W_NW_N−1⋯W_1,其中 W_j 是特定层的权重矩阵。在文中,我们指出如果人们在 W_1…W_N 上以低学习率η应用梯度下降,且有:



满足系统的优化启动(注意,这大致适用于标准的近零初始化),那么在全局端到端映射 W 引发的动力机制可以写作如下形式:



我们在经验上进行了验证,发现这个由分析得出的更新规则(对经典线性模型)实际上可以用于深度网络的优化,在理论上我们可以通过一系列步骤来解释它。我们发现,应用在 ∇L(W) 梯度上的变换(从左边乘上

从右边乘上

,然后再是 j 的求和)是一种特殊的预处理方案,可促进沿优化方向的运动。更具体地说,预处理可以被认为是下述两种元素的结合:


  • 一个适应性学习速率,它可以让步长增大,远离初始值;

  • 一种类似于 momentum 的操作,沿着目前采用的方位角来拉伸梯度。


重要的一点是,上述更新规则(以下称为端到端更新规则)不是依靠线性神经网络中隐藏层的的宽度,而是深度(N)。这意味着,从优化的角度看,使用宽或窄的网络的过参数化具有同样的效果。重要的仅仅是网络层的数量,因此用深度来加速没有计算上的需求——我们在实验中清楚地观察到了这一事实(例如,前面的图像展示了通过牺牲单一的额外标量参数来实现数量级加速)。



超越正则化


端到端更新规则定义了一种新优化方法,其过程由梯度∇L(W) 函数与参数 W 构成。与很多加速方法(比如 momentum 或者 Adam)那种明显要保持辅助变量相反,这种方法是 memoryless 的,并且根据定义它由对过参数化目标进行梯度下降法得来。所以自然地可以提出问题:如果我们可以将端到端更新规则表征成对一些损失 L(W) 正则化进行的梯度下降(即一些由 W 确定的函数),那么我们可以令人吃惊地证明,答案总是否定的——只要损失 L(W) 不在 W=0 位置有临界点,那么端到端更新规则(即过参数化的效力)就不能通过任何正则化来实现。


加速


到目前为止,通过给出一种等价的预处理方法并讨论了其一些特性,我们分析了深度(以过参数化的方式)在优化性能上的效用。然而,我们并没有给出任何理论证据来支持加速(更快地收敛速度)过程来自于这种方法。对这种加速过程场景的全面分析超越了我们文章的讨论范围。然而,我们在文中也的确分析了简单的ℓ_p 回归问题,并且发现,无论我们是否增加网络的深度加速效果,一切都决定于对 p 的选择:对于 p=2(平方误差)增加网络的层数并不会导致加速(根据 Saxe et al. 2014 的发现);然而对于 p>2 来说,这是可以的,这或许是因为预处理方法可以在目标 landscape 上处理大型 plateaus。大量 p 的值为 2 和 4,深度在 1 到 8(经典线性模型)的实验,都支持了这个结论。


非线性实验


作为最后一项实验,我们评估了在一个简单深度学习设置(基于 MNIST 数据集的 TensorFlow 卷积网络教程)上过参数化对优化的效果。通过简单地连续放置两个矩阵,而不是每一密集层的矩阵,我们引入了过度参数化。通过添加大约 15% 的参数数量,优化的提升呈数量级增长。

我们发现,其它卷积网络上的相似实验同样可以获得提速,但是不如上述方法显著。过度参数化加速非线性优化的条件下的实证表征将是未来研究的一个有趣方向。


结论


本文从优化的角度借助过度参数化展示了增加深度的好处,但依然存在很多问题。例如,严格地分析端到端更新规则的加速效果是否可能(比如,可与 Nesterov 1983 或 Duchi et al. 2011 相类比)?当然,对非线性深度网络以及更多其它实证评估的探讨也是有益处的。


机器之心Pro


表达效率

有一个表达效率(expressive efficiency)的概念,形式化地定义了不同神经网络的学习性能。

给定两个网络A和B,其尺寸参数(一般指网络层的宽度)分别为rA、rB,满足以下两个条件时,我们说网络A的表达效率高于网络B:

  1. 任何由尺寸为rB的B网络实现的函数可以被A网络实现(或逼近),且rA ∈ O(rB)。
  2. 存在由尺寸为rA的A网络实现的函数,B网络无法实现(或逼近),除非rB ∈ Ω(f(rA)),其中f为超线性(super-linear)函数。

很多研究都表明,表达效率往往和深度正相关,换句话说,一般而言,较深的网络表达效率比较浅的网络高。

是否可以通过增加神经网络的深度来提高其性能?

是的,确实可以通过增加深度来提高性能。


增加网络层导致的问题


为什么不增加神经网络的层次以提升其学习性能呢?除了计算成本和过度拟合问题之外……

其实你自己已经把答案说出来了。主要就是计算成本和过拟合这两个问题:

  1. 计算成本:越深的网络,一般而言,训练的代价就越高,优化起来就越困难(比如,更容易出现梯度爆炸和梯度消失问题)。当然,这也不是绝对的。Sanjeev Arora等在今年(2018)2月刚发的论文《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》,就指出某些情况下,由于更深的网络性质更优,收敛得更快,反而加快了训练进程。
  2. 过拟合:有一句名言(据说出自冯·诺依曼):“用四个参数我可以拟合出一头大象,而用五个参数我可以让它的鼻子摆动。”越深的网络,复杂度越高,相应地也就越容易过拟合。

除了计算成本和过度拟合问题之外,不同类型的神经网络之间的根本区别是什么?

类比一下,这个问题很像“除了算法复杂度,不同类型的算法之间的根本区别是什么”,所以,这可能是一个“哲学问题”。。。


论智


什么叫加速?指缩短训练时间还是提升训练效果?加深度很显然不会训练更快,但resnet 50和resnet 101现在基本成为主流图像处理backbone 这一事实来看增加层数是有用的,但除了resnet外目前没看到其他极端深的网络结构。


一尾活龙


我会以计算机视觉为例进行解释。

假设你有一张图片,你正在试着看懂它。

如果是狗看这张图的话,只能看到灰度信息,而且很可能有些模糊或者扭曲的灰度信息。虽然不是很清晰,但起码能看到一些有用的特征。以往的视觉识别和浅层神经网络用的就是这个原理。

如果是人看这张图的话,就能够以高分辨率看到图片的实线和颜色,比狗眼的识别效果好多了。把几层卷积层和池化层连接在一起,就能得到人眼的视觉效果。目前,由此产生的巨大收益使得以神经网络为基础的深度学习变得非常热门,让很多人认为连接更多层次的神经网络就可以获得更好的学习效果。

有人说可以利用螳螂虾的眼睛来增强神经网络的处理能力,因为螳螂虾的眼睛里有12种不同类型的感受器,具有现今人们已知的动物中最复杂的视觉系统。我描述不出来螳螂虾可以看到什么,但根据科学家的说法,人眼只能分辨三基色,而螳螂虾可以分辨八基色。从复杂性来说,螳螂虾的眼睛正是典型的超深层神经网络,可以看到更加坚实的线条、更加精确的细节。

但螳螂虾的眼睛有助于提升神经网络的性能吗?其实并没有,因为要理解图片的话,还需要推断图片的环境、用智力分析图片、把关于图片上的物体的外部知识应用到理解图片上。层次越多意味着眼睛的视觉越好,但眼睛本身是无法思考的,眼睛看到了图片上的信息后,还需要大脑分析这些信息。

原则上说,神经网络的层次多是有好处的,不仅仅体现在可以使现有的视觉架构更丰富上。人脑中的可交换性和冗余只适用于人脑,而计算机所擅长的是模块化和定义明确的功能。因此,正确的方法是以适当的方式将针对特定任务而设计的不同架构结合起来,至少对我们目前的认识水平所理解的统计学习系统而言是这样。


小鸽子看世界


网络纯粹的加深了会出现梯度弥散的现象。那么加深网络是否有用,网络模型的发展给了我们答案,像Resnet一样网络加深是会收到更好效果的。另外一方面,怎么加深网络又不出现梯度弥散,这就是INception结构的奇妙性!当然针对不同的任务可以选择不同深度的网络模型,要是想提高准确率,建议先拿已有的模型微调试试。


码科智能


建议看一下国立台湾大学李宏毅教授关于神经网络深层结构的课程视频。

李宏毅教授在视频里面用数学讨论证明了神经网络深层结构在最好的情况下:随着参数增多,【深层结构对函数的表达能力是指数型地强于同等参数量但是单层的神经网络结构】。

希望我的解释能帮助到你,无论如何,李宏毅教授的视频都是能够帮助你的(^L^)


分享到:


相關文章: