0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Batch的大小、灾难性遗忘将如何影响学习速率

zhKF_jqr_AI 来源:未知 作者:李倩 2018-11-14 08:58 次阅读

编者按:上篇文章中,我们提到了如何高效地训练ResNet。在今天的文章中,我们将对mini-batch的尺寸进行研究,同时要考虑遗忘性问题。

在上一篇文章中,我们得到了一个18层的ResNet网络,测试精度达到94%需要341秒,并且经过进一步调整后,时间缩短至297秒。

目前,训练使用的batch大小是128,batch更大,就支持更高效的计算,所以我们想试试当batch增大到512会发生什么。如果我们想估计之前的设置,就需要保证学习率和其他超参数都经过合适的调整。

具有mini-batch的随机梯度下降几乎是每次只训练一个样本,但不同的是,参数的更新会延迟到batch结束。在低学习率的限制下,你可以认为这种延迟是更高阶的效应,只要梯度只在mini-batch上求和而不是计算平均数,批处理就不会改变任何一阶的顺序。我们还在每个batch之后应用了权重衰减,它会通过batch size中的一个因素增加,从而抵消需要处理的batch数量。如果梯度根据mini-batch被平均,那么学习速率应该增加到可以消除这一影响只留下权重衰减,因为权重衰减的更新对应着学习率的因子。

所以现在我们将batch size定为512开始训练。训练时间为256秒,将学习速率增加10%,在128的batch size下,3/5的训练都能达到94%的测试精确度。如之前所料,在512的batch size下,验证结果有更大的噪声,这是因为批规范化的影响。

现在速度增加的很好,但是结果让我们很吃惊

考虑到要用不同的mini-batch进行训练,我们认为这一过程中我们忽略了两点。首先,我们认为延迟更新,直到这一mini-batch结束都是更高阶的影响,这在较低的学习率中是可行的。目前配置中的快速训练速度很大程度上取决于高学习率的使用。在凸优化的背景下(或仅仅是二次方的梯度下降),我们可以在某一点设置学习速率,达到最大的训练速度,在这一点处,二阶效应开始平衡一阶效应,并且一阶步长产生的益处可以通过曲率效应抵消。假设我们处于这种状态mini-batch导致的延迟更新应该产生相同的曲率惩罚,因为学习率的增加,训练会变得不稳定。简而言之,如果可以忽略高阶效应,就说明训练速度不够快。

另外,我们发现训练步骤只有一个,但事实上,训练是一个很长的运行过程,要改变参数就需要好几个步骤。所以,小的batch和大的batch训练之间的二阶差异可以随着时间积累,导致训练轨迹有很大不同。在之后的文章中我们会重新讨论这一点。

所以,我们该如何在限制训练速度的情况下,还可以提高batch size,同时不用维持曲率效应带来的不稳定性?答案可能是其他因素在限制学习速率,而我们并没有考虑到曲率效应。我们认为这一其他因素就是“灾难性遗忘(Catastrophic Forgetting)”,这也是在较小batch中限制学习率的原因。

首先,我们要对这一概念进行解释。这一术语通常用于,当一个模型在一个任务上训练后,又应用到第二第三个模型上。但是学习之后的任务会导致性能下降,有时这种影响是灾难性的。在我们的案例中,这些任务是来自同一个训练集的不同部分,所以单单在一个epoch中就会发生遗忘现象。学习速率越高,训练中参数所用的越多,在某一点时这会削弱模型吸收信息的能力,早期的batch就会更容易遗忘。

当我们提高batch size时,并没有立即增加模型的稳定性。如果是曲率导致的,稳定性会利可增加。反之,如果是遗忘是主要原因,模型不会受batch size的影响。

之后,我们进行了实验将曲率的效应和遗忘性区分开。曲率效应大多依赖于学习率,而遗忘主要受学习率和数据集大小的共同影响。我们绘制了在batch size为128时,训练和测试损失的折线图,训练所用的是不同大小的子集。

