type
status
date
Jul 30, 2023 09:24 AM
slug
summary
tags
category
icon
password
why:没有标准途径获得(书、paper、工厂使用),但是调参是一门技术需要经验
*仅代表作者个人观点,不是fact

must know

没有免费的午餐,只有针对某个task最优的配置
 

顺序

  1. 前期准备:
cleaned data、pipeline制定好、指标选择完成
  1. 超参有哪些:
    1. fixed:模型框架、epoch
    2. 科学:优化器、、activation function
    3. 讨厌:学习率(+decay)、正则化方法(dropout、正则化l1l2、权重衰减、样本平滑)
    4. 无影响:batchsize
  1. 步骤:
    1. 找到一篇as close as possible to the problem 的论文进行实验,architecture可以选择它用的框架。
    2. 在小框架小样本,进行科学参数的比较,明白哪些是有效的。
      1. 设置搜索空间,使用自动搜索算法。同时自己要理解问题
      2. 建立一个table记录和超参的交互
        1. 有用、没用、范围
          1. initial space要尽可能广和密集。缩小范围、相同密集程度。
          2. 要在足够广的取值内确定范围,而不是在边界。
        2. 控制变量多次实验
        3. 采用准随机搜索(基于低差异序列),而不是更复杂的黑盒搜索(贝叶斯等:这种更高效,但是更blind),也不是像网格搜索一样确定的搜索方式(不高效)。
          1. 比如vizier
    3. 然后再恢复模型大小和样本数量(先不急着划分数据集),进行讨厌参数的选择(incremental tuning)
      1. 计算受限调参
      2. 计算不受限调参
 

细节

optimizer

决定了参数的search spaces
熟悉成熟、流行的optimizer中的所有参数。
更通用的优化器永远不应该低于它们可以近似的优化器(即,Adam 永远不应该表现得比动量或梯度下降差)

通用有用的优化器

  • SGD with momentum
    • learning rate
    • γ:和learning rate相似,但是作用范围要更小一些
notion image
  • Adam
    • β1:分子,正向,一次
    • β2:分母,反向,二次
    • learning rate:直接作用
    • ε:正向,系数作用
    • 规则:根据trails(trials 就是训练周期(epochs)的数值设置,控制模型训练的总轮次)判断
      • notion image
notion image
  • NAdam
    • 在Adam中最后的方程上减缓了速率
notion image
  • 其他
notion image

batchsize

用当前硬件能支持的最大batchsize,因为它大多数只会影响训练速度。
support:只要其他超参调整好,理论上所有batch size都能获得相同最终性能。
  1. 最容易受到影响的是优化器超参和正则化超参
  1. batch size大小的影响
    1. batch size过小
      1. 影响速度,更慢
      2. 在训练时引入不确定性,可能有着正则化作用。
    2. 过大batchsize
      1. 过拟合,需要额外的正则化约束
  1. 如何找到可用的batchsize
    1. 以小样本,2的幂找所有可能的batchsize
    2. 使用训练吞吐量(每秒处理的样本数量:取决于io速度、多少个gpu、同步速度)最大的batchsize(优势在于速度提升)
    3. 不同的其他超参对应了不同的最优batchsize
      1. batchnorm通常可以用layer norm替换
 

learning rate decay

  1. 没有一个最好的
  1. 偏好使用线性衰减或余弦衰减作为默认值

训练曲线

  1. 不稳定
    1. 早期
      1. 学习率预热(lr 开始从较小的值(如0)逐渐增加到原先设置的值,然后恒定训练,再普通训练)
        1. error骤升
        2. how
          1. 将阈值设置为10*不稳定阈值
          2. 步数可能很大,4w都有可能
      2. gradient clipping
        1. 出现离群梯度
        2. 按比例(不要超过50%)或者渐变裁剪
    2. 中期
      1. gradient clipping
    3. 新的优化器
    4. 添加归一化和残差、归一化应该是残差之前的最后一个操作
    5. 降低学习率
  1. 过拟合问题。 训练集error下降、validation set上升
    1. 正则化
  1. 训练后期error存在越来越高的方差
    1. 提高batchsize、学习率衰减
  1. train step大小
    1. 随着框架的变动而变动
    2. 变动:
      1. 最优出现在前10%,那么太长了
      2. 最后25%时,那么可能增加step会提高表现
  1. 最佳保存点
    1. model chekpoint
    2. N个
 

计算受限的调参

目的是为了在有限时间内,观察到参数对表现的影响。
大概是用于大数据集大样本的初级阶段。
 
不同参数适用情况:
  1. 很有可能转移
    1. Warmup length:work起来的epoch数量
    2. 初始化方法
  1. 可能转移:
    1. 架构
    2. 优化器参数
    3. 数据增强方法
    4. 正则化方法
  1. 不可能转移
    1. 学习率
 

单多机单多卡

  1. 多机器确保记录
    1. 随机数
    2. 日志记录在一处
  1. 多卡确保
    1. io时间的消耗是可承担的
 
 

reference:

Qlibwindows转mac快速指南

Simon Yang
Simon Yang
不爱写代码的👨‍💻
公告
type
status
date
Jun 6, 2024 06:20 AM
slug
summary
tags
category
icon
password