什么是过拟合
过拟合这个意思其实就是提高泛化能力,我们在训练集上整了一个极其复杂的模型,准确率高达99.9999%
,但是当把这个模型应用到测试集上的时候,准确率跌到了0.0001%
,这种情况就称为过拟合或者说模型的泛化能力差。
怎么提高泛化能力
看了很多关于L1和L2的文章,上来就是各种数学推导,还有不明所以的图片,L1让参数变为0,L2让参数趋向于0,这怎么就可以提高泛化能力,防止过拟合呢?推导是看明白了,但是心底的疑问依然没有解答。
为什么参数减少了就能防止过拟合
为什么参数减少了就能防止过拟合
为什么参数减少了就能防止过拟合
我就想啊,假如咱们训练了一个很复杂的模型(想想深度神经网络),训练集和测试集精确率都非常高,上线的结果也非常的漂亮,我为什么还要减少参数个数呢?上百的logstic回归达到了80%的精度,上万个参数的神经网络达到在测试集上达到了95%的精度,我会选择参数少的logstic吗?所以我在想,好像并不是说参数越少模型的泛化能力就越高,这是一个充分不必要条件。如果一定要说减少参数可以防止过拟合,这个前提是同一个模型下
为什么约束参数可以防止过拟合
为什么模型可以进行预测。训练集和测试集是同分布的,我们在训练集学到的模型就可以应用到测试集上,但是训练集通常是有限的,数据是离散的,这就导致我们会学到各种各样的模型,下面的回归模型,可以构建各种高阶多项式进行拟合,单从训练集上根本看不出哪一种模型好,哪一种模型坏(高维的情况你还能知道选择哪一个?)。但是如果让你选,你会选择哪一个呢?很多人应该都会选择第二个(人工基本不太可能筛选高维模型,这里是简化),老实讲,因为觉得光滑,自然界中大多数样本都是光滑的,样本之间不太可能有很大的波动,说成数学语言就是,导数不大
过拟合就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。我们没有办法约束样本,但是可以通过约束参数(正则化)使其不要太大,所以可以在一定程度上是模型更加平滑,减少过拟合情况
我也看到了很多用结构风险最小化来解释的。但还是不太能接受,结构化风险依然没有说明为什么复杂度小的模型会对测试集有较好的预测结果(看看最后的疑问)
L1和L2正则化
上面假设了,自然界中模型是趋于光滑的,梯度变化不会很大,这样可以通过约束参数使得梯度改变的不大(不知怎么的,就想到了梯度爆炸和梯度消失),即 ∑ ∣ w ∣ ⩽ C \sum |w| \leqslant C ∑∣w∣⩽C或者 ∑ w 2 ⩽ C \sum w^2 \leqslant C ∑w