深度学习7(梯度下降算法改进)
优化遇到的问题
梯度消失
问题描述:
在反向传播过程中,梯度通过链式法则逐层传递时,如果梯度值过小(尤其是激活函数的导数小于1时),梯度会指数级衰减,导致浅层网络的权重几乎不更新,模型无法有效学习。
常见原因:
使用饱和激活函数(如Sigmoid、Tanh),其导数在两端接近0。
网络过深,梯度连乘后变得极小。
解决方案:
使用ReLU、Leaky ReLU等非饱和激活函数:避免梯度因激活函数导数过小而消失。
批量归一化(Batch Normalization):稳定每层的输入分布,缓解梯度消失。
残差连接(ResNet):通过跳跃连接(Skip Connection)绕过非线性层,直接传递梯度。
梯度裁剪(Gradient Clipping):限制梯度范围,防止过小或过大。
权重初始化:如He初始化、Xavier初始化,适配激活函数特性。
梯度爆炸
问题描述:
与梯度消失相反,梯度值在反向传播中指数级增大(尤其是权重矩阵的范数大于1时),导致权重更新剧烈,模型无法收敛。
常见原因:
权重初始化值过大。
网络过深且梯度连乘后膨胀。
解决方案:
梯度裁剪(Gradient Clipping):设定阈值,强制截断过大的梯度。
权重正则化(L1/L2):限制权重的大小。
使用更小的学习率:降低每次更新的步长。
权重初始化调整:如Xavier/Glorot初始化。
鞍点问题
问题描述:
在高维优化空间中,某些方向的梯度为0(局部最小值),但其他方向梯度不为0(如马鞍形状)。此时优化算法可能停滞。
原因:
高维空间中鞍点比局部最小值更常见(尤其在大规模神经网络中)。
解决方法:
使用动量优化器(如Momentum、Adam),利用历史梯度信息跳出鞍点。
引入随机性(如SGD的小批量噪声可能帮助逃离鞍点)。
二阶优化方法(如牛顿法,但计算成本高,较少用于深度学习)。
解决方法
批梯度下降和小批量梯度下降法
批梯度下降(Batch Gradient Descent):其在更新参数时使用所有的样本来进行更新。对整个训练集进行梯度下降法的时候,我们必须处理数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果数据集很大的时候,处理速度就会比较慢。
小批量梯度下降法(Mini-Batch Gradient Descent):每次同时处理固定大小的数据集。算法速度执行很快。如果每次处理一个样本,则变为随机梯度下降法(stochastic gradient descent)。
名称 | 优点 | 缺点 |
批梯度下降 | 对所有 m 个训练样本执行一次梯度下降,每一次迭代时间较长,训练过程慢; | 相对噪声低一些,成本函数总是向减小的方向下降。 |
小批量梯度下降法 | 对每一个训练样本执行一次梯度下降,训练速度快,但丢失了向量化带来的计算加速: | 有很多噪声,需要适当减小学习率,成本函数总体趋势向全局最小值靠近,但永远不会收敛,而 直在最小值附近波动。 |