855 次浏览

正则化

开始

先从最小二乘法开始讲起吧,我们在拟合数据时,我们常常用到的指标就是最小二乘误差MSE。

我们的目标是最小化MSE:

\(\)\(\min \parallel y_{pred} – y_{true} \parallel ^2_2\)\(\)
\(\)\(y_{pred} = w^T x\)\(\)

当我们进行拟合数据时,我们考虑到的是我们模型训练得到的预测y值与真实y值的距离,通过训练得到最小的MSE损失。当我们的数据趋向于线性时,我们采用线性模型就可以有很好的表现。但是当我们的遇到的是下面图片的数据时,我们使用线性模型则会让我们预测时出现很大的偏差。我们采用非线性模型去拟合,就会出现后面两种情况,拟合的好则just right,过拟合就会high variance。

来自于Andrew NG深度学习课程(reference 2)

通常解决过拟合问题,我们通过增大数据量来来解决。但是当给定的数据量有限时,也即在上图数据量,我们要训练出一个很好的模型,这时我们就会加入正则项来解决过拟合的问题。

我们的目标变成了最小化:\(\)\(\min \parallel y_{pred} – y_{true} \parallel ^2_2 +\lambda \parallel w \parallel \)\(\)

上面公式的问题就反应了我们的需求,我们一方面需要\(\)\(y_{pred}\)\(\)尽可能逼近\(\)\(y_{true}\)\(\),于此同时,我们需要\(\)\(w\)\(\)尽可能的小(我们的样本\(\)\(x\)\(\)不会变,总体变小就得在\(\)\(w\)\(\)上下手)。这样我们其实需要同时满足这样两个要求,这样我们就会得到一个折中的拟合结果。从而让我们的模型由过拟合走向just right。

正则项

常用的正则项有\(\)\(l_0, l_1, l_2\)\(\)范数。

通常不会使用\(\)\(l_0\)\(\)范数的,尽管可以让我们得到稀疏的解,但是它会使得问题失去凸性,变得不好解决。此时可以用\(\)\(l_1\)\(\)范数来替代\(\)\(l_0\)\(\)范数进行凸近似,最终会得到稀疏的解。使用\(\)\(l_2\)\(\)范数我们则会得到接近零的解。

学过高数知道拉格朗日乘子法的话,其实前面公式等价于下面的公式:

\(\)\(\min \parallel y_{pred} – y_{true} \parallel ^2_2\)\(\)
\(\)\(s.t. \parallel w \parallel \leq \theta\)\(\)

这个其实是一个二次规划QP的问题。我们的解就会类似下图

l1范数与l2范数的解

所以\(\)\(l_1\)\(\)正则化后的解从图中可以看出会落在坐标轴上获得0值,进而会出现稀疏的情况,而\(\)\(l_2\)\(\)正则化后的解则靠近0值。

对于机器学习与深度学习模型中,加入正则化的手段都是为了解决过拟合的问题,让模型更加健壮。选择哪一个正则项取决于我们对先验的了解,是要稀疏的,还是数据幅度一致的。以及我们对于先验的依赖程度\(\)\(\lambda\)\(\),当然这里只是给一个通俗的理解,这里很多的问题其实都涉及到数学方面的知识,最好手动进行数学公式的推导计算,所以还是得提高数学知识水平呀。

reference
1.https://zhuanlan.zhihu.com/p/38972380
2.https://mooc.study.163.com/learn/2001281003?tid=2001391036#/learn/content?type=detail&id=2001702117
3.https://www.bilibili.com/video/av40868517/?p=26