许多神经网络书籍和教程都在反向传播算法上花费了大量时间,反向传播算法本质上是计算梯度的工具。
假设我们正在建立一个具有约10K参数/权重的模型。是否可以使用一些无梯度优化算法来运行优化?
我认为计算数字梯度会太慢,但是其他方法(如Nelder-Mead,模拟退火或遗传算法)如何?
所有算法都会遭受局部极小值的困扰,为什么会迷恋梯度?
许多神经网络书籍和教程都在反向传播算法上花费了大量时间,反向传播算法本质上是计算梯度的工具。
假设我们正在建立一个具有约10K参数/权重的模型。是否可以使用一些无梯度优化算法来运行优化?
我认为计算数字梯度会太慢,但是其他方法(如Nelder-Mead,模拟退火或遗传算法)如何?
所有算法都会遭受局部极小值的困扰,为什么会迷恋梯度?
Answers:
您提到的前两种算法(Nelder-Mead和“模拟退火”)在优化圈中通常被认为已经过时了,因为有更好,更可靠且成本更低的替代方案。遗传算法涵盖范围很广,其中一些可能是合理的。
但是,在更广泛的无导数优化(DFO)算法类别中,有许多方法明显优于这些“经典”算法,因为这是近几十年来的活跃研究领域。那么,其中一些较新的方法对于深度学习是否合理?
以下是比较最新技术水平的一篇论文:
Rios,LM&Sahinidis,NV(2013)无导数优化:算法回顾和软件实现比较。全球优化杂志。
这是一篇不错的论文,对最新技术有很多有趣的见解。例如,结果清楚地表明,使用不同形式的顺序二次编程(SQP),最佳的本地优化程序都是“基于模型的” 。
但是,正如他们的摘要所述:“我们发现,所有这些求解器获得良好解决方案的能力随着问题规模的增加而减弱。” 为了给出数字的概念,对于所有问题,求解器的预算为2500个功能评估,并且问题大小最多为300个要优化的参数。除了O [10]参数之外,这些优化器中很少有性能很好的,甚至最好的优化器也会随着问题大小的增加而导致性能显着下降。
因此,对于非常高维的问题,DFO算法与基于导数的算法没有竞争力。从某种角度看,基于PDE(偏微分方程)的优化是另一个具有非常高的尺寸问题(例如,大型3D有限元网格的每个单元的多个参数)的领域。在此领域中,“ 伴随方法 ”是最常用的方法之一。这也是基于前向模型代码的自动微分的梯度下降优化器。
最接近高维DFO优化器的可能是Ensemble Kalman滤波器,用于将数据同化为复杂的PDE模拟,例如天气模型。有趣的是,这本质上是一种SQP方法,但是具有贝叶斯-高斯解释(因此,二次模型是正定的,即没有鞍点)。但是我不认为这些应用程序中的参数或观察结果的数量可与深度学习中看到的相当。
旁注(局部最小值):从我对深度学习的了解中,我认为共识是,这是鞍点而不是局部最小值,这对于高维NN参数空间最成问题。
例如,最近在《自然》杂志上发表的评论说:“最近的理论和经验结果强烈表明,局部极小值通常并不是一个严重的问题。相反,景观中充斥着大量的鞍点,其中梯度为零,并且表面在大多数尺寸上都向上弯曲,而其余部分上则向下弯曲。”
一个有关的关注点是局部优化与全局优化(例如,注释中指出的这个问题)。虽然我不进行深度学习,但根据我的经验,过拟合绝对是一个有效的问题。在我看来,全局优化方法最适合不强烈依赖“自然”数据的工程设计问题。在资料同化问题,任何目前全球最小可以很容易地在添加新数据的变化(警告:我的经验是集中在地学问题,其中的数据一般是“疏”相对于模型的能力)。
一个有趣的观点也许是
O. Bousquet和L. Bottou(2008)大规模学习的权衡。NIPS。
它提供了关于理论上为什么以及何时进行近似优化的半理论性论证。
尾注(元优化):虽然基于梯度的技术似乎在培训网络中占主导地位,但DFO在相关的元优化任务中可能会发挥作用。
一个示例是超参数调整。(有趣的是,Rios&Sahinidis成功的基于模型的DFO优化器可以看作是本质上解决了一系列实验设计/ 响应面问题。)
另一个示例可能是根据层的设置(例如,数量,类型,序列,节点/层)设计体系结构。在这种离散优化环境中,遗传样式算法可能更合适。请注意,这里我考虑的情况是,连接是由这些因素(例如,完全连接的层,卷积层等)隐式确定的。换句话说,连接性明确进行元优化。(连接强度将受到训练,其中可以通过正则化和/或ReLU激活来促进稀疏性……但是,这些选择可以进行元优化。)
您可以使用各种各样的本地搜索算法,反向传播刚刚被证明是最有效的一般复杂任务;在某些情况下,其他本地搜索会更好。
您可以在神经网络上使用随机开始爬山来快速找到合适的解决方案,但是找到接近最佳的解决方案并不可行。
维基百科(我知道,不是最大的来源,但是仍然)说
对于在固定的时间内找到精确的全局最优值比找到可接受的局部最优值不那么重要的问题,模拟退火可能比梯度下降之类的替代方案更可取。
至于遗传算法,我会看到神经网络训练中的反向传播与遗传算法
我将为backprop提出的主要案例是,它非常广泛地使用并且已经有了很大的改进。这些图像确实显示了香草反向传播的一些令人难以置信的进步。
我不会将反向传播视为一种算法,而是一类算法。
我还要补充一点,对于神经网络,10k参数是小豆。另一个搜索会很好,但是在具有数百万个参数的深度网络上,这几乎是不实际的。
好吧,原始的神经网络是在70年代反向传播革命之前被手工“训练”的。:)
话虽如此:
有一个称为极限学习机的机器学习“学校” ,它不使用反向传播。
他们要做的是创建一个具有许多节点的神经网络(具有随机权重),然后使用最小二乘法训练最后一层(如线性回归)。然后,他们要么修剪神经网络,要么在最后一步应用正则化(例如套索)以避免过度拟合。我已经看到这仅适用于具有单个隐藏层的神经网络。没有培训,因此非常快。我做了一些测试,令人惊讶的是,以这种方式“训练”的这些神经网络非常准确。
大多数人,至少是与我一起工作的人,都会嘲笑这种机器学习的“学校”,他们是一群被抛弃的人,有自己的会议,依此类推,但我实际上认为这是一种天才。
另一点:在反向传播中,很少提及诸如弹性反向传播之类的替代方法,这些替代方法在neuralnet
包中的R中实现,仅使用导数的大小。该算法由if-else条件代替线性代数组成。与传统的反向传播相比,它们具有一些优势,即您无需标准化数据,因为它们不会遭受消失的梯度问题的困扰。
您也可以使用另一个网络来建议如何更新参数。
Google Deepmind提供了解耦神经接口(DNI)。它没有使用反向传播,而是使用另一组神经网络来预测如何更新参数,从而允许并行和异步参数更新。
本文表明,DNI可以提高RNN的训练速度和模型能力,并为RNN和FFNN在各种任务上提供可比的结果。
本文还列出并比较了许多其他非反向传播方法
我们的合成梯度模型最类似于用于梯度上升[2]的值函数或用于自举的值函数。其他大多数旨在消除反向传播的工作都是以执行生物学上合理的信用分配为目标的,但这并不能消除层之间的更新锁定。例如,目标传播[3,15]通过生成应被拟合的目标激活来消除对层之间通过渐变的依赖。但是,这些目标仍必须顺序生成,通过网络向后传播,因此各层仍将进行更新和反向锁定。其他算法通过允许将损失或报酬直接广播到每一层来消除向后锁定,例如REINFORCE [21](考虑到所有激活都是动作),1个以及Policy Gradient Coagent Networks [20] –但仍保持更新锁定状态,因为它们要求输出(或全球评论家)产生奖励。尽管实时递归学习[22]或类似方法[17]似乎是消除更新锁定的一种有前途的方法,但这些方法需要相对于参数保持当前状态的完整(或近似)梯度。这本质上是不可扩展的,并且还要求优化器具有网络状态的全局知识。相比之下,通过将各层之间的交互框架化为与DNI的本地通信问题,我们消除了对学习系统的全局知识的需求。[4,19]等其他作品也允许并行训练层而无需反向传播,