“Regularization——Cost function”。
01
—
笔记
本小节将介绍正则化到底是怎么一回事?并写出相应的代价函数。
如果想更好的理解正则化,当然是要上手做一些实际的例子。我们来看一下。
还是卖房子的例子,我们想知道房子的大小和房子售价之间的关系。
如果用二次函数去拟合就是下图左边的样子,如果用高阶函数拟合就会得到下图右边的样子(即泛化能力比较差的过拟合情况)。
从当前这个例子,我们可以看出来右边过拟合的情况本质上是因为我们在拟合函数中加入了3次方和4次方的项,那我们有没有办法在引入高阶项的时候也不会出现过拟合的问题呢?
能够想到的一种比较朴素的方法,当然是将3次方和4次方前面的系数给弄小一点。那怎样让它们变小呢?再结合前面学到的我们模型优化的时候,实际上是使用的最小二乘法。就是在训练集中,让模型根据自变量算出来的因变量和真正的值求差之后再求平方和。
那很自然的,我们可以想到在这个最小二乘法的优化目标函数上加入一个高次的惩罚项。如下式所示:
上式后面蓝色手写的部分就是加入的惩罚项,加上这两个之后,对我们的目标函数会产生怎样的影响呢?
当我们在假设函数中加入高次项,就会使得预测值与实际值间的差变小,但是因为加入了后面的两个惩罚项,又使得最终的代价函数变大了,所以这个时候高次项的系数必须比较小才行。这就是我们解决引入高次项之后会造成过拟合问题的一般思路了。
给高次项一个较小的系数,会有两个明显的好处:(1)会使得我们的模型(假设函数)更简单;(2)更不容易出现过拟合。
然而,现实中的问题是,我们很多时候要做的是对一个量进行预测,而影响这个量的因素可能有很多很多,但具体哪些是重要的影响因素,哪些是不重要的影响因素,我们事先也是不知道的。
比如,我们在卖房子的时候,影响房屋售价的因素可能有一百个,那具体哪些是比较主要的影响因素呢?还真不好说。那该咋办呢?
和前面的思路类似,我们在代价函数上想想办法。
如上图,我们在代价函数后面也加上惩罚项,惩罚项的目标也是减少那些对最终因变量取值影响不大的自变量的影响。
具体来看一下,我们改写了代价函数,加入了惩罚项,在惩罚项那里有个参数\lambda,我们称之为正则化参数。
新的代价函数有两项,我们在进行训练的时候,第一个目标就是更好的拟合数据,和代价函数的第一项有关;第二个目标就是保持参数尽量小,防止过拟合。而平衡这两个目标就是靠参数\lambda来实现的。
那么,最终我们拟合得到的结果曲线可能就下图中紫红色那条,这条曲线告诉我们即使我们保留更多的高次项部分,但因为正则化项的存在也会使得我们最终拟合曲线也比较平滑。
如果正则化参数过大,就会使得惩罚太大,最终就只剩下常数项了。如下图:
所以说,正则化参数大小的选择是非常重要的,那具体该怎样选择呢?需要继续往后学。