• 关于调参技巧的问题


    学习率衰减(learning rate decay)是什么?

    在训练模型的时候,通常会遇到这种情况:我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learning rate),但是训练集的损失下降到一定的程度后就不在下降了。

    遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。

    学习率衰减(learning rate decay) 就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。

    学习率衰减基本有两种实现方法:

    线性衰减。例如:每过5个epochs学习率减半。

    指数衰减。例如:随着迭代轮数的增加学习率自动发生衰减,每过5个epochs将学习率乘以0.9998。具体算法如下:

    decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)

    其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。

    Warmup和学习率衰减(learning rate decay)的区别是什么?

    训练神经网络模型常规策略是初始使用较大的学习率,随着训练的逐渐进行学习率衰减(learning rate decay)。而wramup则是刚开始使用较小的学习率,然后增大到设定的学习率,最后又随着训练的进行慢慢减小学习率。

    为什么需要Warmup?

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

  • 相关阅读:
    我在winform项目里使用“Windows I/O完成端口”的经验分享
    C++图的建立---邻接矩阵-----邻接表
    17.EC实战 开发板开发环境搭建、程序烧录及运行代码过程
    Java基础-day09-set和hashmap
    快递查询方法分享:如何批量查询并筛选超时快递?
    docker基本概念与部署和基础命令
    基于python深度学习的CNN图像识别鲜花-含数据集+pyqt界面
    内网渗透系列之真实内网环境搭建
    前端 JS 实现图片元素转 BASE64 编码
    nginx源码分析-字符串
  • 原文地址:https://blog.csdn.net/weixin_42295205/article/details/125903951