李宏毅机器学习课程笔记-6.1神经网络训练问题与解决方案

明确问题类型及其对应方法

在深度学习中,一般有两种问题:

  1. 在训练集上性能不好
  2. 在测试集上性能不好。

当一个方法被提出时,它往往是针对这两个问题其中之一的,比如dropout方法是用来处理在测试集上性能不好的情况。

处理神经网络在训练集上性能不好的情况的方法

  • 修改神经网络架构,比如换成更好的激活函数

    sigmoid函数会导致梯度消失,可以换成ReLU、Leaky ReLU、Parametric ReLU、Maxout

  • 调整学习率

    比如RMSProp、Momentum、Adam

处理神经网络在测试集上性能不好的情况的方法

  • Early Stopping、Regularization,这两个是比较传统的方法,不只适用于深度学习

  • Dropout,比较有深度学习的特色

一些性能优化方法的简介

下面3点都是在增加模型的随机性,鼓励模型做更多的exploration。

  • Shuffling

    输入数据的顺序不要固定,mini-batch每次要重新生成

  • Dropout

    鼓励每个神经元都学到东西,也可以广义地理解为增加随机性

  • Gradient noise

    2015年提出,计算完梯度后,加上Gaussian noise。

    随着迭代次数增加,noise应该逐渐变小。

下面3点是关于学习率调整的技巧

  • warm up

    开始时学习率较小,等稳定之后学习率变大

  • Curriculum learning

    2009年提出,先使用简单的数据训练模型(一方面此时模型比较弱,另一方面在clean data中更容易提取到核心特征),然后再用难的数据训练模型。

    这样可以提高模型的鲁棒性。

  • Fine-tuning

下面3点是关于数据预处理的技巧,避免模型学习到太极端的参数

  • Normalization

    有Batch Normalization、Instance Normalization、Group Normalization、Layer Normalization、Positional Normalization

  • Regularization


Github(github.com):@chouxianyu

Github Pages(github.io):@臭咸鱼

知乎(zhihu.com):@臭咸鱼

博客园(cnblogs.com):@臭咸鱼

B站(bilibili.com):@绝版臭咸鱼

微信公众号:@臭咸鱼

转载请注明出处,欢迎讨论和交流!