训练小技巧
解决训练稳定性
| 问题 | 核心问题 | 主要技巧 |
|---|---|---|
| 学习率为什么不能始终不变 | 每一步应该走多远? | Scheduler、Warmup |
| Batch 如何影响梯度 | 当前梯度到底有多可信? | Batch Size、梯度噪声 |
| 显存不足时如何模拟大 Batch | 放不下更多样本怎么办? | Gradient Accumulation |
| 如何防止单次更新失控 | 极端梯度会不会破坏模型? | Gradient Clipping |
| 网络在第一次更新前为何已经可能失败 | 参数起点为什么重要? | Initialization、激活函数、残差连接 |
| 深层网络中的特征尺度为何会漂移 | 中间表示如何保持稳定? | BatchNorm、LayerNorm、RMSNorm |
前面的就不讲了,也许从梯度下降到优化器会联想到。我详细讲讲最后的三个归一化
归一化
归一化解决以下问题
- 激活值趋于0或1
- 不同层的有效学习率失去平衡
一般来说,归一化是,ε的作用是防止除0。但如果我们强制归一化后均值为0,方差为1,模型的表达能力会收到限制,因此需要加入可学习参数
其中γ用于重新调整尺度,β用于重新调整偏移。也就是说我们先把特征拉回容易优化的标准坐标系,再允许模型学习适合任务的尺度和偏移。
不同归一化的区别,就在于如何选取公式中的那组
| 方法 | 统计量从哪里计算? | 是否依赖 Batch? | 是否减去均值? | 常见场景 |
|---|---|---|---|---|
| BatchNorm | 同一通道在多个样本中的值 | 是 | 是 | CNN |
| LayerNorm | 单个样本内部的一组特征 | 否 | 是 | Transformer、MLP、RNN |
| RMSNorm | 单个样本内部的一组特征 | 否 | 否 | 现代 Transformer、LLM |
BatchNorm
假设一个Batch中有四个样本,每个样本有三个特征(B=3,D=4):
BN会固定某一个特征维度,跨样本统计均值和方差。如对第一个特征维度:
完整公式为:
一般我们CNN用BN,BN用于归一化通道特征值。因为卷积通道通常可以理解成一种局部特征探测器。某个特征可能倾向于响应边缘、纹理、高频等等。BN将同一个探测器的响应调整到相对稳定的尺度,方便后续网格判断响应是否显著、不同通道之间如何组合、哪些特征值的放大或一致。
LayerNorm
对于自回归模型而言,推理可能逐Token进行,从而Batch size也会变化。同时一个Token往往不依赖于其他样本。这推动了LN的使用
LN不再跨样本统计,而是在每一个样本内部,对一整组特征计算均值和方差。这样就避免了对Batchsize的依赖,同时使训练样本之间不再因为归一化而发生耦合。
假设一个样本具有特征向量
LN会计算这个样本自身的均值和方差
然后归一化
LN通常在Transformer中使用。因为对于Trans,单个Token的隐藏向量可以写成,不同维度并不一定对应像CNN通道那样稳定、局部、可直接跨图片比较的滤波器响应。并且序列模型常常不同句子长度不同,Batchsize动态变化,单个样本需要独立处理。LN可以消除Token不必要的整体偏移和尺度差异,使网络更关注维度之间的相对结果。比如说[100,102,98]和[1.00,1.02, 0.98]。
RMSNorm
相比LN,RMSN只除以均方根。
对很多 Transformer 模型而言,控制向量长度已经足以改善优化;将均值严格搬回零点未必是必要条件。
EMA
EMA观察模型在训练过程中的参数轨迹,并额外维护一份更加平滑的权重。
假设当前正常训练的模型参数为$\theta_t$,EMA模型参数为,EMA衰减系数为β(0到1)。每次完成参数更新后,EMA权重执行
一般设置默认衰减值为0.999。这个β控制的是EMA模型的记忆长度,设置为0.999相当于能够记忆1000步。注意和Adam中的EMA区分,Adam会维护一/二阶矩估计的EMA,属于优化器内部的梯度统计,而Model EMA数据模型权重统计
我记得计网里面,TCP那一块有个参数的计算的思想就和这个很像。是哪个等我想起来了再写
解决泛化性
避免特征共适应
Dropout
假设某一层输出
训练时随机生成一个掩码
使用逐元素相乘,那么部分特征会被置0
但需要注意的是,Dropout需要除以保留概率,这样
激活值的期望保持不变
Droppath
直接丢弃整条残差分支,整个block输出为零,通过恒等分支x传播。
Mixed-based Data Augmentation
这类数据增强特点是,不仅改变输入图片,还会同步改变标签。它会主动构造训练集中不存在的新样本,并未它生成新的监督信号。这种限制模型在训练样本之间的行为,使决策边界更加平滑
Mixup
随机选取两个样本,再从beta分布中采样一个混合系数$\lambda$,随后构造新样本
新的标签为
Mixup不要求生成看起来真实的图片,而是约束模型
也就是说输入发生平滑变化的时候,输出也不应突然跳变。它鼓励模型在训练样本至今啊形成简单的线性行为,有利于泛化能力提升。
但由于这回破坏自然图像原本的局部结构,所以对于普通分类可能有效,但对于强调局部特征的任务,未必是最合理的增强方式
CutMix
CutMix解决了上述破坏自然图像原本的局部结构的问题,只交换局部区域。它从一张图像中裁剪一个矩形区域,粘贴到另一张图片上;标签则按照区域面积比例进行混合。
这个方法会迫使模型不要过度依赖某一个最显著区域,必须要有更多局部证据和更完整的目标结构
但问题在于这个标签的比例计算。一个类别的判别信息不等同于图片面积,而在于语义比例。
snapmix
这个方法主要面向细粒度识别任务,使用Class Activation Map来减轻按像素面积分配标签造成的噪声。
相对于Cutmix,Snap按语义贡献分配标签
其借助CAM,得到模型主要依赖图片中的哪些区域进行判断。Snapmix将CAM归一化,使全部空间位置的值之和为1。这个归一化后的图称为SPM。然后通过区域内的SPM值求和估计区域的语义比例。
需要注意的是,此时两个图的标签权重加起来不一定是1了。然后还有一个 有点就是粘贴到目标图不一定是固定原图大小。