可以看到,首先,训练和测试损失都在学习速率为8的地方突然变得不稳定,这说明曲率影响在这里变得非常重要。相反,其他地方的训练和测试损失都很平稳。

如我们所料,优化学习速率因子(由测试集损失测定)和全部的训练数据集中的优化学习速率因子很接近。对于更小的数据集来说,优化学习速率因子更高。这也符合我们上面的假设:对于一个足够小的数据及来说,遗忘就不再是问题了,学习速率才是问题。对于更大的数据集,在遗忘的影响下,优化点会更低。

同样,在batch size为512的情况下,曲线图也很有趣。由于batch size比上方的大了4倍,曲线出现不稳定情况的速度更快了,当学习速率为2时即出现。我们仍然希望,学习速率因子的优化值和损失与128时的相近,因为遗忘并不对batch size产生影响。以下是得到的结果:

我们设置batch size=128,然后用一定学习速率训练,在前五个epoch中线性增加,之后达到固定的速率并继续训练25个epoch。我们在两个数据集上进行了比较:a)50%的完全训练集没有经过数据增强;b)全部数据都经过增强的数据集。当模型在b上运行时,我们将它停止,重新计算最后几个epoch的损失,这样做的目的是比较模型在最近的数据上得到的损失和此前数据上计算出的损失。

以下是学习速率是原始训练时4倍的结果:

以下是原始训练是现在学习速率4倍的结果:

从第一组图表中,我们发现,与高学习速率相对应,测试损失几乎和模型在a、b上训练时的结果一样。这说明,训练无法从b和a中提取信息。右边的图也证明了这一结果,最近训练的batch表现出比此前的batch更低的损失,但是在半个epoch之内,损失又恢复到模型在从未见过的测试样本上的水平。这说明,模型忘记了在同一个epoch中它此前看到的东西,这也说明这一学习速率限制了它能吸收到的信息。

第二组图表表现出了相反的结果。全部经过数据增强的数据集导致了更低的测试损失,最近的训练batch比此前表现得更好。

结语

上述结果表明,如果我们想训练一个拥有较高学习速率的神经网络,那么就要考虑两点。对于目前的模型和数据集来说,在128的batch size下,我们不会受到遗忘的影响,要么可以找方法降低影响(例如用更大的、伴有稀疏更新的模型或者自然梯度下降),要么可以增大batch size。当batch size达到512时,曲率就开始影响结果,我们关注的重点应该转移到曲率上来。

对于更大的数据集,例如ImageNet-1k,遗忘的影响会更严重。这就能解释为什么在小的batch size、高学习率的训练中加速会失败。

在接下来的文章中,我们会加速批规范化,加入一些正则化,同时替换另一种基准。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据集
    +关注

    关注

    4

    文章

    1205

    浏览量

    24647
  • resnet
    +关注

    关注

    0

    文章

    12

    浏览量

    3156

