李沐《机器学习》42. 过拟合、欠拟合

列:训练误差 行:泛化误差
李沐《机器学习》42. 过拟合、欠拟合_第1张图片

如果训练误差和泛化误差都很低,这是我们想要的情况。
如果训练误差很高,泛化误差很低,那么程序可能是有bug,或者也有可能是因为训练样本过难了;如果在训练的时候用了大量的数据增强或者在样本中加入了大量的噪音的话,训练误差确实会高一点。
如果训练误差很低,泛化误差很高,这就是overfitting过拟合。
如果训练误差和泛化误差都很高,那么这就属于underfitting欠拟合。

什么样的情况会导致过拟合或者欠拟合?
因为要用模型去拟合数据,所以它们的复杂性应该对等。如果数据比较简单,那么模型也应该选择比较简单的。如果用简单的数据+复杂的模型,那就会overfitting。如果用复杂的数据+简单的模型,就会欠拟合。

模型的复杂度:能够去拟合各种各样函数(所有的数据背后都有一个函数,或者是用某个函数生成出来这个函数)的能力。
高复杂度的模型就能拟合更多的函数,甚至说能把整个训练样本记住(把所有的题都背住了)
不同算法之间的复杂度是不好比较的,比如树模型和神经网络模型的复杂度就不好比较。但是如果在同一个类里,比如都是神经网络,那么可学习参数多的模型通常比可学习参数少的模型复杂;层数多的树模型就比层数少的树模型复杂。 还有一个决定复杂度的:可学习参数取值的范围,比如模型里可学习参数的取值范围为[-1,1]和取值范围为[-∞,+∞]的简单(相对来说,有值限制的模型会更简单点,这就是正则化)。

模型复杂度产生的一些影响:
李沐《机器学习》42. 过拟合、欠拟合_第2张图片

整个过程:随着模型复杂度的增加,模型能够拟合的能力会越来越强,所以训练误差会降低,但是泛化误差不见得会降低,过了某个点后它会慢慢的增加。
A处:模型比较简单的话,在数据上的训练误差会比较高一点。在这里训练误差和泛化误差都比较高,这就是欠拟合。
B处:最好的地方是泛化误差最低的时候,但是要注意,就算是在最好的时候,也可能有一点overfitting,但是不能太严重。
C处:这里训练误差和泛化误差差距很大,这就是过拟合。

数据复杂度
样本数量多、每个样本中的元素多、维度高,数据就复杂。
数据中有一些特殊的时间/空间结构(比如股票数据是有时序结构的,图片数据是有空间结构的),就更复杂。
样本多样性(比如分类是分10类还是1000类)大,数据就更复杂。
当然不同数据类型之间的复杂度也不好比较,比如一个图片的最基本单元是一个像素,文本里最基本的单元是一个字符。

模型复杂度和数据复杂度都在变化的时候:
横轴:数据复杂度 纵轴:泛化误差
蓝色线:简单模型(如线性模型) 绿色线:复杂模型(如深度神经网络)
李沐《机器学习》42. 过拟合、欠拟合_第3张图片

可以看到随着数据量的增加,泛化误差是一直在下降的,也就是增加数据,通常不会让模型变差。但是到了某个位置以后,增加数据就不会再有更多的泛化误差的改善了,也就说明在这个地方已经达到了模型的上限,即使再增加更多的数据,模型也无法从中抽取更多的信息了。
那么就也应该换用相对更复杂的模型,可以看到当数据比较少的时候(A处),更复杂的网络的泛化误差会比更简单的网络大,这是因为更复杂的网络更容易过拟合。但随着数据复杂度的增加,泛化误差会越来越低,并且低于简单的网络。这就是为什么深度神经网络在数据量更大的数据集上表现更好。
目前学术界更关心比较复杂的网络,是因为我们用的数据集相对都是比较大的。在工业界,如果一开始样本数量比较小,那么更应该先去考虑比较简单的网络。随着数据量的增加,发现模型的性能不再提高了,那么就应该考虑换成一个更复杂的网络了。数据的复杂度和模型的复杂度要相互匹配。

你可能感兴趣的:(李沐—机器学习,机器学习,深度学习,神经网络)