如何在训练神经网络的时候设定学习率和超参数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ghw15221836342/article/details/86620738

如何在训练神经网络的时候设定学习率和超参数

目录

如何在训练神经网络的时候设定学习率和超参数

1、学习率是什么?

2、学习率的作用

3、如何设定学习率

4、为训练过程添加动力

5、使用学习率表

6、适应性学习率

7、扩展阅读

论文

书籍

文章

总结


我们不能使用分析方法计算神经网络的权重。 相反,必须通过称为随机梯度下降的经验优化程序发现权重。

随机梯度下降针对神经网络解决的优化问题具有挑战性,解决方案的空间(权重集)可能包含许多良好的解决方案(称为全局最优),并且易于查找,但技能解决方案较少(称为本地解决方案)最优)。

在此搜索过程的每个步骤中对模型的更改量或步长称为“学习率”,并且可能提供最重要的超参数来调整您的神经网络,以便在您的问题上获得良好的性能。

在本教程中,您将发现在训练深度学习神经网络时使用的学习率超参数。

完成本教程后,您将了解:

  • 学习率控制神经网络模型学习问题的速度或速度。
  • 如何使用合理的默认值,诊断行为和开发灵敏度分析来配置学习率。
  • 如何通过学习速率计划,动量和自适应学习率进一步提高绩效。

 

How to Configure the Learning Rate Hyperparameter When Training Deep Learning Neural Networks

1、学习率是什么?

使用随机梯度下降算法训练深度学习神经网络。随机梯度下降是一种优化算法,其使用来自训练数据集的示例来估计模型的当前状态的误差梯度,然后使用误差反向传播来更新模型的权重,简称为反向传播。在训练期间权重更新的量被称为步长或“学习率”。具体而言,学习速率是在神经网络训练中使用的可配置超参数,其具有小的正值,通常在0.0和1.0之间的范围内。

… learning rate, a positive scalar determining the size of the step.

学习率,确定步长大小的正标量.

— Page 86, Deep Learning, 2016.

学习率通常使用小写希腊字母eta(n)的符号表示。在训练期间,误差的反向传播估计网络中节点的权重负责的误差量。 它不是用全额更新权重,而是按学习速率进行缩放。这意味着学习率为0.1(传统上常见的默认值)意味着每次更新权重时网络中的权重被更新0.1 *(估计的权重误差)或估计的权重误差的10%。

2、学习率的作用

神经网络学习或近似函数以最佳地将输入映射到训练数据集中的示例的输出。学习率超参数控制模型学习的速率或速度。具体来说,它控制分配错误的数量,每次更新时,模型的权重都会更新,例如在每批培训示例结束时。

给定完美配置的学习速率,模型将学习在给定数量的训练时期(通过训练数据)中给定可用资源(层数和每层节点数)的最佳近似函数。通常,较大的学习速率允许模型更快地学习,代价是达到次优的最终权重集。较小的学习速率可以允许模型学习更优化或甚至全局最佳的权重集,但是可能花费更长的时间来训练。

在极端情况下,过大的学习速率将导致权重更新太大,并且模型的性能(例如其在训练数据集上的损失)将在训练时期内振荡。据说摆动性能是由发散(发散)的权重引起的。学习率太小可能永远不会收敛,或者可能会陷入次优解决方案。

When the learning rate is too large, gradient descent can inadvertently increase rather than decrease the training error. […] When the learning rate is too small, training is not only slower, but may become permanently stuck with a high training error.

当学习速率太大时,梯度下降会无意中增加而不是减少训练误差。当学习速度太小时,训练不仅速度较慢,而且可能会因高训练误差而永久停留。
 

— Page 429, Deep Learning, 2016.

在一些糟糕的情况下,梯度更新过大可能会造成梯度爆炸。

When using high learning rates, it is possible to encounter a positive feedback loop in which large weights induce large gradients which then induce a large update to the weights. If these updates consistently increase the size of the weights, then [the weights] rapidly moves away from the origin until numerical overflow occurs.

当使用高学习速率时,可能遇到正反馈回路,其中大的权重引起大的梯度,然后引起对权重的大的更新。 如果这些更新一直增加权重的大小,则[权重]快速远离原点,直到发生数值溢出。

— Page 238, Deep Learning, 2016.

因此,我们不应该使用太大或太小的学习率。 然而,我们必须以这样的方式配置模型:平均地,找到“足够好”的权重集来近似由训练数据集表示的映射问题。

3、如何设定学习率

在训练数据集上为模型的学习率找到一个很好的数值非常重要。实际上,学习率可能是为你的模型配置的最重要的超参数。

he initial learning rate [… ] This is often the single most important hyperparameter and one should always make sure that it has been tuned […] If there is only time to optimize one hyper-parameter and one uses stochastic gradient descent, then this is the hyper-parameter that is worth tuning

