本文主要是介绍如何快速高效的训练ResNet,各种奇技淫巧(六):权值衰减,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”
作者:David Page
编译:ronghuaiyang
导读
这个系列介绍了如何在CIFAR10上高效的训练ResNet,这是第六篇,给大家讲解权值衰减的相关内容以及训练中的各种动态。
我们了解到更多的关于权值衰减对训练的影响,并发现了一个与LARS之间意想不到的关系。
其中我们更深入地研究了学习率的动态
读者可能在这一点上感到有点不安。上次我们给出了神经网络训练超参数空间中三个关于平坦方向的实验结果和理论解释,但这三个解释并不完全一致……
第一个解释了当λN固定时,训练轨迹与学习率λ和batch size N的选择有弱依赖。类似的观点应用于动量ρ当λ/(1−ρ)是固定的。两者都依赖于SGD + momentum权值更新方程中的一阶项的简单匹配。
第三个参数,对于权值衰减α,是相当不同的,权值衰减明显不是一阶的。我们认为,对于具有尺度对称性的权重,相对于权重范数的梯度消失,二阶效应,在动态中处于主导。更糟糕的是,我们认为,虽然权重范数与网络的正向计算无关,但它们决定了其他参数的有效学习率。
那么一阶参数呢?当我们适当地考虑权值范数的动态时,它们站得住脚吗?实验结果表明,该结论至少是正确的。
我们今天的主要任务是通过对权值范数的动态的更仔细的研究来支持这两个一阶论点。在这个过程中,我们会发现与最近在ImageNet上的大batch训练中引入的分层自适应速率缩放技术有着密切的关系。我们研究了这种关系的含义,并提出它可能是在不同架构的最优学习率显著稳定的背后的原因。
今天的帖子将比之前的帖子更理论化。它包含方程,没有多少实用的建议。尽管如此,我还是希望它能引起一些兴趣。数学都是高中的内容。从积极的方面来说,它使我们在讨论中比以往更加精确,而且就这一点而言,也比文献中各种各样的讨论更为精确。
与LARS的联系主要是出于好奇,但如果付出更多的努力,它“应该”会导致实际训练的改进。与其等待这些结果,我决定按原样发布这篇文章。这份工作早该完成了,因为今年夏天在Myrtle进行的Thomas Read实习非常富有成效。
让我们从更详细地研究权值衰减时的权值范数的动态开始。在开始讨论方程之前,这里是对上节课的要点的总结。
对于具有尺度对称性的权值——由于后续的batch norm,包括我们网络的所有卷积层——梯度与权值正交。因此,梯度更新导致权值范数增加,而权值衰减导致权值减小。
对于小的权重,增长项占主导地位,反之亦然。这导致了一种稳定的控制机制,即权值范数趋近于一个固定点(对于固定学习率和其他超参数),使得权值衰减的一阶收缩效应平衡了正交梯度更新的二阶增长。
也许一些图片会使这一点更加具体。首先,我们绘制每个卷积层的平方权值范数|w|2在训练的每一步中在权值衰减下收缩的量:
接下来我们画出|w|2由于梯度更新而增长的量。这看起来更像是第一个图的嘈杂版本——如果它们处于平衡状态,就应该是这样:
下面是两个图的叠加:
我们也画出|w|2的演化过程。大多数层的权值范数最初会增长,而梯度更新占主导地位,一旦达到平衡,则会逐渐变平或衰减:
画出的图进行了归一化,这样每一层的初始化|w|2=1。
我们把它代入方程,从没有momentum的SGD开始。在上次SGD更新的表示法中,SGD更新分为两部分,一个权值衰减项:
然后是梯度更新:
对于权值的范数,我们有:
并且
我们使用权值比例对称这一事实,w⋅g = 0。
我们预计训练将达到一种平衡,第一次更新的收缩效果将与第二次更新的增长相平衡,从而:
上次,我们回顾了虽然在w缩放的时候,前向计算是不变的,但是SGD更新不是不变的。实际上,如果我们将w缩放一个因子r,那么梯度g的尺度将会是r-1,而不是不变所需的r。因此,权值归一化很重要,并决定了剩余权值的有效步长。
解决这个问题的一种方法是使用不同的优化器,比如LARS。在缺乏动量的情况下,LARS更新为:
通过依赖于batch的因子|w|/|g|对梯度进行缩放,实现尺度的不变性。现在方程(3)告诉我们(对于具有尺度不变性的权值)普通的带权值衰减的SGD会驱动这个依赖于batch的因子变为一个固定的值。
如果这个比例真的是由每个batch的平衡值给出的,那么SGD和LARS的动态将等于:
在下面的图中,我们比较了在没有动量的SGD条件下进行训练时方程右边的两个量。圆点表示λ|g|/|w|的值,黑线表示√2λα:
我们看到,在训练的最后,等式不成立的时候,会有一点噪声和小的偏差,对于SGD和LARS,使用一个非常高效的学习率√(2λα)来进行更新是非常相似的。这有点出乎意料,并回避了LARS在这种情况下正在做什么——也许只是提供一个尺度不变的方法来裁剪有噪声的梯度?
这个线性扩展法则,也就是保持λN固定不变,但是学习率和batch size变化的法则到哪去了?高效的学习率参数在LARS中的动态是√(2λα)。
如果我们以因子n缩放batch size,同时λ以因子√n缩放。这看起来不再是线性的了!
事实上,当batch中的梯度由噪声主导时,这正是我们所需要的——因此,不同时间步长的梯度平均彼此正交。在这种情况下,|g|缩放1/√n(来自n个正交贡献的平均)。将两个√n因子组合起来,这样的话,一次大的batch的更新就和n个小batch的更新是一样的。
注意,上面参数中的两个√n因子来自非常不同的来源。首先,由于模型的“精确”对称,可以追溯到梯度和权重之间的正交性。第二种是后续的batch的梯度是由于SGD噪声而相互正交的结果,需要进行实证验证。
这里有个图,是梯度gt和先前的指数移动平均梯度vt−1之间的图。大多数训练的相关系数都接近于零,证实了附近的梯度之间的平均正交性是一个合理的近似。
到目前为止,我们只处理了SGD不带momentum的情况。让我们尽可能简短地总结一下,而不是用另一个冗长的论述来拖延读者。同样,我们需要假设不同batch的梯度的平均是正交的。
SGD + momentum对单个梯度gt在多个时间步上应用更新(使用ρ的指数进行加权)。如果我们能够恢复这些更新然后立即应用它们,然后求和几何级数的效果就等于是简单的把学习率λ替换为λ /(1−ρ)。然后我们可以用这个替换重复上面的平衡论证(记住权值衰减项是用同样的方法求和的),并发现:
这个论点的难点如下。考虑普通SGD+momentum的动态。在计算梯度g并应用梯度的延时,后续从其他batch来的梯度添加到w上,可能打破g和w之间的正交性,方程(2′)不再成立。梯度的互正交性发挥了作用,LARS在动量存在时的更新为:
我们刚刚看到,在batch之间的梯度尺度不变性和正交性假设下,SGD+momentum的动态驱动|w|/|g|达到(7)给出的平衡值。我们可以将一般SGD+momentum的动态与LARS联系起来:
这是右边两个量在训练中的情况,ρ= 0.9:
因为我们需要对batch之间的正交梯度进行近似,所以这里的差异比以前稍微大一些。这个假设在纯SGD中还没有使用。尽管如此,SGD+momentum的step和使用学习率√2(λα(1−ρ))是非常相似的,主要区别是后一种情况下的一些梯度剪裁。
我们将所有与单个梯度对应的权重更新组合在一起,并依赖于batch之间梯度的正交性来证明这并不影响权值的范数的动态。上次我们应用类似的论点,是依靠低曲率的损失,说的是训练动态主要取决于λ/(1−ρ)而不是单独的参数。如果我们把这两个参数结合在起来,我们会发现单个梯度g在尺度不变形式下的有效贡献近似为:
通过对权值动态的适当处理,验证了上次的结果。
那么,经过这么多的努力,我们学到了什么呢?其中一个教训是,人们应该警惕听起来可信的理论!如果我们有一个对称性的模型和一个不具有不变性的优化器,那么任何忽略动态的的群体行为都应该非常谨慎地对待。
也许更有趣的是,与LARS的联系打开了许多研究问题和学习有用东西的可能性!LARS最近成功的将ImageNet训练扩展到非常大的batch size。考虑到LARS与普通SGD之间存在着密切的权值衰减的关系,了解是什么导致LARS性能优越将是非常有趣的。
只是大的梯度被裁剪掉了吗?或者在训练初期的关键阶段,SGD的权值范数还没有达到平衡?无论哪种方法,方法本身都建议将这两种技术更紧密地结合在一起,并隔离重要的差异。如果早期训练在SGD中存在问题,可以调整权值初始化量表,以消除最初的不平衡阶段。如果梯度噪声是问题的所在,那么对选定的层使用较低的学习率和/或较高的动量可能会有所改善,或者只是平滑批次之间的梯度范数。
从这些方面的初步调查中,一个尚未解决的问题是找到一个设置,在这个设置中LARS的训练可以明显地改进当前的网络和CIFAR10数据集。来自ImageNet的结果表明,这里应该有一些东西可以找到。
另一个有趣的可能性来自于LARS的连接,它可以解释架构之间最佳学习率的显著稳定性。虽然我们当时没有对此进行评论,但是在较早的文章中,我们在架构搜索中依赖于此属性。在这里,我们比较了不同架构在固定学习速率计划下的训练精度。有人可能会问,这样的方法是否会选择最好的体系结构,或者更确切地说,选择最优学习率与实验中使用的值最接近的体系结构。
事实上,如果我们把在一系列不同架构上的学习率和测试精度画出来,我们可以看到,根据性能选择λ= 0.4是完全合理的,所有不同的体系结构有着相似的最佳学习率。
注意,上面图中的结果平均为三次运行,并经过平滑处理以突出趋势。原始结果如下所示,并说明了为什么我们如此热衷于避免超参数调优!
考虑到我们使用的是普通的SGD,而且所有层的学习速度相同,所以架构间最优学习速度的稳定性有点令人惊讶。有人可能会认为,具有不同大小、初始化和网络位置的层可能需要不同的学习率,而由于不同的层组成,架构之间的最佳学习率可能会有显著差异。
一种可能的解释是,具有权值衰减的类LARS动态为不同的层提供了一种有用的自适应缩放类型,以便每个层在尺度不变的单位中接收相同的步长,这使得手动调整每层的学习速率变得不必要。人们可以通过人为地为每一层分别优化学习率,并观察最优值在多大程度上重合,来进行实验探索。
在第7部分中,我们研究了batch norm在防止训练过程中的协变量漂移方面的另一个作用。
—END—
英文原文:https://myrtle.ai/how-to-train-your-resnet-6-weight-decay/
请长按或扫描二维码关注本公众号
喜欢的话,请给我个好看吧!
这篇关于如何快速高效的训练ResNet,各种奇技淫巧(六):权值衰减的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!