前言:
今天大家对“c语言数组鞍点”大概比较关心,各位老铁们都需要学习一些“c语言数组鞍点”的相关内容。那么小编同时在网上网罗了一些对于“c语言数组鞍点””的相关资讯,希望兄弟们能喜欢,同学们快快来了解一下吧!深度学习的根本理论问题之一是「深度有何作用」?虽然增加神经网络的层数可以提高其性能,但是训练和优化的难度也随之增加。本文却给出了一个相反观点,有时增加深度反而可以加速网络优化;同时提出端到端更新规则,证明深度网络过度的参数化(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 的情况下):
这里 S 代表一个训练集,它由一对(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 相类比)?当然,对非线性深度网络以及更多其它实证评估的探讨也是有益处的。
标签: #c语言数组鞍点