模型调参
手动调参 (Manual Hyperparameter Tuning)
基线选择
- 从高质量工具包的默认参数开始。
- 参考相关论文里的超参数(尤其是特定数据集上的经验参数)。
- 这些参数可能不是最优的,但作为起点足够好。
调参过程
- 一次只调整一个超参数,避免无法判断贡献来源。
- 调整后重新训练模型,观察验证集指标(精度、损失)。
- 探索模型对不同超参数的敏感度:
- 调不好 → 模型效果差
- 调好了 → 进入一个“合理范围”
- 使用对超参数不敏感的优化器能减少调参难度,例如 Adam(较鲁棒) vs SGD(对学习率等较敏感)。
调参管理与复现
实验记录
- 记录训练日志、超参数配置和关键指标。
- 简单方法:txt 日志 + Excel 保存指标。
- 工具:TensorBoard、Weights & Biases,支持可视化与实验对比。
复现实验的挑战
- 环境差异:硬件(不同 GPU)、库版本、Python 版本。
- 代码版本控制:需要记录每个版本和依赖库。
- 随机性:不同随机种子可能导致结果波动 → 说明模型稳定性不足。
- 解决方法:优化不稳定部分,或使用 模型集成(ensemble)。
自动化调参(AutoML)
AutoML 范围
- 自动化数据清理、特征提取、模型选择。
核心方法
- HPO(Hyperparameter Optimization):通用方法,通过搜索算法找到最优超参数集合。
- NAS(Neural Architecture Search):专注于神经网络,自动设计网络结构。
发展趋势
- AutoML 已成为当前的重要技术瓶颈和研究热点。
- 越来越多的任务正在逐步转向使用自动化调参。
超参数优化
搜索空间(Search Space)
在调参前需要 定义搜索空间,即超参数可能的取值范围。
不同类型超参数的分布方式不同:
- 离散型(categorical):如选择 backbone(ResNet、VGG、MobileNet)。
- 连续型(uniform/log-uniform):如学习率
[1e-6, 1e-1]
,常用对数分布。 - 整数型(categorical):如 batch size
[8, 16, 32, 64, …]
。
搜索空间可能指数级膨胀,需要合理设计,避免浪费计算资源。
HPO 方法分类
1. 黑箱优化(Black-box Optimization)
把每一次训练当作“黑箱实验”,完整训练模型后评估结果。
- 特点:每次尝试都完整执行 → 成本高但结果精确。
- 常见方法:
- Grid Search(网格搜索):遍历所有组合,能保证找到最好结果,但维度灾难严重。
- Random Search(随机搜索):随机抽取超参数组合,效率高于网格搜索。
- Bayesian Optimization(贝叶斯优化):基于已有试验结果建立代理模型,预测下一步最可能的好结果。
- 遗传算法、模拟退火:启发式搜索方法。
2. 多保真优化(Multi-fidelity Optimization)
不必每次都完整训练模型,而是用近似方式加速搜索。
- 方法:
- 用子集数据训练(降低成本)。
- 缩小模型规模(减少层数、通道数)。
- 早停(bad config 提前停止)。
- 常见方法:
- Successive Halving(逐次减半):先随机采样大量参数组合,训练少量 epoch,淘汰一部分,再让剩下的训练更久,直到留下最佳组合。
- Hyperband:在 Successive Halving 基础上改进,平衡“探索(n 多样性)”和“利用(m 更长训练)”,先广泛探索,再逐步深入。
常见策略对比
Grid Search
- 优点:保证覆盖所有可能组合 → 最优解必然在其中。
- 缺点:维度灾难(组合数过大)。
Random Search
- 优点:效率高,能快速找到较优解。
- 缺点:不保证找到全局最优。
- 实践中常作为起点方法。
Bayesian Optimization(BO)
- 核心:使用代理模型(surrogate model) 近似目标函数。
- 常用模型:高斯过程、随机森林。
- 通过采集函数(Acquisition Function) 决定下一次尝试点(平衡探索与利用)。
- 缺点:前期效果接近随机搜索,过程是 顺序的(sequential),并行化难度大。
Successive Halving
- 思路:用有限预算逐步筛选,资源集中在表现最好的参数组合上。
- 优点:效率高,避免浪费在差的组合上。
Hyperband
- 执行多个 Successive Halving,每次调整探索/利用比例。
- 优点:同时兼顾 广度探索 和 深度利用。
神经网络架构搜索(Neural Architecture Search, NAS)
NAS 基本概念
神经网络的超参数种类很多:
- 拓扑结构(ResNet 风格、MobileNet 风格、层数)。
- 层内参数(卷积核大小、通道数、隐藏单元数等)。
NAS 的目标:自动化设计神经网络,而不是依赖人工经验。
- 如何定义搜索空间(哪些架构候选)。
- 如何探索搜索空间(搜索策略)。
- 如何评估性能(性能估计方法)。
NAS 方法
1. 基于强化学习 (RL) 的 NAS
- 代表工作:Zoph & Le (2017)。
- 使用一个 RNN 控制器生成网络架构。
- 训练子模型 → 得到准确率作为奖励 → 更新控制器。
- 缺点:计算量极大(~2000 GPU 天)。
- 加速方法:性能预测、参数共享(EAS、ENAS)。
2. One-shot 方法
- 在一个大模型里同时包含大量候选架构。
- 不同子架构共享参数(一次训练覆盖多种结构)。
- 只需比较候选架构的排序,而不必精确训练到收敛。
- 流程:
- 训练 one-shot 超网(supernet)。
- 快速评估不同子网(比如跑少量 epoch)。
- 选出表现最好的架构,再从头完整训练。
3. 可微分架构搜索 (Differentiable Architecture Search, DARTS)
- 将“选择某个操作”放松为“加权和”,权重用 softmax 学习。
- 通过梯度下降同时优化:
- 网络参数。
- 架构参数(softmax 权重)。
- 最终选取权重最大的操作。
- 优点:大幅降低搜索成本(从几千 GPU 天 → ~3 GPU 天)。
扩展方向:Scaling CNNs
- CNN 可以通过三种方式扩展:
- 更深(更多层)。
- 更宽(更多通道)。
- 更大输入(更高分辨率)。
- EfficientNet 提出复合缩放:
- 同时缩放深度、宽度、分辨率,保证计算开销合理增长。
- 使用公式: