天桥调参师秘籍:一份深度学习超参微调技术指南

简介: 一份关于深度学习参数调整指南,涉及学习率、批量大小、动量和权重衰减四种超参数的调参经验,适合在工程实践中尝试应用。

随着深度学习的兴起,越来越多的人从事算法工程师这一岗位。有时候他们自嘲自己为“天桥调参师”。当然,算法工程师的工作内容并没有那么简单,因为设置超参数的过程需要专业知识和广泛的试验和试错过程。尤其是针对学习率(learning rate)、批量大小(batch size)、动量( momentum)和权重衰减(weight decay)这些超参数而言,没有简单易行的方法来设置。

1


深度学习模型充满了超参数,在如此高维空间中找到这些参数的最佳值并不是一项容易的挑战。在讨论找到最佳超参数的方法之前,首先了解这些超参数:学习率、批量大小、动量和权重衰减。这些超参数类似于开关旋钮,可以在模型训练期间进行调整。为了使得模型能够获得最佳结果,需要找到这些超参数的最佳值。

梯度下降

梯度下降是训练机器学习算法中常用的优化技术。训练机器学习算法的主要目的是调整权重w以最小化损失函数或成本函数。通过最小化成本函数,就可以找到产生最佳模型性能的参数[1]。
回归问题的典型损失函数图类似于碗的形状,如下所示。

2


在梯度下降算法中,首先随机模型参数,并计算每次学习迭代的误差,不断更新模型参数以更接近导致最小成本的值。梯度下降算法将梯度乘以一个标量(学习率),以确定下一个点。
如果用dW和db作为更新参数W和b的梯度,梯度下降算法如下:

1_J6d0_3brWTtq1YhLrSyEMA


如果学习率很小,那么训练会更加可靠,但花费的时间也更多,因为每次移动的步长很小。
如果学习率很大,那么训练可能不收敛。权重变化可能很大,以至于优化器错失最优化并使得损失变大。因此,最终目标是找到可以快速获得最小损失的最佳学习率。

3


一般而言,可以将梯度下降视为在山谷中滚动的球。希望它能够在停留山脉的最深处,但有时可能会出错。

4


根据球开始滚动的位置,它可能会停留在山谷的底部。但不是最低的一个,这称为局部最小值。初始化模型权重的方式可能会导致局部最小值。为了避免这种情况,可以随机始化权重向量。
用2-D表示损失面,如下所示:

5


红点是全局最小值,希望能够达到这一点。使用梯度下降方法,更新将如下所示:

6


随着梯度下降的每次迭代,向上和向下振荡移动到局部最优。如果使用更大的学习率,那么垂直振荡将具有更高的幅度。这种垂直振荡会减慢梯度下降过程,并阻止设置更大的学习率,而学习速率太小会使梯度下降变慢。

目标是希望在垂直方向上学习更慢,在水平方向上学习更快,这将有助于更快地达到全局最小值。

为了实现这一点,可以使用具有动量的梯度下降 [2]。
梯度下降:

7


在动量方面,采用dW和db的指数加权平均值,而不是每个时期单独使用dW和db。

8


其中 β是另一个称为动量的超参数,取值范围从0到1。它设置先前值的平均值与当前值之间的权重,以计算新的加权平均值。
计算指数加权平均值后更新参数。

9


通过使用dW和db的指数加权平均值,将垂直方向上的振荡平均化为接近零。然而,在水平方向上,所有导数都指向水平方向的右侧,因此水平方向上的平均值仍然相当大。它允许算法采用更直接的路径朝向局部最优并阻尼垂直振荡。基于此,算法最终会在局部最优处进行几次迭代。

10


有三种梯度下降的方法:

批量梯度下降(Batch gradient descent: )

  • 使用所有的训练实例来更新每次迭代中的模型参数;
  • 通过准确估计误差梯度来缓慢收敛;

随机梯度下降(Stochastic Gradient Descent)

  • 在每次迭代中仅使用单个训练实例更新参数。训练实例通常是随机选择的;
  • 通过估计错误梯度快速收敛;

小批量梯度下降(Mini-batch Gradient Descent)

  • 一次取b个示例:训练时不是使用所有的示例,而是将训练集划分为称为批处理的较小尺寸,每次取b个示例用来更新模型参数;
  • 小批量梯度下降试图在随机梯度下降的稳健性和批量梯度下降的效率之间找到平衡;
  • 小批量梯度下降是深度学习领域中最常用的梯度下降方法。缺点是它引入了额外的超参数'b';

搜索最佳配置的方法:网格搜索和随机搜索

网格搜索

在网格搜索[3]中,尝试每个可能的参数配置。
步骤:

  • 定义一个n维网格,其中每个都为超参数映射。例如n =(learning_rate, batch_size)
  • 对于每个维度,定义可能值的范围:例如batch_size = [4,8,16,32]learning_rate = [0.1,0.01,0.0001]
  • 搜索所有可能的配置并等待结果建立最佳配置:例如C1 =(0.1,4) - > acc = 92%C2 =(0.01,4) - > acc = 92.3%等;

随着维度的增多,搜索将在时间复杂度上发生爆炸。当维度小于或等于4时,通常使用这种方法。虽然它最终能保证找到最佳配置,但它仍然不是优选的,最好是使用随机搜索。

随机搜索

随机搜索[4]首先从配置空间中随机选取一个点,使用随机搜索更广泛地探索超参数空间。这可以在更少的迭代次数中找到最佳配置。例如:

11


在网格布局中,很容易注意到,即使已经训练了9个模型,而每个变量只使用了3个值。然而,使用随机搜索,我们不太可能不止一次地选择相同的变量,将使用9个不同的值为每个变量训练9个模型。更多详细分析,请参阅 该文
尽管随机搜索比网格搜索表现更好,但这两种方法在计算上仍然是昂贵且耗时的。在2018年,Leslie在其经典论文中提出了关于识别最佳超参数的各种方法的详细报告[5]。其中最好的方法是基于通过检查测试/验证损失以寻找欠拟合和过拟合的曲线来找到二者之间的平衡,以便争取最佳的超参数集合。

超参数调整过程无异于在钢丝上走路,以实现欠拟合和过拟合之间的平衡。

方法

  • 1.通过在训练早期监控验证/测试损失,观察分析训练曲线,通过几个时期来调整模型结构和超参数;
  • 2.在训练过程早期测试或验证损失的欠拟合或过拟合对于调整超参数是有用的;

    12

寻找最佳超参数

学习率(LR)

如果学习率太小,则可能发生过拟合。较高的学习率有助于正则训练,但如果学习率过大,训练就会出现误差。因此,可以进行短距离网格搜索以找到收敛或发散的学习率,但还有另一种方法称为“周期性学习率(CLR)”。
实验表明,训练期间使用不同的学习率总体上是有益的,因此建议在一个取值范围内周期性地改变学习率,而不是将其设定为固定值。让学习率在一定范围内变化,而不是采用逐步、固定或指数级减少学习率值。即设置好最小和最大边界,学习率在这些边界之间循环变化。

13

如何估算合理的最小和最大边界值?

LR范围测试:运行模型几个epoch,同时让学习率在高低学习率值之间线性增加。对于浅层的3层架构,最大设置为0.01,而对于resnet这样的网络,学习率最大可以设置为3.0

14


从一轮循环确定最大学习速率,并将最大值的十分之一作为最小学习率的表现也不错[6]。

批量大小(Batch size)

与学习率不同,其值不影响计算训练时间。批量大小受硬件内存的限制,而学习率则不然。建议使用适合硬件内存的较大批量大小,并使用更大的学习速率。
如果服务器有多个GPU,则总批量大小是单个GPU上的批量大小乘以GPU的数量。

周期性动量(Cyclical Momentum)

动量和学习率密切相关。最佳学习率取决于动量,而动量又取决于学习率。与学习率一样,在不引起训练不稳定的情况下尽可能设置大的动量值是很有价值的。

查找学习率和动量组合的步骤

  • 使用循环学习率:最佳训练步骤是循环增加学习率,初始化一个小的学习率,使其开始收敛,并减少周期动量。当学习率增加时,使用递减的循环动量加快收敛并且当稳定训练后,并设置更大的学习率;

    15


左:学习率周期,右:动量周期

  • 使用恒定学习率:如果使用恒定的学习率,那么大的恒定动量(即0.9-0.99)将起到伪增加学习率的作用并加速训练。但是,使用过大的动量值会导致训练结果很差。

无论是循环学习速率还是恒定学习速率,可以尝试在0.9到0.99范围内设定动量值,并从中选择一个表现最佳值。

权重衰减

体重衰减是正则化的一种形式,它在训练中起着重要作用,因此需要适当设定[7]。权重衰减被定义为将每个时期的梯度下降中的每个权重乘以因子λ(0 <λ<1)。
一般而言,可以测试权重衰减值为1 /10³1 /10⁴1 /10⁵0。较小的数据集和模型结构设置较大的权重衰减值,而较大的数据集和更深的模型结构设置较小的值。
如果使用恒定的学习率而不是使用学习率范围进行搜索,则最佳权重衰减会有所不同。由于较大的学习率提供正则化,因此较小的权重衰减值是最佳的。

