type
status
date
slug
summary
tags
icon
password
一、 前言
前段时间在做大模型自我认知的微调项目中。LlaMa-Factory里面有很多的需要提前设定的参数。但是很多参数我都不是很理解,所以这次想记录一下有关于超参数的概念以及各个超参数会产生什么影响。
二、 超参数的作用
控制学习控制:超参数决定模型如何训练,包括学习速率、训练批次大小、训练的轮次等
决定模型的规模和复杂度:模型的层数、每层的神经元数量决定模型的大小和计算复杂度。
三、 常见的大模型以及参数
① 学习率(learning rate)
学习率指的是:每一次参数更新的步幅大小。
学习率过大会导致训练不稳定,甚至无法收敛;过小的学习率会导致收敛速度过慢,训练时间过长。一个合适的学习率可以帮助模型快速收敛,同时避免训练过程中的震荡或者过拟合。
② 批次大小(batch size)
批次大小指的是:在更新模型参数时,输入数据被分成的样本数量。大批量训练会提高计算效率,但需要更多的内存和计算资源。
批量大小过小会导致训练过程的不稳定。批量大小过大则会消耗过多的内存资源,导致训练的效率降低。
③ 训练轮数(epochs)
训练轮数指的是:整个训练集被模型训练多少次。在每一轮中,模型都会通过梯度下降等方法调整其参数。
训练轮数过少的会导致模型不能充分学习,过多的训练会导致模型训练过拟合
④ 最大梯度范数
用于对梯度进行裁剪,限制梯度的大小,防止梯度过大的问题。一般来说正常的最大梯度范围为1到5之间,1对梯度有较小的裁剪,避免梯度更新过大,特别适合训练稳定性较差的模型。
什么是梯度?
在写这个最大梯度范数的时候我就在想,什么是梯度啊?所以参考了这个文章总结了一下什么是梯度。总的来说就是所有方向中变化率最大的方向和值,它同时描述了值和方向,是个向量。
在梯度下降指导我们在各个可能的方向中,每次都会选择变化率最大的方向,即梯度指向的方向前进,这样就可以找到函数的局部或者全局的最优解。
⑤ 计算类型
指的是:模型训练时所用的精度,使用更低精度可以降低模型内存和计算需求,加快训练的速度,对于大规模模型和大数据集是有益的。较低的精度会带来数据稳定性的问题,特别是在训练过程中需要小心处理梯度的表达范围,避免梯度消失或者爆炸的问题。
常见的计算类型包括:
FP16(Half Precision):FP16是指用16位浮点进行运算,也称为半精度计算。在FP16精度下,模型参数和梯度都以16位浮点数进行存储和计算。
FP32(Single Precision):FP32是指使用32位浮点数进行计算,也称为单精度计算。这是最常见的精度。
BF16(BFloat16):BF16是指使用十六位Brain Floating Point格式。这种是在加速器中较为常见。
Pure BF16:这是指纯粹使用BF16进行计算的模式。
⑥ 梯度累加
梯度累加就是每计算一个batch的梯度,不进行清零,而是做一个梯度累加之后的平均,当累加到一定的次数之后,再更新网络参数,然后再将梯度清零。
⑦ 截断长度
通过设置截断长度,可以限制输入文本的最大长度,从而控制内存使用和计算负担。
较长的输入会导致训练的时间增加。截断文本可以加快训练速度,提高训练效率。在长文本中可能包含大量的细节,但是这些细节并不是很重要,截断文本可以帮助模型关注到更关键的信息,避免模型记住不必要的细节从而减少过拟合的风险。
⑧ 预热步数(warmup)
这是模型训练初期用于逐渐增加学习率的步骤数,在这个阶段,学习率从很小的值开始,逐渐增加到设定的初始学习率。这个过程可以帮助模型在训练初期避免因为学习率过高而导致的不稳定,从而有助于模型更平滑地适应训练数据
预热步数的具体数值通常取决于几个因素:
- 训练数据的大小:数据集越大,需要更多的预热步数来帮助模型逐步适应
- 模型的复杂性:更复杂的模型可能需要更长时间的预热,以免一开始就对复杂的参数空间进行过激的调整
- 总的训练步数:总的训练步数较少的话就不需要很多的预热步骤;如果训练步数足够充足的话,可以增加预热步骤使模型更好地启动。
⑨ 学习率调节器(LR schedule)
学习率调节器有很多种,下面是常见的几种:
- Linear:线性衰退学习率,学习率随着训练的步数线性减小
- Cosine:余弦退火学习率,学习率按照余弦函数的曲线进行调整,逐渐降低而非直接线性减小
- Cosine with restarts:带重启的余弦退火,学习率的衰减呈现周期性的变化,适用于训练过程中逐步放宽约束然后再次加快训练的情况。
- Polynomial:多项式衰减学习率,通过多项式函数来调整学习率,可以是二次三次等
- Constant:固定学习率,不随训练步数变化而保持不变
- Constant with warmup:在热身阶段有固定的学习率,在非热身阶段学习率会降低
- Inverse Sequare Root:学习率按照步数的倒数的平方进行衰减,可以平滑地调整学习率
- Reduce Learning Rate On Plateau:当验证集的损失不再减少时,减少学习率可以更细致优化模型性能
- 作者:JucanaYu
- 链接:https://jucanayu.top/article/1777ab71-7095-803e-ad6f-f304740fe7b8
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。