偏差(bias)与方差(Variance)
以熟悉的三个例子开始:
在上一讲中引入了测试误差和多项式次数。在这里,计算训练误差和交叉验证误差。
更详细如下:
即随着多项式次数d的不断增大,训练误差是不断减小的,验证误差再到达最佳多项式次数前也是不断减小,随后不断增加,为一个凸函数形式。
由这个图我们得到:
即当训练误差和验证误差近似相等且都比较大时,判断为高偏差、欠拟合(high bias、underfitting)
当训练误差非常小,验证误差非常大且远远大于训练误差,判定为高方差、过拟合(high variance、overfitting)
正则化与偏差、方差
在三个模型中引入lambda
当lambda过大时,假设函数为一条平行于x轴的直线,欠拟合。
当lambda为0时,欠拟合。
如何选择lambda?使正好”just right”达到图2的效果。
1)、取不同的lambda,比如这里取12个,0.01开始,步长为2倍的速度,得到12个模型
2)、第一个模型开始,lambda=0,最小化代价函数J(theta),得到某个参数向量theta
3)、计算剩下的模型,得到对应的参数向量theta
4)、用交叉验证集评价这些参数。评价每个模型
5)、测出每一个参数theta在交叉验证集上的误差平方和,取出这12个模型中的误差最小的作为最终选择。
正则化参数λ对交叉验证集误差和训练集误差产生的影响
当λ改变时,交叉验证集误差和训练误差会发生怎样的变化呢???
注意:我们最初的代价函数J(θ)是包含正则化项的,但在这里我们把训练误差和交叉验证集误差定义为不包括正则化项。
λ在训练集上的变化:
你就会发现当λ的取值很小时,对训练集的拟合相对较好,因为没有使用正则化。而如果λ的值很大时,你将处于高偏差问题,不能对训练集很好地拟合,训练集误差Jtrain(θ)的值会趋于上升。
λ在交叉验证集上的变化:
在曲线的右端,当λ的值取得很大时,我们会处于欠拟合问题。这对应着偏差问题,那么此时交叉验证集误差将会很大。
在曲线的左端,对应的是高方差问题,此时我们的λλ值取得很小很小,因此我们会对数据过度拟合,所以交叉验证集误差也会很大。
学习曲线(learning curves)
给出训练模型,并且观察样本在不断增加过程中训练误差和测试误差会出现哪些变化???
可以看到,样本很小时,模型能很好拟合数据但泛化能力不强,所以训练误差很小但验证误差很大。随着样本数不断的增多,曲线走向如上图。
高偏差(high bias):
在高偏差情况下,因为模型比较简单,所以增加样本量无用。如上图。
高方差(high variance):
如果算法处于高方差情况下,随着样本量的增加测试误差和验证误差越来越接近。增加样本量是有用的。
回到上一节提出的问题,应用这节所提出的诊断方法去判断该采取何种措施:
并将诊断方法应用到神经网络中:
1)、当神经网络隐藏层数比较少时,计算量比较小,但也因此会陷入欠拟合。
2)、当神经网络隐藏层数比较多时,计算量很大,也容易陷入过拟合,这时候会采取增加lambda来改善。(相较于1,2更容易被人接受)
作者给出一个神经网络题目
这里验证误差远大于测试误差,说明陷入了过拟合,而增加隐藏层数目相当于将模型更加复杂化,这并不会有好的效果。