0%

实用ML_7.模型调参

模型调参(Tuning)

模型参数对模型效果有影响较大, 在不同的问题中,我们不仅需要选择合适的模型,也要选择合适的参数

  1. 手动调参(Manual)

    • 从默认参数(工具包默认参数、论文推荐参数)开始

    • 不断调整参数,记录调整后的结果(tensorboard, weight & bias)

  2. 自动调参(Automated)

    • 计算成本在下降,人力成本在上升

  3. AutoML(Automated Machine Learning)

    • 从数据清洗、特征提取到模型选择每一步均由AutoML自动完成
    • 目前模型选择之前的步骤,AutoML完成效果并不好,主要能够解决的两个问题
      1. HPO(Hyperparameter optimization)选择合适的超参数
      2. NAS(Neural architecture search)网络架构搜索

HOP Algorithm 超参数选择

首先确定参数的搜索空间,例如

  • 避免超参数空间过大,导致搜索成本过高

在搜索空间上采取特定的搜索算法进行搜索,主要分为两大类别

  1. Black-box 每个参数集选择进行一次完整的训练,训练完成后比较不同参数集模型效果
  2. Multi-fidelity 修改训练过程,降低搜索代价
    • 在训练数据子集上训练
    • 减小模型大小(减少层数,减少channel等)
    • 提前终止某些效果明显较差的参数实验

两类常见的HPO算法

  1. Grid Search 网格搜索

    • 传入不同参数的多个值,搜索所有参数不同值的所有组合
    • 获得 最优的参数值组合
    • 随着参数数量的增加,组合数量呈指数级上升,训练成本较高
  2. 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

算法如其名,比较简单

  1. 随机选择n个超参数组合,训练m轮
  2. 每m轮训练完毕,删除 n/2 个指标相对较差的超参数组合
  3. 不断重复第二步,直到只剩下一个超参数组合

根据具体的预算,选取n和m

Hyperband-实际使用比较多的算法

在Successive Halving算法中,n和m的选取很大程度上会影响最后获得最优超参数组合

  • 资源固定的情况下,m*n = budget
  • 当m选取不够大时,有些超参数组合可能在前m个epoch指标表现不好(训练不充分),导致提前被淘汰
  • 当n选取不够大时,随机采样的超参数组合可能过少,无法找到最优解

Hyperband算法针对Successive Halving算法的以上问题,进行了针对性改进

  1. 运行多次 Successive Halving算法,每次运行降低n,增加m
  2. 先 exploration 再 exploitation,先 BFS 再 DFS
  3. 单次成本不变,多次运行,最后还是增加计算成本

总结

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方式(调整一个,其他两个同时一起调节)

总结