【算法笔记】深度学习中的优化器Optimizer算法(BGD,SGD,mBGD......)

本文深入探讨了SGD(随机梯度下降法)这一优化器算法。SGD在每次迭代中仅使用一组训练数据,虽然单次迭代可能不朝向收敛,但整体趋势是向收敛方向发展。这一特性使其成为机器学习和深度学习中常用的优化算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在阅读文献的时候,看到其中提到“选用了SGD左右优化器算法”,然后找到了这篇详尽地解释了各种优化器算法地文章:
https://www.cnblogs.com/guoyaohua/p/8542554.html
文中提到的SGD指随机梯度下降法,每次迭代只使用一组训练数据,这样每次迭代不一定都朝着收敛方向去,但总体上是收敛的。

### 优化算法详解 在机器学习和深度学习中,优化算法是训练模型的核心工具之一。优化算法的目标是通过最小化损失函数(或代价函数)来找到最优的模型参数。以下是对几种常见优化算法的详细说明: #### 梯度下降法(Gradient Descent) 梯度下降法是一种经典的优化算法,其核心思想是沿着损失函数的负梯度方向更新参数,以逐步逼近最小值。根据每次更新使用的数据量,梯度下降可以分为以下几种形式: - **批量梯度下降(Batch Gradient Descent, BGD)**:每次迭代使用整个训练集计算梯度。这种方法计算稳定,但计算成本高。 - **随机梯度下降(Stochastic Gradient Descent, SGD)**:每次迭代仅使用一个样本计算梯度。这种方法计算速度快,但更新过程可能较为不稳定。 - **小批量梯度下降(Mini-Batch Gradient Descent, MBGD)**:每次迭代使用一小批样本计算梯度,是BGDSGD的折中方案,兼顾了计算效率和稳定性[^1]。 #### 梯度下降法的改进 为了克服标准梯度下降法的不足(如收敛速度慢、容易陷入局部最优等),研究者提出了多种改进算法: - **动量法(Momentum)**:在梯度下降的基础上引入动量项,加速梯度方向上的更新,并抑制震荡。 - **Nesterov Accelerated Gradient (NAG)**:与动量法类似,但先根据动量方向进行预测,再计算梯度进行更新,具有更好的收敛性。 - **Adagrad**:为每个参数分配独立的学习率,适用于稀疏数据。 - **Adadelta**:改进了Adagrad,解决了学习率逐渐衰减至零的问题。 - **RMSprop**:通过引入指数加权移动平均,解决了Adagrad的学习率衰减问题。 - **Adam**:结合了动量法和RMSprop的优点,是目前深度学习中最常用的优化器之一。 #### 牛顿法与拟牛顿法(Newton's Method & Quasi-Newton Methods) - **牛顿法**:利用损失函数的二阶导数(Hessian矩阵)来加速收敛,通常比梯度下降法更快,但计算Hessian矩阵及其逆矩阵的成本较高。 - **拟牛顿法**:通过近似Hessian矩阵或其逆矩阵来减少计算成本,常见的拟牛顿法包括BFGS和L-BFGS。 #### 共轭梯度法(Conjugate Gradient) 共轭梯度法是一种介于梯度下降法和牛顿法之间的优化算法。它不需要计算Hessian矩阵,但比梯度下降法具有更快的收敛速度,适用于大规模问题。 #### 优化算法的选择 在实际应用中,选择合适的优化算法需要综合考虑以下因素: - 数据规模:对于大规模数据集,通常选择SGD或Adam。 - 模型复杂度:对于复杂模型,可能需要使用自适应学习率算法(如Adam)。 - 计算资源:如果计算资源有限,可以选择MBGD或拟牛顿法。 #### 代码实现 以下是一个使用PyTorch实现Adam优化器的示例代码: ```python import torch import torch.nn as nn import torch.optim as optim # 定义一个简单的线性模型 model = nn.Linear(10, 1) # 定义损失函数 criterion = nn.MSELoss() # 定义Adam优化器 optimizer = optim.Adam(model.parameters(), lr=0.001) # 模拟输入数据 inputs = torch.randn(32, 10) targets = torch.randn(32, 1) # 前向传播 outputs = model(inputs) loss = criterion(outputs, targets) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() ``` #### 局部最优与鞍点问题 在优化过程中,局部最优和鞍点问题是常见的挑战。局部最优是指优化算法收敛到一个局部最小值而非全局最小值。鞍点则是指在某些方向上梯度为零,但并非极值点。现代优化算法(如Adam)通过动量和自适应学习率机制,能够在一定程度上缓解这些问题[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值