1、数据集配置
有人将数据集划分成训练集、验证集和测试集,也有人只划分成训练集和测试集。
验证集和测试集的数据来源要一致。
尽量保证数据的来源一致。
对于小型数据集的划分一般的分配比例是7/3(训练集和测试集)或者6/2/2(训练集、验证集和测试集)
对于大型数据集的划分一般的分配比例是98/1/1 或者99.5/0.4/0.1
2、欠拟合和过拟合
欠拟合:模型对训练数据的预测准确率较低
过拟合:模型对训练数据集的预测准确率较高,但是对验证数据集的预测准确率很低
欠拟合的解决方法
-
使用更复杂的网络(网络的层数、神经元的个数)
-
增加训练次数
-
使用其他网络架构
-
尝试寻找优化方法
过拟合的解决方法
-
增加训练数据
-
使用正则化(L1、L2等)
-
使用不同的网络架构
-
Dropout
3、Dropout
也是解决过拟合的常用方法之一
基本原理:随机的删除神经元,将复杂的神经网络变成较简单的的神经网络
缺点:每次训练时神经网络的结构都不相同,成本不会随着训练的次数而递减,所有无法监视其训练过程。通常先把dropout关掉,
然后训练,观察成本是否有下降趋势。是则开启dropout进行训练
4、数据增强
例如图片可以翻转,旋转,截取
5、输入特征归一化
假设每一个样本都有两个特征 x1 和 x2,归一化方法的
第一步就是使数据集的平均值成为 0,我们使每一个样本减去当前平均值来达到这个目的。
第一个求平均值公式,第二个是减去平均值公式。
第二步使数据集的方差变为 1, 使用下面的公式达到方差变为 1 的目的
其中是经过第一步处理后的
注意:
若训练集经过了归一化处理,则测试集和实际应用中的数据也要进行归一化处理,并且归一化处理时,要使用训练集计算出来的μ 和 σ, 只需要将数据直接减去μ 和 σ就可以了
6、梯度消失和梯度爆炸
梯度消失会导致偏导数极端的小,就会导致很多层的学习变得很慢几乎都不学习。成为僵尸层,使深层神经网络编程浅层神经网络。
梯度爆炸就会导致偏导数极端的大,就会导致很多层乱学习,而且数值可能大到超出了合法的范围值,变成了 NaN,从而导致无法再学习。
在实际应用中梯度消失出现的比较多,又是因为梯度是反向传播从后面算起的,所有梯度消失会导致前面的层梯度越来越小,所有经常会出现训练了很久,前面的层的权重还是一样的。
梯度消失和梯度爆炸是反向传播训练算法与生俱来的缺陷。
延缓梯度消失和梯度报站的主要方法有:
L2正则化、relu激活函数、batchnorm、残差结构、LSTM等