学习率和优化器需谨慎设置:建议从1e-3开始用Adam,配合ReduceLROnPlateau衰减或warmup+余弦退火;batch size宜从32/64起步,合理设置num_workers和pin_memory;辅以早停、梯度裁剪、AMP及BatchNorm、残差连接、权重衰减等策略提升稳定性与泛化。

选择合适的学习率和优化器
学习率是深度学习调优中最敏感的超参数。设得太大,损失震荡甚至发散;设得太小,收敛极慢、易陷局部极小。建议从 1e-3 开始尝试 Adam 优化器(默认学习率 0.001),它对大多数任务鲁棒性强、收敛稳定。若训练后期 loss 下降停滞,可启用学习率衰减,如使用 ReduceLROnPlateau(PyTorch 中为 torch.optim.lr_scheduler.ReduceLROnPlateau),在验证 loss 连续若干轮不下降时自动缩小学习率。
对于图像分类等任务,也可尝试带 warmup 的学习率调度(如线性 warmup + 余弦退火),前 5–10 个 epoch 缓慢提升学习率,避免初始梯度爆炸;后续平滑下降,增强泛化。
合理设置 batch size 与数据加载
batch size 不仅影响显存占用,还左右梯度估计质量和训练稳定性。太小(如 8 或 16)导致梯度噪声大、收敛波动;太大(如 512+)虽加速单步计算,但可能降低泛化能力,且需配合更大的学习率(常按线性缩放规则调整:新学习率 = 原学习率 × 新 batch / 原 batch)。
实际操作中:
立即学习“Python免费学习笔记(深入)”;
- 从 32 或 64 起手,在 GPU 显存允许前提下逐步增大,观察验证集准确率与训练速度平衡点
- 用
DataLoader的num_workers > 0(如 4–8)并开启pin_memory=True,加速 CPU 到 GPU 的数据搬运 - 对图像数据,启用
torchvision.transforms.AutoAugment或RandAugment替代手工组合增强,提升泛化同时减少过拟合风险
早停、梯度裁剪与混合精度训练
防止过拟合和训练崩溃的关键三招:
- 早停(Early Stopping):监控验证 loss,若连续 10–15 轮未改善则终止训练,并恢复最佳模型权重。注意设定 patience 值,避免因验证波动误停
-
梯度裁剪(Gradient Clipping):尤其在 RNN/LSTM 或长序列建模中,添加
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0),防止梯度爆炸 -
混合精度训练(AMP):用
torch.cuda.amp.autocast()+GradScaler,自动将部分计算转为 float16,通常提速 1.5–3 倍、节省近一半显存,且几乎不影响精度
模型结构与正则化微调
不盲目堆叠层数,优先关注结构合理性:
- 用 BatchNorm 替代 Dropout 在 CNN 主干中更稳定(Dropout 更适合全连接层末端)
- 残差连接(ResNet-style)能缓解深层网络梯度消失,哪怕只加在 3 层以上模块间也有效
- 对小数据集,冻结预训练主干(如
model.backbone.requires_grad = False),仅微调分类头;数据量上升后再解冻部分层联合训练 - 加入轻量级正则项:L2 权重衰减(
weight_decay=1e-4常见)、Label Smoothing(smooth_factor=0.1)可提升校准性和鲁棒性










