模型调参大法让你的模型更进一步
编辑
模型调参
首先需要牢记一个点:模型选型和数据质量决定了任务的底线,而调参只是锦上添花(也可能雪上加霜)的工作
所以 优先考虑模型与数据,再考虑微调 ,能不调就不调。
模型与数据
任务
首先要明确任务是分类、回归、生成、排序
模型架构
不同的模型架构在同意任务上的性能不一。选择合适的架构(gpt,bert,T5等等)。
模型复杂度
选择一个与数据复杂度相匹配的模型大小。模型过于简单可能导致欠拟合,而过于复杂则可能过拟合。
计算资源
考虑可用的GPU、内存和计算时间。复杂模型往往需要更多资源
数据特性
考虑数据的维度、规模、结构(如图像、文本、时序数据等)和质量
训练参数调整(Train)
Loss function
如果你使用transfomers,他会根据你的任务来做调整。一般是交叉损失。。具体使用MSE、Cross
entropy、Focal还是其他自定义,需要具体问题具体分析。
batch_size
batch size不能太大,也不能太小,一般设置为 4的倍数 。看算例资源来定(可选1、2、4、8、16)
1. 太小会浪费计算资源,
2. 太大则会浪费内存;
per_device_train_batch_size: 1
gradient_accumulation_steps
batch size
在表示学习,对比学习领域一般越大越好,但是显存不够batch_size小,累计梯度(gradient_accumulation_steps)来凑,否则模型可能不收敛…
其他领域看情况 ;
gradient_accumulation_steps: 2
learning_rate
一般nlp bert类模型在 2e-5 级别附近,范围一般在(1e-5~5e-3) ,warmup,衰减
前期warnup是为了 防止梯度爆炸,让模型训练更加稳定 。因为模型权重初始是随机的
中期期warmup后,高学习率是 跳出局部最优。
后期学习率(如consin)退火是为了 减少震荡,稳定地收敛 ,找到全局最优。
learning_rate: 2e-4
lr_scheduler_type: "cosine"
warmup_ratio: 0.1
Epoch number
Epoch过大,会浪费计算资源;epoch太小,则训练模型 提取特征没到极致 ;,
由于任务的复杂程度不一样,需要输出loss看一下,在什么位置收敛稳定。
可以设置 epoch_num=3 ,调大一点,利用好check_point。 观察模型收敛稳定, 及时stopping;
num_train_epochs: 3.0
Optimizer
Adam
Activation function
ReLu、Sigmoid、Softmax、Tanh是最常用的4个激活函数。
对于输出层,常用sigmoid和softMax激活函数,中间层Q常用ReLu激活函数,RNN常用Tanh激活函数。
Regularization
Dropout虽然思想很简单,但效果出奇的好,现在大部分任务都需要使用预训练型,要注意型内部dropout ratio是一个很重要的参数,
首选0.05,
微调方案LORA
r : rank
也就是LoRA的低秩的秩的大小),较小的 r 导致更简单的低秩矩阵,从而导致在适应过程中学习的参数更少,模型的复杂度变低。
这可以加快训练速度,并可能降低计算需求,但是低秩矩阵捕获特定于任务的信息的能力就会降低。可能会导致模型难以收敛。
( 默认值是8),建议4/8/16.视任务复杂情况来确定。
alpha: alpha
是一个比例因子,这个系数用于在前向传播过程中将 LoRA
权重应用于预训练之中,用于调整组合结果的大小(原始模型输出加上低秩适应)。 一般16 ,alpha越大lorad的影响就越大,反之越小。
将alpha值设置为r的两倍是一个常见的经验法则
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
模型量化BitsAndBytes
如果资源有限,一般使用bitsandbytes进行量化 。一般选择4、8位, 考虑现有算力资源。
quantization_bit: 4
推荐 FP8 ,数据表示位数的降低带来了更大的吞吐和更高的计算性能, 虽然精度有所降低,但是在 LLM 场景下,采用技术和工程手段,FP8
能够提供与更高精度类型相媲美的结果,同时带来显著的性能提升和能效改善。
- 0
- 0
-
分享