深度学习调参介绍

不同类型的网络,具体的调参方案不尽相同,有一些比较通用的思路记录如下:

  1. 样本尽量随机,避免学习偏差

  2. 样本要归一化,为什么需要归一化?参考

    • 避免数值问题(精度)
    • 更快的收敛,尤其是梯度下降法,方便初始化解,同时学习率的设置也更方便合理 == 确实会加速收敛和迭代的过程;借图侵删
      深度学习调参介绍_第1张图片
    • 样本的特征量纲可能不一致,需要统一
    • 常用的 sigmoid 函数,在绝对值较大时容易出现饱和

    怎样归一化? ref

    1. 简单缩放 == min-max标准化
    2. 逐样本均值消减 == 减去所有样本的均值-去除直流分量?!
    3. 特征标准化 == 标准差标准化/z-score 标准化;调整到符合正态分布 0-1
  3. 激活函数的选择,介绍略;参考 & 参考2

    • 只说 sigmoid 容易饱和,出现梯度消失;relu 可以稀疏,很常用,可能出现死神经元或者梯度爆炸上不封顶;LeakyRelu 优化死神经元问题;softmax 用于输出层计算概率
    • 似乎并没有一个非常严格的思路或者理论来解释什么样的情况下应该用哪种激活函数;不过 参考2 的介绍感觉还是高大上一些。sigmoid 适合用于表达概率,如 RNN LSTM 等里面的gate;relu 的解空间 < tanh < sigmoid,解空间越大搜索解就越慢,所以通用 relu
  4. batch size 的选择 参考

    • 相比于 GD(梯度下降)、SGD(随机梯度下降),Minibatch GD 有更好的优势;比 GD 计算量低,比 SGD 更快,也防止震荡
    • 如何选择:batch 的上限受制于 GPU 的显存,小的 batch 效率太低训练慢;然而 batch size并非越大越好,参考中示意图表示,不同大小的 batch 表示每一步模型 f f f 需要拟合的样本数,最终导致不同的拟合结果,所以 size 会影响模型的训练结果;同时给出了通过调节不同的 batch size 可以看到有时候模型会卡在鞍点,有时则能快速收敛;借图侵删
      深度学习调参介绍_第2张图片
    • 具体操作,不同的任务会有一些经验值可以借鉴,参考经验值,然后尝试放大 ∗ 2 *2 2 或者 缩小 ∗ 0.5 *0.5 0.5来对比训练的效果,看看是否会有更优的训练结果
  5. 学习速率很重要 参考

    • 通常不同的学习速率会很大程度上影响模型的收敛结果和效率;往往模型刚开始训练的时候学习率需要稍微大一些,帮助模型快速收敛,而在迭代了一定的次数之后,梯度也会慢慢降低,搜索极小值的过程需要学习率较低;借图侵删深度学习调参介绍_第3张图片
    • 常用的策略:指数衰减学习率,将学习率设定为与训练的迭代次数相关,迭代次数越多,学习率衰减的越多;常用的一些参数更新策略包括 AdaGrad/RMSProp/Adam 等等都包含了优化学习率的思路,可具体去了解;
    • 尽量可视化学习和收敛的过程,这样便于理解训练过程并改进。
  6. 权重初始化 参考 & 参考2

    • 好的初始化至关重要,常用的几种初始化的方式有 a 全0初始化;每层神经元学到的东西一样,难收敛; b 随机初始化,通常会满足一定的分布,比如0-1正态分布; c Xavier 初始化,尽可能让输入和输出服从相同的分布,todo,假设了使用 sigmoid 激活函数,对 Relu 不太适用;d He 初始化(何恺明提出),假设用 Relu 激活函数,效果比较好。e BN,对输出枪型归一化
  7. 如何选择随机梯度下降的算法

  8. Dropout 的放置位置和比例确定 参考

    • 确定是否需要 dropout? 通常如果过拟合严重,可以考虑加入 dropout 层,如果不能收敛则是其他问题;如果样本较少,可以加 dropout,增加稀疏性(通常我们需要特征之间的区分度越大越好,如果样本较多,则不用太担心,如果样本较少,则可以通过增加特征的稀疏度来提高区分度)。
    • 通常输入层较少使用,如果用也就设置接近1 的比例,用于增强样本随机性
    • 在隐藏层一般取0.3-0.6,可以先用0.5试,因为0.5能产生的组合最多;然后进行调节;全连接层类似。
  9. early stop

你可能感兴趣的:(深度学习)