| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Pytorch中的gradient_accumulate_steps、warmup、lr_decay、optimizer和scheduler等问题的解答 -> 正文阅读 |
|
[人工智能]Pytorch中的gradient_accumulate_steps、warmup、lr_decay、optimizer和scheduler等问题的解答 |
(一)gradient_accumulate_steps对于模型训练来说,batch_size越大,模型效果会越好。但是某些环境下,没有足够的GPU来支撑起大的batch_size,因此这时可以考虑使用gradient_accumulate_steps来达到类似的效果。 具体地,原来训练过程中每个batch_size都会进行梯度更新,这时我们可以采取每训练(叠加)gradient_accumulate_steps个batch_size再更新梯度(这个操作就相当于将batch_size扩大了gradient_accumulate_steps倍)。更新梯度使用optimizer.step()。
参考文献: https://blog.csdn.net/Princeicon/article/details/108058822 https://cowarder.site/2019/10/29/Gradient-Accumulation/ https://www.cnblogs.com/lart/p/11628696.html?? (二)调节学习率(学习率的预热与衰减)(1)学习率的调节步骤一般是先预热,后衰减。 (2)学习率的调节方式包括手动调节和库函数调节。二者除了在引入方法上不一样之外,库函数调节不需要显式的更换模型中的学习率,而手动调节需要在optimizer.param_groups['lr']=updated_lr进行调节。 ① Warmup(学习率预热) 由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。 参考文献: https://blog.csdn.net/Xiao_CangTian/article/details/109269555 https://blog.csdn.net/sinat_36618660/article/details/99650804 https://blog.csdn.net/shanglianlm/article/details/85143614 https://blog.csdn.net/Guo_Python/article/details/106019396 https://zhuanlan.zhihu.com/p/136183319? ② lr_decay(学习率衰减) 在预热结束后,学习率达到一定的需求。此时,如果一直在大的学习率上执行训练,可能使模型loss持续震荡。因此,随着训练的进行,我们逐步降低学习率。 参考文献: https://cloud.tencent.com/developer/article/1539729?? https://blog.csdn.net/qq_40367479/article/details/82530324? https://blog.csdn.net/dou3516/article/details/105329103 综合参考: https://zhuanlan.zhihu.com/p/392350994 https://www.cnblogs.com/wuliytTaotao/p/11101652.html
注:我们最常用到的学习率衰减库函数: lr_decay?= torch.optim.lr_scheduler.ReduceLROnPlateau() (学习率衰减方法之一) 解释:这是个类class,初始化函数包含了诸多参数。这里我们只对重点参数进行介绍: factor是学习率变换时乘的因子; patience是指,当连续patience个epoch而指标(loss或accuracy)没有变换时,我们对学习率进行更改; threshold指,当性能变化小于该值时,即认为没有性能变化; min_lr模型所允许的最小学习率,即学习率不能小于该值; eps,学习率变化的最小值。当学习率变化小于该值时,忽略掉; lr_decay.step(val_loss/accuracy),学习率更新的指标依据。当某指标loss(或accuracy)在最近几个epoch中都没有变化下降(或升高)超过给定阈值时,调整学习率。如当验证集的loss不再下降时,调整学习率;或监测验证集的accuracy不再升高时,调整学习率。 参考文献: https://blog.csdn.net/weixin_40100431/article/details/84311430 https://zhuanlan.zhihu.com/p/69411064 https://www.jianshu.com/p/26a7dbc15246? https://www.cnblogs.com/xym4869/p/11654611.html https://blog.csdn.net/qyhaill/article/details/103043637 https://blog.csdn.net/emperinter/article/details/108917935 https://www.emperinter.info/2020/08/05/change-leaning-rate-by-reducelronplateau-in-pytorch/ (三)optimizer.zero_grad()当网络参量进行反馈时,梯度是累积计算而不是被替换,但在处理每一个batch时并不需要与其他batch的梯度混合起来累积计算,因此需要对每个batch调用一遍optimizer.zero_grad()将优化器中的参数梯度置0。之后执行loss.backward()来反向传播计算梯度,最后使用optimizer.step()来更新优化器选中的参数梯度。
参考文献: https://www.lagou.com/lgeduarticle/74225.html http://www.manongjc.com/detail/24-qbflaryxurlerde.html https://blog.csdn.net/PanYHHH/article/details/107361827 (四)optimizer和scheduleroptimizer的作用在于根据选用的优化器以及设置相应的lr、momentum等(超参数)对模型参数(优化器中的参数)进行更新,更新的方法是optimizer.step()。 scheduler的作用在于对optimizer中的学习率进行更新、调整,更新的方法是scheduler.step()。 通常而言,在一个batch_size内先进行optimizer.step()完成权重参数的更新过程,然后再进行scheduler.step()完成对学习率参数的更新过程。 注:scheduler.step()函数用来完成optimizer实例中学习率的更新,如果没有scheduler中的step方法,也就无法对optimizer中的学习率进行调整 。 参考文献: https://zhuanlan.zhihu.com/p/367999849 https://blog.csdn.net/qq_40178291/article/details/99963586 https://www.jianshu.com/p/1db8581edd4f 这里有个resume optimizer学习率的样例不错:https://zhuanlan.zhihu.com/p/136902153 (五)梯度下降和反向传播:梯度下降是一种比较泛化的优化方法,中心思想是沿着目标函数梯度(导数)的反方向更新和寻找参数值(权值和偏置)以使得目标函数最大或者最小。梯度下降法是深度学习网络最常见的优化方法,除了深度学习,其还有很多的应用场景。 在神经网络中,对深度网络目标函数计算梯度的时候,需要用到反向传播的方式由深到浅地(从输出层开始将误差逐层反向传播到输入端神经元)计算及更新参数(链式法则)。因此,反向传播是梯度下降方法在深度网络上的具体实现形式。 总的来说,梯度下降是寻找目标函数最优值的方法,反向传播是链式求解梯度的方法。 参考文献: https://blog.csdn.net/crxk_/article/details/97137789 https://www.zhihu.com/question/311616761 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:57:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |