编辑
2024-10-21
入门基础
00

目录

模型调参
首先需要牢记一个点:模型选型和数据质量决定了任务的底线,而调参只是锦上添花(也可能雪上加霜)的工作
模型与数据
任务
模型架构
模型复杂度
计算资源
数据特性
训练参数调整(Train)
Loss function
batch\_size
learning\_rate
Epoch number
 Optimizer
Activation function
Regularization
微调方案LORA
模型量化BitsAndBytes
5.2 过拟合(Overfitting)
trick 7:Normalization 选择问题

模型调参

首先需要牢记一个点:模型选型和数据质量决定了任务的底线,而调参只是锦上添花(也可能雪上加霜)的工作

所以优先考虑模型与数据,再考虑微调,能不调就不调。

模型与数据

任务

首先要明确任务是分类、回归、生成、排序

模型架构

不同的模型架构在同意任务上的性能不一。选择合适的架构(gpt,bert,T5等等)。

模型复杂度

选择一个与数据复杂度相匹配的模型大小。模型过于简单可能导致欠拟合,而过于复杂则可能过拟合。

计算资源

考虑可用的GPU、内存和计算时间。复杂模型往往需要更多资源

数据特性

考虑数据的维度、规模、结构(如图像、文本、时序数据等)和质量

训练参数调整(Train)

Loss function

如果你使用transfomers,他会根据你的任务来做调整。一般是交叉损失。。具体使用MSE、Cross entropy、Focal还是其他自定义,需要具体问题具体分析。

batch_size

batch size不能太大,也不能太小,一般设置为4的倍数。

  1. 太小会浪费计算资源,

  2. 太大则会浪费内存;

特殊情况:batch size 在表示学习,对比学习领域一般越大越好,显存不够batch_size小,累计梯度来凑,否则模型可能不收敛… 其他领域看情况;

learning_rate

一般nlp bert类模型在2e-5级别附近,范围一般在(1e-5~5e-3),warmup,衰减

前期warnup是为了防止梯度爆炸,让模型训练更加稳定。因为模型权重初始是随机的

中期期warmup后,高学习率是跳出局部最优。

后期学习率(如consin)退火是为了减少震荡,稳定地收敛,找到全局最优。

Epoch number

Epoch过大,会浪费计算资源;epoch太小,则训练模型提取特征没到极致;,

由于任务的复杂程度不一样,需要输出loss看一下,在什么位置收敛稳定。

可以设置epoch_num=3,调大一点,利用好check_point。观察模型收敛稳定, 及时stopping;

 Optimizer

Adam

Activation function

ReLu、Sigmoid、Softmax、Tanh是最常用的4个激活函数。

对于输出层,常用sigmoid和softMax激活函数,中间层Q常用ReLu激活函数,RNN常用Tanh激活函数。

Regularization

Dropout虽然思想很简单,但效果出奇的好,现在大部分任务都需要使用预训练型,要注意型内部dropout ratio是一个很重要的参数,首选0.05,

微调方案LORA

rrank也就是LoRA的低秩的秩的大小),较小的 r 导致更简单的低秩矩阵,从而导致在适应过程中学习的参数更少,模型的复杂度变低。。这可以加快训练速度,并可能降低计算需求,但是低秩矩阵捕获特定于任务的信息的能力就会降低。可能会导致模型难以收敛。

默认值是8),建议4/8/16.视任务复杂情况来确定。

alpha:alpha 是一个比例因子,这个系数用于在前向传播过程中将 LoRA 权重应用于预训练之中,用于调整组合结果的大小(原始模型输出加上低秩适应)。一般16,alpha越大lorad的影响就越大,反之越小。

将alpha值设置为r的两倍是一个常见的经验法则

模型量化BitsAndBytes

如果资源有限,一般使用bitsandbytes进行量化**。一般选择4、8位, 考虑现有算力资源。**

推荐FP8,数据表示位数的降低带来了更大的吞吐和更高的计算性能,虽然精度有所降低,但是在 LLM 场景下,采用技术和工程手段,FP8 能够提供与更高精度类型相媲美的结果,同时带来显著的性能提升和能效改善。

5.2 过拟合(Overfitting)

  • 过拟合(Overfitting)危害:过拟合的特征是训练误差很低,而验证或测试误差较高

  • 过拟合(Overfitting)发生原因:过拟合则是模型在训练数据上表现过于优秀,以至于它学习到了训练数据中的噪声和偶然特性,而不是数据的真实分布。这导致模型在未见过的测试数据上的表现显著下降。

  • 解决过拟合(Overfitting)的方法包括:

  1. 增加训练数据:更多的数据可以帮助模型更好地泛化。

  2. 正则化:通过在损失函数中加入正则项(如L1、L2正则化),限制模型参数的大小,避免参数过度优化训练数据中的细节。

  3. 早停法(Early Stopping):在验证集上的性能不再提升时停止训练。

  4. 交叉验证:使用K折交叉验证等方法更准确地评估模型性能,避免过拟合。

  5. Dropout:随机“丢弃”一部分神经元,减少模型对特定训练样本的依赖。

  6. 数据增强:通过变换原始数据生成额外的训练样本,增加模型的泛化能力。

  7. 简化模型:减少模型复杂度,如减少神经网络的层数或节点数,避免不必要的复杂性。

trick 7:Normalization 选择问题

GN,BN和LN都是在神经网络训练时的归一化方法,BN即Batch Normalization,LN即Layer Normalization。

  • BatchNorm:batch方向做归一化,计算N_H_W的均值

  • LayerNorm:channel方向做归一化,计算C_H_W的均值

  • InstanceNorm:一个channel内做归一化,计算H*W的均值

  • GroupNorm:先将channel方向分group,然后每个group内做归一化,计算(C//G)_H_W的均值

GN与LN和IN有关,这两种标准化方法在训练循环(RNN / LSTM)或生成(GAN)模型方面特别成功。

  • 如何选择:序列输入上LN,非序列上BN

本文作者:Bob

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!