Stanford Pratical Machine Learning-超参数优化

本文最后更新于:1 年前

这一章主要介绍超参数优化,HPO algorithms

Search Space

常用可服用的搜索空间

  • Specify range for each hyperparameter

image-20230826214548697

  • The search space can be exponentially large

    • Need to carefully design the space to improve efficiency
  • summary:

    • backBone:【合理的区间:MobileNetV2_0.25,MobileNetV3_small,MobileNetV3_large,ResNet18_V1b,ResNet18_V1b,ResNet34_V1b,ResNet50_V1b,ResNet101_V1b,VGG16_bn,se_ResNext50_32*4d,ResNest50,ResNest200】(从模型的小到大排序的一个categorical(从一堆东西里面随机挑一个出来)的分布)根据自己的任务来选择,要求耗时比较严的话,可以选择比较小一点的网络;要求比较好的精度的话,可以选择比较大的网络;
    • learning rate:【合理的区间:1e-6,1e-1】(是一个log-uniform(先把值做一次log,将值落到小的区间内,在这个区间内均匀的随机取,取完之后再做指数回去))这个东西可以在比较大的区间内选取一些数;
    • batch size:【合理的区间:8,16,32,64,128,256,512】,做小批量随机梯度下降时取的批量的大小,采用的也是categorical,一般值会取2的n次方的整数,这样的话会在做计算的时候比较方便(矩阵是2的某个次方,计算的线程数也是2的某个次方,如果不能整除最后计算性能会打一点折扣),但是从优化的最后那个收敛来说其实取什么数值都差不多;
    • momentum:【合理的区间:0.85,0.98】(是一个uniform的分布,就是随机采样取一个值出来);
    • weight decay:【合理的区间:1e-6, 1e-2】,是一个正则化的东西;
    • detector:【合理的区间:faster-rcnn,ssd,yolo-v3,center-net】,在目标检测时用的是什么算法;

    ​ 这些值的选取需要有领域知识才能做很好的选取

    ​ 上面这些搜索空间具有一定的通用性(换一个不同的数据集,很有可能比较好的超参数也在这个搜索空间中)

    ​ 基本上搜索空间不可以太大(搜起来比较贵,指数级增长),也不能太小(可能会找不到想要的值,导致效果比较差)

