摘自https://testerhome.com/topics/10811
偏差(欠拟合)和方差(过拟合)
我们不论在逻辑回归,线性回归还是在神经网络中应用的都是线性函数。也就是我们一开始的公式:y=wx + b。 也就是我们上图最左边的图片中,是一条直线。分类算法比较直观一点的理解就是要在坐标空间中找到一个最适合的直线,让每个样本所在的点离这条线最近。但是直线的表达能力是有限的,就像上面最左边的图中一样,一条直线并不能很好的区分圆圈和叉叉,这时候我们会发现在训练集上训练的效果不好,也就是准确率不高,我们称这种情况为高偏差,也叫欠拟合。我们希望效果能像中间的图一样,是一条曲线,能够有效的增加正确率。 所以这时候激活函数出马了,我们在第一篇帖子中就写了激活函数其实并不是在激活什么,而是为我们的线性方程增加非线性效果。它为我们拟合了更好的效果。但有时候如果激活函数过度拟合就会产生上图中最后边的情况。 它拟合了一个非常复杂的线,这种情况的表现就是它的效果在训练集上非常好,误差很小。 但实际在测试集上表现的就很差。 例如我们在训练集上的误差1%,而在测试集上额误差达到了15%。 这是因为我们的线拟合的很复杂,很好的契合了训练集的数据分布,但是到了测试集的时候数据分布就不是这么回事了。那么如果出现了欠拟合或者过拟合该怎么办呢。 通常的做法如下:
对于欠拟合: 增加神经网络复杂度,出现欠拟合的原因之一是由于函数的非线性不足,所以用更复杂的网络模型进行训练来加深拟合。
对于过拟合:增加数据规模, 出现过拟合的原因之一是数据规模不足而造成的数据分布不均,扩展数据规模能比较好的解决这个问题。 当然另一个做法是正则化,下面我们将正则化
正则化 λ
有些时候扩展数据规模是很难的,所以我们采取使用正则化来解决过拟合问题,常用的是L2正则,其他的还有L1和 Dropout正则。 这里主要说一下L2正则的原理,看下图: