机器学习

小技巧(二):正则化

在训练学习算法时,一个经常遇到又让人倍感痛苦的问题就是过拟合。过拟合有许多种解决方法,这里我们介绍一种最常用、最简单的方法——正则化。
过拟合
一般来说,出现一个过拟合的重要原因就是我们设计的模型使用了太多的特征,其中一些特征在迭代多次以后学会了训练集上特有的特征。举个最简单的栗子,给你一些猫的图片作为训练集,你的算法学习到了猫的形态,已经可以大致判断一张图片是否有猫,但是不幸的是,你这些图片中都是白猫,而你的算法如果学到了“猫是白色的”这条规则,那么恭喜你,你成功见证了过拟合的产生。
既然知道了过拟合产生的原因,那么应该怎么避免呢?考虑到过拟合是因为算法把这种训练集特有的特征也考虑了进去,那么我们很自然的一个想法就是我把特征对应的参数的取值减小不就行了,但是我们怎么判断哪个就是训练集特有的特征呢?
不好意思,我们确实不知道。但机器学习界的诸位大佬们仍然想出了一个天(cu)才(bao)的办法,既然我不知道哪个特征是泛化性能不好的特征,但它肯定就在你们中间。那我就同时惩罚所有的特征,宁可错杀一千,不能放过一个,小子,还跑得了你?因为我们一般都是通过梯度下降等优化算法来逼近算法最优参数的,那么惩罚所有参数的方法也就显而易见了,给成本函数添加一个项,增大每次迭代中的值,那么计算出的每个参数不就自然而然小了吗?(我真是好机智啊!:flushed:)
增加的项有两种形式,对应两种正则化的方法:L1正则化和L2正则化。
注意以下所有公式中的都仅指特征变量对应的系数,不包括偏差项,正则化是不考虑偏差项的

L2正则化就是在代价函数后面再加上一个正则化项:

这时梯度下降变为:

而L1正则化在原始的代价函数后面加上所有权重的绝对值的和,乘以

这个求导时较为复杂,并且我们一般采用的都是计算简便的L2正则化,所以L1正则化的梯度下降过程这里就不予介绍了。