HPO algorithms: Black-box or Multi-fidelity

  • Black-box: treats a training job as a black-box in HPO:
    • Completes the training process for each trial
  • Multi-fidelity: modifies the training job to speed up the search
    • Train on subsampled datasets
    • Reduce model size (e.g less #layers, #channels)
    • Stop bad configuration earlier

目的是实验,找出好用的参数!!!所以这里可以不用全部的数据,只是试一试,探索一下参数!找到好用的超参数之后,再全量训练(隐含思想:一个超参数在全量表现好的话,在子集应该也不错的捏!!!)

  • summary
    • black-box:每次一个训练任务 当作一个黑盒(每挑一组超参数,然后拿去训练,然后看模型的关键的衡量指标(精度、误差),再去选下一个怎么做)【可以适用于各种机器学习算法】;
    • Multi-fidelity(讨论比较多):因为训练一个模型太贵了(数据集很大,完整跑完很耗时间,还要试很多的话,太耗时了),所以可以不用把整个数据集给跑完(不关心最后的精度怎么样,只关心超参数之间的效果怎么样);以下是做法:
    • 对数据集下采样(超参数如果在小数据集上效果比较好的话,在完整数据集上也不差);
    • 将模型的变小(SGD的超参数在resnet18上效果差不多的话,在resnet152上也可能是不错的);
    • 在训练时会对数据扫很多遍,但是对于不好的超参数来说,它训练一遍就知道它的效果怎么样了,所以不需要等到完全训练完,看到效果不好的,及时停止;
    • 上面三点就是说,通过比较比较便宜点的但又跟完整训练有关系的任务来近似一个值,然后对超参数进行排序;
    • Black-box 虽然会贵一点但是任务计算量比较小或优化算法不知道的话,这个方法会比较好;Multi-fidelity知道一些任务的细节,可以将任务弄小一点,这样每次试验的时候成本没有那么高。

HPO algorithms

image-20230826220056605

Image Credit: Automated Machine Learning: State-of-The-Art and Open Challenges

  • Black-Box:
    • Grid Search:
    • Random Search:
    • Bayesian Optimization:
    • Simulated Annealing
    • Genetic Algorithms
  • Multi-Fidelity:
    • Modeling Learning Curve
    • Bandit Based(Successive Halving & Hyperband)

Two most common HPO strategies

  • Grid search: 暴力穷举

    • for config in search_space:
       train_and_eval(config)
      return best_result
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14

      - All combinations are evaluated

      - Guarantees the best results

      - Curse of dimensionality

      - Random search: 随机搜索

      - ```python
      for _ in range(n):
      config = random_select(search_space)
      train_and_eval(config)
      return best_result
    • Random combinations are tried

    • More efficient than grid search (empirically and in theory, shown in Random Search for Hyper-Parameter Optimization)

Grid性能要求太大,简单的可以,复杂的不行。Random实现超级简单,建议Random去搜索,尤其是机器或者性能不够的情况下。时间到了停了就行,拿目前最好的超参数来用就行昂!!!

Earlier Stopping策略:当在一段时间内(比如十分钟),Random搜索到的参数,没有在同样情况下,使模型精度提升,我们就停下来。不保证能够搜索到最好的,但是这种设计实现简单有效!

Bayesian Optimization (BO)

  • BO: Iteratively learn a mapping from HP to objective function. Based on previous trials. Select the next trial based on the current estimation.
  • Surrogate model
    • Estimate how the objective function depends on HP
    • Probabilistic regression models: Random forest, Gaussian process, …
  • Acquisition function
    • Acquisition max means uncertainty and predicted objective are high.
    • Sample the next trial according to the acquisition function
    • Trade off exploration and exploitation
  • Limitation of BO:
    • In the initial stages, similar to random search
    • Optimization process is sequential

image-20230826222358290

T = 2代表采样了两个点,图中黑色的两个点。横轴是Search Space,竖轴是我们的目标函数。

  • 黑色表示实际的数据,紫色代表我们的概率预测,虚线是我们预测的均值,上下的$\mu + \sigma$和$\mu - \sigma$是我们预测的置信度。
  • 见过的t,我们是确定的,因此就是具体的点。两条线之间,代表的就是我们预测不好的地方。随着采样的点越来越多,我们的预测就越来越准了昂!!!
  • Summary:
    • 在实际中用的不是那么多,因为相对来说比较复杂,但是是比较活跃的研究方向;
    • BO(贝叶斯优化),是会学从一个超参数HP到目标函数(精度、损失)的一个函数【机器学习是数据到我们想要东西之间的一个映射的关系】,这里是说每一个数据点是一个模型;
    • 就每做一个实验就会得到一个数据点,然后再拟合一个曲线出来;它在选下一个超参数去试的时候,会根据当前的评估,来的出数据点;
    • Surrogate模型:就是拟合超参数与目标函数之间关系的模型,可以采用概率的一些regression模型,可以使用随机森林或者是高斯过程;
    • 随着采样的越来越多,对整个模型的进步会越来越准。
    • 获取函数(Acquisition function)是贝叶斯优化中另一个要建模的模型,它会去评估下一个点应该去取谁(对每一个超参数都会去预测一个值);
    • 如果值大说明置信度没有那么高,就需要被拟合,所以下一个采样值,就是获取函数值最大的那个点;
    • 这边是一个exploration(到未知的地方看看)和exploitation(知道某一块位置不错,在那个位置上多看看)的一个过程【很多机器学习算法都是这个两个的权衡】
    • 在一开始的时候其实跟random search差不多(获取函数还不够好,就只能随机挑值来做),再后期的时候(建模比较准)会比较好一点;
    • 随机搜索是并行的算法,贝叶斯优化是顺序的算法(采下一个点需要等上一个完成才行)
    • 到底是什么时候会好一点,如果预算不够的话(搜的质量跟随机搜索的差不多),这样是划不来的;如果贝叶斯能在前期就做的比随机搜索好,那这样的划得来的。
    • 通常贝叶斯优化比随机搜索好的时候,一般来说是模型比较简单(模型比较简单的话,随机搜索也不差),或者是超参数的那个空间不那么复杂,或者有足够多的样本(需要很多的预算)

Multi-Fidelity

以下这两个算法在现实生活中用的比较多

Successive Halving

  • Save the budget for most promising config
  • Randomly pick configurations to train epochs
  • Repeat until one configuration left:
    • Keep the best n/2 configuration to train another m epochs
    • Keep the best n/4 configuration to train another 2m epochs
    • ……
  • Select n and m based on training budget and #epoch needed for a full training

image-20230827172249946

  • Summary:
    • 有很多超参数的选择,但是大部分超参数没有必要把它训练完,所以只需要把最靠谱的超参数给训练完就行了,剩下的早期就被淘汰了
    • 首先选取n个超参数,然后每个超参数训练m个epoch(把数据扫个m遍)【通常n会取大一点,m取小一点】;然后把好的超参数留下一半,剩下的一半不要,epoch还是m;在下一次迭代,超参数还是留下一半,而epoch变成了原来的两倍;这样的过程一直重复,直至留下一个超参数为止。【这样也就是说靠谱的超参数我们给多点资源】
    • n与m的选取要基于预算而言的(预算多n就取大一点);但是n与m不好取,这其实是一个exploration和exploitation的过程,在下一个算法会做改进。

Hyperband

  • In Successive Halving:

    • exploration
    • exploitation
  • Hyperband runs multiple Successive Halving, each time decreases n and increases m

  • More exploration first, then do more exploit

image-20230827172814519

  • Summary
    • 这个是在HPO上用的比较多的算法,所以我们在实践中是可以使用它的;
    • 在Successive Halving中n是一个exploration的过程(n越大每次试的东西就越多),而m是exploitation(m取决于每一个参数说跑的时间,跑的越长也就看的越准);nm代表的是每一次迭代中计算复杂度的多少;在计算的预算是固定的时候,nm应该是一个固定的数,所以在SH(Successive Halving)中每次都要调这个东西;
    • Hyperband就是跑多个SH,一开始会选大一点的n和小一点的m,但后面会逐渐的讲n变小m变大;
    • hyperband的好处是说,对n与m的选取不会那么敏感(会多跑几次,多几个组合),这样就不用怎么操心n还有算法在exploration与exploitation的权衡,这个算法都算了一遍;

Summary

  • Black-box HPO: grid/random search, bayesian optimization

  • Multi-fidelity HPO: Successive Halving, Hyperband

  • In practice, start with random search

  • Beware there are top performers

    • You can find them by mining your training logs, or what common configurations used in paper/code
  • 在HPO中有两种主流的算法:黑盒与Multi-fidelity

  • 黑盒:一个超参数进去一个模型出来,然后知道模型的好坏,里面有暴力搜索,随机搜索(用得比较多的,没有什么特别好的方法的话,用这个准没错),和贝叶斯优化(研究的一个大方向)

  • Multi-fidelity(通常在深度学习用得比较多):如果训练时间过长会选择一个相对来说比较小的做法,包括采样一个小数据集,小版本的网络,具体说的算法是SH与Hyperband,这些是说,在训练了一些轮数的时候,把不靠谱的给淘汰掉;

  • 注意一些Top performers(看看比赛中那些做的很好的人是怎么做的,看看那些算的最高分的论文在超参数的选择都差不多),在跑过很多数据集之后,会发现总有那么几个模型和几组参数在各个地方都跑的比较好,所以很有可能试那几个就行了;

References

  1. slides
  2. 笔记,文章中很多Summary的部分,搬了笔记,确实笔记写的很清楚,相见恨晚!!!

Stanford Pratical Machine Learning-超参数优化
https://alexanderliu-creator.github.io/2023/08/26/stanford-pratical-machine-learning-chao-can-shu-you-hua/
作者
Alexander Liu
发布于
2023年8月26日
许可协议