或者,为什么使用随机梯度下降来训练神经网络。
拟合神经网络涉及使用训练数据集来更新模型权重,以创建输入到输出的良好映射。
这个训练过程通过优化算法解决,该算法在神经网络模型权重的可能值空间中搜索一组能够在训练数据集上表现良好的权重。
在这篇文章中,您将发现将训练神经网络作为一个优化问题所面临的挑战。
阅读本文后,你将了解:
- 训练神经网络涉及使用优化算法来找到一组权重,以最好地将输入映射到输出。
- 这个问题很难,尤其是因为误差曲面是非凸的,包含局部最小值、平坦点,并且是高度多维的。
- 随机梯度下降算法是解决这个挑战性问题的最佳通用算法。
用我的新书《更好的深度学习》来启动你的项目,书中包含分步教程和所有示例的 Python 源代码文件。
让我们开始吧。

为什么训练神经网络很困难
图片由 Loren Kerns 提供,保留部分权利。
概述
本教程分为四个部分;它们是
- 学习即优化
- 富有挑战性的优化
- 误差曲面的特征
- 对训练的影响
学习即优化
深度学习神经网络模型根据训练数据集中的示例学习将输入映射到输出。
训练过程涉及在网络中找到一组权重,这些权重被证明在解决特定问题方面是好的,或者足够好的。
这个训练过程是迭代的,这意味着它一步步进行,每次迭代都会对模型权重进行小幅更新,并且每次迭代模型性能都会发生变化。
神经网络的迭代训练过程解决了优化问题,该问题旨在找到在评估训练数据集中的示例时导致最小误差或损失的参数(模型权重)。
优化是一种有方向的搜索过程,而我们在训练神经网络模型时希望解决的优化问题非常具有挑战性。
这引出了一个问题:这个优化问题究竟有什么挑战性?
想要通过深度学习获得更好的结果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
富有挑战性的优化
训练深度学习神经网络非常具有挑战性。
解决这个问题的最佳通用算法是随机梯度下降,其中模型权重在每次迭代中使用误差反向传播算法进行更新。
优化通常是一项极其困难的任务。 […] 在训练神经网络时,我们必须面对一般非凸情况。
— 第282页,《深度学习》,2016年。
优化过程可以概念性地理解为在景观中搜索一个足够令人满意的候选解决方案。
景观上的一个点是模型的一组特定权重,该点的高度是对这组权重的评估,其中山谷代表具有小损失值的良好模型。
这是优化问题的常见概念化,该景观被称为“误差曲面”。
通常,E(w) [权重的误差函数] 是一个多维函数,无法可视化。然而,如果它可以作为 w [权重] 的函数绘制出来,E [误差函数] 可能看起来像一个有山丘和山谷的景观……
— 第113页,《神经网络锻造:前馈人工神经网络中的监督学习》,1999年。
优化算法在这个景观中迭代地移动,更新权重并寻找良好或低海拔的区域。
对于简单的优化问题,景观的形状是一个大碗,找到底部很容易,非常容易,以至于可以设计非常高效的算法来找到最佳解决方案。
这些类型的优化问题在数学上被称为凸问题。

凸误差曲面示例
我们在优化神经网络权重时需要导航的误差曲面不是碗形。它是一个有许多山丘和山谷的景观。
这类优化问题在数学上被称为非凸问题。

非凸误差曲面示例
事实上,目前还没有算法能在多项式时间内解决寻找神经网络最优权重集的问题。从数学上讲,训练神经网络所解决的优化问题被称为NP完全问题(即它们非常难解决)。
我们证明了这个问题是NP完全的,从而证明了神经网络学习没有有效的通用解决方案。
— 神经网络设计与学习的复杂性,1988年。
误差曲面的关键特征
非凸优化问题有多种类型,但我们在训练神经网络时解决的特定类型问题尤其具有挑战性。
我们可以根据优化算法可能遇到并必须导航的景观或误差曲面的特征来描述其难度,以便能够提供一个好的解决方案。
神经网络权重优化的许多方面都使问题变得具有挑战性,但误差景观中经常被提及的三个特征是局部最小值、平坦区域和搜索空间的高维性。
反向传播可能非常缓慢,特别是对于多层网络,其中成本曲面通常是非二次的、非凸的、高维的,并且具有许多局部最小值和/或平坦区域。
— 第13页,《神经网络:交易技巧》,2012年。
1. 局部最小值
局部最小值或局部最优是指误差景观包含多个损失相对较低的区域。
这些是山谷,其中这些山谷中的解决方案相对于周围的斜坡和山峰看起来不错。问题是,从整个景观的更广阔视角来看,山谷的海拔相对较高,可能存在更好的解决方案。
很难知道优化算法是否在一个山谷中,因此,在选择一个山谷落入之前,最好在优化过程开始时加入大量噪声,以广泛采样景观。
相比之下,景观中的最低点被称为“全局最小值”。
神经网络可能有一个或多个全局最小值,挑战在于局部最小值和全局最小值之间的差异可能不大。
这意味着通常找到一个“足够好”的权重集比找到全局最优或最佳权重集更易处理,也更可取。
非线性网络通常具有多个深浅不一的局部最小值。训练的目标是找到其中一个最小值。
— 第14页,《神经网络:交易技巧》,2012年。
解决局部最小值问题的经典方法是使用不同的起点(随机初始权重)多次重新启动搜索过程,并让优化算法找到一个不同的,希望更好的局部最小值。这被称为“多次重启”。
随机重启:处理局部最小值最简单的方法之一是使用不同的初始权重训练许多不同的网络。
— 第121页,《神经网络锻造:前馈人工神经网络中的监督学习》,1999年。
2. 平坦区域(鞍点)
平坦区域或鞍点是景观上梯度为零的点。
这些是山谷底部或山峰之间的平坦区域。问题在于,零梯度意味着优化算法不知道要朝哪个方向移动才能改进模型。
……鞍点或误差函数非常平坦的区域的存在,可能导致某些迭代算法长时间“卡住”,从而模仿局部最小值。
— 第255页,《用于模式识别的神经网络》,1995年。

