第二章第5节 权重衰减

上一节中我们观察了过拟合现象,即魔性的训练误差远小于它在测试集上的误差。虽然增大训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价高昂。本节介绍应对过拟合问题的常用方法:权重衰减(weight decay)。

2.5.1 方法

权重衰减等价于L_2范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。我们先描述L_2范数正则化,再解释它为何又称权重衰减。

L_2范数正则化在模型原损失函数基础上添加L_2范数惩罚项,从而得到训练所需要最小化的函数。L_2范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积。以“线性回归”一节中的线性回归损失函数

                                                                                      \ell(w_1, w_2, b) = \frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right)^2

为例,其中w_1,w_2是权重参数,b是偏差参数,样本i的输入为x_1^{(i)}, x_2^{(i)},标签为y^{(i)},样本数为n。将权重参数用向量\boldsymbol{w} = [w_1, w_2]表示,带有L_2范数惩罚项的新损失函数为

                                                                                       \ell(w_1, w_2, b) + \frac{\lambda}{2n} \|\boldsymbol{w}\|^2

其中超参数\lambda > 0。当权重参数均为0时,惩罚项最小。当\lambda较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素接近0。当\lambda设为0时,惩罚项完全不起作用。上式中L_2范数平方\|\boldsymbol{w}\|^2展开后得到w_1^2 + w_2^2。有了L_2范数惩罚项后,在小批量随机梯度下降中,我们将“线性回归”一节中权重w_1w_2的迭代方式更改为

                                                                                       \begin{aligned} w_1 &\leftarrow \left(1- \frac{\eta\lambda}{|\mathcal{B}|} \right)w_1 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_1^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right),\\ w_2 &\leftarrow \left(1- \frac{\eta\lambda}{|\mathcal{B}|} \right)w_2 - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}}x_2^{(i)} \left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right). \end{aligned}

可见,L_2范数正则化令权重w_1w_2先自乘小于1的数,再减去不含惩罚项的梯度。因此,L_2范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。实际场景中,我们有时也在惩罚项中添加偏差元素的平方和。

2.5.2 高维线性回归实验下面,我们以高维线性回归为例来引入一个过拟合问题,并使用权重衰减来应对过拟合。设数据样本特征的维度为p。对于训练数据集和测试数据集中特征为x_1, x_2, \ldots, x_p的任一样本,我们使用如下的线性函数来生成该样本的标签:                                                                                                                       y = 0.05 + \sum_{i = 1}^p 0.01x_i + \epsilon

其中噪声项\epsilon服从均值为0、标准差为0.01的正态分布。为了较容易地观察过拟合,我们考虑高维线性回归问题,如设维度p=200;同时,我们特意把训练数据集的样本数设低,如20。

2.5.3 从零开始实现

下面先介绍从零开始实现权重衰减的方法。我们通过在目标函数后添加L_2范数惩罚项来实现权重衰减。

初始化模型参数

首先,定义随机初始化模型参数的函数。该函数为每个参数都附上梯度。

定义L_2范数惩罚项

下面定义L_2范数惩罚项。这里只惩罚模型的权重参数。

定义训练和测试

下面定义如何在训练数据集和测试数据集上分别训练和测试模型。与前面几节中不同的是,这里在计算最终的损失函数时添加了L_2范数惩罚项。

观察过拟合

接下来,让我们训练并测试高维线性回归模型。当lambd设为0时,我们没有使用权重衰减。结果训练误差远小于测试集上的误差。这是典型的过拟合现象。

使用权重衰减

下面我们使用权重衰减。可以看出,训练误差虽然有所提高,但测试集上的误差有所下降。过拟合现象得到一定程度的缓解。另外,权重参数的L_2范数比不使用权重衰减时的更小,此时的权重参数更接近0。

2.5.4 简洁实现

这里我们直接在构造Trainer实例时通过wd参数来指定权重衰减超参数。默认下,Gluon会对权重和偏差同时衰减。我们可以分别对权重和偏差构造Trainer实例,从而只对权重衰减。

与从零开始实现权重衰减的实验现象类似,使用权重衰减可以在一定程度上缓解过拟合问题。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值