深度学习7(梯度下降算法改进1)
优化遇到的问题
梯度消失
问题描述:
在反向传播过程中,梯度通过链式法则逐层传递时,如果梯度值过小(尤其是激活函数的导数小于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 个训练样本执行一次梯度下降,每一次迭代时间较长,训练过程慢; | 相对噪声低一些,成本函数总是向减小的方向下降。 |
小批量梯度下降法 | 对每一个训练样本执行一次梯度下降,训练速度快,但丢失了向量化带来的计算加速: | 有很多噪声,需要适当减小学习率,成本函数总体趋势向全局最小值靠近,但永远不会收敛,而 直在最小值附近波动。 |
如果训练样本的大小比较小,如m<2000时,选择 batch 梯度下阵法;
如果训练样本的大小比较大,选择 Mini-Batch 梯度下降法。为了和计算机的信息存储方式相适应,代码在 mini-batch 大小为2的幂次时运行要快一些。典型的大小为26,27,28,29,mini-batch 的大小要符合CPU/GPU 内存。
指数加权平均
指数加权平均(Exponentially Weight Average)是一种常用的序列数据处理方式,属于梯度下降算法内部的优化,通常用在序列场景如金融序列分析、温度变化序列分析。
β越大,之前的数据影响越多,相当于求取平均利用的天数越多,曲线自然就会越平滑而且越滞后;反之,β越小,曲线越曲折。这些系数被称作偏差修正(Bias Correction)。
动量梯度下降
动量梯度下降(Gradient Descent with Momentum)是计算梯度的指数加权平均数,并利用该值来更新参数。整个过程为:
使用动量梯度下降时,通过累加过去的梯度值来减少抵达最小值路径上的波动,加速了收敛,因此在横轴方向下降得更快,从而得到图中红色或者紫色的曲线。当前后梯度方向一致时,动量梯度下降能够加速学习;
而前后梯度方向不一致时,动量梯度下降能够抑制震荡。
我们可以这样形象的理解,小球在向下运动过程中会有加速度,导致越来越快,由于的存在使得不会一直加速运行。