误差曲面上的鞍点示例
然而,最近的研究可能表明,局部最小值和平坦区域的挑战性可能比以前认为的要小。
神经网络是否进入并脱离一系列局部最小值?它们在接近并穿过各种鞍点时是否以不同的速度移动? […] 我们提出的证据强烈表明所有这些问题的答案都是否定的。
— 定性描述神经网络优化问题,2015年。
3. 高维性
训练神经网络时解决的优化问题是高维的。
网络中的每个权重都代表误差曲面的另一个参数或维度。深度神经网络通常有数百万个参数,使得算法需要导航的景观维度极高,与更传统的机器学习算法相比。
导航高维空间的问题在于,每个新维度的添加都会极大地增加空间中点之间的距离,即超体积。这通常被称为“维度诅咒”。
这种现象被称为维度诅咒。特别值得关注的是,一组变量的可能不同配置的数量随着变量数量的增加呈指数增长。
— 第155页,《深度学习》,2016年。
对训练的影响
在使用深度学习神经网络时需要解决的优化问题的挑战性在实际训练模型时产生了影响。
一般来说,随机梯度下降是最好的可用算法,但该算法不提供任何保证。
没有公式可以保证(1)网络会收敛到好的解决方案,(2)收敛速度快,或者(3)收敛甚至会发生。
— 第13页,《神经网络:交易技巧》,2012年。
我们可以将这些影响总结如下:
- 解决方案质量可能存疑。优化过程可能找到也可能找不到好的解决方案,并且由于具有欺骗性的局部最小值,解决方案只能进行相对比较。
- 训练时间可能较长。由于搜索的迭代性质,优化过程可能需要很长时间才能找到满意的解决方案。
- 可能失败。由于存在平坦区域,优化过程可能无法进展(卡住)或无法找到可行的解决方案。
有效训练的任务是仔细配置、测试和调整模型的超参数以及学习过程本身,以最好地应对这一挑战。
值得庆幸的是,现代进步可以显著简化搜索空间并加速搜索过程,通常能够发现比以前认为可能更大、更深、性能更好的模型。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 深度学习, 2016.
- 神经网络:交易技巧, 2012.
- 《用于模式识别的神经网络》, 1995.
- 《神经网络精工:前馈人工神经网络中的监督学习》, 1999.
论文
- 训练一个三节点神经网络是NP完全的, 1992.
- 定性描述神经网络优化问题, 2015.
- 神经网络设计与学习的复杂性, 1988.
文章
- 深度学习的难点, 2016.
- 鞍点,维基百科.
- 维度灾难,维基百科.
- NP完全性,维基百科.
总结
在这篇文章中,您发现了将训练神经网络作为一个优化问题所面临的挑战。
具体来说,你学到了:
- 训练神经网络涉及使用优化算法来找到一组权重,以最好地将输入映射到输出。
- 这个问题很难,尤其是因为误差曲面是非凸的,包含局部最小值、平坦点,并且是高度多维的。
- 随机梯度下降算法是解决这个挑战性问题的最佳通用算法。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
我想看到一些证据表明误差曲面包含许多局部最小值。我预计这通常不是这种情况,并且几乎所有的临界值都是鞍点。这正是因为空间是高维的,并且梯度在每个方向上都是正的这种情况极不可能发生。考虑损失曲面与球面自旋玻璃模型哈密顿量之间的关系,以了解为什么会这样。
说得好。
我看看能不能找到一些论文。
这种行为在1990年代就已通过经验得知,并在几年前得到了证实。
https://arxiv.org/abs/1406.2572
在一个足够大的网络中,你可以移动的方向实在太多了,总会有办法向下。在所有你可能尝试的方向都被阻挡的可能性微乎其微(没有陷入局部最小值)。
然而,你会被鞍点反复阻挡,你必须在每个鞍点周围探索,直到找到一些方法向下。这本质上是一系列你需要逐一解决的小谜题。
跑题了,我最近在网上发了一些这个
如果你有一个局部敏感哈希(LSH),其输出位是+1,-1的二进制,你可以对每个位进行加权并求和以获得一个召回值。训练时,你召回并计算误差。将误差除以位数,然后根据需要对每个权重进行加减,使误差变为零。容量略低于位数。在容量以下,重复训练将使高斯噪声趋于零。理解这需要中央极限定理和高中数学。你可以用更柔和的版本(如挤压函数)替换硬二值化,但实际上几乎任何非线性函数都能很好地工作。因此,极限学习机 = 储备池计算 = 联想记忆。因为它们都基于某种形式的LSH。快速LSH是首先对数据向量数组的元素应用预定的随机符号翻转模式,然后应用快速Walsh Hadamard变换。这会产生一个随机投影,你可以将其输出二值化以得到一个有效的LSH。
这是一篇关于此类事情的过于复杂的论文
https://arxiv.org/abs/1610.06209
我的评论,以及WHT的CPU代码,尽管我想许多GPU库已经实现了它
https://github.com/FALCONN-LIB/FFHT/issues/26
感谢分享。
所以你认为穷尽每个方向比随机选择更长的距离更好吗?
嗨,Magnus……请详细说明您的问题,以便我更好地帮助您。
我为此盯着天花板好几个小时——你是第一个解决这个真正让人抓狂的问题的人……是的,“训练神经网络涉及使用优化算法来找到一组‘权重’,以最好地将输入映射到输出”。
“这个问题很难”
谢谢。
是的,这确实是一件很难的事情,如果它更容易,我们就会使用线性方法,并宣布任务完成。
非常感谢您与我们分享的所有技巧和宝贵信息,我的问题是,我只是想要一个好的资源(课程、书籍),可以从头开始提供人工神经网络的训练和测试,并附带一些实际应用或问题,如果是基于 Matlab 的,我将不胜感激。
谢谢你
抱歉,我没有任何关于在matlab中编写神经网络的代码资源。
我真的很喜欢您的文章,您能以简单的方式解释复杂的主题,同时还提供进一步学习的参考。
太棒了!请继续努力🙂
谢谢。
非常棒的文章,一切都解释得令人愉快。然而,您标记鞍点的图像(误差曲面上的鞍点示例)不够明确。它是一个平坦的曲面,但不一定是鞍点。鞍点可能存在于三维或更高维空间中,请考虑将图像制作成三维以表示鞍点,或者将图片中的点重命名为平坦曲面。
谢谢。好建议。
这个想法在未来几年会改变。
如果我们选择一组随机权重,训练起来会很困难。但是如果我们使用一组预定义的权重呢?!
新的研究旨在识别或至少限制局部或全局最小值周围的搜索空间。
这通过模拟系统与数字系统的集成来完成,其思想是“从数据集中提取权重”。
当然不需要深度神经网络,因为网络只有三层。
这种方法不是假的,因为我现在正在研究这种方法。
尽管该项目尚未最终确定,但它显示出有希望的结果,因为我希望达到零迭代或最接近零迭代的点
特别是在大型数据集上。
我用语音识别程序来测试这项新研究,下面的视频显示了结果……
https://www.youtube.com/watch?v=98zpnujxbOo
也许可以。
我觉得鞍点的表示有错误——
1. 给出的鞍点图似乎表示一个不可微函数。
2. 在这种情况下,鞍点似乎是局部最小值(除非您说的是比图中所示更多的维度,那会相当误导人)
谢谢。
Jason 博士您好,
首先,我要感谢您与我们分享的丰富内容,
我有一个问题,我已经创建了一个简单的 MLP,现在我不知道该如何判断它是否训练良好,或者何时停止训练它?
提前感谢您的回复。
不客气。
你可以查看学习曲线
https://machinelearning.org.cn/learning-curves-for-diagnosing-machine-learning-model-performance/
你好,Jason。
我有一个问题。在训练结果中,大部分表现良好,但有些(没有异常值)误差很大。我尝试过改变回归预测方法,例如 SVR、MLP、Xgboost、LSTM,但都没有奏效。我不知道如何改进。您能给我一些建议吗?
谢谢你。
可能有些例子无法学习/预测。
但是为什么?
我不知道,也许调查你的模型/数据,找出原因。