机器学习中使用「正则化来防止过拟合」到底是一个什么原理?为什么正则化项就可以防止过拟合?
正则化,也叫Regulization,机器学习中经常涉及的名词概念,高大上唬人很给力,但是大多数人并不清楚这是干嘛的。因为在大多数的机器学习应用中,正则化这个概念有点儿鸡肋,我们也经常忽略它,不过对于那些进阶的机器学习玩儿家,这个概念还是蛮重要的,不然人家笑你不专业。
好啦废话不多说,进入正题。我也是看了一些技术贴现学现卖才了解正则化是咋回事,在学习了解的过程中,发现正则化这个概念一般来源于对于模型的Underfitting和Overfitting的讨论。我们在机器学习中,根本目的是预测,已知若干个输入属性x1,x2,x3…,然后输出一个决策属性y。(当然输出的决策属性也可以是多个,这不重要,对于Machine Learning来说,一个和多个output不太matter。)我们进行机器学习(数据训练模型)的根本目的是找到那些输入属性对应的Parameters,然后就可以利用这些Parameters进行预测分析了。
一般来说,我们拿来的数据的属性不太多,所以我们打开SPSS把这些属性全扔进去回归就好了,得到那些Parameters,简单粗暴。那为什么我们分析数据所用到的属性不太多呢?属性不多主要有两种情况:
第一种情况:做过科研的小伙伴大概了解,收数据是最耗时耗力的了,所以想多收点儿数据的属性上来本身就很难,所以基本上手上就那么些个数据,所以也不多想,就这些数据做就好了。(这种情况呢,从学术的角度上,属于投机行为,暂且就不说了哈哈,我们还是走常规路线,聊点正经的…)
第二种情况:我们对于事物基本上有一个预判,大概知道哪些属性会对某个事物的预测有影响。例如我们想预测房价水平,我们会考虑,城市级别,人口因素,房子的朝向等等属性,我们不太会选择属性例如该城市的高考入学比例这种属性。
所以呢,我们要聊聊的就是第二种情况,模型的预判。对于模型预判的问题,通常要考虑两个主要的具体问题:第一,我们选什么形式的模型: 线性?非线性?一次还是高次?还是指数形式?第二,我们选择哪些参数回归:选择人口因素?还是选择高考入学比例? 我相信这两个问题肯定有一些小伙伴注意到过(不一定解决过,但至少曾经注意到)。
所以,正常来讲,建立模型要两步,1)对模型进行预判,设定一些基本假设。2)训练数据获得参数。我们往往只关注第二步,忽略第一步,而用于解决第一步问题的概念,就是今天的主题,正则化。
现在插播一段基于学术研究方法的一些题外话,有助于对正则化进行深入理解:一般在进行学术研究的方法上,有两个基本的套路,所谓社会科学的解决问题的套路以及搞计算机那帮人的机器学习套路。社会科学解决问题的套路是基于已有的理论,去选择合适的模型基本假设,解决模型的预判问题。已有的理论就是例如某某人提到过这样的东西。比如研究房价问题,什么影响房价,我们会说,哎我选择这个属性,是因为任志强说的有影响,我就这样选了…(提到这里,想拍砖的先忍住)。 而机器学习选择模型的方式,则不基于任何人的理论,不对客观事物的预测分析做过多的人为假设,让计算机自己去选择合适的模型,也叫Data-Driven的解决问题思路。
所以,这就是为什么在机器学习的领域,我们经常会听到正则化这个概念,因为正则化就是机器用客观的指标,自动地,没有人为主观偏见干扰地去选择基本模型形式的过程。当然,绝对的没有人为主观假设也是不可能的,但是我们可以尽量少地对模型进行假设,让大部分的模型的形式,让计算机来决定,而不是我们主观地确定。
现在再来看,Overfitting和Underfitting的事儿,具体咋回事儿,对Machine Learning有一定了解的小伙伴基本上都知道,不太废话,先上张经典图,回顾一下。
对于这张图,我们基本上说,左边是Underfitting,中间是Just okay,右边是Overfitting。模型的参数越少,形式越单调,则我们对于模型的主观假设就越少,我们就没怎么对于这个模型中加入主观的偏见;而模型的参数越多,形式越复杂,例如右边,加入了高次项好几个,则我们对于模型的主观假设就越多(我们不仅觉得和x有关系,还和x平方有关系,还和x三次方有关系…你知道这么多,你咋不上天呢…),我们对于客观事物的主观偏见也就越多,这就是为什么有时候我们也管Overfitting叫Bias。
Okay,不想有主观太多约束,那么模型就简单点,但是简单的模型描述能力差,对历史数据的拟合能力不强,你看左边那些点都不在曲线上。我们可以把左边的模型写成如下形式:
即已有的线性模型加一个随机项,来表达叉子数据点,那个随机项就是当前模型不能解释的部分,模型越简单,这个随机项的方差就越大,所以通常也把Unerfitting的现象叫做Variance。
Underfitting影响了模型对历史数据的解释能力,而Overfitting则增加了对未知数据预测失效的风险,我们要在这两个问题上进行一个Balance来选择合适的模型,不能太复杂也不能太简单,模型的形式和复杂度要正合适,如何让它合适,就是用正则化来进行有效的模型调整。
接下来,就要讲如何用正则化来调整模型的形式,让其形式和复杂度刚刚好能Balance Overfitting as well as Underfitting。凡是Balance这个问题,归根结底要转化为一个优化问题中去解决。所以呢,我们还是想到进行机器学习训练中的那个Cost Function的优化问题了。
现在先引入我们要解决的问题:目的是做预测,我们假如总共有100个属性,然后这些属性都可能有高次项(假设到x的3次方),然后这些属性是一个线性组合过程来预测最终的y。(从绝对理性的角度,这些假设也不能强加,但是人类认知世界的过程本身就无法达到绝对理性的,就像柏拉图的“洞穴之喻”)。那么这个模型就可以写成如下形式:
所有要估计的参数总共有300个(暂时不考虑零次项,有经验的小伙伴都懂的)。所以最终哪些项起作用我们不清楚,我们不能人为主观地认为所有的二次项都没作用删掉,强制把参数减掉为200个,所以我们只能假设所有的项目都有所用,让这个模型包括全部300个参数。但是如果考虑所有参数的话,这个模型就会变得超级复杂,稍微有一点干扰就不能准确预测后面的数据(专业术语说,Robustness很差)。所以我们需要对这些模型参数加上一个基于模型复杂度的惩罚项,模型越复杂,整个模型的训练Cost Function就越大,然后去优化考虑参数惩罚项的Cost Function。例如一种修正后的Cost Function可以表达如下面形式:
这样,在优化参数的时候,我们考虑到参数的惩罚项,因为每一个参数值在优化变大的过程中,都表示对于其对应的属性项的主观偏见的增加,从而增加了整个模型的预测风险。对于惩罚项前面参数λ的选择,会影响Balance两个目标的过程,λ越大则说明,越需要规避主观偏见,从而模型倾向于变得简单,更少的参数(实际上是更多参数趋向于取值为接近零的值)。
常见的正则化方式除了上面给出来的例子,还有很多,具体内容详见WikiPedia给出的解释:Regularization (mathematics)。
网友评论