最近在刷李航的《统计学习方法》这本书,在很多算法的损失函数里,都出现类似的描述:
损失函数最小化原则一般就是用正则化的极大似然估计进行模型选择。
正则化到底是什么呢?正则化应该怎么去理解?到底又有什么作用呢?
什么是正则化?
正则化就是在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即经验风险(损失函数)加上正则化。一般模型越复杂,正则化值越大。
上面的式子就是结构风险最小化策略的通用表达式,其中第2项(绿色标记的部分)就是本文要讲的正则化项,第1项就是损失函数。可能你会问,有第一项不就可以将训练数据拟合得很好嘛,模型的表现也会很棒吗?没错,但是在监督学习中,我们同时更加关注测试数据在模型上的表现,也就是模型的泛化能力。
监督
机器学习问题归根结底就是“minimizeyour error while regularizing your parameters”,也就是说规则化参数的同时最小化误差。最小化误差是为了让我们的模型更好的拟合训练数据,而规则化参数是防止模型过分拟合我们的训练数据(overfiting)。多么简约的哲学啊!因为模型参数太多会导致模型复杂度上升,容易发生过拟合,也就是训练误差会很小。但我们的最终目标不仅是训练误差小,而且更关注模型的测试误差是否也很小,目的是能准确的预测新的样本。所以,我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才有比较好的泛化性能,而要使得模型“简单”就是通过规则函数来实现,也就是正则化。
说了半天,其实总结就是一句话,正则化的目的就是防止过拟合!
L1正则化和L2正则化
终于进入正题了,深呼吸开动你的大脑,干货来了。
一般,正则化项就是一些L1范数和L2范数(因为L0范数用的少,所以不作讨论)。
L1范数——各参数的绝对值之和(稀疏规则算子)
L2范数——各参数的平方和的开方(权重衰减)
初中数学就能理解这些了,那到底在损失函数中加入这些玩意有什么用呢?好,别慌,很简单,公众号文章的目的就是用口水话讲看起来高深的玩意。
L1正则化
细心的读者肯定发现了,在上面L1 范数的概念中的最后写了个稀疏规则算子,对,我也不知道是什么一开始(毕竟不是学数学出身的)。6个字中应该只有最前面2个字有价值吧,语文还是可以的(哈哈)。“稀疏”,就是少的意思,想想损失函数后面加个带参数的项,想干嘛?前面罗里吧嗦说了很多,意思就是如果没这个项,模型复杂度高,模型容易过拟合。加了这个项,就可以防止过拟合(大神是这么说的)。所以,稀疏二字的意思可以得知,肯定是将参数变少了呗,模型复杂度降低了。
一般来说,xi的大部分元素(也就是特征)都是和输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑(比如噪声数据),从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择,它会去干掉这些没有信息的特征,也就是把这些特征对应的权重变为为0。
我们来看个经典的图:
在二维的情况下,只有2个参数,利用梯度下降算法在(w1, w2)平面上可以画出目标函数的等高线。而那个四边形就是正则化项(L1)对应的图形。最优解就在等高线和四边形相交的地方。从图中可以看出,相交的地方,w1等于0。回到之前讨论的,稀疏二字,也就是将w1干掉了,模型最后剩下w2参数。换句话讲,该正则项的目的就是将关联不大的特征直接剔除,只保留部分特征。因为在有些数据下,只有少数特征对模型有贡献,绝大部分特征是没有贡献的。所以,L1范数(||W||1)的重要作用就是特征选择。
L2正则化
L2范数: ||W||2。这玩意能改善过拟合。让L2范数的规则项||W||2最小,我们可以使W的每个元素都很小,接近于0。但与L1范数不同的是不会让它等于0,而是接近于0。想想看为什么不也直接让它等于0呢?
如果我们将w都变的很小很小,但是又不等于0,就好比一个人去小吃街吃好吃的,一开始进小吃街就将前几家店的东西吃撑了,后面还有好多美食没品尝到,这是不是傻呢?大部分店都吃一些是不是就知道哪些才好吃,下次去的时候就会优先选择好吃的店。对于模型也差不多这个意思吧,如果把有些参数都干掉,万一这个参数未来在某些情况能发生作用呢(天知道)。可能举得例子不太贴切,表达的意思应该可以理解吧。这样做的目的就是,让模型的泛化能力更强些(因为模型的参数更多了。知识储备多了,可以解决一些复杂的问题)
也用一个经典的图来说明,从图中可以看出,二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。最优解的点就是为了让w1和w2的值都变得尽量小,当w变小时,园就会变小,w的值将会向0靠近。L2正则项可以获得很小的权重系数,减小模型的复杂度。
小结
L1会趋向于产生少量的特征,而其他的特征都是0。而L2会选择更多的特征,这些特征都会接近于0.
只有少数特征起重要作用的情况下,选择L1范数比较合适,因为它能自动地选择特征。
而如果所有特征中大部分特征都能起作用,而且起的作用很平均,那么使用L2范数更合适。