欠拟合/过拟合/正则化
经验误差和泛化误差
**经验误差:**学习器在训练器上的结果和真实值之间的误差
**泛化误差:**学习器在测试值值上的结果和真实值之间的误差
机器学习最根本的目的是对新样本的一个预测,即我们希望得到一个泛化误差小的学习器。但由于新样本的结果是未知的,所以我们在训练学习器的过程中,实际能做的是尽量将经验误差降到最小。最终,机器学习的目的是得到一个经验误差小,在新样本上表现良好的学习器
那么,这是不是就说明经验误差越小,学习器的表现就越好呢?
结果当然不是。经验误差小只能说明学习器在训练样本上表现得太好了,他把训练样本的每个特征都学的明明白白的,导致学习器的泛化效果差。在一个如此“精确”的模型上,新数据和训练样本数据的一点点差异都会被放大,这样的学习器不是我们想要的。
过拟合
上面所提到的在训练集上表现良好在测试集表现差的现象就是过拟合。
出现过拟合的原因
- 训练集和测试集分布不一致
- 数据量太少,模型太复杂
- 维度灾难,学习器对噪声和异常也学习了
解决办法
- 选择样本时,注意训练集和测试集要同分布
- 清洗数据,删除样本中的异常数据
- 增加模型的数据量,可以降低噪声对模型的干扰
- 降低模型的复杂度
- 高维数据选择泛化能力好的分类器(贝叶斯、线性分类器),低纬度数据选择分类效果好的分类器(神经网络,KNN分类器、决策树)
- 调整参数和超参数
- 特征选择,去除非共性特征
- 正则化
- 使用dropout,(只适用于神经网络中,按照一定的比例去除隐藏层的神经单元,是神经网络的结构简单化)
10.提前结束训练(Early stopping),在模型迭代训练时候记录训练精度(或损失),如果模型训练的效果不再提高,就停止训练
欠拟合
学习器在训练集和测试集上表现都不好的现象就是欠拟合
出现欠拟合的原因
- 模型太简单
- 数据特征太少
解决办法
- 提高模型的复杂度,比如回归模型添加更多的高次项,增加决策树深度,增加神经网络的隐藏层数和隐藏单元数,直接欢用更复杂的模型算法
- 挖掘更多强特征
- 调参
- 降低正则化约束,模型如果不存在过拟合问题,正则化约束就会使模型出现欠拟合
正则化
正则化就是给损失函数加上一个惩罚项(也可称之为范数),这个惩罚项是对损失函数中的某些参数做一些限制。
常用的是L1正则化和L2正则化
L1正则化/L1范数/ L 1 − n o r m L_1-norm L1−norm
L1正则化 是指对所有权值向量中各个元素的绝对值之和
L1正则化可以产生一个稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,达到避免过拟合的目的
L1正则化是怎么产生稀疏矩阵的?
加了L1范数后的损失函数是:
J
=
J
0
+
α
∑
ω
∣
ω
∣
J = J_0 + \alpha\sum_{\omega} |\omega|
J=J0+α∑ω∣ω∣
J
0
J_0
J0是原损失函数,
α
\alpha
α是正则化系数,
ω
\omega
ω是特征的权值参数,令
L
=
α
∑
ω
∣
ω
∣
L = \alpha\sum_{\omega} |\omega|
L=α∑ω∣ω∣。
J
=
J
0
+
L
J = J_0 + L
J=J0+L 是一个在
L
L
L 约束下求
J
0
J_0
J0 最小值的问题。(关于带约束的最优化有问题的朋友可以看这篇文章,解释的特别详细)
我们先把问题简化到只有两个权值参数,即
L
=
∣
ω
1
∣
+
∣
ω
2
∣
L = |\omega_1| + |\omega_2|
L=∣ω1∣+∣ω2∣。对于梯度下降法,求
J
0
J_0
J0 的最小值,我们可以画出
J
0
J_0
J0 的等值线,同时,对于L,也可以在二维空间画出解空间,如下图所示:
在图中,可以看出最优解发生在等值线与解空间的第一次相遇上,即{0,
ω
2
\omega_2
ω2}。可以直观想象一下,在二维空间中,最优解发生在顶点上的概率比其他地方大很多。在多维空间中,解空间就是一个带有很多棱角的多面体,同样的,最优解发生在这些棱角上的概率比其他地方大很多。顶点/棱角处,会有很多权值参数等于0,这就是为什么L1正则化能够产生稀疏矩阵。
ps:L0正则化也能产生稀疏矩阵,和L1正则化的作用是一样的。L0正则化是限制权值参数为0的个数,因为此方法很难求得最优解(NP问题),所以弃用。
** 总结一下L1正则化 的优点**
- 能够进行特征选择:越好的特征包含的信息价值越多,查的特征里可能包含噪声,L1正则化能够选出好的特征
- 可解释性强:经过训练,最后模型是一组特征的加权组合,这样的模型解释起来就简单多了
L2正则化/L2范数/ L 2 − n o r m L_2-norm L2−norm
L2正则化 是指权值向量中各个元素的平方和再求平方根
L2正则化是通过减小各个权值参数的大小,弱化噪声数据的影响,增加模型的抗扰动性。(参数很大,模型只要变化一点点,结果就会产生很大差异)
同上述一样,先从二维空间考虑,L2正则化的解空间和等势值如下图所示:
二维平面下L2正则化的函数图形是个圆(绝对值的平方和,是个圆),与方形相比,被磨去了棱角。因此L2正则化无法进行特征选择。
L2正则化是怎么减小权值参数的?
以线性回归梯度下降为例
在代价函数后面添加正则化项,得到
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x i ) − y i ) 2 + λ ( ∑ j = 1 n θ j 2 ) ] \mathrm{J(\theta) = \frac{1}{2m} [\sum_{i=1}^m(h_\theta(x_i)-y_i)^2 + \lambda(\sum_{j=1}^n\theta_j^2)]} J(θ)=2m1[∑i=1m(hθ(xi)−yi)2+λ(∑j=1nθj2)]
对其求偏导
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i + λ m θ j \mathrm{\frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m(h_\theta(x_i)-y_i)x_i + \frac{\lambda}{m}\theta_j} ∂θj∂J(θ)=m1∑i=1m(hθ(xi)−yi)xi+mλθj
得到梯度下降的表达式如下
θ j = θ j − α ⋅ ∂ J ( θ ) ∂ θ j \mathrm{\theta_j = \theta_j - \alpha \cdot\frac{\partial J(\theta)} {\partial \theta_j}} θj=θj−α⋅∂θj∂J(θ) ( α \alpha α 是学习率)
θ j = θ j − α m ∑ i = 1 m ( h θ ( x i ) − y i ) x i − α λ m θ j \mathrm{\theta_j = \theta_j - \frac{\alpha}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)x_i-\frac{\alpha \lambda}{m} \theta_j } θj=θj−mα∑i=1m(hθ(xi)−yi)xi−mαλθj
θ j = ( 1 − α λ m ) θ j − α m ∑ i = 1 m ( h θ ( x i ) − y i ) x i \mathrm{\theta_j = (1-\frac{\alpha\lambda}{m})\theta_j - \frac{\alpha}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)x_i} θj=(1−mαλ)θj−mα∑i=1m(hθ(xi)−yi)xi
每次迭代, θ j \theta_j θj 都会乘以一个小于1的因子,所以 θ j \theta_j θj 会越来越小
正则化系数 λ \lambda λ 的选择
通常越大的
λ
\lambda
λ 可以让代价函数在参数为0时取到最小值。
因为正则化系数越大,正则化的函数图形(上文图中的方形或圆形)会向坐标轴原点收缩得越厉害,这个现象称为shrinkage,过程可以称为shrink to zero. 下面是一个简单的例子:
L1/L2正则化案例
使用L1正则化的回归模型叫做Lasso回归,案例Lasso进行层析成像重建tomography_reconstruction_L1_L2.ipynb
使用L2正则化的回归模型加做Ridge回归,案例Ridge回归惩罚项参数系数的影响Ridge_coefficients.ipynb
参考
关于作者
知乎: