深度学习模型训练的tricks总结

news2024/11/17 9:59:47

学习率角度

学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。

比如下图利用fastai中的lr_find()函数寻找合适的学习率,根据下方的学习率-损失曲线得到此时合适的学习率为1e-2。

推荐一篇fastai首席设计师「Sylvain Gugger」的一篇博客:How Do You Find A Good Learning Rate[1], 以及相关的论文Cyclical Learning Rates for Training Neural Networks[2]。

1、Warm up

深度学习训练策略--学习率预热Warmup_ytusdc的博客-CSDN博客_warmup_steps

        训练初始阶段:由于刚开始训练时模型的权重(weights)是随机初始化的,此时选择一个较大的学习率,可能会带来模型的不稳定。学习率预热就是在刚开始训练的时候先使用一个较小的学习率,训练一些epoches或iterations,等模型稳定时再修改为预先设置的学习率进行训练。
        上述的方法是constant warmup,18年Facebook又针对上面的warmup进行了改进,因为从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。提出了gradual warmup来解决这个问题,即从最开始的小学习率开始,每个iteration增大一点,直到最初设置的比较大的学习率。

2、Linear scaling learning rate —— learning-rate与batch-size的关系

        实验证明,大的batch size在相同的epoch下准确率会更小,使用warm up可以在一定程度上解决这个问题,而Linear scaling learning rate也是一种有效的方法。

        一般来说,越大的batch-size使用越大的学习率。
        在mini-batch SGD训练时,梯度下降的值是随机的,因为每一个batch的数据是随机选择的。增大batch size不会改变梯度的期望,但是会降低它的方差。也就是说,大batch size会降低梯度中的噪声,所以我们可以增大学习率来加快收敛。
        具体做法很简单,比如ResNet原论文中,batch size为256时选择的学习率是0.1,当我们把batch size变为一个较大的数b时,学习率应该变为 0.1 × b/256。即线性的根据batch大小设置学习率,从而达到更好的学习效果。
        简单的说,大的batch size计算得到的梯度噪声更小,所以可以使用更大的学习率来加大收敛。那么这里就有一个问题了,为什么小的batch size一般收敛的更快呢?这是因为小的batch size尽管方向不一定准确,但是更新次数多,最终收敛速度会更快。而大的batch size虽然噪声小,方向也更准确,但是由于学习率效果不会很好,这样线性的增加学习率其实也是相当于用单次更新量变大弥补更新次数小的事实。

        总结,越大的batch-size意味着我们学习的时候,收敛方向的confidence越大,我们前进的方向更加坚定,而小的batch-size则显得比较杂乱,毫无规律性,因为相比批次大的时候,批次小的情况下无法照顾到更多的情况,所以需要小的学习率来保证不至于出错。

可以看下图损失Loss与学习率Lr的关系:

在显存足够的条件下,最好采用较大的batch-size进行训练,找到合适的学习率后,可以加快收敛速度。另外,较大的batch-size可以避免batch normalization出现的一些小问题,

 3、学习率衰减策略

在warmup之后的训练过程中,学习率不断衰减是一个提高精度的好方法。因此可以选择合适的学习率衰减策略:

学习率衰减策略 - 知乎

还要注意一点有些参数有更快、或更慢的学习速率,因此我们可以针对模型中的不同参数组,设定不同的学习率。在上述链接中也有介绍

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始配置vim(30)——DAP的其他配置

很抱歉这么久才来更新这一系列,主要是来新公司还在试用期,我希望在试用期干出点事来,所以摸鱼的时间就少了。加上前面自己阳了休息了一段时间。在想起来更新就过去一个多月了。废话不多说了,让我们开始进入正题。 在前一章&#…

JUC 并发进阶学习(一)

该学习笔记是本人依据相关的学习视频整体汇总,相关的视频学习可以自己去搜看看。 【狂神说Java】JUC并发编程最新版通俗易懂_哔哩哔哩_bilibili 一、什么是JUC 从中就可以看出JUC,实质就是三个包,后面晖详细说明三个包下各个类功能。 java.…

程序员的测试课

git项目地址:GitHub - dreamhead/geektime-todo: Geektime Todo is a demo todo project for Geektime column. 1、实现一个Todo应用 设计规范 1、对于输入参数的检测,由入口部分代码进行处理。如空字符串。 2、Repository 的问题以运行时异常 的形式抛…

Django+Celery+Flower实现异步和定时任务及其监控告警

用Django框架进行web开发非常的快捷方便,但Django框架请求/响应是同步的。但我们在实际项目中经常会碰到一些耗时的不能立即返回请求结果任务如:数据爬取、发邮件等,如果常时间等待对用户体验不是很好,在这种情况下就需要实现异步…

SOFA Weekly|2023 我们一起加油、本周 Contributor QA

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&#…

RocketMQ 搭建

目录 1、什么是MQ?为什么要用MQ? 2、MQ的优缺点 3、几大MQ产品特点比较 4.RocketMQ在Windows的启动 1.下载RocketMQ 4.7.1版本 2.解压到本地磁盘并配置好JAVA_HOME和ROCKETMQ_HOME 3.修改runserver.cmd 4.启动server 5.修改runbroker.cmd 6.启动…

ROS2 基础概念 服务

ROS2 基础概念 服务1. Services2. 服务类型3. 查找服务4. 服务请求1. Services 服务基于 请求-应答 模型,而不是话题的 发布-订阅 模型 虽然话题允许节点订阅数据流并获得持续更新,但服务 仅在客户端专门调用时提供数据 还是启动海龟及其遥控节点为例&…

[标准库]STM32F103R8T6 点灯以及按键扫描

刚开始学32的时候,选择了基于HAL库进行开发,原因是HAL比较容易上手,像点灯、输出PWM、按键输入这种操作都很快捷。但是到ADCDMA这部分的时候发现,HAL库有一些地方我认为不是很合理和方便。比如DMA中断这部分,ST官方给出…

音视频开发系列--H264编解码总结

一、概述 H264,通常也被称之为H264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余,需要用算法来去除这些冗余。H264是专门去除这些冗余的算法…

王者荣耀崩溃解决记录

王者荣耀竟然崩溃了 上周玩王者荣耀,突然就进不去了,点击开始游戏后应用直接就崩溃退出了。 第一反应,肯定是反馈给游戏客服。但是果然腾讯的游戏是找不到真客服的,全部都是机器人处理的,给了我一个毫无用处的官方回…

springboot中配置文件优先级以及分类,这你都可以不会吗?不会赶紧进来学( ̄(∞) ̄)

各位小伙伴大家好呀┗( ▔, ▔ )┛,马上过年了,但是感觉没啥期待的哈哈哈哈哈,现在的年说实话真的挺没劲的呜呜。 言归正传,我们大家在使用springboot时难免会写各种各样的配置信息,比如port,jdbc啊这些&am…

2022这一年:阳了、变轨和逆风

又到年末了,2022这一年应该会让人记忆深刻,于我而言这一年的感受有明显的分界线,在此之前的世界温暖一些,提供着能量,让人心生探索它的纷繁多彩;今年世界变得寒冷了,展示着它的严酷与无情。阳了…

再学C语言20:循环控制语句——for循环

在while循环中,建立一个重复执行固定次数的循环涉及到3个动作: 1)初始化一个计数器 2)计数器与某个有限的值比较 3)每次执行循环,要在循环体中让计数器的值递增 其中,计数器的初始化在循环之…

【pandas】教程:6-如何计算摘要统计

Pandas 计算摘要统计 本节使用的数据为 data/titanic.csv,链接为 pandas案例和教程所使用的数据-机器学习文档类资源-CSDN文库 加载数据 import pandas as pdtitanic pd.read_csv("data/titanic.csv") titanic.head()PassengerId Survived Pclass \…

#Z0424. 树上的旅行

题目 Description 给出一棵有N个结点的树,给出Q个询问,求结点xj过结点K到节点yj的最短距离 Format Input 第一行一个数n 接下来共有n-1行,三个数u,v,len表示u和v之间存在一条边长为len 再给你Q,K。代表有Q个询问&#xff0…

视频 | bedtools使用介绍1

点击阅读原文跳转完整教案。基因组中的趣事(二)- 最长的基因2.7 million,最短的基因只有8 nt却能编码基因组中的趣事(一):这个基因编码98种转录本1 Linux初探,打开新世界的大门1.1 Linux系统简介…

10000+条数据的内容滚动功能如何实现?

遇到脑子有问题的产品经理该怎么办?如果有这么一个需求要你在一个可视区范围内不间断循环滚动几千上万条数据你会怎么去实现? 且不说提这个需求的人是不是脑子有问题,这个需求能不能实现?肯定是可以的,把数据请求回来渲…

2022蓝桥杯省赛C++A组初尝试

前言 耗时三个半小时,看看自己不懂的有多少,以便明确后续备赛2023方向 耗时3个半小时,只拿了18分,没学过,时间再多也做不出来,有奥数那感觉了 据说蓝桥杯省3得做对 2填空 2大题(30分&#x…

PMP®项目管理|不同场景使用不同沟通方式

不同沟通方式的确有适用场景和不适用场景。无效沟通的重要原因之一就是错误选择沟通方式。 我们会在工作中用到很多沟通方式,每种沟通方式都有适用的场合,也有不适用的场合,错误选择将使沟通变得低效甚至无效。 沟通方式主要有三种&#xf…

一百种语言的LOVE

2023年快要到来啦,很高兴这次我们又能一起度过~ 目录 一、前言 二、详细介绍 三、效果展示 四、代码编写 index.html script.js style.css 五、获取代码 需要源码,可以私信我(⊙o⊙)?关注我? 一、前言 时光荏苒&#xf…