影响模型收敛最重要的两个参数Batchsize和learn_rate

深度学习训练中BatchSize、学习率(及学习率下降策略的影响)
从优化本身来看它们是影响模型性能收敛最重要的参数。
学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也可影响。

文章目录

1 Batchsize对训练结果的影响(相同epoch轮数)

这里用GHIM-20,20类每类500张图,共10000张(train9000)(val1000),
共训练100个epoch(相当于对9000张图遍历了100遍,其中每迭代10次打印acc(遍历val_list共1000张)
在这里插入图片描述
这里用的Alexnet(分别设置了train_batchsize=32,和train_batchsize=64)

结果对比

1. Alexnet 2080s train_batchsize=32,val_batchsize=64。lr=0.01 GHIMyousan

  1. 2080s 训练s 4.68h , 近28k次迭代==100epoch x 9000/32, 每一个train-batch记录一次loss 深蓝色
  2. val-batch记录一次 val-loss浅蓝色
    问题:loss算收敛了吗
    acc-loss一直大于train-loss看出是过拟合问题
    查看了一些解答
    1.理论上不收敛,也就是说你设计的网络本身就存在问题,这也是首先应该考虑的因素: 梯度是否存在,即反向传播有没有断裂;
    2.理论上是收敛的:
    1. 学习率设置不合理(大多数情况),学习率设置太大,会造成不收敛,如果太小,会造成收敛速度非常慢;

    2. Batchsize太大,陷入到局部最优,无法达到全局最优,故而无法继续收敛;

    3. 网络容量,浅层网络完成复杂的任务loss不下降是肯定的,网络设计太简单,一般情况下,网络的层数和节点数量越大,拟合能力就越强,如果层数和节点不够多,无法拟合复杂的情况,也会造成不收敛。
      学习率step下降的基础0.01不算大啊,batchsize=32也不大,所以算是收敛了??(毕竟loss=0.0008也不算大)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      acc曲线如下图:看图迭代到15k次基本就拟合好了(也就是epoch=15000*32/9000=53轮),有趣的是此时正好对应学习率从0.01下降到0.001
      问题:为什么 val的acc84%上不去
      训练集表现好,测试集差为过拟合,说明学习的特征还是不够泛化,
      那是哪个层学习的特征不够好呢
      过拟合解决
      1.原因:

      • 出现过拟合的原因训练集的数量级和模型的复杂度不匹配,
      • 训练集的数量级要小于模型的复杂度;
      • 训练集和测试集特征分布不一致;
      • 样本里的噪音数据…

      2.解决方案
      (simpler model structure、 data augmentation、 regularization、 dropout、early stopping、ensemble、重新清洗数据)

2. Alexnet 2080 train_batchsize=64,val_batchsize=64,lr=0.01 GHIM-me 14k itera

2080 train_batchsize=64,迭代4.5k基本拟合好了(4500*64/9000=32轮),且train和val都比较好。而且拟合都好
在这里插入图片描述
在这里插入图片描述
如下图loss

3. Alexnet 2080s train_batchsize=64,val_batchsize=64,lr=0.02 GHIM-yousan

2080s, 没收敛还是过拟合???
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 Squeezenet 2080s train_bs=64 val-bs=64 lr 0.01 GHIMyousan

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4-重复性实验 Squeezenet 2080s train_bs=64 val-bs=64 lr 0.01 GHIM-me,结果还是过拟合 87%acc

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 mobilenetv1 2080s t-bs:64,v-bs:64 lr:0.01,GHIM-me过拟合

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5 mobilenetv2 2080s t-bs:64,v-bs:64 lr:0.01,GHIM-me过拟合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 mobilenetv1 2080 t-bs:64 v-bs:64 lr : 0.01 GHIM-me 拟合好的

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

6 mobilenetv2 2080 t-bs:64 v-bs:64 lr:0.01 GHIM-me 拟合好的

在这里插入图片描述
在这里插入图片描述
lr=0.01

10 前人谈batchsize

1 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

在这里插入图片描述
在这里插入图片描述

  • 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。倒数第三行
  • 随着 Batch_Size 增大,处理相同数据量的速度越快。
  • 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  • 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

2 大的batchsize性能下降是因为训练时间不够长,本质上并不是batchsize的问题,在同样的epochs下的参数更新变少了,因此需要更长的迭代次数。

在这里插入图片描述
batchsize=8k之后错误率上升

3 大的batchsize收敛到sharp minimum,而小的batchsize收敛到flat minimum,后者具有更好的泛化能力。

在这里插入图片描述
两者的区别就在于变化的趋势,一个快一个慢,如上图,造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum。

4 Batchsize增加,学习率应随者增加

通常当我们增加batchsize为原来的N倍时,要保证经过同样的样本后更新的权重相等,按照线性缩放规则,学习率应该增加为原来的N倍[5]。但是如果要保证权重的方差不变,则学习率应该增加为原来的sqrt(N)倍[7],目前这两种策略都被研究过,使用前者的明显居多。

5 提升Batchsize大小等同 添加学习率衰减

在这里插入图片描述
这实际上从SGD的权重更新式子就可以看出来两者确实是等价的,文中通过充分的实验验证了这一点

结论

1 如果增加了学习率,那么batch size最好也跟着增加,这样收敛更稳定。
2尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力。如果真的要衰减,可以尝试其他办法,比如增加batch size,学习率对模型的收敛影响真的很大,慎重调整。
3 用bn的坏处就是不能用太小的batch size,要不然mean和variance就偏了。所以现在一般是显存能放多少就放多少。而且实际调起模型来,真的是数据分布和预处理更为重要,数据不行的话 玩再多花招也没用

参考阅读
https://zhuanlan.zhihu.com/p/29247151
https://zhuanlan.zhihu.com/p/64864995

  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在机器学习和深度学习中,"batch_size"(批大小)是一个关键概念,特别是在使用梯度下降法等优化算法进行模型训练时。它涉及到两个阶段:模型初始化阶段和训练阶段。 1. **模型初始化阶段**: - **批大小 (batch_size):** 在模型初始化阶段,batch_size通常不涉及具体的训练过程。这个值是用来配置模型如何接收和处理数据的。在模型构建完成之后,你可能会在预处理数据集时确定一个批大小,比如一次性加载和处理一批数据样本。批大小会影响模型对输入数据的处理效率,大批量通常能加速模型训练,因为减少了内存中的计算次数。但过大的批大小可能导致更新不准确。 2. **训练阶段**: - **训练 batch_size:** 当模型进入训练阶段时,batch_size是指每次迭代(称为一个“epoch”)中用于计算梯度并更新权重的样本数量。每个小批量的数据会被用来计算损失并更新模型参数。较小的batch_size有助于更好地捕捉数据中的随机变化,从而提高模型的泛化能力;而较大的batch_size则有利于模型更快地收敛,但可能会牺牲一些局部最小点的探索。 - **选择 batch_size 的考虑因素:** - 计算资源:更大的 batch_size 需要更多的内存和计算能力。 - 平稳训练:过小的 batch_size 可能会导致训练波动较大,过大可能使训练变得平稳但不灵活。 - 训练速度与精度平衡:找到一个合适的 batch_size 可以兼顾训练速度模型性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值