总结

学习率:

  • 执行学习率范围测试以确定“大”的学习率。
  • 一轮测试确定最大学习速率,将最小学习速率设置为最大学习速率的十分之一。

动量:

  • 用短期动量值0.990.970.950.9进行测试,以获得动量的最佳值;
  • 如果使用周期学习率计划,最好从该最大动量值开始循环设置动量,并随着学习率的增加而减小到0.80.85

批量大小:

  • 根据硬件条件使用尽可能大的批量大小,然后比较不同批量大小的性能;
  • 小批量添加正规化的效果大,而大批量添加的正则化效果小,因此在适当平衡正规化效果的同时利用好它;
  • 使用更大的批量通常会更好,这样就可以使用更大的学习率;

权重衰减:

  • 网格搜索以确定适当的幅度,但通常不需要超过一个有效数字精度;
  • 更复杂的数据集需要较少的正则化,因此设置为较小的权重衰减值,例如10^-410^-510^-60
  • 浅层结构需要更多的正则化,因此设置更大的权重衰减值,例如10^-210^-310^-4

参考文献:

[1] https://www.jeremyjordan.me/gradient-descent/
[2] https://engmrk.com/gradient-descent-with-momentum/
[3] https://blog.floydhub.com/guide-to-hyperparameters-search-for-deep-learning-models/
[4] http://www.jmlr.org/papers/volume13/bergstra12a/bergstra12a.pdf
[5] https://arxiv.org/pdf/1803.09820.pdf
[6] https://arxiv.org/pdf/1506.01186.pdf
[7] https://papers.nips.cc/paper/563-a-simple-weight-decay-can-improve-generalization.pdf
[8] https://www.analyticsvidhya.com/blog/2018/11/neural-networks-hyperparameter-tuning-regularization-deeplearning/

作者信息

Javaid Nabi, 机器学习专家
本文由阿里云云栖社区组织翻译。
文章原标题《Hyper-parameter Tuning Techniques in Deep Learning》,译者:海棠,审校:Uncle_LLD。
文章简译,更为详细的内容,请查看原文

