李宏毅机器学习课程笔记-6.1神经网络训练问题与解决方案
明确问题类型及其对应方法
在深度学习中,一般有两种问题:
- 在训练集上性能不好
- 在测试集上性能不好。
当一个方法被提出时,它往往是针对这两个问题其中之一的,比如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):@绝版臭咸鱼
微信公众号:@臭咸鱼
转载请注明出处,欢迎讨论和交流!