深度学习中batch_size

Batch size调整和epoch/iteration的关系

训练数据集总共有1000个样本。若batch_size=10,那么训练完全体样本集需要100次迭代,1次epoch。
训练样本10000条,batchsize设置为20,将所有的训练样本在同一个模型中训练5遍,则epoch=5,batchsize=20, iteration=10000/20=500(即迭代次数表示有多个个batch会过模型)

分布式训练时的batch_size设置:需要将batch_size/num_process。divide the batch size by the number of replicas in order to maintain the overall batch size of 需要的值.[PyTorch:模型训练-分布式训练]

Batch size设置经验

1 一定条件下,batchsize越大训练效果越好。但是batchsize越大,内存gpu消耗越大。梯度累加则实现了batchsize的变相扩大,如果accumulation_steps为8,则batchsize ‘变相’ 扩大了8倍,是解决显存受限的一个不错的trick。

[使用梯度累加的batch训练函数]

2 经验法则是,如果mini-batch size加倍,那么学习率就加倍。
在这里插入图片描述

[神经网络中 warmup 策略为什么有效;有什么理论解释么? - 知乎]

在前面“如果mini-batch size加倍,那么学习率就加倍"中,我们的假设在什么时候可能不成立呢?两种情况:

1)在训练的开始阶段,模型权重迅速改变
2)mini-batch size较小,样本方差较大

第一种情况很好理解,可以认为,刚开始模型对数据的“分布”理解为零,或者是说“均匀分布”(当然这取决于你的初始化);在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。当训练了一段时间(比如两轮、三轮)后,模型已经对每个数据点看过几遍了,或者说对当前的batch而言有了一些正确的先验,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。这个过程就可以看做是warmup。那么为什么之后还要decay呢?当模型训到一定阶段后(比如十个epoch),模型的分布就已经比较固定了,或者说能学到的新东西就比较少了。如果还沿用较大的学习率,就会破坏这种稳定性,用我们通常的话说,就是已经接近loss的local optimal了,为了靠近这个point,我们就要慢慢来。

第二种情况其实和第一种情况是紧密联系的。在训练的过程中,如果有mini-batch内的数据分布方差特别大,这就会导致模型学习剧烈波动,使其学得的权重很不稳定,这在训练初期最为明显,最后期较为缓解(所以我们要对数据进行scale也是这个道理)。

说明,在上面两种情况下,我们并不能单纯地成倍增长lr η̂ =kη。要么改变学习率增长方法,要么设法解决上面两个问题。

[神经网络中 warmup 策略为什么有效;有什么理论解释么?]

所以就有了下面的warmup策略和学习率衰减方法:

学习率 warm-up 策略

训练神经网络时,在初始使用较大学习率而后期切换为较小学习率是一种广为使用的做法。而 warmup 策略则与上述 scheme 有些矛盾,warmup 需要在训练最初使用较小的学习率来启动,并很快切换到大学习率而后进行常见的 decay,那么最开始的这一步 warmup 为什么有效呢?

warmup_lr 的初始值是跟训练预料的大小成反比的,也就是说训练预料越大,那么warmup_lr 初值越小,随后增长到我们预设的超参 initial_learning_rate相同的量级,再接下来又通过 decay_rates 逐步下降。

这样做的原因前面已经说明了,还有什么好处?

1)这样可以使得学习率适应不同的训练集合size实验的时候经常需要先使用小的数据集训练验证模型,然后换大的数据集做生成环境模型训练。

2)即使不幸学习率设置得很大,那么也能通过warmup机制看到合适的学习率区间(即训练误差先降后升的关键位置附近),以便后续验证。

原文:https://blog.csdn.net/pipisorry/article/details/109192443

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue使用Tinymce 编辑器

目录 一、下载并重新组织tinymce结构二、使用三、遇到的坑 一、下载并重新组织tinymce结构 下载 npm install tinymce^7 or yarn add tinymce^7重构目录 在node_moudles里找到tinymce文件夹,把里面文件拷贝一份放到public下,如下: -- pub…

【每日学点鸿蒙知识】蓝牙Key、页面元素层级工具、私仓搭建、锁屏显示横幅、app安装到真机

1、HarmonyOS 蓝牙key模块? 蓝牙key模块setCharacteristicChangeNotification后无法在BLECharacteristicChange订阅事件中监听到特征值变化 步骤: 调用setCharacteristicChangeNotification接口,使characteristic的notify属性为true调用wri…

如何记录日常笔记

如何使用Obsidian来记录日常的笔记吗?比如会议记录、读书笔记。 我认为,首先需要做好的就是建立一个单独的分类,比如设置会议记录的文件夹、读书笔记的文件夹,这样各个笔记相互不干扰。 而做日常记录,和我们进行卡片…

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串?2、两个引号之间加上空格 好的,我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别,以及它们在 SQL 查询中的作用: 1. we_chat_union_id IS NOT NULL 含…

NS3学习——tcpVegas算法代码详解(2)

NS3学习——tcpVegas算法代码详解(1)-CSDN博客 目录 4.TcpVegas类中成员函数 (5) CongestionStateSet函数 (6) IncreaseWindow函数 1.检查是否启用 Vgas 2.判断是否完成了一个“Vegas 周期” 2.1--if:判断RTT样本数量是否足够 2.2--e…

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 (1)资源介绍 🔅原理图 🔅STS30-DIS-B 🌙引脚分配 🌙通信 🌙时钟拉伸(Clock Stretching) 🌙单次触发模式 🌙温度数据转…

项目2路由交换

背景 某学校为满足日常教学生活需求,推动数字校园的建设,学校有办公楼和学生宿舍楼和服务器集群三块区域,请合理规划IP地址和VLAN,实现企业内部能够互联互通现要求外网能通过公网地址访问服务器集群,学生和老师能正常…

计算机网络概要与习题

第1章 概论 1、计算机网络 2、互联网 3、计算机网络体系结构 分层模型 OSI/RM 7层模型 TCP/IP 5层模型 协议、PDU、SDU、SAP等术语 数据封装(计算) 第2章 数据通信基础 1、数据通信系统组成 2、主要性能指标 数据传输速率 码元速率 时延 …

使用VsCode编译调试Neo4j源码

文章目录 使用VsCode编译调试Neo4j源码1 简介2 步骤1 下载源码2 依赖3 构建Neo4j4 运行5 安装VsCode扩展6 **调试** 使用VsCode编译调试Neo4j源码 1 简介 Neo4j作为领先的图数据库,在存储、查询上都非常值得分析学习。通过调试、日志等方法跟踪代码工作流有助于理…

HTML-CSS(day01)

W3C标准: W3C( World Wide Web Consortium,万维网联盟) W3C是万维网联盟,这个组成是用来定义标准的。他们规定了一个网页是由三部分组成,分别是: 三个组成部分:(1&…

Linux文件的压缩和解压

【图书推荐】《Ubuntu Linux系统管理与运维实战》_学ubuntu哪本书好-CSDN博客 【图书介绍】】几本Linux系统管理与运维图书_朱文伟 linux驱动-CSDN博客 《Ubuntu Linux系统管理与运维实战(Linux技术丛书)》(张春晓,肖志健)【摘要 书评 试读…

基于springboot的海洋知识服务平台的设计与实现

基于springboot的海洋知识服务平台的设计与实现 写在前面 需要源码加lzlv58787 开发内容 编程语言:Java / Vue2 框架: SpringBoot Shiro Mybatis-plus 项目结构 后端管理系统前台Web 后端管理系统 前台Web

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 王志豪,厦门大学博士生 刘诗雨,厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型(LLMs&#xff…

【LeetCode】394、字符串解码

【LeetCode】394、字符串解码 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 // go func decodeString(s string) string {// 如果遇到 嵌套括号的情况, 则递归// 可能连续多位数字, 则 通过 cur cur * 10 …

iOS开发代码块-OC版

iOS开发代码块-OC版 资源分享资源使用详情Xcode自带代码块自定义代码块 资源分享 自提: 通过网盘分享的文件:CodeSnippets 2.zip 链接: https://pan.baidu.com/s/1Yh8q9PbyeNpuYpasG4IiVg?pwddn1i 提取码: dn1i Xcode中的代码片段默认放在下面的目录中…

微信小程序的轮播图学习报告

微信小程序轮播图学习报告 好久都没分享新内容了,实在惭愧惭愧。今天给大家做一个小程序轮播图的学习报告。 先给大家看一下我的项目状态: 很空昂!像一个正在修行的老道,空的什么也没有。 但是我写了 4 个 view 容器,…

airflow docker 安装

mkdir -p /root/airflow cd /root/airflow && mkdir -p ./dags ./logs ./plugins ./configcd /root/airflow/ wget https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml nano docker-compose.yamlAIRFLOW__CORE__LOAD_EXAMPLES: false #初始化…

Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)

1、概述 在传统的单体应用中,事务管理相对简单,通常使用数据库的本地事务(如MySQL的BEGIN和COMMIT)来保证数据的一致性。然而,在微服务架构中,由于每个服务都有自己的数据库,跨服务的事务管理变…

Linux x86_64离线安装Nginx全教程(含安装包)

最近在整理麒麟V10操作系统的常用中间件的安装今天也把之前的nginx一起整理一下,作为后续的笔记记录 1. 资源 百度网盘下载相关安装包包含信息如下截图 通过网盘分享的文件:nginx链接: https://pan.baidu.com/s/1r6SCnogqbhm-JOTPIjc6xA?pwdjuen 提取…

Python酷库之旅-第三方库Pandas(269)

目录 一、用法精讲 1276、pandas.tseries.offsets.BQuarterEnd.is_quarter_end方法 1276-1、语法 1276-2、参数 1276-3、功能 1276-4、返回值 1276-5、说明 1276-6、用法 1276-6-1、数据准备 1276-6-2、代码示例 1276-6-3、结果输出 1277、pandas.tseries.offsets.…