Fork me on GitHub

过拟合与欠拟合

[toc]

过拟合与欠拟合,偏差与方差

过拟合与欠拟合

过拟合

直观理解就是模型在训练集上表现很好,但是对于没见过的样本,或者在测试集上的表现很差,过拟合产生的原因很有可能是模型不止学习到了数据分布的一般特征,还学习到了训练集特殊特征,通常这种模型对应着高方差的模型。

欠拟合

与过拟合相反,欠拟合在训练集上的表现就很差,一般这种模型相对于数据而言表示能力不够强,或者复杂度比较低。对应着高偏差的模型。

方差与偏差

以回归为例来解释,给定了一个数据集D,并且假设D是存在一个完美的函数F(x)产生了数据的子集,我们希望通过D来拟合推测F(x),一个模型在数据D上拟合出来的函数$ g(x;D)$,我们肯定是希望,对于不同的D在平均情况下,$ g(x;D)$能够足够的接近于完美函数F(x),于是就通过均方误差来衡量这种误差的话,得到
\begin{equation}
\begin{array}{c l}
& E_D[(g(x;D) - F(x))^2] \
& = E_D[(g(x;D) - E_D[g(x;D)] + E_D[g(x;D)] - F(x))^2]
\
& =E_D[(g(x;D) - E_D[g(x;D)])^2] + (E_D[g(x;D)] - F(x))^2
\end{array}
\end{equation}
左边一项是说随着训练集的改变,数据集学习出来的函数受数据集波动的影响,也就是方差。右边一项是不同的数据集训练出来的函数的平均值与完美函数的误差的平方,也就是偏差(的平方)。由此可见,数据学习出来的模型的均方误差同时受偏差和方差的影响,对于给定我们的一个数据集,我们训练出来的模型即使偏差很小,但是也有可能方差变大造成整体泛化误差的增大。一般来说,简单的模型,受数据集波动的影响较小,方差小,但是偏差大;参数多的模型,对数据集的拟合能力很强,但是很容易受数据集波动的影响,造成偏差小,方差大。

防止过拟合的方法

  1. 正则化
  2. 降低模型的复杂度,正则化也是降低了模型的复杂度
  3. 获取更多的数据
  4. 获取更多的先验知识,正则化也是
  5. 奥卡姆的小剃刀
  6. 提前终止迭代,不要让训练集误差持续下降
  7. 使用多个弱学习器集成

正则化的方法,正则化的解释

  1. 正则化可以被视为对参数的一种先验知识,如L2正则化对应高斯先验,L1正则化对应拉普拉斯先验
  2. 可视为对模型容量的一种约束,如线性回归加了正则项,相当于求解带约束的优化问题
  3. 深度学习中还有很多正则化方法,其实也就是防止过拟合的方法

L1正则化导致稀疏解的原因

几何上解释: 直观上,L1,是一个正多面体的结构,如二维平面是一个菱形,并且顶点都位于坐标轴上,我们说L1正则化从优化的角度相当于对原来的问题添加了一项约束,这个约束是
$$
| w |_1 \leq \alpha
$$
也就是你目标函数想要求的解必须落在上面那个可行域中,我们又知道,最优解经常在边界上取到,由于菱形这一特殊的结构,使得目标函数的等值线更有可能先和顶点相交,而顶点又位于坐标轴上,所以常造成稀疏解,对于$ L_p,0 \leq p <1 $ 范数,这时候的可行域直接都凹进去了,使得顶点更尖,所以也更容易稀疏。

数学上的解释: 可以参考《深度学习》145页