权重衰减 学习笔记
在探讨优化器在PyTorch中的实现时,我发现PyTorch允许优化器接受一个权重衰减参数(Weight decay),用以防止模型过拟合。于是我深入了解这方面的内容,形成学习笔记一篇。
基本介绍
权重衰减是一个经典的正则化技术,目的是减轻模型的过拟合现象。
正则化是一种改善模型的泛化能力的技术,可以防止过拟合。正则化包括数据正则化,结构正则化和标签正则化。除了在损失函数中引入L1范数或L2范数进行正则化外,也可以采用诸如Dropout 技术进行。
在深度学习中,模型训练通常采用梯度下降法来最小化损失函数,梯度下降法的目标是找到损失函数的局部最小值,使模型有最好的的预测能力。但是,如果模型的参数足够多,模型就更可能识别出训练集数据的特征,缺失了对数据的泛化性,造成过拟合的问题。即使模型在训练集上表现很好,但在测试集或真是数据上表现就会下降。
技术方法
权重衰减通过在损失函数的值中引入正则化项来解决问题。在PyTorch的实现中,正则化项在优化器中被直接添加到梯度上(AdamW的改进则是直接将正则化项放到最后进行添加,使正则化的作用能直接作用于参数,免于被动量等其他优化器措施影响)。正则化项通常采用的是L1范数或L2范数。
采用L2范数的正则化是指将模型的权重的平方和添加到损失函数中,乘以一个较小的正则化参数 λ \lambda λ。 在训练过程中,梯度下降法将计算损失函数值和每个参数的梯度,权重衰减的正则化项将被添加到梯度中,从而导致权重往小的方向发展。
模型权重数值越小,模型的复杂度越低。
模型的复杂度低,就不容易识别到数据个体的特征,学习到的是数据的共通特征,也就是具有了良好的泛化性。
假设损失函数
L
(
w
,
b
)
L(w,b)
L(w,b),其中,
w
w
w和
b
b
b分别代表模型的权重和偏置,则权重衰减的实现为:
L
′
(
w
,
b
)
=
L
(
w
,
b
)
+
λ
⋅
∣
∣
w
∣
∣
2
L'(w,b)=L(w,b)+\lambda\cdot||w||^2
L′(w,b)=L(w,b)+λ⋅∣∣w∣∣2
其中
∣
∣
w
∣
∣
2
||w||^2
∣∣w∣∣2表示参数向量的L2范数的平方和
L1范数指向量各元素的绝对值之和,该范数被称为曼哈顿范数,计算出来的距离也被称为曼哈顿距离
L2范数指向量各元素的平方和开方,该范数被称为欧几里得范数,在欧几里得空间内计算出来的距离为长度
需要注意的是,正则化参数$ \lambda 的选择对模型的性能有重要影响。较小的 的选择对模型的性能有重要影响。较小的 的选择对模型的性能有重要影响。较小的\lambda 值会导致较强的正则化效果,可能会使模型欠拟合。而较大的 值会导致较强的正则化效果,可能会使模型欠拟合。而较大的 值会导致较强的正则化效果,可能会使模型欠拟合。而较大的\lambda$值可能会减少正则化效果,使模型过拟合。因此,选择合适的正则化参数是权衡模型复杂度和泛化能力的关键。
图像解释
如下图,假设绿色部分Loss均为2,是图中的Loss最低点,而我们的目标是让模型的权重更小,因此我们希望两个权重都能更接近坐标原点。
画出L2范数, L 2 = w 1 2 + w 2 2 L2=w_1^2+w_2^2 L2=w12+w22,越靠近坐标原点L2范数越小。如下图所示:
可以看到,模型使用梯度下降进行学习,有往绿环偏移的趋势,而L2范数则会使模型参数变小。两者共同作用,将会是模型权重停留在A点,这也是满足Loss最小化和参数最小化的点,带有该参数的模型对问题既有良好的准确性,也有良好的泛化性。
L1范数
L1 范数的可视化图像可见下图的左图部分。它可以产生稀疏解,即让部分参数为零,从而实现特征选择。L2正则化不会产生稀疏解,但可以让参数更小,更平滑。为了达成使模型总体最小的目标,权重衰减使用了L2 范数。
但根据使用目标的不同,L1 范数仍然具有它的优点:
- L1正则化是对模型参数的绝对值求和,也称为L1范数。L2正则化是对模型参数的平方求和,再开平方,也称为L2范数或欧几里得范数。
- L1正则化可以产生稀疏解,即让部分参数为零,从而实现特征选择。L2正则化不会产生稀疏解,但可以让参数更小,更平滑。
- L1正则化的优点是可以减少无关特征的影响,降低模型的维度,提高模型的可解释性。L1正则化的缺点是可能会损失一些重要特征,导致欠拟合,而且不太容易优化。
- L2正则化的优点是可以防止模型过拟合,提高模型的稳定性,而且容易优化。L2正则化的缺点是不能实现特征选择,降低模型的可解释性,而且可能会引入一些噪声特征。
- L1损失测量的是预测值和实际值之间的绝对差值,而MSE损失测量的是预测值和实际值之间的平方差值。这意味着L1损失对离群值更加稳健,因为绝对值函数对所有的错误都一视同仁,而L2(MSE)损失由于是平方运算,对较大的错误给予更多的权重。
- L1正则化和L2正则化可以结合起来使用,称为弹性网络(Elastic Net)。弹性网络可以兼顾稀疏性和平滑性,同时避免L1正则化和L2正则化各自的缺陷。
损失函数
L1范数和L2范数既可以用在对Loss函数进行处理上(权重衰减),也可以直接当作损失函数,用以衡量模型的优劣。L1损失和MSE损失是衡量回归问题中预测值和实际值之间误差的两种不同方式,L1损失对离群值更加稳健,L2(MSE)损失对较大的误差给予更多的权重。
这里只是简单的介绍权重衰减的应用与作用,关于其原理,包括为什么模型权重数值越小,模型的复杂度越低及不使用其他范数进行正则化,可以参考以下文章。