谈一谈正则化
要理解正则化,首先需要了解过拟合的概念,关于过拟合,笔者在前面的博文中有专门提到,详情可参见博文:过拟合与欠拟合简要总结 以及 如何解决过拟合问题。
下面结合 NG 的公开课、网络上资源解读以及自己的一些理解,对正则化做相关阐述:
以 NG 公开课中的房价预测问题为背景,展开讨论。
在机器学习中,过多的变量(特征),同时只有非常少的训练数据,会导致出现过度拟合的问题。因此为了解决过度拟合,有以下两个办法:
1.尽量减少选取变量的数量
具体而言,我们可以人工检查每一项变量,并以此来确定哪些变量更为重要,然后,保留那些更为重要的特征变量。这类做法非常有效,但是其缺点是当你舍弃一部分特征变量时,你也舍弃了问题中的一些信息。例如,也许所有的特征变量对于预测房价都是有用的,我们实际上并不想舍弃一些信息或者说舍弃这些特征变量。
2.正则化
正则化中我们将保留所有的特征变量,但是会减小特征变量的数量级。这个方法非常有效,当我们有很多特征变量时,其中每一个变量都能对预测产生一点影响。正如我们在房价预测的例子中看到的那样,我们可以有很多特征变量,其中每一个变量都是有用的,因此我们不希望把它们删掉,这就导致了正则化概念的发生。
函数惩罚项
在前面的介绍中,我们看到了如果用一个二次函数来拟合这些数据,那么它给了我们一个对数据很好的拟合。然而,如果我们用一个更高次的多项式去拟合,最终我们可能会得到一个曲线,它能很好地拟合训练集,但却并不是一个好的结果,因为它过度拟合了数据,因此,一般性并不是很好。
让我们来考虑下面的假设:
我们想要加上惩罚项,从而使参数 θ3 和 θ4 足够的小。意思就是,上图的式子是我们的优化目标,也就是说我们需要尽量减少代价函数的均方误差。
对于这个函数我们对它添加一些项,如下所示:
其中,10000只是我随便写的某个较大的数字而已,现在,如果我们要最小化这个函数,那么为了最小化这个新的代价函数,我们要让 θ3 和 θ4 尽可能小。因为,如果你在原有代价函数的基础上加上 1000 乘以 θ3 这一项 ,那么这个新的代价函数将变得很大,所以,当我们最小化这个新的代价函数时, 我们将使 θ3 的值接近于 0,同样 θ4 的值也接近于 0,就像我们忽略了这两个值一样。如果我们做到这一点( θ3 和 θ4 接近 0 ),那么我们将得到一个近似的二次函数。
因此,我们最终恰当地拟合了数据,我们所使用的正是二次函数加上一些非常小,贡献很小项(因为这些项的
正则化操作
在我们上面的例子中,我们惩罚的只是
但更一般地说,如果我们像惩罚
实际上,这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此就不易发生过拟合。
来让我们看看具体的例子,对于房屋价格预测我们可能有上百种特征,与刚刚所讲的多项式例子不同,我们并不知道 θ3 和 θ4 是高阶多项式的项。所以,如果我们有一百个特征,我们并不知道如何选择关联度更好的参数,如何缩小参数的数目等等。
因此在正则化里,我们要做的事情,就是把减小我们的代价函数(例子中是线性回归的代价函数)所有的参数值,因为我们并不知道是哪一个或哪几个要去缩小。
因此,我们需要修改代价函数,在这后面添加一项。当我们添加一个额外的正则化项的时候,我们收缩了每个参数。
按照惯例,我们没有去惩罚
上式中,
λ 在这里我们称做正则化参数。
为了使正则化运作良好,我们应当注意一些方面,应该去选择一个不错的正则化参数 λ 。当 λ 太大的时候,会使所有参数都趋于零,如果我们这么做,那么就是我们的假设中相当于去掉了这些项,并且使我们只是留下了一个简单的假设,这个假设只能表明房屋价格等于
L1 正则化以及特征选择
为了简便起见,此处的损失函数不再写全,而是以单字母替代,当然,这对理解不会产生障碍。
假设有如下带L1正则化的损失函数:
其中
图中等值线是
而正则化前面的系数
L2正则化以及防止过拟合
有如下带L2正则化的损失函数:
同样可以画出他们在二维平面上的图形,如下所示:
二维平面下 L2 正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此
关于 L2 正则化能够有效防止过拟合问题的原因,在博客的正则化操作部分已有介绍,这里不再赘述。