type
status
date
Jul 30, 2023 09:24 AM
slug
summary
tags
category
icon
password
why:没有标准途径获得(书、paper、工厂使用),但是调参是一门技术需要经验
*仅代表作者个人观点,不是fact
must know
没有免费的午餐,只有针对某个task最优的配置
顺序
- 前期准备:
cleaned data、pipeline制定好、指标选择完成
- 超参有哪些:
- fixed:模型框架、epoch
- 科学:优化器、、activation function
- 讨厌:学习率(+decay)、正则化方法(dropout、正则化l1l2、权重衰减、样本平滑)
- 无影响:batchsize
- 步骤:
- 找到一篇as close as possible to the problem 的论文进行实验,architecture可以选择它用的框架。
- 在小框架小样本,进行科学参数的比较,明白哪些是有效的。
- 设置搜索空间,使用自动搜索算法。同时自己要理解问题
- 建立一个table记录和超参的交互
- 有用、没用、范围
- initial space要尽可能广和密集。缩小范围、相同密集程度。
- 要在足够广的取值内确定范围,而不是在边界。
- 控制变量多次实验
- 采用准随机搜索(基于低差异序列),而不是更复杂的黑盒搜索(贝叶斯等:这种更高效,但是更blind),也不是像网格搜索一样确定的搜索方式(不高效)。
- 比如vizier
- 然后再恢复模型大小和样本数量(先不急着划分数据集),进行讨厌参数的选择(incremental tuning)
- 计算受限调参
- 计算不受限调参
细节
optimizer
决定了参数的search spaces
熟悉成熟、流行的optimizer中的所有参数。
更通用的优化器永远不应该低于它们可以近似的优化器(即,Adam 永远不应该表现得比动量或梯度下降差)
通用有用的优化器
- SGD with momentum
- learning rate
- γ:和learning rate相似,但是作用范围要更小一些

- Adam
- β1:分子,正向,一次
- β2:分母,反向,二次
- learning rate:直接作用
- ε:正向,系数作用
- 规则:根据trails(trials 就是训练周期(epochs)的数值设置,控制模型训练的总轮次)判断


- NAdam
- 在Adam中最后的方程上减缓了速率

- 其他

batchsize
用当前硬件能支持的最大batchsize,因为它大多数只会影响训练速度。
support:只要其他超参调整好,理论上所有batch size都能获得相同最终性能。
- 最容易受到影响的是优化器超参和正则化超参
- batch size大小的影响
- batch size过小
- 影响速度,更慢
- 在训练时引入不确定性,可能有着正则化作用。
- 过大batchsize
- 过拟合,需要额外的正则化约束
- 如何找到可用的batchsize
- 以小样本,2的幂找所有可能的batchsize
- 使用训练吞吐量(每秒处理的样本数量:取决于io速度、多少个gpu、同步速度)最大的batchsize(优势在于速度提升)
- 不同的其他超参对应了不同的最优batchsize
- batchnorm通常可以用layer norm替换
learning rate decay
- 没有一个最好的
- 偏好使用线性衰减或余弦衰减作为默认值
训练曲线
- 不稳定
- 早期
- 学习率预热(lr 开始从较小的值(如0)逐渐增加到原先设置的值,然后恒定训练,再普通训练)
- error骤升
- how
- 将阈值设置为10*不稳定阈值
- 步数可能很大,4w都有可能
- gradient clipping
- 出现离群梯度
- 按比例(不要超过50%)或者渐变裁剪
- 中期
- gradient clipping
- 新的优化器
- 添加归一化和残差、归一化应该是残差之前的最后一个操作
- 降低学习率
- 过拟合问题。 训练集error下降、validation set上升
- 正则化
- 训练后期error存在越来越高的方差
- 提高batchsize、学习率衰减
- train step大小
- 随着框架的变动而变动
- 变动:
- 最优出现在前10%,那么太长了
- 最后25%时,那么可能增加step会提高表现
- 最佳保存点
- model chekpoint
- N个
计算受限的调参
目的是为了在有限时间内,观察到参数对表现的影响。
大概是用于大数据集大样本的初级阶段。
不同参数适用情况:
- 很有可能转移
- Warmup length:work起来的epoch数量
- 初始化方法
- 可能转移:
- 架构
- 优化器参数
- 数据增强方法
- 正则化方法
- 不可能转移
- 学习率
单多机单多卡
- 多机器确保记录
- 随机数
- 日志记录在一处
- 多卡确保
- io时间的消耗是可承担的
reference:
- 作者:Simon Yang
- 链接:https://myblog.simonyang.top//article/google_tuning
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。