模型调参(Tuning)
模型参数对模型效果有影响较大, 在不同的问题中,我们不仅需要选择合适的模型,也要选择合适的参数
手动调参(Manual)
从默认参数(工具包默认参数、论文推荐参数)开始
不断调整参数,记录调整后的结果(tensorboard, weight & bias)
自动调参(Automated)
计算成本在下降,人力成本在上升
AutoML(Automated Machine Learning)
- 从数据清洗、特征提取到模型选择每一步均由AutoML自动完成
- 目前模型选择之前的步骤,AutoML完成效果并不好,主要能够解决的两个问题
- HPO(Hyperparameter optimization)选择合适的超参数
- NAS(Neural architecture search)网络架构搜索
HOP Algorithm 超参数选择
首先确定参数的搜索空间,例如
- 避免超参数空间过大,导致搜索成本过高
在搜索空间上采取特定的搜索算法进行搜索,主要分为两大类别
- Black-box 每个参数集选择进行一次完整的训练,训练完成后比较不同参数集模型效果
- Multi-fidelity 修改训练过程,降低搜索代价
- 在训练数据子集上训练
- 减小模型大小(减少层数,减少channel等)
- 提前终止某些效果明显较差的参数实验
两类常见的HPO算法
Grid Search 网格搜索
- 传入不同参数的多个值,搜索所有参数不同值的所有组合
- 获得 最优的参数值组合
- 随着参数数量的增加,组合数量呈指数级上升,训练成本较高
Random Search
- 与Grid Search类似,但是只随机选择n次参数组合
- 只搜索一部分参数组合空间,一定程度减少了训练成本
Bayesian Optimization(BO) 贝叶斯优化-不深入理解
通过不断地对数据进行采样(超参数与模型评价指标的对应关系)学习一个从超参数到模型评价指标(用该超参数训练出来的模型的评价指标)之间的函数,每次采样会根据以往的采样结果,选取采样点(online learning的感觉)。
Surrogate model
Acquisition function
- 每次新采样点选取 Acquisition max,即时Acquisition function最大的点
- Acquisition max的样本点 约等于 置信区间较大 + 可能取得较高评价指标的点(简单理解:置信区间小我就没必要再采样了,直接使用模型预测超参数;较高指标的超参数是模型追求的目标,总结就是 既要增加可信度又要找到最优解)
- Trade off exploration and exploitation 在 探索未知解 和 最优解附近深挖 的权衡
BO算法的局限性
- 算法的最初始阶段,近似于随机搜索
Successive Halving
算法如其名,比较简单
- 随机选择n个超参数组合,训练m轮
- 每m轮训练完毕,删除 n/2 个指标相对较差的超参数组合
- 不断重复第二步,直到只剩下一个超参数组合
根据具体的预算,选取n和m
Hyperband-实际使用比较多的算法
在Successive Halving算法中,n和m的选取很大程度上会影响最后获得最优超参数组合
- 资源固定的情况下,m*n = budget
- 当m选取不够大时,有些超参数组合可能在前m个epoch指标表现不好(训练不充分),导致提前被淘汰
- 当n选取不够大时,随机采样的超参数组合可能过少,无法找到最优解
Hyperband算法针对Successive Halving算法的以上问题,进行了针对性改进
- 运行多次 Successive Halving算法,每次运行降低n,增加m
- 先 exploration 再 exploitation,先 BFS 再 DFS
- 单次成本不变,多次运行,最后还是增加计算成本
总结
Neural Architecture Search(NAS) Algorithm
超参数选择中,除了学习率、epoch、batchsize等的训练超参数,还包括模型层数、隐藏层维度等的涉及到模型结构的参数
NAS算法用来解决模型结构相关参数的选择
NAS with Reinforcement Learning
The One-shot Approach(思想)
将网络架构与模型参数的学习连接在一起(既学网络架构,又学网络参数)
训练一个大模型,其子模型为各种各样的备选架构(先搞大杂烩,再从大杂烩里挑我要的)
问题在于 大模型资源耗费过大,如何解决?
Differentiable Architecture Search
每一层有多个候选网络/结构/模型
第l层的第i个候选网络的输出为 $0_i^l$
每一层后 select模块,权重为 $a^l$ ,对该层所有候选模型输出加权求和输入到 $l + 1 $ 层
最后选择每层中 参数最大的 候选模型
Scaling CNNs
对于卷积神经网络,有三种调整架构的方式
- 更深:增加层数
- 更宽:增加channel
- 更大的输入:提高输入图像分辨率
EfficientNet 提出了一种Scaling方式(调整一个,其他两个同时一起调节)