【人工智能学习之局部极小值与鞍点】
局部极小值与鞍点
- 一、局部极小值(Local Minima)
- 1. 直观理解
- 2. 数学定义
- 3. 关键性质
- 4. 举个栗子
- 二、鞍点(Saddle Point)
- 1. 直观理解
- 2. 数学定义
- 3. 关键性质
- 4. 举个栗子
- 5. 为什么鞍点在神经网络中更常见?
- 三、局部极小值 vs 鞍点:关键区别
- 四、如何判断一个临界点是哪种类型?
- 五、实际应用中的问题
- 六、为什么高维空间鞍点更多?
- 七、如何直观感受鞍点?
- 实验1:画一个鞍点函数
- 实验2:简单神经网络中的鞍点
- 八、总结
要理解模型优化必须先从最基础的局部极小值和鞍点开始,这两个概念是优化问题的核心难点,理解它们对后续学习优化算法非常重要。
一、局部极小值(Local Minima)
1. 直观理解
想象你在一片多山的区域徒步,突然发现周围有一个小坑,无论你往哪个方向走都会“上坡”——这个小坑就是一个局部极小值。在优化问题中,它对应损失函数的一个“低谷”,参数在这个点时,无论往哪个方向调整,损失都可能变大。
2. 数学定义
对于函数 L ( θ ) L(\theta) L(θ),若存在一个邻域 ∣ θ − θ ∗ ∥ < ϵ | \theta - \theta^* \| < \epsilon ∣θ−θ∗∥<ϵ,使得在该邻域内:
L ( θ ∗ ) ≤ L ( θ ) 对所有 θ 成立 , L(\theta^*) \leq L(\theta) \quad \text{对所有} \ \theta \ \text{成立}, L(θ∗)≤L(θ)对所有 θ 成立,
则 θ ∗ \theta^* θ∗ 是一个局部极小值。
3. 关键性质
- 梯度为零:在局部极小值点,梯度 n a b l a L ( θ ∗ ) = 0 nabla L(\theta^*) = 0 nablaL(θ∗)=0。
- Hessian矩阵正定:二阶导数矩阵(Hessian矩阵 H H H)在该点的所有特征值均为正,即 H ≻ 0 H \succ 0 H≻0。这说明曲率在所有方向都是“向上凹”的。
4. 举个栗子
假设损失函数是 L ( θ ) = θ 2 L(\theta) = \theta^2 L(θ)=θ2,在 θ = 0 \theta = 0 θ=0 处是一个局部极小值(也是全局极小值)。梯度 ∇ L = 2 θ \nabla L = 2\theta ∇L=2θ,在 θ = 0 \theta=0 θ=0 处梯度为零;Hessian H = 2 > 0 H = 2 > 0 H=2>0,正定。
二、鞍点(Saddle Point)
1. 直观理解
鞍点得名于马鞍的形状。想象你坐在马鞍上:沿着马头方向(前后)是“下坡”,而沿着马背方向(左右)是“上坡”。鞍点是一个梯度为零的点,但某些方向是极小值,另一些方向是极大值。在深度学习中损失不是只在局部极小值的梯度是零,还有其他可能会让梯度是零的点,比如鞍点(saddle point)。鞍点其实就是梯度是零且区别于局部极小值和局部极大值(local maximum)的点。
2. 数学定义
对于函数 L ( θ ) L(\theta) L(θ),若梯度 ∇ L ( θ ∗ ) = 0 \nabla L(\theta^*) = 0 ∇L(θ∗)=0,但Hessian矩阵 H H H 的特征值有正有负,则 θ ∗ \theta^* θ∗ 是一个鞍点。
3. 关键性质
- 梯度为零:与局部极小值一样,鞍点的梯度也为零。
- Hessian矩阵不定:Hessian矩阵既有正特征值(对应“下坡”方向),又有负特征值(对应“上坡”方向)。
4. 举个栗子
考虑二元函数 L ( x , y ) = x 2 − y 2 L(x, y) = x^2 - y^2 L(x,y)=x2−y2,在 ( 0 , 0 ) (0,0) (0,0) 处是一个鞍点:
- 梯度 ∇ L = ( 2 x , − 2 y ) \nabla L = (2x, -2y) ∇L=(2x,−2y),在 ( 0 , 0 ) (0,0) (0,0) 处为零。
- Hessian矩阵 H = [ 2 0 0 − 2 ] H = \begin{bmatrix} 2 & 0 \\ 0 & -2 \end{bmatrix} H=[200−2],特征值为 + 2 +2 +2 和 − 2 -2 −2。
5. 为什么鞍点在神经网络中更常见?
- 维度诅咒:神经网络参数通常是高维的(百万甚至十亿级)。在低维空间中局部极小值更多,但在高维空间中,鞍点的数量会指数级增长。
- 对称性:神经网络的结构对称性(如多个神经元初始化相同)会诱导鞍点。
三、局部极小值 vs 鞍点:关键区别
特征 | 局部极小值 | 鞍点 |
---|---|---|
梯度 | ∇ L = 0 \nabla L = 0 ∇L=0 | ∇ L = 0 \nabla L = 0 ∇L=0 |
Hessian特征值 | 全为正( H ≻ 0 H \succ 0 H≻0) | 有正有负( H H H) 不定) |
优化方向 | 所有方向都是“上坡” | 某些方向“上坡”,某些“下坡” |
逃离难度 | 难(需要跳出局部区域) | 较易(沿负曲率方向下降即可) |
四、如何判断一个临界点是哪种类型?
假设你已经找到了一个梯度为零的点 θ ∗ \theta^* θ∗,接下来需要分析Hessian矩阵:
- 计算Hessian矩阵 H H H:即二阶导数矩阵。
- 求特征值:计算 H H H 的所有特征值。
- 判断特征值符号:
- 全正 → 局部极小值;
- 全负 → 局部极大值;
- 有正有负 → 鞍点。
五、实际应用中的问题
- 计算Hessian矩阵在深度学习中非常昂贵(参数太多)。
- 替代方案:使用随机扰动观察损失变化。例如,在 θ ∗ \theta^* θ∗ 附近随机采样多个方向 d d d,计算 L ( θ ∗ + ϵ d ) L(\theta^* + \epsilon d) L(θ∗+ϵd):
- 如果所有方向 L L L 都增大 → 局部极小值;
- 如果某些方向 L L L 减小 → 鞍点。
六、为什么高维空间鞍点更多?
假设参数空间维度为 D D D,Hessian矩阵的特征值随机分布。当 D D D 很大时:
- 所有特征值为正的概率是 2 − D 2^{-D} 2−D(指数级下降);
- 至少有一个正和一个负特征值的概率接近1。
因此,高维优化问题中,梯度为零的点几乎都是鞍点,而非局部极小值。这也是为什么深度学习优化中,鞍点比局部极小值更值得关注。
七、如何直观感受鞍点?
实验1:画一个鞍点函数
尝试画出 L ( x , y ) = x 2 − y 2 L(x, y) = x^2 - y^2 L(x,y)=x2−y2 的3D图像,观察 ( 0 , 0 ) (0,0) (0,0) 处的形状。你会发现:
- 沿x轴方向(正负)是“上坡”;
- 沿y轴方向(正负)是“下坡”。
实验2:简单神经网络中的鞍点
构造一个单层线性网络 y = W x + b y = Wx + b y=Wx+b,损失函数为均方误差。尝试将权重初始化为全零,此时梯度为零,但Hessian矩阵可能不定(取决于数据),此时可能处于鞍点。
八、总结
- 局部极小值 是“陷阱”,需要跳出局部区域;
- 鞍点 是“伪陷阱”,可以通过特定方向逃离;
- 在高维空间中,鞍点比局部极小值更常见,因此优化算法需要具备逃离鞍点的能力。
理解了这两个概念后,我们就可以进一步讨论如何设计优化算法来逃离鞍点,比如动量法、自适应学习率、二阶方法等。