深度学习最全优化方法总结比较(SGD,SGDM,Adam,Adagrad,Adadelta,Adam)

     拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了。

不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了,这出来的口味可是千差万别。火小了夹生,火大了易糊,火不匀则半生半糊。

      机器学习也是一样,模型优化算法的选择直接关系到最终模型的性能。有时候效果不好,未必是特征的问题或者模型设计的问题,很可能就是优化算法的问题。

     说到优化算法,入门级必从SGD学起,老司机则会告诉你更好的还有AdaGrad/AdaDelta,或者直接无脑用Adam。可是看看学术界的最新paper,却发现一众大神还在用着入门级的SGD,最多加个Moment或者Nesterov ,还经常会黑一下Adam。


病态矩阵是一种特殊矩阵。指条件数很大的非奇异矩阵。病态矩阵的逆和以其为系数矩阵的方程组的界对微小扰动十分敏感,对数值求解会带来很大困难。 

在求解任何反问题的过程中通常会遇到病态矩阵问题,而且病态矩阵问题还未有很好的解决方法,尤其是长方形、大型矩阵。目前主要有Tikhonov、奇异值截断、奇异值修正、迭代法等方法。

求解方程组时对数据的小扰动很敏感的矩阵。

线性方程组Ax=b时,若对于系数矩阵A及右端项b的小扰动 δA、δb,方程组 (AA)χ=bb的解 χ 与原方程组Ax=b的解差别很大,则称矩阵A为病态矩阵。方程组的近似解 χ 一般都不可能恰好使剩余 r=b-Aχ 为零,这时 χ

<think>好的,用户想了解SGDSGDMAdam优化器的介绍及区别,我需要根据提供的引用和之前的回答来组织内容。首先,用户提到了之前的回答中有关优化器的部分,应该保持结构的一致性,比如核心作用、类型、代码实现、选择策略等。 用户给的引用中有四个来源,我需要从中提取相关信息。引用1提到优化器在深度学习中的关键作用,特别是SGDAdam和RMSprop。引用2讨论了SGDAdam的选择问题,引用3解释了Adam结合了Adagrad和动量法的优点,引用4详细比较了各种优化器,包括SGDSGDMAdam等,并提到了它们的不同之处,比如Adam的分母项累积梯度平方。 首先,我需要分别介绍每个优化器。对于SGD,应该说明其基本形式,可能的问题(比如震荡),以及引用中的相关内容。SGDMSGD with Momentum,需要解释动量的概念,如何减少震荡,引用4提到动量帮助加速收敛。Adam部分需要结合引用3和4,说明其自适应学习率和动量的结合,适用场景如稀疏梯度。 在比较区别时,需要从收敛速度、稳定性、超参数等方面展开。引用4提到Adam的分母项调整步长,适用于不同梯度稀疏性的情况。适用场景部分,引用2提到SGD可能在简单任务表现好,Adam适合复杂任务,而SGDM可能在两者之间。 还要注意用户可能的应用场景,比如深度学习模型训练,需要根据任务类型推荐优化器。另外,用户可能需要知道如何选择,比如调整学习率、动量参数等,这些在引用中也有涉及。 需要确保使用正确的中文术语,公式用$$...$$,行内用$...$。代码示例部分,之前的回答用了PyTorch实现,这里也可以沿用。同时生成的相关问题需要覆盖原理、选择方法、应用场景等,参考之前的示例。 最后,检查是否引用了正确的来源,比如引用3和4在解释Adam时,引用4在比较优化器时的分母项,引用2在选择策略上。确保每个引用标记正确,并且回答结构清晰,分点明确。</think>#### 一、SGD优化器介绍 **随机梯度下降(Stochastic Gradient Descent, SGD)** 是最基础的优化算法,其核心思想是**通过当前参数的负梯度方向更新参数**,数学形式为: $$ θ_{t+1} = θ_t - η \cdot \nabla J(θ_t) $$ 其中,$η$ 是学习率,$\nabla J(θ_t)$ 是损失函数的梯度。 - **特点**: 1. **简单高效**:适合小批量数据或凸优化问题。 2. **震荡问题**:在非凸函数中可能陷入局部极小值或震荡[^4]。 - **代码实现**(PyTorch): ```python optimizer = torch.optim.SGD(model.parameters(), lr=0.01) ``` --- #### 二、SGDM优化器介绍 **带动量的随机梯度下降(SGD with Momentum, SGDM)** 在SGD基础上引入**动量项**,模拟物理中的惯性,加速收敛并减少震荡。其更新公式为: $$ v_{t} = γ \cdot v_{t-1} + η \cdot \nabla J(θ_t) $$ $$ θ_{t+1} = θ_t - v_{t} $$ 其中,$γ$ 是动量系数(通常设为0.9)。 - **特点**: 1. **加速收敛**:在梯度方向一致的维度上累积速度。 2. **缓解震荡**:通过动量项平滑梯度更新路径[^4]。 - **代码实现**: ```python optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9) ``` --- #### 三、Adam优化器介绍 **自适应矩估计(Adaptive Moment Estimation, Adam)** 结合了**动量法**和**自适应学习率**,是深度学习中应用最广的优化器之一。其核心公式为: $$ m_t = β_1 \cdot m_{t-1} + (1-β_1) \cdot \nabla J(θ_t) \quad \text{(一阶矩估计)} $$ $$ v_t = β_2 \cdot v_{t-1} + (1-β_2) \cdot (\nabla J(θ_t))^2 \quad \text{(二阶矩估计)} $$ $$ θ_{t+1} = θ_t - η \cdot \frac{m_t}{\sqrt{v_t} + \epsilon} $$ 其中,$β_1$ 和 $β_2$ 通常取0.9和0.999,$\epsilon$ 为平滑项。 - **特点**: 1. **自适应学习率**:梯度稀疏时学习率较大,密集时较小。 2. **抗震荡**:动量项缓解梯度方向突变问题[^3][^4]。 - **代码实现**: ```python optimizer = torch.optim.Adam(model.parameters(), lr=0.001) ``` --- #### 四、三种优化器的对比与适用场景 | **特性** | **SGD** | **SGDM** | **Adam** | |----------------|----------------------|----------------------|----------------------| | **收敛速度** | 较慢 | 较快 | 最快 | | **稳定性** | 易震荡 | 较稳定 | 最稳定 | | **超参数** | 学习率 | 学习率、动量系数 | 学习率、β1、β2 | | **适用场景** | 小数据集、凸优化问题 | 中等规模非凸优化 | 大规模深度学习任务 | - **选择建议**: - **SGD**:简单任务或需要精确调参的场景(如线性回归)。 - **SGDM**:需要平衡收敛速度和稳定性的场景(如CNN图像分类)。 - **Adam**:复杂非凸优化(如Transformer、GAN),尤其适合稀疏梯度问题[^3][^4]。 --- #### 五、性能对比实验结论(参考文献) 1. Adam在自然语言处理任务中表现优异(如BERT训练)[^3]。 2. SGDM在计算机视觉任务中常能达到更高精度(如ResNet)[^4]。 3. SGD在训练后期通过精细调参可能超越自适应优化器[^2]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值