
1 行参数 | PyTorch 权重衰减指南从过拟合到泛化【免费下载链接】pytorch-deep-learningMaterials for the Learn PyTorch for Deep Learning: Zero to Mastery course.项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-deep-learning在 pytorch-deep-learning 课程仓库里训练 FoodVision Mini 时第 5 个 epoch 出过这样的结果train_loss 已经压到 0.3 以下还在往下走test_loss 却从第 4 个 epoch 开始掉头向上两条曲线越拉越远。模型不是没学到东西而是把训练集背下来了。权重衰减weight decay就是治这个的一行代码。一句话定性它是什么把模型的权重想象成一件毛衣权重衰减就是每次训练完把毛衣洗一遍、晾一回——洗多了纤维会缩水毛衣变瘦变小蓬松的臃肿也跟着消掉。权重大小就是尺寸λ 就是洗衣机转速。转得慢几乎没影响转得太猛毛衣直接缩水穿不上模型欠拟合。最小可运行示例只改一行这段代码改了 going_modular/going_modular/train.py 里的哪一行# train.py 第 47 行Adam 优化器加一个 weight_decay 参数 # 0.3 不是拍脑袋来自 ViT 论文 ImageNet-1k 预训练配置 optimizer torch.optim.Adam(model.parameters(), lrLEARNING_RATE, weight_decay0.3) # 每步更新前先把权重乘以一个略小于 1 的系数就这一处。不传weight_decay时默认是 0等于完全关闭传了之后每次optimizer.step()都会顺手把所有权重往 0 的方向拽一小步。对照仓库里复现 ViT 论文的写法同一个参数直接决定量级# 08_pytorch_paper_replicating.ipynbViT 预训练论文 4.1 节 optimizer torch.optim.Adam(paramsvit.parameters(), lr1e-3, weight_decay0.1) # 迁移微调同一模型时降到 0.05——预训练管长得瘦微调管别动太多参数怎么选对号入座你的场景weight_decay 建议仓库出处小数据集 小模型训练/测试曲线明显分叉1e-4 ~ 1e-3先试 1e-4going_modular/train.py 的 Adam 配置ViT / Transformer 类架构预训练0.1 ~ 0.308_pytorch_paper_replicating.ipynb迁移学习微调预训练好的权重比预训练小一个数量级0.005 ~ 0.0506_pytorch_transfer_learning.ipynb数据集大、样本多ImageNet 级别0.1 起步ViT 论文配置别纠结。先开 1e-4 跑一轮测试损失降了就不动它没动再翻一倍。这个参数没有最优值只有够用。踩过的坑现象、原因、一行修复坑 1参数没衰减step 顺序错了。现象是加了weight_decay但权重大小纹丝不动。原因是optimizer.step()调在了loss.backward()之前。看 going_modular/going_modular/engine.py 的train_step()顺序是loss.backward()后紧跟optimizer.step()——衰减发生在 step 内部顺序一换梯度还没算就更新等于白加。坑 2把 0 当默认值用。现象是代码里根本没写weight_decay却以为在正则化。原因是 PyTorch 的 Adam 和 SGD 默认weight_decay0等于关闭。修复显式写出来哪怕先写1e-4别靠默认值。坑 3weight_decay 和学习率衰减搞混。现象是调了weight_decay发现 loss 震荡没变化转头去改学习率。原因权重衰减惩罚的是权重数值本身学习率调度改的是更新步长两者正交。修复StepLR之类的调度器管 lrweight_decay管参数大小各调各的。跟数据增强、学习率调度怎么配合说白了权重衰减是最便宜的一层正则化先加它再谈别的。数据增强仓库里用的是transforms.Resize这类见 going_modular/going_modular/data_setup.py管输入多样性权重衰减管输出权重大小学习率调度管更新步长三者互不替代。经验顺序先开 1e-4 的权重衰减跑一轮不行再叠增强最后才动学习率。收尾权重衰减就是优化器里的一个参数方向对了一行代码就能把测试损失压下来。别盯着 loss 曲线猜去 going_modular/ 里把 train.py 抄出来分别跑一遍 0 和 1e-4看两条测试损失曲线谁更低。【免费下载链接】pytorch-deep-learningMaterials for the Learn PyTorch for Deep Learning: Zero to Mastery course.项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-deep-learning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考