zoukankan      html  css  js  c++  java
  • 深度学习(十)训练时的调参技巧

    训练过程中需要适时的调整参数,以获得比较好的模型,下面介绍几种调参方式:

    • 参数初始化
      • 初始化参数对结果的影响至关重要,一定要做参数初始化,否则会出现收敛速度变慢,影响收敛结果,甚至造成nan的问题,下面介绍几种初始化方法
      • Xavier

          权重初始化太大容易发散,初始化太小容易弥散而不收敛,Xavier是让权重均值为0,方差为2/in+out,可以初始化的不大不小

      • 在深度网络中,随机初始化权重,使用SGD的话一般处理的都不好,这是因为初始化的权重太小了。
    • 优化器的选择
      • 用Adam或者AdamGrad代替SGD,可以设置较小的初始值实现自动调参数
    • learningRate调整
      • 从一个正常大小的学习率(LR)开始,朝着终点不断缩小
      • 如果大的LR容易使Loss爆掉,可以尝试先使用一个小LR保证不爆, 等loss降下来了, 再慢慢升LR, 之后当然还会慢慢再降LR
      • LARS算法是一种调LR的策略,该算法通过对不同层使用不同LR来提升大Batch size场景下的训练精度
      • 根据经验,LR较大时,前期收敛快后期收敛慢,LR较小时,前期慢后期快
    • 梯度检查
      • 自己手动写的backward容易出现bug,可以做gradient check检查是否有错误
    • fine tune
      • 所谓fine tune就是用别人训练好的模型,加上我们自己的数据来训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中

    具体例子可以参考:http://www.cnblogs.com/xuanyuyt/p/6062204.html

    • mini batch
      • 一般选择128,过大的minibatch容易出现过拟合
      • 过大的batchsize会带来明显的精度损失,因为在大batchsize下,样本随机性降低,梯度下降方向趋于稳定,训练由SGD向GD趋近,模型容易收敛到初始值附近的到局部最优解
    • 增加Norm层
      • 一般来说模型收敛比较好,特征分布会比较稳定,可以增加Norm层来规范特征分布

    如果出现loss为NAN,怎么找出问题并解决?

    1. loss 出现为NAN, 应该是loss计算有问题,例如使用的criterion出现除以0的情况。

     参考:

    https://www.jianshu.com/p/9018d08773e6

  • 相关阅读:
    Codeforces Round #544 (Div. 3) C. Balanced Team
    Codeforces Round #544 (Div. 3) B.Preparation for International Women's Day
    Codeforces Round #544 (Div. 3) A.Middle of the Contest
    HDU-2647-Reward
    2015.3.15
    USACO Section 5.1 Musical Themes(枚举)
    [STOI2014]舞伴(dp)
    USACO Section 5.1 Fencing the Cows(凸包)
    2015.3.10
    USACO Section 4.3 Street Race(图的连通性+枚举)
  • 原文地址:https://www.cnblogs.com/lightsun/p/9489448.html
Copyright © 2011-2022 走看看