大模型微调参数说明

大模型微调原因

  1. 大模型的参数量特别大,训练成本高

  2. 利用自有数据可以提升大模型在特定领域的能力

  3. 数据安全

大模型微调方法

  1. 从参数规模上,大模型微调分为:对全量参数的全量训练,叫做全量微调FFT(Full Fine Tuning);对部分参数进行训练,PEFT(Parameter-Efficient Fine Tuning)。

  2. 从训练数据的来源上,大模型微调可以分为:

监督式微调SFT(Supervised Fine Tuning),这个方案主要利用人工标注的数据,用监督学习的方法,对大模型进行微调。

基于人类反馈的强化学习微调RLHF,这个方案的特点就是把人类的反馈,通过强化学习的方法,引入到大模型的微调中。

  • Beta value 损失函数中beta超参数

  • Ftx gamma 最终损失函数中SFT损失的权重

  • Loss type 损失函数类型选择 。sigmoid函数将loss值映射到0到1之间。hinge loss函数专用于二分类问题。

基于AI反馈的强化学习微调RLAIF,这个原理和RLHF比较类似名单反馈来源是AI。

一些PEFT流行的方案:

Prompt Tuning

Prompt Tuning是基座模型(Foundation Model)的参数不变,为每个特定任务,训练一个少量参数的小模型,在具体执行特定任务的时候按需调用。

Prefix Tuning

Prefix Tuning跟Prompt Tuning的是类似的,只不过它们的具体实现上有一些差异。Prompt Tuning是在Embedding环节,往输入序列X前面加特定的Token。而Prefix Tuning是在Transformer的Encoder和Decoder的网络中都加了一些特定的前缀。

LoRA

LoRA背后有一个假设:我们现在看到的这些大语言模型,它们都是被过度参数化的。而过度参数化的大模型背后,都有一个低维的本质模型。大模型中有其中一部分参数,是非常重要的,是影响大模型生成结果的关键参数,LoRA调整得就是这一部分的参数。

  • LoRA rank:低维的矩阵秩的大小,表现为LoRA微调参数的大小,秩越大,微调参数越多,同时也越精准。

  • LoRA alpha:定义了LoRA适应的学习率缩放因子。这个参数影响了低秩矩阵的更新速度。

  • LoRA dropout: Dropout是一种常用的正则化技术,通过在训练过程中随机“丢弃”(即暂时移除)网络中的一些神经元来防止过拟合。

  • LoRA+LR ratio:推荐值10~16

  • RSLora(Rank-Stable LoRA)是一种改进的LoRA方法,旨在通过秩稳定缩放来增强模型的适应性和稳定性

  • DoRA:在LoRA的基础上进一步发展,通过将预训练权重分解为“幅度”和“方向”两个部分进行微调。

  • PiSSA:与LoRA的架构相一致,继承了诸如可训练参数减少、轻松部署等好处。但是与LoRA不同,使用PiSSA进行微调的过程与完整模型过程相似,会避免无效的梯度步骤和次优结果。

QLoRA

QLoRA就是量化版的LoRA,它是在LoRA的基础上,进行了进一步的量化,量化,是一种在保证模型效果基本不降低的前提下,通过降低参数的精度,来减少模型对于计算资源的需求的方法。量化的核心目标是降成本,降训练成本,特别是降后期的推理成本。将原本用16bit表示的参数,降为用4bit来表示,可以在保证模型效果的同时,极大地降低成本。

Freeze Fine-Tuning(冻结层微调)

冻结层微调是指在开始微调时保持一些或全部的预训练模型层权重不变。这些被冻结的层将不会在训练过程中更新其权重,只有新添加的层或解冻的层会进行训练。这种方法可以在新任务数据较少时使用,以防止在训练初期过度拟合。

  • Trainable layers参数表示模型训练的隐藏层层数,其中正数表示训练的最后一层的位置,负数表示开始训练的第一层隐藏层的位置。其他层数冻结参数,不进行梯度更新参数。

大模型训练过程

大模型训练过程可以分为以下四步:

  1.数据准备,数据清洗

  2.预训练(有些不存在预训练阶段)

  3.训练

  4.评估,预测。

训练出想要的模型,不仅需要不断优化模型架构中的参数矩阵,即y=wx中的w参数矩阵的值,还需要选择合适的超参数和优化函数。上述讲的各种不同的微调方法就是优化了调整w矩阵参数的方法。接下来介绍超参数和优化函数的选择。

训练阶段的优化函数

Supervised Fine-Tuning(监督微调)

使用监督学习的方法,将预测值和预先打好的标签值进行比较,损失最小,从而训练模型,优化特定任务的性能。

Reward Modeling(奖励建模):

这是一种强化学习(Reinforcement Learning)的方法,通过定义奖励函数来引导智能体学习目标动作或策略。

PPO(Proximal Policy Optimization)

PPO是一种用于训练强化学习模型的优化算法,旨在提高训练效率并实现稳定性。

DPO(Differential Privacy Optimization)

DPO是一种优化算法,用于保护数据隐私,并确保在模型训练过程中不会泄露敏感信息。

Pre-Training预训练

预训练是指在目标任务上之前进行的训练,通常使用大型数据集和无标签数据以提取更普适的特征,便于迁移学习或微调到特定任务。

训练过程的超参数介绍

学习率(learning rate)

学习率是指控制模型参数更新步长的超参数。学习率决定了在每次参数更新时权重应该调整的幅度,从而影响模型在训练过程中的收敛速度和最终性能。因此,在AdamW优化器中,学习率是一项关键的超参数,需要仔细选择和调整以确保模型获得良好的收敛性能和最终表现。

学习率参数数值参考

5e-5:这个学习率适合于相对较大的数据集或复杂的模型,因为较大的学习率可以更快地收敛,尤其是当训练数据为大规模数据集时。

1e-6:较小的学习率适用于数据集较小或相对简单的模型,可以帮助模型更稳定地学习数据的模式,避免过度拟合。

1e-3:适用于快速收敛,通常用于较大的深度神经网络和大型数据集。

1e−4:适用于中等大小的数据集和相对简单的模型。

5e−4:类似于1e-3和1e-4之间的学习率,适用于中等大小的网络和数据集。

1e−5:适用于相对小型的数据集或简单的模型,有助于避免快速过拟合。

1e−7:适用于非常小的数据集或非常简单的模型,有助于更细致地调整参数。

学习率调节器(LR scheduler)

Linear:线性衰减学习率,即学习率随着训练步数线性减小。

Cosine:余弦退火学习率,学习率按照余弦函数的曲线进行调整,逐渐降低而非直接线性减小。

Cosine with restarts:带重启的余弦退火,学习率的衰减呈现周期性变化,适用于训练过程中逐步放宽约束然后再次加快训练的情况。

Polynomial:多项式衰减学习率,通过多项式函数来调整学习率,可以是二次、三次等。

Constant:固定学习率,不随训练步数变化而保持不变。

Constant with warmup:具有热身阶段的固定学习率,初始阶段固定学习率较大,随后在训练一段时间后降低。

Inverse Square Root:学习率按照步数的倒数的平方根进行衰减,可以平滑地调整学习率。

Reduce Learning Rate on Plateau:当验证集上的损失不再减少时,减小学习率,以更细致地优化模型性能。

Epoch

一个Epoch指的是将整个训练集数据从头到尾完整地遍历一次。在每个Epoch结束时,模型会根据训练数据的反馈来更新自身的参数。Epoch的数目是控制模型训练过程的关键因素,通过调整Epoch的数目,可以平衡模型的学习速度和精度。

对于epoch的选择,通常需要考虑以下几个因素:

1.数据集的大小,数据集越大,所需要的epoch数越多,我们可以根据数据集的大小和模型的复杂成都来初步确定epoch数量。

2.模型的复杂度,模型的复杂度越高,所需要的epoch数越多。因为复杂的模型需要更多的时间来学习数据集中的规律

3.训练时间,epoch越多训练时间越长,在保证精度的前提下,尽量选择较小的epoch来减少训练时间。

Batch size

Batch size是指每个epoch中,每次更新模型参数时所使用的样本数量,batch size 国小会导致模型训练过程不稳定,容易受到噪声数据的干扰。而batch size过大会导致模型训练时间过长,可能会限制模型的学习能力,同时对gpu也是一种压力。

对于batch size的选择主要有以下因素:

1.GPU内存,batch size过大可能会导致GPU内存不足,从而影响模型训练的效率,因此,在选择batch size 应该考虑GPU的内存大小。

2.模型的复杂度,模型越复杂,所需要的batch size越小,因为复杂的模型需要更精细地更新参数以避免过拟合。

最大梯度范数(Maximum gradient norm)

用于对梯度进行裁剪,限制梯度的大小,以防止梯度爆炸(梯度过大)的问题。选择合适的最大梯度范数取决于您的模型、数据集以及训练过程中遇到的情况。

一般来说,常见的最大梯度范数取值在1到5之间,但具体取值要根据您的模型结构和训练数据的情况进行调整。

以下是一些常见的最大梯度范数取值建议:

1到5之间:这是一般情况下常见的范围。如果您的模型较深或者遇到梯度爆炸的情况,可以考虑选择较小的范围。

1:通常用于对梯度进行相对较小的裁剪,以避免梯度更新过大,特别适用于训练稳定性较差的模型。

3到5:用于对梯度进行中等程度的裁剪,适用于一般深度学习模型的训练。

更大值:对于某些情况,例如对抗训练(Adversarial Training),可能需要更大的最大梯度范数来维持梯度的稳定性。

选择最大梯度范数时,建议根据实际情况进行试验和调整,在训练过程中观察模型的表现并根据需要进行调整。但通常情况下,一个合理的初始范围在1到5之间可以作为起点进行尝试。

计算类型(Compute type)

指定模型训练时所使用的精度。在深度学习训练中,使用更低精度(例如FP16或BF16)可以降低模型的内存和计算需求,加快训练速度,尤其对于大规模模型和大数据集是有益的。然而,较低精度也可能带来数值稳定性问题,特别是在训练过程中需要小心处理梯度的表达范围,避免梯度消失或爆炸的问题。选择何种计算类型通常取决于您的硬件支持、训练需求和模型性能。不同精度的计算类型在模型训练过程中会对训练速度、内存消耗和模型性能产生影响,因此需要根据具体情况进行权衡和选择。

常见的计算类型包括:

FP16 (Half Precision):FP16是指使用16位浮点数进行计算,也称为半精度计算。在FP16精度下,模型参数和梯度都以16位浮点数进行存储和计算。

BF16 (BFloat16):BF16是指使用十六位Brain Floating Point格式,与FP16不同之处在于BF16在指数部分有8位(与FP32相同),而FP16只有5位。BF16通常用于机器学习任务中,尤其是在加速器中更为常见。

FP32 (Single Precision):FP32是指使用32位浮点数进行计算,也称为单精度计算。在FP32精度下,模型参数和梯度以32位浮点数进行存储和计算,是最常见的精度。

Pure BF16:这是指纯粹使用BF16进行计算的模式。

Val size(验证集大小)

模型训练需要划分训练集,测试集,验证集。模型在训练集上训练,验证集验证模型的有效性,来挑选最佳效果的模型,最后在测试集测试模型的正确率和误差。比较常见的划分比例是7:2:1。在大模型微调阶段可以不用划分验证集。

Gradient Accumulation 梯度累加/梯度累积

在大语言模型中计算量需求特别大,而GPU资源有限,所以batchsize就只能设置很小,否则容易出现cuda oom的问题。因此,当模型训练过程中想要增大batchsize,可以考虑利用梯度累加的方法。

梯度累加就是每计算一个batch的梯度,不进行清零,而是做梯度的累加(平均),当累加到一定的次数之后,再更新网络参数,然后将梯度清零。通过这种参数延迟更新的手段,可以实现与采用大batch_size相近的效果。

Cutoff length

在大模型的微调过程中,cutoff_len 参数用于控制输入文本的截断长度。

这个参数的重要性体现在以下几个方面:

内存管理:模型处理长文本时,计算资源和内存消耗会显著增加。通过设置 cutoff_len,可以限制输入文本的最大长度,从而控制内存使用和计算负担。

训练效率:较长的输入会导致训练时间的增加。截断文本可以加快训练速度,提高训练效率。

避免过拟合:长文本可能包含大量细节,这些细节在很多情况下并不重要。截断文本可以帮助模型关注更关键的信息,避免模型记住不必要的细节,从而减少过拟合的风险。

模型一致性:不同长度的文本输入会导致模型处理的不一致性。通过设定统一的 cutoff_len,可以确保模型在处理不同输入时的行为更一致。

预热步数(Warmup Steps):

这是模型训练初期用于逐渐增加学习率的步骤数。在这个阶段,学习率从一个很小的值(或者接近于零)开始,逐渐增加到设定的初始学习率。这个过程可以帮助模型在训练初期避免因为学习率过高而导致的不稳定,比如参数更新过大,从而有助于模型更平滑地适应训练数据。

  • 例如,如果设置warmup_steps为20,那么在前20步训练中,学习率会从低到高逐步增加。

  • 预热步数的具体数值通常取决于几个因素:

    • 训练数据的大小:数据集越大,可能需要更多的预热步骤来帮助模型逐步适应。

    • 模型的复杂性:更复杂的模型可能需要更长时间的预热,以避免一开始就对复杂的参数空间进行过激的调整。

    • 总训练步数:如果训练步数本身就很少,可能不需要很多的预热步骤;反之,如果训练步数很多,增加预热步骤可以帮助模型更好地启动。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Diffusion模型微调是指在已有的Diffusion模型基础上,对模型参数进行调整和优化的过程。这个过程旨在提高模型的准确性和预测能力。 首先,Diffusion模型是一种描述信息扩散过程的数学模型,它可以用来模拟信息在社交网络中的传播、产品在市场中的推广等现象。在现实情况中,模型参数往往需要根据具体场景进行微调微调Diffusion模型的方法主要包括以下几个步骤。首先,根据模型和场景的特点,选择合适的性能指标来衡量模型的表现。例如,如果模拟信息传播过程,则可以选择准确度、平均传播速度等指标。其次,对模型中的参数进行设置和调整。这包括确定传播速率、抑制因子、节点影响力等参数的数值。根据模型的特点,采用常用的统计学方法如最小二乘法、极大似然估计等进行参数估计,并根据实际数据进行模型拟合和优化。 另外,还可以使用一些优化算法来进行模型微调,如遗传算法、粒子群优化算法等。这些算法可以通过自适应搜索和迭代优化来寻找最优的参数组合,提高模型的准确性。 最后,微调完Diffusion模型后,应该进行模型的验证和评估。这可以通过比较模拟结果和真实数据的对比来进行。如果模型的预测结果与实际数据吻合较好,那么说明微调后的模型是可信的。 综上所述,Diffusion模型微调是一个通过调整和优化参数来提高模型准确性和预测能力的过程。通过选择合适的性能指标、使用合适的参数估计方法和优化算法,并进行验证评估,可以使模型更好地适应不同的应用场景,提高模型的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值