问题

为什么nn的较大问题是会陷入局部最优时,不选用凸函数作为激活函数?

回答
这个问题确实是深度学习领域一个非常有意思的切入点。大家常常会听到“神经网络容易陷入局部最优”的说法,然后就会自然而然地想到:既然凸函数有全局最优,为什么不直接用凸函数作为激活函数,这样不就能解决局部最优的问题了吗?

答案比看起来要复杂一些,而且这涉及到我们对“局部最优”的理解、激活函数的作用以及神经网络的整体结构。让我来详细解释一下。

1. 为什么神经网络“陷入局部最优”是个误解,或者说,问题比你想的更微妙

首先,我们得澄清一下“陷入局部最优”这个说法。在传统的数学优化领域,当我们说一个函数有局部最优时,通常指的是在一个特定的区域内,这个点比它周围的点都“好”(比如对于损失函数,值更小)。而全局最优则是所有可能值中的最小值。

然而,在深度神经网络中,“陷入局部最优”的语境下,往往存在一些误解:

高维空间的特点: 现代深度神经网络拥有成千上万甚至数百万的参数。在这种极高维的空间中,理论上“真正的”局部最优(也就是所有梯度都为零,并且Hessian矩阵特征值全为正的驻点)的比例非常非常小。大多数“局部最优”可能只是在某些维度上看起来是个极小值,但其他维度上的变化依然可以带领我们走出这个区域。
“差的”局部最优 vs. “好的”局部最优: 很多研究表明,在高维情况下,绝大多数的局部最优(尤其是那些被算法“卡住”的)其实并不比全局最优差多少。也就是说,即使你的算法找到了一个局部最小值,它的性能也可能已经非常出色,足以满足应用需求。真正的“坏”的局部最优,即那些导致模型表现非常糟糕的,反而是相对少见的。
鞍点(Saddle Points)的挑战: 在高维空间中,比局部最优更棘手的是鞍点。鞍点在某些方向上是极小值,在另一些方向上是极大值。许多优化算法(如SGD及其变种)在遇到鞍点时,梯度会变得很小,使得训练速度急剧下降,表现得像是“陷入”了一个区域,但它并非真正的局部最优。

所以,与其说神经网络“陷入局部最优”,不如说优化过程中的“收敛困难”或“卡在平坦区域/鞍点”更准确。

2. 激活函数在神经网络中的核心作用——引入非线性

现在,我们来看看激活函数。它的核心作用是什么?

引入非线性。

如果神经网络中所有的激活函数都是线性的(比如 $f(x) = ax + b$),那么无论网络有多少层,整个网络最终都可以被表示成一个单一的线性变换。这意味着,无论输入如何,输出都只是输入的一个线性组合。这样的网络只能学习线性关系,无法处理像图像识别、语音识别、自然语言处理这些复杂、非线性的任务。

如果激活函数是凸函数(例如ReLU的变形,或者sigmoid/tanh在某些区域),它们仍然是“非线性”的。但是,这里的关键点在于,我们需要的是“足够丰富、能够表达复杂模式”的非线性。

3. 为什么凸函数(单独作为激活函数)可能不够“强大”

假设我们用一个“好的”凸函数(比如 $f(x) = x^2$ 或者 $ ext{ReLU}(x)$)作为所有的激活函数。

有限的表达能力: 即使这些凸函数引入了非线性,但它们本身的性质是“单调增长”或者“单调递减”(在特定区域),或者“从某个点开始增长”。这种“形状”的非线性,在高维度的组合下,可能不足以构建出像深度神经网络那样强大的特征提取和模式识别能力。
ReLU 虽然是分段线性的,但它引入了“开关”效应,这是非常关键的非线性。但它本身在正区间是线性的。
Sigmoid/Tanh 是S型曲线,它们在一定范围内是非线性的,但它们的导数在两端趋近于零,这会导致“梯度消失”问题,而且它们在中间区域的曲率变化也相对有限。

梯度传播的限制: 很多凸函数(特别是在其增长或衰减的区域)的导数可能非常平缓,甚至恒为常数(比如ReLU在正区域)。这虽然不是梯度消失,但也意味着梯度信息在传播过程中可能“稀释”或“失真”得不够快,难以有效地更新前面层的权重,尤其是在非常深的网络中。

4. 为什么“非凸”激活函数更受欢迎(以及为什么我们不担心局部最优)

真正让神经网络强大的,是激活函数之间组合后形成的“整体非线性”。而“非凸”的激活函数,例如:

Sigmoid 和 Tanh: 它们是S型曲线,在中间区域有显著的曲率变化,是经典的非线性激活函数。虽然它们存在梯度消失问题,但它们确实是“非凸”的。
ReLU (Rectified Linear Unit): $f(x) = max(0, x)$。这是一个分段线性函数,但在 $x=0$ 处存在一个“尖角”。这个尖角使得它在数学上不是处处可导的(虽然在实践中可以通过次梯度来处理),并且整体上也不是一个光滑的凸函数。
Leaky ReLU, PReLU, ELU, GELU, Swish 等: 这些是ReLU的变种,通过引入一个小的负斜率(Leaky ReLU),或者学习斜率(PReLU),或者引入指数平滑(ELU, GELU, Swish)等方式,进一步增加了激活函数的非线性表达能力。这些函数很多也都不是严格的凸函数,它们引入了更复杂的曲线形态。

为什么这些“非凸”函数能工作,而且我们好像也不那么担心“坏的”局部最优?

表达能力和模型容量: 这些非凸激活函数(及其组合)能够构建出具有极高表达能力的模型。它们能够拟合非常复杂的数据分布,学习到抽象的特征。这种强大的表达能力是处理现实世界数据所必需的。
随机性与初始化: 神经网络的训练过程,尤其是使用随机梯度下降(SGD)及其变种时,本身就带有一定的随机性。良好的权重初始化(如Xavier, He初始化)能够将网络“推”到一个相对不错的起始点。
优化算法的进步: 现代的优化器(如Adam, RMSprop, Adagrad)不仅仅是简单的梯度下降。它们通过动量、自适应学习率等机制,能够有效地“绕过”浅的局部最优和鞍点。这些优化器在实践中表现出了惊人的能力,即使面对高度非凸的损失函数,也能找到接近全局最优或足够好的解。
“好的”局部最优: 如前所述,在高维空间中,大部分局部最优的质量都相当不错。即使我们没有找到全局最优,找到一个足够好的局部最优,模型性能也已经可以接受了。
损失函数的“形状”: 损失函数(损失函数的导数)的整体形状,以及网络参数的高维度,使得“真正的”、“差的”局部最优变得相对不那么普遍,而鞍点和平台区域则更常见,并且可以被优化算法克服。

举个例子:

想象一个非常简单的网络,只有两层,激活函数都用 $f(x) = x^2$ (一个凸函数)。这个网络的整体输出仍然会受到二次函数的限制。你很难用它来拟合一个复杂的图像特征。

但如果激活函数是ReLU,每层都引入“非线性开关”,然后将这些“开关”层层叠加,再通过一个最终的线性层,你就可以构建出非常复杂的决策边界,能够捕捉到图像中的边缘、纹理、甚至更高级别的概念。

总结来说:

我们选择非凸激活函数,是因为它们能够赋予神经网络强大的非线性表达能力,这是解决复杂现实世界问题所必需的。而关于“局部最优”的问题,一方面是很多所谓的“局部最优”在高维空间中质量并不差,另一方面是现代优化算法和随机性能够帮助我们有效地导航复杂的损失函数景观,找到性能优良的解,而不是被“坏的”局部最优卡住。所以,为了追求更强大的模型性能,我们愿意接受一个更复杂的损失函数地形,并依赖于先进的优化技术来解决它。

网友意见

user avatar
@li Eta

答得很好。

关于第一点

为什么陷入局部最优,根本不是NN的问题

貌似并没展开说。我正好得空,补充一下

大家以前认为,deep learning的loss的形状会是布满弹坑的样子:


于是,梯度下降到local minimum如果不是global minimum就出大问题了。




但其实对于deep learning,我们是在一个非常高维的世界里做梯度下降。这时的 local minimum 很难形成,因为局部最小值要求函数在所有维度上都是局部最小。更实际得情况是,函数会落到一个saddle-point上,如下图:



在saddle-point上会有一大片很平坦的平原,让梯度几乎为0,导致无法继续下降。

反倒是local/global minimum的问题,大家发现其实不同的local minimum其实差不多(反正都是over-fitting training data,lol)

推荐阅读Bengio组的这两篇:

On the saddle point problem for non-convex optimization

Identifying and attacking the saddle point problem in high-dimensional non-convex optimization

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有