一.欠拟合和过拟合
(1)偏差:Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,即算法本身的拟合能力。
方差:Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。反应预测的波动情况。
(2)“高偏差”指的是“欠拟合”,而“高方差”指的是“过拟合”,两者均指的是无法很好的泛化(generalize)新样本。
当一个机器学习系统建立后,我们接下来该如何进行优化,有哪些可以简单而有效地提高算法精度?首先,我们需要检测出算法是否处于高偏差还是高方差状态。
接着,可以按照以下的方法进行优化:
高方差(过拟合):
1)尝试更少的特征(人工或者PCA之类的算法)
2)获得更多样本来训练。(请结合学习曲线来确定
3)尝试正则化或者增加正则项的λ(注意均值归一化(mean normalization)和特征 缩放(feature scaling))
高偏差(欠拟合):
1)尝试更多的特征(欠拟合增加数据样本没用)
2)尝试增加hθ(x)的特征多项式
3)尝试减少正则项的λ
(3)在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
(4)偏差(Bias)和方差(Variance)是机器学习领域非常重要的两个概念和需要解决的问题。
在传统的机器学习算法中,Bias和Variance是对立的,分别对应着欠拟合和过拟合,我们常常需要在Bias和Variance之间进行权衡。
而在深度学习中,我们可以同时减小Bias和Variance,构建最佳神经网络模型。
(5)机器学习中基本的一个诀窍就是避免出现high bias和high variance。
首先,减少high bias的方法通常是增加神经网络的隐藏层个数、神经元个数,训练时间延长,选择其它更复杂的NN模型等。
在base error不高的情况下,一般都能通过这些方式有效降低和避免high bias,至少在训练集上表现良好。
其次,减少high variance的方法通常是增加训练样本数据,进行正则化Regularization,选择其他更复杂的NN模型等。
这里有几点需要注意的。
第一,解决high bias和high variance的方法是不同的。
实际应用中通过Train set error和Dev set error判断是否出现了high bias或者high variance,然后再选择针对性的方法解决问题。
第二,Bias和Variance的折中tradeoff。传统机器学习算法中,Bias和Variance通常是对立的,减小Bias会增加Variance,减小Variance会增加Bias。
而在现在的深度学习中,通过使用更复杂的神经网络和海量的训练样本,一般能够同时有效减小Bias和Variance。
这也是深度学习之所以如此强大的原因之一。
(6)过拟合过于强调拟合原始数据,而丢失了算法的本质——预测新数据。
我们可以看出,若给出一个新的值让其预测,它将表现的很差,是过拟合(Overfitting),虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;
(7)过拟合问题,应该如何解决?
1)丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA);
2)正则化。 保留所有的特征,但是减少参数的大小。包括L1、L2(L2 regularization也叫weight decay)
3)early stopping
4)数据集扩增(Data augmentation)
5)dropout。
(8)当模型特征很多,而数据量很少的话,容易过拟合。
因为目标函数为了尽可能的拟合较少的数据,不断复杂多个特征,从而拟合一个比较好(非常好)的函数,在数据内可以很好的预测(几乎百分百)。
但过多的参数(特征复杂度)导致函数很复杂,当新数据到来时很难通过该函数得到正确的结果,即在样本外表现不佳,导致过拟合。
(9)使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价小;
使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。
所以使用一个较大的神经网络并采用正则化来修正过拟合问题通常比使用较小的神经网络效果要好。
(10)过拟合表现在训练数据上的误差非常小,而在测试数据上误差反而增大。其原因一般是模型过于复杂,过分得去拟合数据的噪声和outliers.
正则化则是对模型参数添加先验,使得模型复杂度较小,对于噪声以及outliers的输入扰动相对较小。
过拟合的时候,拟合函数的系数往往非常大,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。
这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
(11)当训练集误差很大,训练集误差和交叉验证集误差近似时为偏差/欠拟合情况;
当训练集误差很小,交叉验证集误差远大于训练集误差时为方差/过拟合情况。
(12)在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。