背景
在炼丹的时候,经常会遇到的情况是过拟合.
过拟合
就是训练出的模型对训练数据可以很好的拟合,但是对于验证数据却拟合程度很差.
出现过拟合就意味着目前这个模型没法应用了.假如上图是股票数据,如果按照上图中的第3张图中的拟合模型,任意预测一天,可能和真实值相差较大.
需要想办法解决这个问题.有学者提出了一些解决方案.
过拟合的常见解决方案
- 数据清洗
- 增大训练集
- 正则化
本文着重介绍正则化方案:
正则化
正则化的效果
比如我们要进行一个分类任务. 在没有加入正则化之前,模型的训练效果是这样的:
加入正则化之后的效果:
很明显,在实际应用中后者才能比较好的适应.
正则化的原理
正则化,其实就是权重衰减.
按照花书中的观点,针对特定的问题,如果机器学习模型使用的loss函数没有特定的偏好,那么这些模型理论上没有优劣之分.
那么,针对特定的问题,应该使用具体特定偏好的loss函数,这种模型才能针对特定问题具有相对其他模型相对良好的表现.
这种偏重如何表现出来? 其中一种方案如下:
- 在原有的损失函数的之下,加入一个约束(惩罚项\正则项).
J ( w ) = M S E t r a i n + λ w T w J(w) = MSE_{train}+\lambda w^Tw J(w)=MSEtrain+λwTw
这就类似于我们在求最优解的过程中,如果要求满足约束 Ω \Omega Ω的最优解,我们只需要在原有条件的基础上加入
J ( w ) n e w = J ( w ) o l d + λ Ω J(w)_{new} = J(w)_{old}+\lambda \Omega J(w)new=J(w)old+λΩ
这个时候,loss函数具有了一定的偏好.当然,这个时候的偏好未必是适应于当前问题的,需要将 J ( w ) J(w) J(w)最优化,这个过程中w中的参数会持续更新,最后的参数就是偏好于当前问题的参数矩阵.
λ \lambda λ 的不同取值对模型的影响
当 λ \lambda λ 的取值过大时,会导致欠拟合. 为了将loss函数达到最小值,训练过程会让w中的值尽量小. 以线性模型为例,w中的值代表了斜率,如果w尽量小,无限趋近于0, 这个时候的模型就是一条横线,这就是典型的欠拟合.
当 λ \lambda λ的取值过小时,会导致过拟合. 当 λ \lambda λ 的取值相对较小时. w w w中的值得取值会相对较大,根据某些已知但是我不会的定理,此时会导致模型过拟合.
我们在另一个模型中验证一下:
-
λ = 1 × 1 0 − 100 \lambda=1\times 10^{-100} λ=1×10−100
-
λ = 0.03 \lambda=0.03 λ=0.03
-
λ
=
0.1
\lambda = 0.1
λ=0.1
其实其中的 w T w w^Tw wTw,可以替换成其他的类似条件.替换成不同的惩罚项,就是我们常见的 L 1 L1 L1和 L 2 L2 L2正则化.
-
L1正则化
-
L2正则化
总结
正则化,在论文中的同意词可以有,权重衰减 | 惩罚项 | 惩罚因子等.
本质上正则化是将让模型偏向于当前的具体问题,具体实现形势是调节参数的权重.为了让这个过程自动化,将调整约束项加入到指导函数loss函数中.就此,实现了针对特定问题训练相对较优的模型.
相关代码: 正则化 tensorflow