原文标题:如何训练你的ResNet(二):Batch的大小、灾难性遗忘将如何影响学习速率

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    影响闪存遗忘的主要因素

    正如艾宾浩斯记忆曲线所示:输入的信息经过人脑的注意过程后被学习学习的信息进入人脑短时记忆。遗忘学习后立即开始,若不及时加以复习,短时记忆中的信息就会被
    的头像 发表于 12-08 10:41 742次阅读
    影响闪存<b class='flag-5'>遗忘</b>的主要因素

    *** 灾难性故障,求救,经验分享

    我用***不久,出现 灾难性故障的次数很多(操作失败),有人说是盗版,有人说是误操作,有人说是电脑内存小。请问有没有人出现过同样的问题,又有如何的应对方法,分享一下你的经验,250元的考证,要是出现了这个问题,学子们又得浪费父母的250RMB了,跪求解决!
    发表于 05-03 14:36

    ***灾难性故障

    打开不了,显示出Exception EOleException in moudle ***.exe at0036E780.灾难性故障
    发表于 10-15 12:10

    有没人在使用AD过程中出现灾难性故障啊,怎么解决的?

    有没人在使用AD过程中出现灾难性故障啊,怎么解决的。我最近使用的AD软件总是出现
    发表于 11-20 09:11

    AD画图出现“灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))”

    在AD画原理图中将原理图库中的元件拖入原理图时出现“灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))”
    发表于 01-22 17:11

    PCB灾难性故障

    未知情况,我把所有封装都选好了往PCB导的时候出现的这个问题,不知道为什么
    发表于 03-10 15:31

    DeepMind彻底解决人工智能灾难性遗忘问题

    人工智能系统在设计上就倾向于在每次开始新的学习之前,忘记先前学到的所有东西,这被称为灾难性遗忘
    的头像 发表于 09-03 11:11 3257次阅读

    理解Batch Normalization中Batch所代表具体含义的知识基础

    所谓“Mini-Batch”,是指的从训练数据全集T中随机选择的一个训练数据子集合。假设训练数据集合T包含N个样本,而每个Mini-BatchBatch Size为b,于是整个训练数据可被分成N
    的头像 发表于 10-19 09:19 3.5w次阅读

    在没有灾难性遗忘的情况下,实现深度强化学习的伪排练

    来自中国的研究人员通过提出一种新的动态特征融合(DFF)策略来管理动态特征融合,该策略为不同的图像和位置分配不同的融合权重。DFF包括两个模块,特征提取器和自适应权重融合组件。该模型通过实施权重模型来实现动态特征融合,从而能够针对输入特征图中的每一单个位置推断多级特征上的适当融合权重。
    的头像 发表于 03-05 17:13 3440次阅读
    在没有<b class='flag-5'>灾难性</b><b class='flag-5'>遗忘</b>的情况下,实现深度强化<b class='flag-5'>学习</b>的伪排练

    实现人工智能战略遗忘的三个方法

    神经网络的逻辑与此不同,如果一个神经网络被训练学习英语,那么其会通过调用参数解决英语问题。如果你想教它学习西班牙语,那么神经网络对于西班牙语的认知就会覆盖掉之前为英语学习所储备的知识,有效清空所有内容并从零开始。我们将其称为“
    的头像 发表于 03-05 17:44 3421次阅读

    DeepMind最新研究通过函数正则化解决灾难性遗忘

    近年来,人们对持续学习(也称为终身学习)的兴趣再度兴起,这是指以在线方式从可能与不断增加的任务相关的数据中学习的系统。持续学习系统必须适应所有早期任务的良好表现,而无需对以前的数据进行
    的头像 发表于 06-29 07:53 2937次阅读
    DeepMind最新研究通过函数正则化解决<b class='flag-5'>灾难性</b><b class='flag-5'>遗忘</b>

    batch normalization时的一些缺陷

    导读 batch normalization时的一些缺陷。 Batch Normalization确实是深度学习领域的重大突破之一,也是近年来研究人员讨论的热点之一。Batch
    的头像 发表于 11-03 17:27 3100次阅读
    <b class='flag-5'>batch</b> normalization时的一些缺陷

    增量学习的概念

    在机器学习领域,增量学习致力于解决模型训练的一个普遍缺陷:「灾难性遗忘(catastrophic forgetting)」 ,也就是说,一般的机器
    的头像 发表于 03-05 15:50 3864次阅读

    有关batch size的设置范围

    我们知道,batch size 决定了深度学习训练过程中,完成每个 epoch 所需的时间和每次迭代(iteration)之间梯度的平滑程度。batch size 越大,训练速度则越快,内存占用更大,但收敛变慢。
    的头像 发表于 07-12 10:15 6738次阅读

    基于先验指导的对抗样本初始化方法提升FAT效果

    这种现象最先由Wong等人发现,随后他们又发现使用FGSM生成对抗样本时使用随机初始化可以延缓灾难性遗忘发生的时间,但是随着训练的进行,灾难性遗忘还是无法避免。
    的头像 发表于 12-19 09:42 719次阅读