之前写大作业的时候涉及到了正则化的知识,但由于在实际训练过程中发现效果不是很好,就没有深入研究了,这里记录一下。

# 问题引入

我们假设这样一个问题:给出房屋大小和对应的房屋售价,寻找某一个函数来描述大小和售价的关系(具体数据是什么样的不重要,我们要看思想)。

# 一次方程

首先,我们考虑用一个线性方程去拟合,例如:

y=b+wxy=b+wx

  • yy:房屋售价
  • xx:房屋面积
  • ww:权重(weight)
  • bb:偏差(bias)

此时,机器学习的目标就是去寻找到一组参数 (wbest,bbest)(w_{best}, b_{best}) ,使得 loss 最小,一个可能的函数图像为:

线性方程

可以看到,线性方程不太能描述房屋大小和售价的关系,这种情况我们称为 “欠拟合”

# 二次方程

尝试用二次函数去描述二者关系,例如:

y=b+w1x+w2x2y = b + w_1x + w_2x^2

那么机器学习的目标就是找到一组参数 (w1best,w2best,b)(w_{1best}, w_{2best}, b) 使 loss 最小。可以看到,可学习的参数多了一个,模型的学习能力也会增强,理论来说,机器可以找到一个具有更强的描述能力的函数,此时,学习到的模型的函数图像可能为:

二次方程

可以看到,描述效果更好了一些。那我们可以很容易的想到,只需要更高次的多项式,就可以达到更好的学习效果,为了对比明显一点,我们看看选用八次多项式作为模型时的效果。

# 八次多项式

当利用八次多项式来描述二者关系时,机器可学习的参数就有 9 个,学习能力大大提升,八次多项式形如:

y=b+w1x+w2x2+...+w8x8y = b + w_1x+w_2x^2+...+w_8x^8

此时,学习到的模型的函数图像可能为:

8次多项式

由于我这里的数据点比较少,理论来说八次多项式已经可以近乎完美的拟合出样例的函数曲线了,事实也正是如此,但是我们发现了此时的曲线中,在部分面积下,售价甚至出现了负数的情况,这显然是不可能,这种情况我们称为 “过拟合”

# 正则化

正则化就是为了解决模型的过拟合问题而提出的,回顾我们的 loss 函数(用 y^\hat y 代指 yy 的实际值):

L=(y^y)2=(y^(b+wix))2L = \sum (\hat y - y)^2 = \sum (\hat y -(b + \sum w_ix))^2

此时我们可以引入一个 λ(wi)2\lambda \sum(w_i)^2 项,此时公式变为:

L=(y^(b+wix))2+λ(wi)2L = \sum (\hat y -(b + \sum w_ix))^2 + \lambda \sum(w_i)^2

引入的 λ(wi)2\lambda \sum(w_i)^2 项(称为正则项),是用于限制了 wiw_i 的大小的,我们希望 wiw_i 尽可能的小,来使得曲线相对更加平滑。我们看八次多项式的拟合曲线,某种意义上来说,就是因为曲线太陡峭,变化太过剧烈,才导致对显示情况的描述的失真,在实际中,变化一般都是相对平缓的,所以,更加平滑的曲线一般来说会更加贴近现实一些,防止过拟合。

但是需要注意的是,我们追求的是曲线的 “相对” 平滑,而非 “绝对” 平滑,直线就是最平滑的曲线了,但并不能很好的描述现实。那么,λ\lambda 就是由于控制这个平滑程度的,称为 “正则化参数” 。如果 λ\lambda 非常下,模型相当于基本没有被修正;如果 λ\lambda 非常大,loss 想更小只能让 wi0w_i \rightarrow 0 ,此时寻找到的模型就会趋向于一条直线,所以,在实际情况下,我们需要选取合适的 λ\lambda 值。

以上就是正则化的基本思想,正则项其实限制了模型的复杂程度,引入正则化后,机器需要找到一个 选择经验风险(第一项)和 模型复杂度(正则项)同时较小的模型,从而降低了 “过拟合” 的风险。

还有一点需要注意的是:正则项中无需包含参数 bb,因为 bb 的改变只会让曲线平移而已,对于曲线本身的形态不产生影响,所以正则项无需包含。

常见的有正则项有 L1 正则L2 正则 ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。这两个正则项在框架中都已经实现了,直接用就可以了,就不过多赘述了。当然,控制过拟合风险的方法还有 Dropout,我觉得会更好用一些。

# 画图所用网站

  • http://www.qinms.com/webapp/curvefit/cf.aspx

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Gality 微信支付

微信支付

Gality 支付宝

支付宝