大家好,这里是好评笔记,本文为试读,查看全文请移步公主号:Goodnote。本笔记介绍深度学习中常见的优化算法、激活函数。
@[toc]
优化算法
在深度学习中,优化算法用于调整模型的参数(如权重和偏置)以最小化损失函数。
方法
梯度下降 (Gradient Descent, GD)
简介:
梯度下降是最基本的优化算法,通过计算损失函数相对于模型参数的梯度,沿着梯度下降的方向更新参数,以最小化损失函数。
- 批量梯度下降(Batch Gradient Descent):在每次迭代中使用整个训练集计算梯度,计算开销大但收敛稳定。
- 随机梯度下降(Stochastic Gradient Descent, SGD):每次迭代只使用一个样本计算梯度,效率高,但容易在训练中产生波动。
- 小批量梯度下降(Mini-batch Gradient Descent):在每次迭代中使用一小部分训练集进行梯度计算,平衡了批量梯度下降和随机梯度下降的优缺点。
优点:
-
简单直观:梯度下降的原理简单,计算损失函数的梯度,沿着梯度最速下降方向进行优化。
-
广泛适用:梯度下降可以应用于各种类型的机器学习问题,包括线性回归、逻辑回归和神经网络等。在许多优化问题中,梯度下降是基本的选择,适用范围广泛。
-
可扩展性强:梯度下降可以在不同的规模和复杂度下使用。通过调整批量大小(如批量梯度下降、随机梯度下降、小批量梯度下降),可以适应不同数据集的规模。
-
良好的收敛性:对于凸优化问题,梯度下降可以保证收敛到全局最优解。而在非凸问题中,梯度下降也能找到局部最优解,具有良好的泛化能力。
缺点:
-
收敛速度慢:梯度下降尤其是批量梯度下降(Batch Gradient Descent),收敛速度慢。在大型数据集上,批量梯度下降的效率较低。
-
容易陷入局部最优:在非凸优化问题中,梯度下降容易陷入局部最优解。
-
对学习率敏感:梯度下降依赖于超参数学习率(learning rate) 的选择。如果学习率太小,收敛速度非常慢;如果学习率太大,梯度下降可能无法收敛,甚至在训练过程中发散。
-
梯度消失或梯度爆炸问题:在深层神经网络中,由于链式法则,梯度值会在反向传播时逐层累积,容易导致梯度消失或梯度爆炸问题,导致网络训练不稳定或无法更新参数。
适用场景:
- 适用于数据量较大的场景,如深度学习中的大规模数据训练。
动量法 (Momentum)
简介:
动量法是对GD的改进,它在更新参数时不仅考虑当前的梯度还考虑前几次的梯度。这样就像给参数加上“惯性” ,从而避免震荡。
优点:
- 更快的收敛速度:由于动量的存在,它可以在损失函数的谷底处快速收敛。
- 减少震荡:动量法在梯度方向上能够更稳健,减少梯度震荡现象。
缺点:
- 需要调节动量系数:动量的超参数(通常设为0.9左右)需要精心调节,使用不当可能导致训练失效。
适用场景:
- 适用于数据噪声较多或梯度震荡较大的场景,如深度神经网络中使用的卷积层。
AdaGrad (Adaptive Gradient Algorithm)
简介:
AdaGrad是一种自适应学习率的方法。它为每个参数独立调整学习率,学习率的调整取决于历史梯度的平方和,这使得频繁更新的参数学习率逐渐减小,而较少更新的参数学习率保持较大。这种方式防止了步长过大导致的震荡,也避免了步长过小导致的收敛速度慢。
优点:
- 自适应学习率:不需要手动调整学习率,适应稀疏数据场景。
- 适合稀疏数据:对于稀疏数据(如NLP任务中的词嵌入学习),AdaGrad表现很好。
缺点:
- 学习率过快衰减:随着训练的进行,累积的梯度会导致学习率快速减小,最终学习率趋近于0,难以继续学习。
适用场景:
- 适合于稀疏特征的场景,如自然语言处理中的词嵌入或推荐系统中的高维特征。
详细全文请移步公主号:Goodnote。