深度学习中优化器optimizer对比

优化器是深度学习领域的重要组成模块之一,执行深度学习任务时采用不同的优化器会产生截然不同的效果。这也是研究者们不遗余力「炼丹」的原因之一。常见的优化算法包括梯度下降(变体 BGD、SGD 和 MBGD)、Adagrad、Adam、Momentum 等,如此繁多的优化器应该如何做出抉择呢?

为机器学习项目选择好的优化器不是一项容易的任务。流行的深度学习库(如 PyTorch 或 TensorFLow)提供了多种优化器选择,它们各有优缺点。并且,选择不合适的优化器可能会对机器学习项目产生很大的负面影响。这使得选择优化器成为构建、测试和部署机器学习模型过程中的关键一环。

image.png

选择优化器的问题在于没有一个可以解决所有问题的单一优化器。实际上,优化器的性能高度依赖于设置。所以根本问题是:「哪种优化器最适合自身项目的特点?」

下文就围绕这个问题分两部分展开,第一部分简要介绍常用的优化器,第二部分讲述「三步选择法」,帮助用户为自己的机器学习项目挑选出最佳优化器。

一. 常用优化器

深度学习中几乎所有流行的优化器都是基于梯度下降。这意味着它们要反复估计给定损失函数 L 的斜率,并沿着相反的方向移动参数(因此向下移动至假定的全局最小值)。这种优化器最简单的示例是自 20 世纪 50 年代以来一直使用的随机梯度下降(SGD)算法。21 世纪前 10 年,自适应梯度法(如 AdaGrad 或 Adam)变得越来越流行。

但最近的趋势表明,部分研究转而使用先前的 SGD,而非自适应梯度法。此外,当前深度学习中的挑战带来了新的 SGD 变体,例如 LARS、LAMB[6][7]。例如谷歌研究院在其最近的论文中使用 LARS 训练一种强大的自监督模型[8]。

本文中用 w 代表参数,g 代表梯度,α为每个优化器的全局学习率,t 代表时间步(time step)。

1.随机梯度下降(SGD)算法
image.png

在随机梯度下降算法(SGD)中,优化器基于小批量估计梯度下降最快的方向,并朝该方向迈出一步。由于步长固定,因此 SGD 可能很快停滞在平稳区(plateaus)或者局部最小值上

2.带动量的SGD
image.png

其中β<1。当带有动量时,SGD 会在连续下降的方向上加速(这就是该方法被称为「重球法」的原因)。这种加速有助于模型逃脱平稳区,使其不易陷入局部极小值

3.AdaGrad
image.png

AdaGrad 是首批成功利用自适应学习率的方法之一。AdaGrad 基于平方梯度之和的倒数的平方根来缩放每个参数的学习率。该过程将稀疏梯度方向放大,以允许在这些方向上进行较大调整。结果是在具有稀疏特征的场景中,AdaGrad 能够更快地收敛

4.RMSprop
image.png

RMSprop 是一个未发布的优化器,但在最近几年中已被过度使用。其理念类似于 AdaGrad,但是梯度的重新缩放不太积极:用平方梯度的移动均值替代平方梯度的总和。RMSprop 通常与动量一起使用,可以理解为 Rprop 对小批量设置的适应。

5.Adam
image.png

Adam 将 AdaGrad、RMSprop 和动量方法结合到一起。下一步的方向由梯度的移动平均值决定,步长大小由全局步长大小设置上限。此外,类似于 RMSprop,Adam 对梯度的每个维度进行重新缩放。Adam 和 RMSprop(或 AdaGrad)之间一个主要区别是对瞬时估计 m 和 v 的零偏差进行了矫正。Adam 以少量超参数微调就能获得良好的性能著称

6.AdamW
image.png

Loshchilov 和 Hutter 在自适应梯度方法中确定了 L2 正则化和权重下降的不等式,并假设这种不等式限制了 Adam 的性能。然后,他们提出将权重衰减与学习率解耦。实验结果表明 AdamW 比 Adam(利用动量缩小与 SGD 的差距)有更好的泛化性能,并且对于 AdamW 而言,最优超参数的范围更广

7.LARS
image.png

LARS 是 SGD 的有动量扩展,可以适应每层的学习率。LARS 最近在研究界引起了关注。这是由于可用数据的稳定增长,机器学习的分布式训练也变得越来越流行。这使得批处理大小开始增长,但又会导致训练变得不稳定。有研究者(Yang et al)认为这些不稳定性源于某些层的梯度标准和权重标准之间的不平衡。因此他们提出了一种优化器,该优化器基于「信任」参数η<1 和该层梯度的反范数来重新调整每层的学习率。

二. 如何选择合适的优化器?

如上所述,为机器学习问题选择合适的优化器可能非常困难。更具体地说,没有万能的解决方案,只能根据特定问题选择合适的优化器。但在选择优化其之前应该问自己以下 3 个问题:

  1. 类似的数据集和任务的 SOTA 结果是什么?

  2. 使用了哪些优化器?

  3. [图片上传中...(优化器性能对比.png-96ee76-1677241715730-0)]
    为什么使用这些优化器?

如果您使用的是新型机器学习方法,那么可能存在一篇或多篇涵盖类似问题或处理了类似数据的优秀论文。通常,论文作者会进行广泛的交叉验证,并且给出最成功的配置。读者可以尝试理解他们选择那些优化器的原因。

例如:假设你想训练生成对抗网络(GAN),以对一组图像执行超分辨率。经过一番研究后,你偶然发现了一篇论文 [12],研究人员使用 Adam 优化器解决了完全相同的问题。威尔逊等人[2] 认为训练 GAN 并不应该重点关注优化问题,并且 Adam 可能非常适合这种情况。所以在这种情况下,Adam 是不错的优化器选择。

此外,你的数据集中是否存在可以发挥某些优化器优势的特性?如果是这样,则需要考虑优化器的选择问题。

下表 1 概述了几种优化器的优缺点。读者可以尝试找到与数据集特征、训练设置和项目目标相匹配的优化器。某些优化器在具有稀疏特征的数据上表现出色,而有一些将模型应用于先前未见过的数据时可能会表现更好。一些优化器在大批处理量下可以很好地工作,而另一些优化器会在泛化不佳的情况下收敛到极小的最小值。

优化器性能对比.png

举例而言:如果你需要将用户给出的反馈分类成正面和负面反馈,考虑使用词袋模型(bag-of-words)作为机器学习模型的输入特征。由于这些特征可能非常稀疏,所以决定采用自适应梯度方法。但是具体选择哪一种优化器呢?参考上表 1,你会发现 AdaGrad 具有自适应梯度方法中最少的可调参数。在项目时间有限的情况下,可能就会选择 AdaGrad 作为优化器。

最后需要考虑的问题:该项目有哪些资源?项目可用资源也会影响优化器的选择。计算限制或内存限制以及项目时间范围都会影响优化器的选择范围。

如上表 1 所示,可以看到每个优化器有不同的内存要求和可调参数数量。此信息可以帮助你估计项目设置是否可以支持优化器的所需资源。

举例而言:你正在业余时间进行一个项目,想在家用计算机的图像数据集上训练一个自监督的模型(如 SimCLR)。对于 SimCLR 之类的模型,性能会随着批处理大小的增加而提高。因此你想尽可能多地节省内存,以便进行大批量的训练。选择没有动量的简单随机梯度下降作为优化器,因为与其他优化器相比,它需要最少的额外内存来存储状态。

<think>嗯,用户想了解深度学习中使用的智能优化算法的相关知识,包括介绍、原理和实现。我需要先理解什么是智能优化算法,以及它们在深度学习中的具体应用。首先,智能优化算法通常指的是启发式算法,比如遗传算法、粒子群优化、减法优化器、黄金正弦算法等。这些算法与传统梯度下降不同,不依赖梯度信息,而是通过模拟自然现象或群体智能来寻找最优解。 接下来,我需要结合用户提供的引用资料。引用[1]提到了基于黄金正弦和混沌映射的改进减法优化器算法,这可能是一个结合了两种优化思想的混合算法。黄金正弦算法可能利用黄金分割比例来调整搜索步长,而混沌映射可以增加种群的多样性,避免早熟收敛。引用[3]则提到优化算法通过调整参数最小化损失函数,这可能涉及梯度下降,但用户关心的是智能优化算法,所以需要区分传统优化方法和智能优化方法。 然后,用户需要原理和实现。原理部分应该涵盖这些算法的工作机制,比如群体智能、随机搜索、适应度评估等。实现方面可能需要给出伪代码或Python示例,但用户提供的示例是Python代码,所以可能需要用类似的格式。不过要注意,深度学习中的参数优化通常使用梯度下降变体,如Adam,而智能优化算法可能更多用于超参数调整或特定场景下的模型优化。 另外,引用[2]提到强化学习用于优化模型,比如DQN、PG等,这可能属于另一种优化方式,但用户的问题集中在智能优化算法,可能需要明确区分强化学习与智能优化算法的不同应用场景。 需要确保回答结构清晰,分点介绍原理、常见算法、实现步骤,并结合引用中的例子。比如,在实现部分,可以给出一个简化的遗传算法或粒子群优化算法的代码示例,说明如何优化神经网络的超参数。同时,注意引用标记,例如改进减法优化器算法结合黄金正弦和混沌映射[^1]。 可能的问题点:智能优化算法深度学习中的实际应用案例,以及与传统梯度下降法的对比。需要说明智能优化算法的优缺点,比如适用于非凸、不可微的问题,但计算成本较高。最后,生成的相关问题要围绕用户的需求,比如应用场景、与传统方法对比、改进方法等。</think>### 深度学习中的智能优化算法介绍 #### 1. 智能优化算法定义与核心思想 智能优化算法(Intelligent Optimization Algorithms)是一类基于自然现象或群体智能的启发式算法,用于解决复杂优化问题。其特点包括: - **无梯度依赖**:不依赖目标函数的梯度信息,适用于非凸、不可微场景[^3]。 - **群体智能**:模拟生物群体(如蚁群、鸟群)的协作行为,例如粒子群优化(PSO)通过个体与群体经验更新位置: $$v_i^{k+1} = w v_i^k + c_1 r_1 (pbest_i - x_i^k) + c_2 r_2 (gbest - x_i^k)$$ - **随机搜索**:结合随机扰动避免局部最优,如遗传算法(GA)通过交叉、变异操作探索解空间。 #### 2. 常见算法分类与原理 | 算法名称 | 核心原理 | 典型应用场景 | |------------------|--------------------------------------------------------------------------|-----------------------| | 遗传算法 (GA) | 模拟生物进化,通过选择、交叉、变异生成新解 | 神经网络结构搜索 | | 粒子群优化 (PSO) | 粒子追随个体历史最优和群体最优位置更新 | 超参数调优 | | 减法优化器 (SAB) | 基于物质扩散原理,通过“减法”操作平衡探索与开发[^1] | 图像处理模型优化 | | 黄金正弦算法 | 结合黄金分割比例调整搜索步长,提升收敛效率 | 组合优化问题 | #### 3. 实现步骤与代码示例(以改进减法优化器为例) **实现流程**: 1. **初始化**:生成初始种群,应用混沌映射增强多样性[^1] 2. **适应度评估**:计算每个个体对应模型性能(如验证集准确率) 3. **位置更新**: - 使用减法操作更新解向量 - 引入黄金正弦因子调整搜索方向 4. **迭代优化**:重复步骤2-3直至收敛 ```python import numpy as np def improved_sab_optimizer(pop_size, dim, max_iter): # 混沌映射初始化种群 population = logistic_chaos(pop_size, dim) best_fitness = float('inf') for _ in range(max_iter): fitness = evaluate(population) # 评估模型性能 idx = np.argmin(fitness) if fitness[idx] < best_fitness: best_solution = population[idx] best_fitness = fitness[idx] # 黄金正弦调整的减法操作 a = np.pi * (1 - np.sqrt(5)/2) # 黄金比例因子 for i in range(pop_size): r1, r2 = np.random.rand(), np.random.rand() new_pos = population[i] - r1*(population[i] - best_solution) + a*np.sin(r2) population[i] = np.clip(new_pos, 0, 1) return best_solution # 示例:优化神经网络学习率参数 optimal_lr = improved_sab_optimizer(pop_size=50, dim=1, max_iter=100) ``` #### 4. 与传统优化算法对比 | 特性 | 智能优化算法 | 梯度下降法 | |---------------------|-------------------------------|-------------------------| | 梯度需求 | 不需要 | 需要一阶/二阶导数 | | 计算成本 | 较高(需多次模型评估) | 较低(单次反向传播) | | 适用场景 | 离散/非凸问题、超参数优化 | 连续可微问题 | | 并行能力 | 强(种群可并行评估) | 弱(依赖顺序更新) | #### 5. 在深度学习中的典型应用 1. **超参数优化**:自动搜索学习率、批量大小等参数组合 2. **结构搜索**:设计神经网络层数、连接方式(如NAS) 3. **损失函数设计**:优化不可微的定制化损失函数 4. **模型压缩**:寻找最优的权重剪枝/量化策略 §§ 相关问题 §§ 1. 智能优化算法如何与强化学习结合优化深度学习模型?[^2] 2. 在哪些场景下智能优化算法优于传统梯度下降? 3. 如何评估不同智能优化算法深度学习任务中的性能? 4. 改进减法优化器中混沌映射的具体作用是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值