1 定义
定义:正则化是我们对学习算法所做的任何修改,旨在减少其泛化误差( generalization error),而不是其训练误差(training error)。
在深入探讨该主题之前,请查看以下图片:
从左向右比较,模型不断尝试从训练数据中学习细节和噪音,慢慢很好的模拟训练数据,但最终却导致在测试数据性能不佳。换句话说,在向右移动时,模型的复杂性增加了,训练误差减少了,但测试误差却没有。 如下图所示。
若博友们以前建立过神经网络,就会知道它们有多复杂,会发现网络容易出现过度拟合。
正则化是一种对学习算法稍加修改的技术,以使模型具有更好的泛化能力。 反过来,这也提高了模型在看不见的数据上的性能。
2 正则化减少过度拟合
考虑一个神经网络,它过度拟合了训练数据,如下图所示。
若研究过正则化概念,将有一个公平的主意,即正则化会惩罚系数。 在深度学习中,它实际上惩罚了节点的权重矩阵。
假设正则化系数非常高,以至于某些权重矩阵几乎等于零。
这将导致线性网络简单得多,并且训练数据略有不足。
如此大的正则化系数值没有太大用处。 需要优化正则化系数的值,以便获得一个拟合良好的模型,如下图所示。
3 不同正则化技术
现已了解正则化如何有助于减少过拟合,本节将学习一些不同的正则化技术。
正则化(Regularization)是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。将目标函数变成 原始损失函数+额外项 。
Cost function = Loss (say, binary cross entropy) + Regularization term
常用的额外项一般有两种,英文称作 $ℓ1−norm$ 和 $ℓ2−norm$ ,中文称作 L1正则化 和 L2正则化,或 L1范数和 L2 范数(实际是L2范数的平方)。L1正则化 和 L2正则化 可以看做是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。
线性回归 L1 正则化 损失函数:
$min_w (sum_{i=1}^{N}(w^Tx_i - y_i)^2 + lambda |w|_1 ) (1)$
线性回归 L2 正则化 损失函数:
$min_w(sum_{i=1}^{N}(w^Tx_i - y_i)^2 + lambda|w|_2^2) (2)$
公式(1)(2)中 $w$ 表示特征的系数( $x$ 的参数),可以看到正则化项是对系数做了限制。L1正则化 和 L2正则化 的说明如下:
- L1正则化是指权值向量 $w$ 中各个元素的绝对值之和,通常表示为 $left | w ight | _{1}= sum limits _{i}|w_i|$。
- L2正则化是指权值向量 $w$ 中各个元素的平方和然后再求平方根,通常表示为 $left | w ight | _{2}^{2}= sqrt[2]{sum limits _{i}|w_{i}|^{2} }$ 。
- 一般都会在正则化项之前添加一个系数 $lambda$ 。
由于增加正则化项,因此权重矩阵的值减小,因为它假定权重矩阵较小的神经网络会导致模型更简单。 因此,它也将在一定程度上减少过度拟合。
3.1 L1 & L2 正则化的作用
L1正则化可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,可用于特征选择。
- 稀疏性:模型很多参数是 $0$。通常机器学习中特征数量很多,如文本处理时,如果将一个 词组 作为一个特征,那么特征数量会达到上万个。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,很多参数是 $0$ ,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,即使去掉对模型也没什么影响,此时可以只关注系数是非零值的特征。相当于对模型进行一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。
L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
3.2 L1正则化与稀疏性
$Cost function =Loss+lambdaast sum_ limits{i=1} |w_i | $
- 事实上,”带正则项”和“带约束条件”是等价的。
- 为了约束 $w$ 的可能取值空间从而防止过拟合,我们为该最优化问题加上一个约束,就是 $w$ 的 L1范数 不能大于 $m$ :
$egin{cases}underset{w}{min} J(w;X,y)= min sum_ limits{i=1}^{n}(w^Tx_i - y_i)^2 \ s.t. |w|_1 leqslant m.end{cases} (3)$
- 问题转化成带约束条件的凸优化问题,写出拉格朗日函数:
$sum_ limits{i=1}^{n}(w^Tx_i - y_i)^2 + lambda (|w|_1-m) (4)$
- 设 $W_*$ 和 $lambda_*$ 是原问题的最优解,则根据 KKT 条件得:
$egin{cases} 0 = abla_w[sum_ limits{i=1}^{n}(W_*^Tx_i - y_i)^2 + lambda_* (|w|_1-m)] \ 0 leqslant lambda_*.end{cases} (5)$
- 设L1正则化损失函数:$J = J_0 + lambda sum_ limits {i} |w_i|$,其中$J_0 = sum_ limits {i=1}^{n}(w^Tx_i - y_i)^2$是原始损失函数,加号后面的一项是 L1正则化项,$lambda$ 是正则化系数。
- 注意到L1正则化是权值的绝对值之和,$J$ 是带有绝对值符号的函数,因此 $J$ 是不完全可微的。任务是要通过一些方法(如梯度下降)求出损失函数的最小值。在原始损失函数$J_0$ 后添加 L1正则化项,相当于对 $J_0$ 做了一个约束。令 $L=lambda sum_ limits i|w_i|$ ,则 $J=J_0+L$ ,此时任务变成在 $L$ 约束下求出 $J_0$ 取最小值的解。
- 假设在二维的情况,即只有两个权值 $w_1$ 和 $w_2$ ,求解 $J_0$ 的过程可以画出等值线,同时 L1正则化 的函数 $ L=|w_1|+|w_2|<=m $ 可以在 $w_1$ 、$w_2$ 的二维平面上画出来。如下图:
- 上图中等值线是 $J_0$ 的等值线,黑色方形是函数 $L$ 的图形。在图中,当 $J_0$ 等值线与图形 $L$ 首次相交的地方就是最优解。上图中 $J_0$ 与 $L$ 在 $L$ 的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是 $(w1,w2)=(0,w2)$ 。可以直观想象,因为L函数有很多突出的角(二维情况下四个,多维情况下更多),$J_0$ 与这些角接触的机率会远大于与L其它部位接触的机率,而在这些角上,会有很多权值等于 $0$,这就是为什么 $L1$ 正则化可以产生稀疏模型,进而可以用于特征选择。
- Q:那么得到稀疏模型有什么好处呢? 稀疏模型是指模型参数矩阵中有很多参数为0,只有少数参数是非零值的。机器学习中特征向量的维数一般很大,在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征很大程度上是噪声特征,其没有贡献或贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。
3.3 L2正则化
$Cost function =Loss+lambdaast sum_ limits{i} ||w_i||_{2}^{2}$
同理,又L2正则化损失函数:$J = J_0 + lambda sum_ limits{i} ||w_i||_{2}^{2}$,同样可画出其在二维平面的图像,如下:
- 二维平面下 $L2$正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此$J_0$与$L$相交时使得 $w_1$ 或 $w_2$ 等于零的机率小了许多,这就是为什么 $L2$正则化不具有稀疏性的原因。
- L2正则化也称为权重衰减,因为它强制权重朝零衰减(但不完全为零)。
3.4 L1 & L2正则化总结
- 无论是L1 还是 L2正则化,正则化力度越大(正则化系数),会放大惩罚项的值,使得曲线越平滑。
- L1正则化:随着 $lambda $ 值的增大,系数大部分为 $0$。
- L2正则化:随着 $lambda $ 值的增大,系数大部分减小,基本不为 $0$。
- L1正则化用于特征之间有关联的情况,经过 L1正则化以后,系数更容易趋近于 $0$,这会导致部分特征值会被忽略掉,起到特征选择的作用。
- L2正则化:适用于特征之间没有关联的情况。
4 其他相关正则化技术
4.1 Dropout
这是最有趣的正则化技术类型之一。 它也产生非常好的结果,因此是深度学习领域中最常用的正则化技术。
Dropout可以参考本博客《机器学习——正则化方法Dropout 》。
Data Augmentation可以参考本博客《机器学习——数据增强》。
Early stopping 是一种交叉验证策略,我们将训练集的一部分保留为验证集。 当我们看到验证集的性能越来越差时,我们立即停止了对模型的训练。 这称为提前停止。
早停法是一种被广泛使用的方法,在很多案例上都比正则化的方法要好。图1是我们经常看到论文中出现的图,也是使用早停法出现的一个结果。
其基本含义:在训练中计算模型在验证集上的表现,当模型在验证集上的表现开始下降的时候,停止训练,这样就能避免继续训练导致过拟合的问题。其主要步骤如下:
1. 将原始的训练数据集划分成训练集和验证集
2. 只在训练集上进行训练,并每个一个周期计算模型在验证集上的误差,例如,每15次epoch(mini batch训练中的一个周期)
3. 当模型在验证集上的误差比上一次训练结果差的时候停止训练
4. 使用上一次迭代结果中的参数作为模型的最终参数
然而,在现实中,模型在验证集上的误差不会像上图那样平滑,而是像下图一样:
也就是说,模型在验证集上的表现可能咱短暂的变差之后有可能继续变好。上图在训练集迭代到400次的时候出现了16个局部最低。其中有4个最低值是它们所在位置出现的时候的最低点。其中全局最优大约出现在第205次迭代中。首次出现最低点是第45次迭代。相比较第45次迭代停止,到第400次迭代停止的时候找出的最低误差比第45次提高了1.1%,但是训练时间大约是前者的7倍。但是,并不是所有的误差曲线都像上图一样,有可能在出现第一次最低点之后,后面再也没有比当前最低点更低的情况了。所以我们看到,早停法主要是训练时间和泛化错误之间的权衡。尽管如此,也有某些停止标准也可以帮助我们寻找更好的权衡。
如何使用早停法
停止标准简介
停止标准有很多,也很灵活,大约有三种。在给出早停法的具体标准之前,我们先确定一下符号。假设我们使用E作为训练算法的误差函数,那么Etr(t)是训练数据上的误差,Ete(t)是测试集上的误差。实际情况下我们并不能知道泛化误差,因此我们使用验证集误差来估计它。
停止标准选择规则
一般情况下,“较慢”的标准会相对而言在平均水平上表现略好,可以提高泛化能力。然而,这些标准需要较长的训练时间。其实,总体而言,这些标准在系统性的区别很小。主要选择规则包括:
- 除非较小的提升也有很大价值,负责选择较快的停止标准
- 为了最大可能找到一个好的方案,使用GL标准
- 为了最大化平均解决方案的质量,如果网络只是过拟合了一点点,可以使用PQ标准,否则使用UP标准