最初的学习率[...]这通常是最重要的一个超参数,应该始终确保它已被调整[...]如果只有时间优化一个超参数而一个使用随机梯度下降,则这是 值得调整的超参数

— Practical recommendations for gradient-based training of deep architectures, 2012.

事实上,如果有足够的计算资源来调整超参数,那么大部分时间都应该专注于调整学习速率。

The learning rate is perhaps the most important hyperparameter. If you have time to tune only one hyperparameter, tune the learning rate.

学习率可能是最重要的超参数,如果你的时间只够调整一个超参数,那么可以调整学习率。

— Page 429, Deep Learning, 2016.

不幸的是,我们无法分析地计算给定数据集上给定模型的最佳学习速率。 相反,必须通过反复试验发现良好(或足够好)的学习率。要考虑的学习率的值范围小于1.0且大于10 ^ -6。

学习速率将与优化过程的许多其他方面相互作用,并且相互作用可以是非线性的。 然而,一般而言,较小的学习率将需要更多的训练时期。 相反,较大的学习率将需要较少的训练时间。 此外,考虑到误差梯度的噪声估计,较小的批量大小更适合于较小的学习率。学习率的传统默认值为0.1或0.01,这可能是训练的起点。默认值0.01通常适用于标准多层神经网络,但完全依赖此默认值是愚蠢的。

诊断图可用于研究学习率如何影响模型的学习和学习动态。 一个例子是在训练期间创建损失超过训练时期的线图。 线图可以显示许多属性,例如:

  • 训练时期的学习速度,如快速或慢速。
  • 模型是否学得太快(急剧上升和高原)或者学习太慢(很少或没有变化)。
  • 通过损失的振荡,学习率是否会过大。

另一种方法是对所选模型的学习速率进行灵敏度分析,也称为网格搜索。 这有助于突出显示良好学习率可能存在的数量级,以及描述学习率和表现之间的关系。网格搜索学习率在0.1到10 ^ -5或10 ^ -6的对数范围内是常见的。

通常,网格搜索涉及大致以对数标度选择值,例如,在集合{.1,.01,10-3,10-4,10-5}内采用的学习率。

当绘制时,这种灵敏度分析的结果通常显示“U”形状,其中损失减少(性能改善)随着学习速率随着固定数量的训练时期而减少到损失由于模型失败而再次急剧增加的点 收敛。

4、为训练过程添加动力

通过在权重更新中添加历史记录,可以更轻松地训练神经网络。具体地,当更新权重时,可以包括对权重的先前更新的指数加权平均值。 这种随机梯度下降的变化称为“动量”,并为更新过程增加了惯性,导致许多过去的更新在一个方向上继续朝着这个方向发展。动量算法累积过去梯度的指数衰减移动平均值并继续向其方向移动。

动量可以加速对那些问题的学习,其中由优化过程导航的高维“重量空间”具有误导梯度下降算法的结构,例如平坦区域或陡峭曲率。通过添加新的超参数(通常称为“动量”或“速度”)来控制过去更新的惯性量,并使用希腊小写字母alpha(a)的符号。

它具有平滑优化过程的效果,减慢更新以继续前一个方向,而不是卡住或振荡。处理广泛不同的特征值问题的一种非常简单的技术是向梯度下降公式添加动量项。 这有效地增加了通过重量空间的运动惯性并平滑振荡。动量设置为大于0.0且小于1的值,其中在实践中使用诸如0.9和0.99的常见值。

动量不会使配置学习速率变得更容易,因为步长与动量无关。 相反,动量可以提高优化过程的速度与步长一致,提高在较少的训练时期发现更好的权重集的可能性

5、使用学习率表

使用固定学习率的替代方法是改变训练过程中的学习率。学习速率随时间变化的方式(训练时期)被称为学习速率时间表或学习速率衰减。也许最简单的学习速率表是将学习速率从大的初始值线性地降低到小的值。 这允许在学习过程开始时进行大的重量变化,并在学习过程结束时进行微小的变化或微调。在实践中,有必要逐渐降低学习速率,因此我们现在表示迭代时的学习速率。这是因为SGD梯度估计器引入了噪声源(m个训练样例的随机抽样) 即使我们达到最低限度也不会消失。

事实上,在训练神经网络时,使用学习率计划可能是最佳实践。 配置挑战不是选择固定的学习速率超参数,而是选择初始学习速率和学习速率计划。 考虑到学习速率表可能允许的更好性能,初始学习速率的选择可能不如选择固定学习速率敏感。

学习率可以衰减到接近零的小值。 或者,学习速率可以在固定数量的训练时期内衰减,然后对于剩余的训练时期保持恒定在较小的值以促进更多的时间微调。

6、适应性学习率

可以通过学习算法监视训练数据集上的模型的性能,并且可以响应地调整学习速率。这被称为自适应学习率。也许最简单的实现是,一旦模型的性能稳定,使学习率变小,例如通过将学习速率降低两倍或一个数量级。

A reasonable choice of optimization algorithm is SGD with momentum with a decaying learning rate (popular decay schemes that perform better or worse on different problems include decaying linearly until reaching a fixed minimum learning rate, decaying exponentially, or decreasing the learning rate by a factor of 2-10 each time validation error plateaus).

合理选择优化算法的是具有衰减学习率的动量的SGD(在不同问题上表现更好或更差的流行衰减方案包括线性衰减,直到达到固定的最小学习速率,以指数方式衰减,或者将学习速率降低一个因子 每次2-10次验证错误平稳。

— Page 425, Deep Learning, 2016.

或者,如果对于固定数量的训练时期性能没有改善,则可以再次增加学习速率。自适应学习速率方法通常优于具有错误配置的学习速率的模型。

虽然没有一种方法能够在所有问题上发挥最佳作用,但有三种自适应学习速率方法已经证明在许多类型的神经网络架构和问题类型上都是完善的。

它们是AdaGrad,RMSProp和Adam,并且都维护和调整模型中每个权重的学习率。也许最受欢迎的是Adam,因为它建立在RMSProp的基础上并增加了动力。一个强有力的策略可能是首先使用现代版本的随机梯度下降和自适应学习率(如Adam)评估模型的性能,并将结果用作基线。 然后,如果时间允许,探索是否可以通过精心选择的学习率或更简单的学习率计划来实现改进。

7、扩展阅读

论文

书籍

文章

总结

在本文中,你发现了在训练深度学习神经网络时使用的学习率超参数。 

具体来说,你学到了:

  • 学习率控制神经网络模型学习问题的速度或速度。
  • 如何使用合理的默认值,诊断行为和开发灵敏度分析来配置学习率。
  • 如何通过学习速率计划,动量和自适应学习率进一步提高绩效。
展开阅读全文

神经网络训练技巧:参数初始化

06-07

<p>rn <br />rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn Linux创始人<span>LinusrnTorvalds</span>有一句名言:<span>Talk is cheap, Show me the code.</span>(冗谈不够,放码过来!)。<span></span> rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。<span></span> rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn &nbsp;rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn YOLOv3的实现<span>Darknet</span>是使用<span>C</span>语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。<span></span> rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn &nbsp;rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn 本课程将解析<span>YOLOv3</span>的实现原理和源码,具体内容包括:<span></span> rn</p>rn<p align="left" class="MsoNormal" style="text-indent:-18pt;background:white;">rn <br />rn</p>rn<ul>rn <li>rn &nbsp; &nbsp; &nbsp;<span>YOLO目标检测原理&nbsp;</span> rn </li>rn <li>rn &nbsp; &nbsp; &nbsp;神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算&nbsp;rn </li>rn <li>rn &nbsp; &nbsp; &nbsp;代码阅读工具及方法&nbsp;rn </li>rn <li>rn &nbsp; &nbsp; &nbsp;深度学习计算的利器:BLAS和GEMM&nbsp;rn </li>rn <li>rn &nbsp; &nbsp; &nbsp;GPU的CUDA编程方法及在Darknet的应用&nbsp;rn </li>rn <li>rn &nbsp; &nbsp; &nbsp;YOLOv3的程序流程及各层的源码解析rn </li>rn</ul>rn<!--[if !supportLists]-->rn<p>rn <br />rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn &nbsp;rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn 本课程将提供注释后的<span>Darknet</span>的源码程序文件。<span></span> rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn &nbsp;rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn 除本课程《<span>YOLOv3</span>目标检测:原理与源码解析》外,本人推出了有关<span>YOLOv3</span>目标检测的系列课程,包括:<span></span> rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn <br />rn</p>rn<ul>rn <li>rn &nbsp; 《YOLOv3目标检测实战:训练自己的数据集》rn </li>rn <li>rn &nbsp; 《YOLOv3目标检测实战:交通标志识别》rn </li>rn <li>rn &nbsp; 《YOLOv3目标检测:原理与源码解析》rn </li>rn <li>rn &nbsp; 《YOLOv3目标检测:网络模型改进方法》rn </li>rn</ul>rn<p>rn <br />rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn &nbsp;rn</p>rn<p align="left" class="MsoNormal" style="background:white;">rn 建议先学习课程《<span>YOLOv3</span>目标检测实战:训练自己的数据集》或课程《<span>YOLOv3</span>目标检测实战:交通标志识别》,对<span>YOLOv3</span>的使用方法了解以后再学习本课程。<span></span> rn</p>rn<p>rn <br />rn</p>rn<p>rn <span></span><span></span><span></span><span></span> rn</p>

没有更多推荐了,返回首页