首页 > 其他分享 >2.2类神经网路训练不起来怎么办 (二): 批次 (batch) 与动量 (momentum)

2.2类神经网路训练不起来怎么办 (二): 批次 (batch) 与动量 (momentum)

时间:2023-06-07 12:56:16浏览次数:32  
标签:运算 批次 batch 更新 epoch 资料 2.2 momentum

1. Batch(批次)

对抗临界点的两个方法就是batch 和 momentum

  将一笔大型资料分若干批次计算 loss 和梯度,从而更新参数.每看完一个epoch就把这笔大型资料打乱(shuffle),然后重新分批次.这样能保证每个epoch中的 batch 资料不同,避免偶然性.

epoch是指将数据集分成batch后,将所有batch训练一遍,就是一个epoch
image

  那么,为什么使用\(batch\)呢?

1.1 大小批次的运算时间对比

  下图是两种\(batch\)的情况,第一种是\(full\) \(batch\),所有数据集都归于一个\(Batch\).第二种是极端的反面,一次只看一笔训练资料.
image
  设大批次含有20笔资料,小批次含有1笔资料,那么大批次就是看完20笔资料后再更新参数,而小批次则是看1笔资料就更新一次参数,总共更新20次.我们可以看到大批次的单次运算时间长但效果好,小批次的单次运算时间短但效果差,需要运算多次效果才好.可以把大批次想象成迫击炮,小批次想象成加特林.
  但是大批次时间长是没有考虑使用\(gpu\)(并行运算)的结果.如果采用GPU就可以做平行运算,从下图运算结果可以看出来:含有10笔资料和含有1000笔资料的批次,每次更新的运算时间差不多,但是含有的资料再增加,超过\(gpu\)的承受能力,运算时间就会急剧增加了.
image
image
  刚刚讲的运算时间是针对单次更新.而在1 个 epoch 中,小批次反而耗时更长,大批次耗时更短.原因是:同样是60000笔资料,小批次要更新60000次,而大批次只要更新60次,一次更新花费的时间又是差不多的,最后叠加起来肯定是大批次耗时更少.
image
  总结:没有平行运算时,单次更新大批次耗时更长;有平行运算时,单次更新大小批次耗时差不多,而 1 个 epoch中大批次耗时更短.
image

1.2 大小批次的性能对比

  小批次有更好的性能.由图可知同一个模型,同一个网络,\(training\)误差随着\(batch\) \(size\)的增大而增大,\(testing\)的误差也是.如果是 model bias 的问题,那么在 size 小的时候也会表现差,而不会等到 size 变大才差.同样也不是过拟合问题,因为在这张图上并没有改变模型,按道理模型能表示的function space是一样的.所以这是Optimization issue(优化问题)导致大批次性能差.
image

标签:运算,批次,batch,更新,epoch,资料,2.2,momentum
From: https://www.cnblogs.com/newblg/p/17463001.html

相关文章

  • 最完美WIN11_Pro_22H2.22631.1830软件选装纯净版VIP41.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_PRO_22H2.22631.1830。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.1830。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • mybatis-plus 批量插入方法saveBatch 踩坑
    1、问题描述由于我在数据库的一张表设置了两个主键,所以创建的实体我想都加上@TableId注解但是这样在mybatis-plus中一个实体只能有一个@TableId注解标识的主键2、然后我在批量插入时就遇到了问题,我使用的saveBatch方法进行的批量插入,在插入时实体的两个id我都设置值了,但是......
  • 2015.4.22.20.46_ecilipse_8.30_Eclipse 10个最有用的快捷键_0.01
    Eclipse中10个最有用的快捷键组合一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。1.ctrl+shift+r:打开资源这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的......
  • 2014.4.19.12.27_switch_8.28_java switch语句使用注意的四大细节_0.01
    javaswitch语句使用注意的四大细节很多朋友在使用javaswitch语句时,可能没有注意到一些细节,本文将详细介绍使用javaswitch语句四大要点,需要的朋友可以参考下。switch语句的格式如下:(它的功能是选出一段代码执行)switch(整数选择因子){case整数值1:语句;break;case整数值......
  • hbase-2.2.3集群安装1
    安装程序,解压拷贝先设定hbase安装目录/home/opt/hbase-2.2.3tar-xvzfhbase-2.2.3.tar.gzmvhbase-2.3.3/home/opt配置环境变量vim/etc/profile添加如下exportHBASE_HOME=/home/opt/hbase-2.2.3exportPATH=$PATH:$HBASE_HOME/binsource/etc/profile 创建hbase的pids......
  • HBase-2.2.3集群安装
     /不需要手动创建,系统程序会自动创建hdfsdfs-mkdir-p/hbasehdfsdfs-chmod-R777/hbasehdfs://hadoop34:9000/hbase先设定hbase安装目录/home/opt/hbase-2.2.3tar-xvzfhbase-2.2.3.tar.gzmvhbase-2.2.3/home/opt配置环境变量vim/etc/profile添加如下ex......
  • postgresql9.2.24安装
    1、yum安装 yum install -y postgresql-server postgresql-contrib 2、初始化 postgresql-setup initdb 3、挂载数据盘 ln -s /data/pgsql /var/lib/pgsqlchown -R postgres:postgres pgsql 4、修改配置文件pg_hba.conf localall......
  • 2.2. 继承与多态
    继承和多态是面向对象编程的两个重要概念,它们使得我们可以创建更加通用、可扩展的代码。2.2.1.继承继承是一种创建新类的方式,新类(子类)从现有类(父类)继承属性和方法。子类可以重写或扩展父类的功能。要创建一个子类,可以使用 extends 关键字:classSubClassNameextendsParent......
  • Windows 上安装和启动 Nacos 2.2.2 最新版本
    (目录)前言本文旨在为您详细介绍如何安装和启动Nacos2.2.2的最新版本,以及为youlai-mall开源商城版本的升级做好准备工作。版本声明名称版本操作系统Windows11Nacos2.2.2本地启动1.下载Nacos下载nacos-server-2.2.2.zip(⬇️更多版本下载),将文......
  • 更新安装glibc-2.28 遇到的问题
    node--versionnode:/lib64/libstdc++.so.6:version`CXXABI_1.3.9'notfound(requiredbynode)node:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.20'notfound(requiredbynode)node:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.21'notfound......