动手学深度学习(pytorch)学习记录15-正则化、权重衰减[学习记录]

我们可以通过收集更多的训练数据来缓解过拟合,但这可能成本很高,耗时很多或完全失去控制,在短期内难以做到。 假设已经有了足够多的数据,接下来将重点放在正则化技术上。

权重衰减是使用最广泛的正则化技术之一,它通常也被称为L2正则化
技术方法:通过函数与零之间的距离来度量函数的复杂度;
如何精确测量这种‘距离’?
一个简单的方法是通过线性函数f(x)=w^(T) x 中权重向量的某个范数(如||w||^2)来度量复杂度
最常用的方法是将范数作为惩罚项添加到最小化损失中。
那么原来的训练目标“最小化训练标签上的预测损失”调整为“最小化训练标签上的预测损失+惩罚项”
如果权重向量增长过大,学习算法可能会更集中于最小化权重范数。
线性回归损失是:
在这里插入图片描述
在损失函数中添加范数后:

在这里插入图片描述

通过正则化常数λ(非负超参数)来权衡这个额外的惩罚。这里除以2,当取一个2次函数的倒数时,2和1/2会抵消让更新表达式简单美观

用简单的例子实现权重衰减

由于沐神的d2l包太好用了,部分函数就直接调用包里的,使代码更简洁

%matplotlib inline
import torch
from torch import nn
from d2l import torch as d2l

用下面的公式生成数据

在这里插入图片描述

标签是线性函数,被噪声破坏,为了突出过拟合,增加线性回归维度为200,但只提供包含20个样本的数据集训练。

n_train, n_test, num_inputs, batch_size = 20, 100, 200, 5
true_w, true_b = torch.ones((num_inputs, 1)) * 0.01, 0.05
train_data = d2l.synthetic_data(true_w, true_b, n_train)
train_iter = d2l.load_array(train_data, batch_size)
test_data = d2l.synthetic_data(true_w, true_b, n_test)
test_iter = d2l.load_array(test_data, batch_size, is_train=False)

定义一个函数来随机初始化模型参数

def init_params():
    w = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walfar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值