# 问题引入
我们假设这样一个问题:给出房屋大小和对应的房屋售价,寻找某一个函数来描述大小和售价的关系(具体数据是什么样的不重要,我们要看思想)。
# 一次方程
首先,我们考虑用一个线性方程去拟合,例如:
- :房屋售价
- :房屋面积
- :权重(weight)
- :偏差(bias)
此时,机器学习的目标就是去寻找到一组参数 ,使得 loss 最小,一个可能的函数图像为:
可以看到,线性方程不太能描述房屋大小和售价的关系,这种情况我们称为 “欠拟合” 。
# 二次方程
尝试用二次函数去描述二者关系,例如:
那么机器学习的目标就是找到一组参数 使 loss 最小。可以看到,可学习的参数多了一个,模型的学习能力也会增强,理论来说,机器可以找到一个具有更强的描述能力的函数,此时,学习到的模型的函数图像可能为:
可以看到,描述效果更好了一些。那我们可以很容易的想到,只需要更高次的多项式,就可以达到更好的学习效果,为了对比明显一点,我们看看选用八次多项式作为模型时的效果。
# 八次多项式
当利用八次多项式来描述二者关系时,机器可学习的参数就有 9 个,学习能力大大提升,八次多项式形如:
此时,学习到的模型的函数图像可能为:
由于我这里的数据点比较少,理论来说八次多项式已经可以近乎完美的拟合出样例的函数曲线了,事实也正是如此,但是我们发现了此时的曲线中,在部分面积下,售价甚至出现了负数的情况,这显然是不可能,这种情况我们称为 “过拟合”。
# 正则化
正则化就是为了解决模型的过拟合问题而提出的,回顾我们的 loss 函数(用 代指 的实际值):
此时我们可以引入一个 项,此时公式变为:
引入的 项(称为正则项),是用于限制了 的大小的,我们希望 尽可能的小,来使得曲线相对更加平滑。我们看八次多项式的拟合曲线,某种意义上来说,就是因为曲线太陡峭,变化太过剧烈,才导致对显示情况的描述的失真,在实际中,变化一般都是相对平缓的,所以,更加平滑的曲线一般来说会更加贴近现实一些,防止过拟合。
但是需要注意的是,我们追求的是曲线的 “相对” 平滑,而非 “绝对” 平滑,直线就是最平滑的曲线了,但并不能很好的描述现实。那么, 就是由于控制这个平滑程度的,称为 “正则化参数” 。如果 非常下,模型相当于基本没有被修正;如果 非常大,loss 想更小只能让 ,此时寻找到的模型就会趋向于一条直线,所以,在实际情况下,我们需要选取合适的 值。
以上就是正则化的基本思想,正则项其实限制了模型的复杂程度,引入正则化后,机器需要找到一个 选择经验风险(第一项)和 模型复杂度(正则项)同时较小的模型,从而降低了 “过拟合” 的风险。
还有一点需要注意的是:正则项中无需包含参数 ,因为 的改变只会让曲线平移而已,对于曲线本身的形态不产生影响,所以正则项无需包含。
常见的有正则项有 L1 正则 和 L2 正则 ,其中 L2 正则 的控制过拟合的效果比 L1 正则 的好。这两个正则项在框架中都已经实现了,直接用就可以了,就不过多赘述了。当然,控制过拟合风险的方法还有 Dropout,我觉得会更好用一些。
# 画图所用网站
- http://www.qinms.com/webapp/curvefit/cf.aspx