训练误差与泛化误差:
训练误差:模型在训练数据上的误差
泛化误差:模型在数据上的误差
验证数据集与测试数据集:
验证数据集:一个用来评估模型好坏的数据集,不可和训练数据集混在一起使用
测试数据集:只使用一次的数据集
K则交叉验证
在没有足够多的数据时使用
算法:将训练数据分为K块
For i=1…k
使用第i块作为验证数据集,其余作为训练数据集
报告K个验证集的误差平均
K通常为5或10
模型容量:
拟合各种函数的能力
低容量的 模型难以拟合训练数据
高容量的模型 可以记住所有的训练数据
使用均方范数作为硬性限制:
min l(w,b) subject to <θ(l表示 损失函数)
小的θ意味着更强的正则项
使用均方范数作为柔性限制:
对于每个θ,都可以找到λ使得 min l(w,b)+
λ
2
∣
∣
w
∣
∣
n
frac{λ}{2}||w||^n
2λ∣∣w∣∣n
超参数λ控制正则项的重要程度:λ=0:无作用 λ=无穷大 w->0
L2范数惩罚:
def l1_penalty(w): return torch.sum(w.pow(2))/2
简单实现,在SGD中
trainer=torch.optim.SGD([{"params":net[0].weight,'weight_decay':wd},{"params":net[0].bias}],lr=lr)
将罚写入训练算法,在每次更新前乘上这个小的值



