实用机器学习笔记第六章-模型调参

一、模型调参

本章主要讲如何对超参数进行调节,得到比较好的结果

1. 手工调节超参数

  • 从一个比较好的基准线(baseline)开始
    • eg:高质量的工具包的默认参数、别人论文的超参数
  • 调一个值,重新训练一个模型,去看看损失、精度
  • 重复前面的步骤多次,得到一些直觉,就能知道:
    • 哪些超参数比较重要
    • 模型对超参数对超参数的敏感度
    • 比较好的超参数的范围
  • 需要妥善管理实验,做笔记
  • 记录下所有的日志、超参数,之后可以进行比较区别
    • 把log存在txt文件,把超参数和一些指标放在excel
    • 使用tensorboard和weight&bias
  • 重复一个实验很难,关系到:
    • 环境(硬件、库)
    • 代码
    • 随机性(随机种子)

2. 自动调节超参数

  • 计算成本在减少,人力成本在增加
  • 使用算法调参,当训练超过1000次,算法能够打败90%的数据科学家调参

2.1 AutoML自动机器学习

  • 用ML去解决问题的时候,把每一个步骤(数据清理、特征抽取、模型选择)都自动化
  • 在模型选择这块,AutoML效果不错

2.1.1 超参数优化 HPO:通过搜索算法找到一个很好的超参数的集合

2.1.2 神经网络架构NAS:构造一个比较好的神经网络模型使得能够拟合到我的数据上

3. HPO算法

3.1 搜索空间

实用机器学习笔记第六章-模型调参_第1张图片

  • 为每个超参数指定一个范围
  • 搜索空间不能太大

3.2 HPO算法分类

实用机器学习笔记第六章-模型调参_第2张图片

3.2.1 Black-box黑盒

  • 每挑一组超参数去做训练,每次训练都是完成了的
  • 优点:适用于任何机器学习算法

3.2.2 Multi-fidelity 多精度(只需要关注超参数哪个更好,关注于他的排序)

  • 在完整数据集上进行采样,然后训练

  • 缩小模型大小(eg:减少层数#layers、通道数#channels)

  • 不需要等完全训练完,提早结束不好的超参数

3.3 最常见的两个HPO策略(属于黑盒优化)

3.3.1 网格搜索

for config in search_space:
	train_and_eval(config)
return best_result
  • 搜索空间的所有的组合都训练和评价一次
  • 保证结果是最好的
  • 搜索空间大的话,任务不可能完成

3.3.2 随机搜索(最优先选择)

for _ in range(n):
  config = random_select(search_space)
  train_and_eval(config)
return best_result
  • 最多选择n次,每次从搜索空间随机选择一个config

  • 通常很有效,当遇到没什么进度(eg:精度不提升)了,就停止

3.3.3 贝叶斯优化(BO)

实用机器学习笔记第六章-模型调参_第3张图片

  • 学习一个从超参数到目标函数(eg:损失函数、评估精度)的函数
  • 根据当前的评估,来选择下一次训练的超参数
3.3.3.1 代理模型(Surrogate model)
  • 拟合超参数到目标函数的模型
  • 概率回归模型:随机森林回归、高斯过程回归
3.3.3.2 获取函数(Acquisition function):评估我下一个点采样谁
  • 值大表示我不那么置信
  • 下一个采样的超参数是获取函数最大的点
  • 权衡exploration(探索未知)和exploitation(深处挖掘)
3.3.3.3 BO的局限性
  • 刚开始的阶段,和随机搜索差不多,后期比较好
  • 参数优化过程是顺序的(采集下一个点需要等前一个点完成)

3.4 Successive Halving(SH)

实用机器学习笔记第六章-模型调参_第4张图片

  • 把最靠谱的超参数训练的足够长,不好的超参数早期淘汰掉,节约钱
  • 随机取n个超参数,每个超参数训练m轮(epochs)
  • 一直重复下面的步骤,直到只剩下一个超参数
    • 保留最好的一半超参数,丢掉剩下的一半
    • 每个超参数训练的epoch翻倍
  • 根据预算来选择n、m、迭代次数#epochs
  • 钱多n可以大一些

3.4.1 问题:n不太好取

3.5 Hyperband

  • 在SH中
    • n代表exploration
    • m代表exploitation
  • Hyperband运行多次SH,每次都减少n增加m
    • 刚开始关注于exploration,然后关注于exploitation

4. NAS算法(用于NN)

  • 神经网络(NN)有各种不同的超参数

    • 拓扑结构:resnet、mobilenet、每个网络的层数
    • 每一层:核窗口大小、卷积层输出通道数、全连接层或者RNN输出的隐藏单元的个数
  • NAS使得整个神经网络的设计更加自动化

    • 指定NN的搜索空间
    • 如何在搜索空间进行搜索
    • 如何判断NN架构的好坏

实用机器学习笔记第六章-模型调参_第5张图片

4.1 通过强化学习实现NAS

  • 用一个RNN来生成网络架构

    • 然后在我的数据集上训练,得到验证的精度
    • 把精度反馈给RNN(强化学习)
  • 强化学习很贵,加速NAS的方法

    • 不要训练完整的网络
    • 重用参数,不用重新训练(EAS、ENAS)

4.2 One-Shot 方法实现NAS

  • 既学习模型架构也学习其中的超参数
  • 训练一个巨大的模型,其中包含很多个子模型
  • 评估候选架构
    • 只需要关心候选架构的好坏,以此排序
    • 使用近似的指标:训练一些轮就好了,选出精度好的架构
  • 选出最好的候选架构,再到完整的数据上做一次训练

4.3 可微的架构搜索(属于One-shot方法)

实用机器学习笔记第六章-模型调参_第6张图片

  • 把选择谁做成一个可以学习的softmax参数
    • 每一层有多个候选的层(比如kernel size是3x3还是5x5)
    • l l l层的第 i i i个候选输出是 o i l o_i^l oil
    • 每一个候选有一个可学习的参数对其进行softmax操作 α l = s o f t m a x ( α l ) \alpha^l = softmax(\alpha^l) αl=softmax(αl)
    • 下一层的输入是上一层的进行加权求和 ∑ a i l o i l \sum{a_i^lo_i^l} ailoil,然后复制几份给下一层做select
    • 选择每一层最大的那个 α i \alpha_i αi

4.4 Scaling CNNs(伸缩CNN)

  • CNN可以通过3种办法调节
    • 更深:更多层
    • 更宽:更多的输出通道
    • 更大输入:输入更大的图片分辨率
  • EfficientNet提出三个东西要一起动(compound scale)
    • 四个可调节参数 α , β , γ , ϕ \alpha,\beta,\gamma,\phi α,β,γ,ϕ
    • 伸缩大小: α ϕ 控 制 深 度 , β ϕ 控 制 宽 度 , γ ϕ 控 制 分 辨 率 \alpha^\phi控制深度,\beta^\phi控制宽度,\gamma^\phi控制分辨率 αϕ,βϕ,γϕ
    • α β 2 γ 2 ≈ 2 \alpha\beta^2\gamma^2\approx2 αβ2γ22,只需要调节 ϕ \phi ϕ就可以了

4.5 NAS研究方向

  • 网络长得很奇怪,解释下差

  • 在边缘设备上应用(eg:手机)

    • 边缘设备越来越强大,隐私保护比较好,延迟低
    • 设备性能高低不平、功耗限制
    • 最小化 l o s s ∗ l o g ( l a t e n c y ) β loss * log(latency)^\beta losslog(latency)β, β \beta β 控制我更关心延迟还是更关心精度

你可能感兴趣的:(机器学习,神经网络,深度学习)