一、机器学习的偏差与方差的理解
1. 方差大:训练集的误差小,验证集误差大,对应模型过拟合
2. 偏差大:如果训练集和验证集的误差接近,且都偏大,说明模型效果差,欠拟合
3. 偏差小、方差小:训练集和验证集误差差不多,都比较小,说明模型效果好
偏差与方差对应的解决方法:
1. 高偏差(无法拟合训练数据):换一个更大的模型或网络,模型训练久一点
2. 高方差(过拟合):增大数据集,正则化
理解模型的偏差和方差,可以判断模型的表现,进而采取相应的措施,达到更好的效果。
二、过拟合与解决办法
1. 过拟合
过拟合的直观表现是算法在训练集上表现好,但在测试集上表现不好,泛化性能差。过拟合是在模型参数拟合过程中由于训练数据包含抽样误差,在训练时复杂的模型将抽样误差也进行了拟合导致的。所谓抽样误差,是指抽样得到的样本集和整体数据集之间的偏差。直观来看,引起过拟合的可能原因有:
(1)模型本身过于复杂,以至于拟合了训练样本集中的噪声。此时需要选用更简单的模型,或者对模型进行裁剪。
(2)训练样本太少或者缺乏代表性。此时需要增加样本数,或者增加样本的多样性。
(3)训练样本噪声的干扰,导致模型拟合了这些噪声,这时需要剔除噪声数据或者改用对噪声不敏感的模型。
2. 过拟合的解决方法
2.1 正则化
这里要讲的是,为什么正则化可以防止过拟合。很大时,要使loss很小的话,就要变小,那么网络输出就趋于线性,降低隐层的非线性程度,简化了,进而避免过拟合。
2.2 dropout
(1)dropout是使网络的神经元随机失活,实施:
设置一个d矩阵,元素为0和1,有keep-prop概率讲d设为1。如keep-prop=80%,则d矩阵,80%元素为1,20%元素为0,。然后每一层网络的激活函数输出乘上d矩阵,这样随机失活神经元。
(2)dropout的缺点:loss函数很难定义,不好计算。所以先把keep-prop设为1,关闭dropout确保loss函数单调递减,再把dropout打开。
(3)在测试阶段,如果使用dropout,测试结果会受到干扰,所以测试阶段不使用dropout.
2.3 其他方法
(1)增加数据样本,如数据增强
(2)提前停止训练,在中间停止迭代过程,缺点是,模型没有训练足够长时间。