详细介绍:【深度学习日记】调参侠指南
基础:超参数与模型结构
1. 模型结构相关参数
- 网络深度/宽度
- 层数越深、通道越宽 → 模型表达能力越强,但训练难度增加。
- 激活函数
- 默认使用 ReLU
- 若出现“神经元死亡”问题,可尝试LeakyReLU, GELU。
- 卷积核大小与步长
- 小卷积核 (3×3) 一般优于大卷积核 (5×5 以上)
- 步长一般设置为 1,便于保持特征。
- 归一化方式
- 常见:BatchNorm, LayerNorm, GroupNorm
- 训练时推荐 BatchNorm。
2. 优化相关超参数
- 学习率 (lr)
- 最关键的超参数之一,控制参数更新的速度。
- 学习率策略
- StepLR, CosineAnnealingLR, Warmup 等。
- 批大小 (batch size)
- 太小 → 波动大
- 太大 → 可能降低泛化能力
- 常用:32、64、128。
- 优化器
- 常用:SGD (带 momentum), Adam, AdamW。
- 权重衰减 (weight decay)
- 起正则化作用,防止过拟合
- 常设:1e-4、5e-4。
- Dropout 比例
- 防止过拟合
- 建议范围:0.2 ~ 0.5。
实用技巧
1. 学习率寻找 (Learning Rate Finder)
方法:先从一个较小的学习率开始训练若干 batch,并不断线性或指数级增加学习率。
- 观察 loss 的变化趋势。
- 选择 loss 快速下降前的那个学习率。
2. 冷启动 vs 热启动 (迁移学习)
- 冷启动
- 从头训练。
- 适合自定义结构/小素材集。
- 热启动
- 使用预训练模型。
- 适合下游任务(如迁移学习、微调)。
3. 模型调参顺序建议
- 验证数据和网络结构是否正常(先跑通)。
- 调整学习率和 batch_size。
- 更换优化器和学习率策略。
- 增加正则化(weight decay, dropout)、资料增强(增加模型鲁棒性)
- 微调网络结构(增加或删除层)
4. 数据增强 (Data Augmentation)
- 图像增强
- 翻转、裁剪、旋转、加噪、亮度调整等。
- 文本增强
- 同义词替换、句子重组。
- 时序数据增强
- 时间抖动、平移、噪声、剪裁。
5. 模型验证与诊断
训练损失不下降
→ 检查学习率、梯度爆炸、数据格式。
验证集精度低
→ 可能过拟合,需要增加正则化或数据增强。
Overfitting(过拟合)
- 加 Dropout
- Early Stopping
- 权重衰减
Underfitting(欠拟合)
- 增大模型容量(更复杂)
- 减少正则化
进阶训练策略
一、学习率调度策略
| 策略名称 | 特点 | 推荐场景 |
|---|---|---|
| StepLR | 每 n 个 epoch 乘以一个固定系数 | 简单有效,适用于大多数任务 |
| CosineAnnealingLR | 按余弦函数衰减,帮助 warmup | 图像任务,效果稳定 |
二、混合精度训练(FP16)
- 使用
torch.cuda.amp模块实现 - 可显著降低显存使用,加快训练速度
- 特别适用于大模型训练或显存有限的场景
三、多卡并行策略
- DistributedDataParallel(DDP):推荐运用,支持多机多卡训练
- 模型并行:将大模型拆分到不同 GPU 上执行,适用于超大模型
四、早停策略(Early Stopping)
- 当验证集损失连续多轮不再下降时,提前终止训练
- 避免过拟合和计算资源浪费
深度学习超参数调优速查表
| 超参数 | 推荐范围/值 | 常见问题 | 应对策略 |
|---|---|---|---|
| 学习率 | 1e-3 ~ 1e-4 | loss震荡,不收敛 | 尝试Warmup或减小学习率 |
| batch size | 32 ~ 128 | 精度下降 | 调整归一化层或增加迭代次数 |
| Dropout | 0.3 ~ 0.5 | 过拟合 | 增加Dropout或应用CutMix |
| 权重衰减 | 1e-4 | 模型震荡 | 使用AdamW或SGD+decay |
| 优化器 | Adam / SGD | 收敛慢 | 尝试带momentum的SGD |
自动化调参器具推荐
| 工具名称 | 特点 | 适用场景 |
|---|---|---|
| Optuna | 轻量级贝叶斯优化应用 | 承受PyTorch和lightning框架 |
| Ray Tune | 高性能分布式超参数搜索框架 | 大规模超参数优化 |
| Weights & Biases | 可视化超参数效果和实验管理 | 实验记录与结果对比 |
实用训练经验分享
- 从小模型、小数据开始
- 先用小网络、小数据验证流程可行性,再迁移到大模型、大材料
- 优先调整学习率
- 大多数训练难题都是由学习率设置不当引起
- 记录实验日志
- 养成记录每次超参数和实验结果的习惯
- 合理使用可视化工具
- 使用TensorBoard等工具监控loss、精度曲线变化
- 保持耐心与坚持
- 深度学习需要大量试错,经验积累越多效果越好
浙公网安备 33010602011771号