相关文章
|
11天前
|
机器学习/深度学习 监控 算法
深度学习赋能智能监控:图像识别技术的革新与应用
【4月更文挑战第8天】 随着人工智能技术的飞速发展,深度学习在图像处理领域取得了突破性进展。特别是在智能监控系统中,基于深度学习的图像识别技术已成为提升安全和效率的关键工具。本文将探讨深度学习技术如何革新传统监控体系,增强其对复杂场景的理解能力,以及在实际部署中面临的挑战和解决方案。通过分析最新的研究成果和应用案例,我们揭示了深度学习在智能监控领域的潜力及其对未来社会发展的影响。
17 2
|
28天前
|
机器学习/深度学习 传感器 人工智能
基于深度学习的图像识别技术在自动驾驶领域的应用
【2月更文挑战第31天】 随着人工智能技术的飞速发展,尤其是深度学习在图像处理方面的突破,使得自动驾驶汽车的图像识别系统得以大幅提升。本文将探讨深度学习技术如何优化自动驾驶车辆的视觉感知能力,包括对环境的理解、行人和障碍物的检测以及交通标志的识别。我们将重点分析卷积神经网络(CNN)在特征提取中的关键作用,并展示通过大规模数据集训练得到的模型如何在真实世界中提高自动驾驶系统的安全性和可靠性。
|
29天前
|
机器学习/深度学习 边缘计算 监控
基于深度学习的图像识别技术在智能监控领域的应用
【2月更文挑战第30天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉领域进步的关键力量。特别是在图像识别任务中,深度神经网络通过模仿人类大脑处理信息的方式,显著提升了对复杂场景的理解能力。本文旨在探讨基于深度学习的图像识别技术在智能监控系统中的应用,重点分析了卷积神经网络(CNN)的结构优化、训练策略以及在实际视频流分析中的效能表现。同时,讨论了该技术在实时监控数据处理、异常行为检测和多目标跟踪等方面的创新应用,并对未来发展趋势进行展望。
|
10天前
|
机器学习/深度学习 监控 安全
智能化视野下的守卫者:基于深度学习的图像识别技术在智能监控领域的革新应用
【4月更文挑战第9天】 随着人工智能技术的飞速发展,深度学习已经成为了推动计算机视觉进步的重要力量。尤其在智能监控领域,基于深度学习的图像识别技术正逐步转变着传统监控系统的功能与效率。本文旨在探讨深度学习技术如何赋能智能监控,提高对场景理解的准确性,增强异常行为检测的能力,并讨论其在实际部署中所面临的挑战和解决方案。通过深入分析,我们揭示了深度学习在智能监控中的应用不仅优化了安全防范体系,也为城市管理和公共安全提供了有力的技术支持。
|
27天前
|
机器学习/深度学习 数据采集 监控
基于深度学习的图像识别技术在智能监控系统中的应用
随着人工智能技术的飞速发展,深度学习作为其核心分支之一,在图像处理和分析领域取得了显著成就。本文将探讨一种基于深度学习的图像识别技术,并分析其在智能监控系统中的应用。该技术通过构建复杂的神经网络模型,实现了对监控视频中异常行为的准确识别与实时反应。实验结果表明,与传统算法相比,该方法在准确率和处理速度上都有明显提升,有效增强了监控系统的智能化水平。
16 3
|
29天前
|
机器学习/深度学习 传感器 人工智能
基于深度学习的图像识别技术进展
【2月更文挑战第30天】 随着人工智能领域的飞速发展,图像识别技术已经取得了显著的进步。本文将深入探讨基于深度学习的图像识别技术的最新发展,包括卷积神经网络(CNN)的优化、数据增强方法、迁移学习、以及对抗性网络的应用。我们将分析这些技术如何提高图像识别的准确性和效率,并讨论它们在不同应用场景中的潜在影响。通过综合当前研究趋势和实验成果,本文旨在为未来图像识别技术的发展提供参考和启示。
|
28天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【2月更文挑战第31天】 随着人工智能技术的飞速发展,深度学习已成为推动自动驾驶系统革新的核心动力之一。特别是在图像识别领域,深度学习模型已经显示出了卓越的性能和广阔的应用前景。本文旨在探讨基于深度学习的图像识别技术如何被集成进自动驾驶系统中,以及这一集成对提高系统准确性、可靠性的影响。我们将详细分析卷积神经网络(CNN)等先进深度学习架构在处理车载摄像头捕获的复杂交通场景中的作用,并讨论数据增强、迁移学习等策略在提升模型泛化能力方面的重要性。此外,我们还将评估这些技术在真实世界条件下的性能及其面临的挑战。
|
3天前
|
机器学习/深度学习 监控 安全
深度学习驱动下的智能监控革新:图像识别技术的实战应用
【4月更文挑战第16天】 随着人工智能的迅猛发展,深度学习技术在图像处理和分析领域取得了突破性的进展。尤其是在智能监控系统中,基于深度学习的图像识别技术已经成为提高安全水平、实现自动化监控的关键工具。本文聚焦于深度学习在智能监控中的应用,探讨了卷积神经网络(CNN)、递归神经网络(RNN)等先进结构在实时视频流分析和异常行为检测方面的具体实践。通过深入分析多个案例,我们展示了深度学习如何提升监控系统的准确性、效率及智能化程度,同时对面临的挑战和未来发展趋势进行了展望。
8 2
|
10天前
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第9天】 随着人工智能技术的不断进步,深度学习已成为推动多个领域革新的核心动力。特别是在图像识别领域,通过模仿人类视觉系统的处理机制,深度学习模型已展现出超越传统算法的性能。本文将探讨深度学习在图像识别中的关键技术,并重点分析这些技术如何被应用于自动驾驶系统中以实现车辆环境的实时理解与决策。我们将从卷积神经网络(CNN)的基础结构出发,讨论其在特征提取、物体检测和分类中的作用,以及如何通过增强学习和迁移学习等策略来优化模型性能。此外,我们还将评估当前技术面临的挑战,如数据集偏差、实时处理需求以及模型泛化能力,并提出可能的解决方案。
10 1
|
11天前
|
机器学习/深度学习 监控 算法
深度学习驱动下的智能监控革新:图像识别技术的前沿应用
【4月更文挑战第8天】 在当今的数字化时代,智能监控系统正迅速成为城市安全、交通管理乃至个人财产保护的关键组成部分。本文深入探讨了基于深度学习的图像识别技术如何在这一过程中发挥核心作用,不仅提升了监控效率,还实现了实时数据分析与决策支持。我们分析了当前最前沿的算法模型,包括卷积神经网络(CNN)、循环神经网络(RNN)以及生成对抗网络(GAN),并讨论了它们在处理视频数据时的优势和挑战。此外,文中还提出了几种优化策略,用以提升系统的准确性和鲁棒性,为未来智能监控系统的发展指明方向。
15 2