LLaMA-Factory相关参数说明
一、相关参数了解
-
微调方法
-
LoRA:(Low-Rank Adaptation)是一种针对大模型的高效微调方法。通常,直接对大型预训练模型进行微调可能需要大量的计算资源和时间,同时可能会导致过拟合等问题。而LoRA旨在通过低秩矩阵来逼近原始的大规模权重更新,从而以较低的成本实现有效的模型适应。
具体来说,LoRA方法不是直接更新模型的权重,而是为某些层的权重添加一个可训练的低秩分解矩阵。这意味着只需要学习这个小得多的矩阵,而不是整个预训练模型的庞大参数集。这样做的好处包括减少了需要存储和处理的数据量,降低了计算成本,并且能够更有效地在特定任务上调整大型预训练模型,同时保持其在广泛任务上的泛化能力。
计算资源需求低,训练时间短,保留了预训练模型的大部分知识。可能达不到全量微调的性能。
-
QLoRA:在LoRA的基础上引入量化技术以进一步减少存储和计算需求。实现复杂,需要更多的调参经验。
-
Full Fine-Tuning:全量微调(Full Fine-Tuning),在预训练模型的基础上,对所有参数进行微调。
-
Freeze:仅对模型的一部分层进行微调,通常是最后几层或输出层,其他层的参数则被冻结不更新。
-
P-tuning:主要针对的是提示词(prompt)的学习与优化,而非直接对模型参数进行更改。它引入了一个可学习的提示向量(prompt embedding),该向量作为额外输入加入到模型中,用以指导模型生成更符合特定任务要求的结果。
这种方式避免了对原模型架构做任何改动,因此非常适合那些希望保护模型版权或者不愿意重新训练完整模型的情况。此外,由于只涉及少量新增参数,所以也具有较高的效率。
-
-
量化
2.1 量化定义:
量化是大模型领域中的一项关键技术,它通过降低模型参数的精度,将浮点数转换为整数或定点数,从而实现模型的压缩和优化。这样做的主要目的是减少模型的存储需求、加快推理速度,并降低模型的计算复杂度,使得大模型能够更高效地在资源受限的设备上运行,例如移动设备、嵌入式系统等场景。
2.2 量化等级:
dtype | 每10亿参数需要占用内存 |
---|---|
float32 | 4G |
fp16/bf16 | 2G |
int8 | 1G |
Int4 | 0.5G |
基本概念
-
bit 位是计算机中最小的数据单位,只能存储 0 或 1 两种状态。一个 bit 可以表示两种状态,即 0 或 1;
-
byte 字节是计算机中常用的数据单位,由 8 个 bit 组成;
-
float 浮点数是一种用于表示实数的数据类型,通常由 32 位或 64 位的二进制数表示,其中 32 位的浮点数称为单精度浮点数,64 位的浮点数称为双精度浮点数;
-
integer 整数是一种用于表示整数的数据类型,通常由 8 位、16 位、32 位或 64 位的二进制数表示,其中 8 位的整数称为字节,16 位的整数称为短整数,32 位的整数称为整数,64 位的整数称为长整数;
2.3 量化方法
-
bitsandbytes: 最常用的量化库,专注于权重量化,通过将模型权重表示为更低精度的数据类型,以减少显存占用和提升训练效率,支持8/4-bit,兼容性好。
-
hqq: 高效量化,适合低精度推理,通常是一种结合了多种量化技术的方法,旨在通过多种策略进一步压缩模型的存储需求,并保持训练过程的性能。
-
eetq: 专注于在训练阶段有效地进行量化,以减少显存占用,并可能采用某些自适应的量化策略来平衡效率和效果。专为Transformer设计的量化工具,优化推理速度。
2.4 对话模版:
• 作用:定义对话数据的格式化模板。 • 示例值:vicuna
、alpaca
、llama3
• 解释:不同模板对应不同的角色标记(如 [INST]
、<human>
),需与模型预训练格式对齐。
2.5 RoPE 插值方法
• 作用:扩展模型上下文长度的旋转位置编码策略。
• 选项:
-
Linear:线性插值,简单扩展但长文本效果可能不稳定。
-
Dynamic(如 NTK-aware):动态调整插值系数,平衡长短文本性能。
-
YaRN:结合插值和微调,稳定扩展至更长上下文。
-
Llama3:Meta官方扩展方法,适配Llama3的长上下文需求。
• 建议:长文本任务优先选 dynamic 或 yarn。
2.6 加速方式
• 作用:加速训练的技术选项。
• 选项:
-
FlashAttention2:优化注意力计算,显著提速且省显存。
-
Liger Kernel:定制化GPU内核,针对特定硬件加速。
-
Unsloth:轻量化训练框架,减少冗余计算。
• 建议:默认 auto 自动选择,显存不足时优先 flashattn2。
-
Train
3.1 练阶段
Pre-training(预训练)、SFT(监督微调)、Reward Modeling(奖励模型)、PPO(策略优化-强化学习阶段)、DPO、KTO(直接偏好优化,用人类偏好数据对齐模型输出)。
3.1.1 预训练阶段(Pretraining)
核心目标: 构建一个对广泛数据具有普遍理解的基础模型。预训练阶段通过让模型在大规模未标注数据集上学习,来捕获语言、图像或其他类型数据的统计规律和潜在结构。这一步骤通常使用自监督学习策略,如掩码语言模型(如BERT)或对比学习(如SimCLR)。
实施细节: 模型会尝试预测被遮盖的部分或在图像中找出相似性,从而在无监督环境下学习数据的内在特征。此阶段需要大量计算资源,并且模型规模往往非常庞大,以便能更好地泛化至各种任务。
应用场景: 预训练模型如BERT、RoBERTa在自然语言处理领域被广泛应用,为后续的微调和具体任务适应奠定了坚实的基础。
3.1.2 监督微调阶段(Supervised Finetuning, SFT)
核心目标: 将预训练得到的通用模型适应特定任务。通过在特定领域的带标签数据集上进行微调,模型学习特定任务的输出模式。
实施细节: 在预训练模型的基础上,添加额外的输出层并使用监督学习策略,调整模型参数以最小化预测错误。这一阶段的训练数据相对较少,但针对性极强,使模型在特定任务上表现更佳。
应用场景: 例如,针对医疗记录的情感分析,会在预训练的语言模型基础上,使用标注了情感的医疗文本进行微调。
3.1.3 奖励模型训练阶段(Reward Modeling)
核心目标: 为模型的行为制定评价标准。在某些复杂或开放式的任务中,简单的正确/错误标签不足以指导模型学习。奖励模型通过给模型的输出分配分数(奖励),引导其产生更高质量的输出。
实施细节: 通过人工或自动化方法,为模型的不同行为或生成内容分配奖励分数,建立奖励模型。这要求设计合理的奖励函数,确保模型追求的目标与实际任务目标一致。
应用场景: 在生成对话系统中,奖励模型可以用来评价对话的连贯性、信息丰富度和用户满意度,促使模型产生更加自然和有用的回复。
3.1.1 增强学习微调阶段(Reinforcement Learning, RL)
核心目标: 通过与环境的互动,优化模型的决策策略。增强学习阶段利用奖励信号,使模型在特定环境中通过试错学习,不断优化其行为策略,以最大化长期奖励。
实施细节: 模型在环境中采取行动,根据奖励模型给出的反馈调整策略。这通常涉及策略梯度方法等技术,模型通过多次迭代逐渐学会如何做出最优选择。
应用场景: 在游戏AI、自动机器人导航等场景,增强学习能让模型在动态环境中自主学习最佳策略,实现高效解决问题的能力。
3.2 Learning Rate (学习率)
在大模型训练中,学习率(Learning Rate) 是优化算法中的一个超参数,它控制了模型在每次迭代过程中调整参数的步长或者是比列。具体来说,学习率决定了基于当前损失函数值对模型权重进行更新的程度。选择合适的学习率对于确保模型能够有效地收敛至最优解或次优解至关重要。
-
过大:如果学习率设置得过高,可能会导致模型参数更新幅度过大,从而错过最优解,甚至可能导致损失函数值不降反升,无法收敛。
-
过小:相反,如果学习率太低,则会导致参数更新速度非常缓慢,这不仅增加了达到收敛所需的时间,还可能导致模型陷入局部最小值而难以跳出,尤其是在复杂的损失地形中。
• 示例值:5e-5
• 解释: • 全参数微调(full
)建议 1e-5
~ 5e-5
。 • LoRA微调可设更高(如 1e-4
),因其参数更新量较小。
3.3 Epochs(训练轮数)
• 作用:训练轮次。 • 示例值:10
• 建议:SFT任务通常 3-10
轮足够;偏好优化(DPO/PPO)可能需更少轮次(1-3
)。
3.4 Maximum Gradient Norm(最大梯度范数)
在训练大模型时,“Maximum Gradient Norm”(最大梯度范数)是一个用于控制梯度裁剪(Gradient Clipping)的阈值。梯度裁剪是一种技术,用来防止梯度爆炸问题,即梯度值变得过大,尤其是在深度神经网络或循环神经网络中。当计算出的梯度范数超过设定的最大梯度范数值时,会对梯度进行缩放,以确保其不会过大。
设置一个“Maximum Gradient Norm”可以帮助维持训练过程的稳定性:
-
防止梯度爆炸:在一些复杂的模型中,特别是在反向传播过程中,可能会出现梯度值异常大的情况,这会导致权重更新过于剧烈,从而破坏已经学到的信息。通过限制梯度的最大范数,可以避免这种情况。
-
改善训练稳定性:对于具有长依赖关系的任务(如时间序列预测、自然语言处理等),使用最大梯度范数可以帮助稳定训练过程,使得学习更加平稳。
• 作用:梯度裁剪阈值,防止梯度爆炸。 • 示例值:1.0
• 建议:默认 1.0
,若训练不稳定(如Loss突增),可降低至 0.5
。
3.5 Max Samples(最大样本数)
• 作用:限制每个数据集的样本数。 • 示例值:10000
• 建议:数据量大时,可限制为 1w~10w
,平衡训练速度与效果。
3.6 Compute Type(计算类型)
• 作用:训练时的数值精度。
• 示例值:bf16、fp16、fp32、pure_bf16
• 解释:
-
bf16:兼顾精度和范围,适合大多数场景。
-
pure_bf16:强制全精度为BF16,可能加速但需硬件支持。
-
建议:A100/H100优先 bf16,旧显卡(如V100)可选 fp16。
3.7 Cutoff Length(截断长度)
• 作用:截断输入输出的最大长度。 • 示例值:4096
• 建议:根据模型最大上下文长度设置(如Llama3为 8192
)。
3.8 Batch Size & Gradient Accumulation(批处理大小 & 梯度累积)
Batch Size指的是每次迭代中输入到模型中的样本数量。在每个训练步骤中,从整个训练数据集中抽取一个固定数量的样本(即一个批次),然后计算这些样本上的损失,并基于这个损失来更新模型参数。 Gradient Accumulation是一种技术,用于在不增加显存消耗的情况下模拟更大的Batch Size。不是在每次前向传播后立即进行反向传播和参数更新,而是累积多个小批次的梯度,在累积了若干次之后再一次性应用这些梯度来进行参数更新。
• 作用:单步训练的数据量。
• 示例值:Batch Size=8、Gradient Accumulation=4
• 解释:
• 实际总批量 = Batch Size * Gradient Accumulation。
• 显存不足时,增大梯度累积步数,减少 Batch Size。
3.9 Val Size(验证集比例)
验证集是从整个数据集中划分出来的一部分,专门用于调整模型超参数、选择模型架构以及评估模型性能,但不会直接参与模型的训练过程。合理设置验证集的大小对于确保模型能够有效泛化到未见过的数据至关重要。
避免分配过多的数据给验证集可能会减少可用于训练的数据量,从而影响模型的学习效果。但如果对于大规模数据集,由于有足够的样本可供训练,因此可以适当增大验证集的比例,如10%-20%,甚至更少,因为即使是相对较小的验证集也足以提供可靠的性能估计。
• 作用:验证集比例。 • 示例值:0.1
(10%数据作为验证集) • 建议:数据量少时设 0.2
,数据量大可设 0.05
。
3.10 LR Scheduler(学习率调节器)
学习率是指模型在训练过程中对参数进行更新的步长或者比例。学习率的选择对于模型的训练过程和性能至关重要。学习率调度器是一种策略,用于动态地调整学习率,以使训练过程更加有效。
• 作用:动态调整学习率。 • 解析:
-
cosine:余弦衰减,使用余弦函数来平滑地降低学习率,从初始值逐渐减小到接近零。这种方法有助于平稳过渡,避免剧烈的学习率变化带来的不稳定性。
-
linear: 线性衰减,学习率按照固定的线性比例递减,直到达到预设的最小值。这种策略简单直接,适合那些需要稳定减少学习率的情况。
-
constant_with_warmup(带有预热阶段的常数学习率):在开始阶段(预热期),学习率从一个较低的值逐步增加到设定值,之后保持不变。这种方法可以帮助模型更稳定地开始训练,尤其是在使用大规模数据集时。
-
cosine_with_restarts(带重启的余弦衰减):类似于标准的余弦衰减,但在到达最低点后会重置回较高的学习率,并再次执行余弦衰减周期。这有助于跳出局部最优解,探索更多可能的解决方案。
-
Polynomial(多项式衰减):学习率根据多项式函数进行衰减,通常是从初始值逐渐减小至某个终点值。该方法提供了灵活的控制方式,可以通过调整多项式的阶数来改变衰减速率。
-
Constant (固定学习率):整个训练过程中保持学习率为一个固定值。虽然简单,但并不总是最有效的选择,因为它没有考虑到训练进展中的不同需求。
-
Inverse_sqrt (逆平方根衰减):学习率与训练步数的平方根成反比递减。这是一种常见的自适应学习率调整策略,特别适用于自然语言处理任务中。
-
Reduce_lr_on_plateau (基于平台期减少学习率):当监测指标(如验证损失)停止改善时,自动降低学习率。这有助于在遇到训练瓶颈时寻找更好的参数空间。
-
Cosine_with_min_lr (带最小学习率限制的余弦退火):类似于标准余弦退火,但是设置了学习率的一个下限值,确保学习率不会低于这个阈值。
-
Warmup_stable_decay (预热-稳定-衰减):这种策略首先有一个预热阶段,然后进入一个稳定的时期,在此期间学习率保持不变,最后进入一个衰减阶段,学习率逐渐减少。这种方法结合了预热的好处以及后期精细调优的需求。
3.11 其他参数设置
Logging steps(日志间隔):表示在训练过程中记录日志的频率,即每隔多少个步骤记录一次训练状态和指标。帮助监控训练过程,及时了解模型的学习进度和性能变化。
Save steps(保存间隔):表示每隔多少个步骤保存一次模型检查点(checkpoint)。定期保存模型状态,便于后续恢复训练或评估不同阶段的模型性能。
Warmup steps(预热步数):表示学习率预热的步数,在这个阶段内学习率会逐渐增加到设定值。有助于模型平稳地开始训练,避免初始阶段因学习率过高导致的不稳定。
NEFTune alpha(NEFTune噪声参数):NEFTune是一种优化技术,alpha参数控制添加到嵌入向量上的噪声幅度。通过引入适量的噪声,增强模型的泛化能力,防止过拟合。
Extra arguments(额外参数):以JSON格式传递给训练器的额外参数。示例:{"optim": "adamw_torch"}
表示使用AdamW优化器进行训练。允许用户自定义优化器、损失函数等高级设置。
Sequence Packing(序列打包):将多个短文本样本智能拼接成一个连续的长序列,替代传统的逐样本填充(padding)方法。避免打包序列之间的交叉注意力,提高训练效率和稳定性。
Use neat packing(使用无污染打包):是否对训练数据进行"干净打包",即在数据预处理阶段自动清理冗余空格、特殊符号等噪声。
作用:
消除文本中的无关字符(如多余换行符、HTML标签等)
统一文本格式(如将连续空格压缩为单个空格)
提升训练效率(减少无效token的占用) 适用场景:当训练数据来自网页爬取、PDF解析等噪声较多的来源时建议启用
Train on prompt(学习提示词):是否对输入提示(prompt)部分进行梯度更新
作用:
开启时:模型会同时学习prompt和response部分
关闭时:仅对response部分计算loss(常规训练模式) 典型应用:当需要模型学习特定指令模板时开启(如强化prompt理解能力)
Mask history(不学习历史对话):在多轮对话训练中是否忽略历史对话内容
作用:
开启时:仅用当前轮次的query-response进行训练
关闭时:将完整对话历史作为上下文输入 使用建议:
单轮任务(如分类)建议开启
多轮对话任务(如客服)建议关闭
Resize token embeddings(更改词表大小):动态调整词向量矩阵的维度
作用:
当添加新token时自动扩展词表(如新增专业术语)
兼容不同分词器的词表尺寸 注意事项:
新增token需要提供足够的训练数据
过大的词表会增加显存占用
Enable LLaMA Pro(使用 LLaMA Pro):是否启用改进版LLaMA架构
特性:
引入动态稀疏注意力机制
支持更长的上下文窗口(如扩展到8k tokens)
优化了位置编码方案 使用条件:
需要额外下载Pro版模型权重
显存消耗比基础版高约20%
3.12 部分参数微调设置
Trainable layers(可训练层数):表示设置为可训练的隐藏层的数量。如果值为正数(如2),则表示最后的2个隐藏层将被设置为可训练状态。如果值为负数,则表示从第一个隐藏层开始向前数相应数量的隐藏层将被设置为可训练状态。这种策略允许用户控制哪些部分的网络权重在微调过程中可以更新,从而在保持大部分预训练知识的同时,针对特定任务进行优化。
Trainable modules(可训练模块):指定可训练模块的名称,多个模块之间用逗号分隔。
3.13 LoRA参数设置
LoRA rank(LoRA矩阵的秩):控制LoRA层中引入的额外参数数量。较低的秩意味着更少的参数和更快的计算速度,但可能牺牲一定的性能。较高的秩则可以提供更好的性能,但会增加计算成本和内存使用。
简单任务(分类、短文本生成):
rank=8~16
复杂任务(长文本生成、多轮对话):
rank=16~64
经验法则:
数据量较小时(<10k样本),优先小秩(8~16)避免过拟合。
数据量较大时(>100k样本),可尝试更大秩(32~64)提升性能。
典型基线:从
rank=8
开始,每训练周期逐步增大,观察验证损失是否持续下降。
LoRA alpha(LoRA缩放系数):用于调整LoRA层对模型输出的影响程度。较大的alpha值会使LoRA层对模型输出有更大的影响,从而增强其适应特定任务的能力。
初始设置:通常设为
alpha=2*rank
(例如rank=8
→alpha=16
)。动态调整:
若模型收敛过快但性能不佳,适当降低alpha(减少适配器影响)。
若模型收敛缓慢,增大alpha(强化适配器信号)。
极端情况:
alpha=rank
(更保守)或alpha=4*rank
(更激进)。
LoRA dropout(随机丢弃率):在训练过程中随机丢弃一定比例的LoRA权重,以防止过拟合并提高模型的泛化能力。
小数据集(<10k样本):
dropout=0.1~0.3
大数据集(>100k样本):
dropout=0~0.1
任务敏感性:
高方差任务(如生成多样性要求高):提高dropout(0.2~0.4)。
低方差任务(如分类):降低dropout(0~0.2)。
LoRA+ LR ratio(LoRA+学习率比例):LoRA中B矩阵的学习率比率。控制LoRA层中B矩阵相对于其他参数的学习率。适当的LR比率有助于平衡LoRA层和其他参数的更新速度,优化训练过程。
常规LoRA:适配器参数学习率通常高于冻结的基础模型。
基础模型LR:
1e-5~1e-4
适配器LR:
1e-4~1e-3
(比例约10:1
)LoRA+变体(如动态学习率分配):
若适配器初始化随机,可设置更高比例(
100:1
)。示例:
base_lr=1e-5
,lora_lr=1e-3
→ 比例100:1
。
Use rsLORA(使用rsLORA):使用秩稳定缩放因子来调整LoRA层。通过动态调整LoRA层的缩放因子,帮助稳定训练过程,特别是在低秩情况下。
Use DoRA(使用DoRA):使用分解权重的LoRA方法。将LoRA层的权重进一步分解,以减少参数量和计算复杂度,同时保持模型性能。
Use PiSSA(使用PiSSA):一种优化策略,旨在提高LoRA层的训练效率和稳定性。
3.14 RLHF 参数设置
RLHF是一种用于优化大语言模型的技术,它结合了人类反馈和强化学习来提升模型生成文本的质量。
Beta 参数:损失函数中β参数的值。在PPO(强化训练)算法中,β参数通常用于控制KL散度惩罚项的权重,以确保策略更新不会偏离当前策略太远。在RLHF的上下文中,它可以影响模型对奖励信号的敏感度。
Ftx gamma:SFT(监督训练)损失在最终损失中的权重。SFT损失是基于监督学习的损失,用于指导模型生成与人类偏好一致的文本。Ftx gamma决定了SFT损失在整体损失函数中的相对重要性,较高的值意味着更重视SFT损失。
Loss type(损失类型):损失函数的类型。选择不同的损失函数可以影响模型的学习行为和收敛速度。
-
Sigmoid Loss(Sigmoid 损失):基于Sigmoid函数的二元分类损失,用于处理成对偏好数据(如正样本 vs 负样本)。通过将模型输出的差值转换为概率,优化模型更倾向于选择人类偏好的响应。
-
Hinge Loss(铰链损失):强制正样本与负样本的得分差距超过一个阈值(margin),最大化二者区分度,防止模型对模糊样本的误判。
Score norm(归一化分数):在PPO训练中对分数进行归一化处理。归一化处理可以消除不同样本之间评分尺度的差异,使模型更加公平地对待每个样本,提高训练的稳定性和效果。
Whiten rewards(白化奖励):在PPO训练中对奖励进行白化处理。白化处理可以去除奖励之间的相关性,使得奖励分布更加均匀,有助于模型更好地学习和适应不同的奖励信号。
3.15 GaLore参数设置
使用GaLore:GaLore是一种针对大模型训练的内存高效优化方法,旨在显著降低训练大型语言模型(LLM)时的内存需求,同时保持全参数学习能力。
GaLore rank(GaLore 秩):将梯度矩阵分解为两个低秩矩阵的乘积。秩越低,内存节省越多,但可能影响梯度精度。通常设置为8-64之间。
Update interval(更新间隔):GaLore的梯度低秩分解是动态更新的,间隔步数越大,投影更新频率越低,内存占用更小,但可能降低训练稳定性。
GaLore scale(GaLore 缩放系数):对低秩投影后的梯度进行缩放,用于补偿低秩近似可能带来的信息损失,通常取1或2,需配合学习率调整。
3.16 APOLLO 参数设置
使用APOLLO:是一种专为降低内存消耗同时保持高性能设计的优化算法,其核心通过结构化梯度缩放和低秩投影技术实现显存高效与训练加速。
3.17 BAdam 参数设置
使用BAdam:是一种针对大型语言模型(LLMs)设计的高效全参数优化器,旨在解决传统优化器(如Adam)在训练或微调大模型时的内存占用高、计算资源需求大等问题。
BAdam 模式:有Layer-wise 或 ratio-wise 两种模式,是两种不同的分块策略,分别使用于不同的场景。
Layer:按模型层划分参数块,例如将每个Transformer的注意力层或前馈网络层作为独立块。适合大型模型(如LLaMA、BERT),因其天然分层结构便于逐层管理更新速度,避免不同层梯度差异导致的训练不稳定。
Ratio:按预设比例划分参数块,例如每次更新模型总参数的10%或20%,而不考虑层的物理边界。更适合小型模型或需要快速收敛的任务(如分类、短文本生成),因其灵活的比例调整能加速局部优化。
Layer-wise BAdam 切换策略:
scending(递增策略):训练初期使用较小的参数块(如单层),随着训练进程逐步增大块大小,最终覆盖更大参数范围。预训练初期或复杂任务微调(如多轮对话生成),需兼顾探索与开发平衡的场景。 技术优势:
-
逃离局部最优:初期小块更新能精细调整局部参数,避免过早陷入次优解;后期大块更新扩大搜索空间,加速全局收敛
-
显存渐进释放:初始小块占用显存较少,适合资源受限环境,后续逐步释放显存压力。
Descending(递减策略):训练初期使用大参数块快速收敛,后期逐步缩小块大小提升精度。简单分类任务或显存充足的场景,需快速验证模型原型时优先采用。 技术优势:
-
加速初期收敛:大块更新快速拟合数据分布,缩短训练周期(如LLaMA-7B微调时间可减少30%)。
-
防止过拟合:后期小块更新抑制参数过度调整,提升泛化能力(在GLUE基准测试中准确率提升1.2%)。
Random(随机策略):在训练过程中随机选择参数块大小,引入不确定性打破优化路径依赖。有风险需合理控制随机幅度,过高波动可能导致训练不稳定(建议配合badam_switch_interval=50
) 技术优势:
-
增强模型鲁棒性:随机性迫使模型适应不同粒度的参数更新,提升对抗数据噪声的能力(如文本纠错任务F1值提升0.8%)
-
避免模式坍塌:防止模型陷入单一优化方向,尤其在生成任务中能增加输出多样性
Fixed(固定策略):全程保持参数块大小不变,简化优化流程。无法充分利用不同阶段优化特性,可能牺牲部分性能上限。
Layer-wise BAdam 切换频率:是指在训练过程中动态调整参数块大小的步长间隔,即每隔多少训练步骤执行一次块大小的调整或切换策略。高频切换(如间隔小)可能引入训练波动,但有助于逃离局部最优;低频切换(如间隔大)提升稳定性,但可能收敛较慢。同时,切换频率影响显存占用峰值,高频切换需频繁加载不同块的优化器状态,可能增加显存压力。
Ratio-wise BAdam 更新比例:是指在参数更新过程中,根据各参数块的梯度统计特性动态调整其更新步长的相对比例,旨在平衡不同层或参数组的训练速度与稳定性。
3.18 SwanLab 参数设置
使用SwanLab: 是一种专为 大模型训练与评估 设计的全流程监控与可视化技术,由中国团队开发,融合了实验跟踪、硬件监控、团队协作等功能,旨在提升 AI 训练的效率和可解释性。
-
Evaluate & Predict
Evaluate 和 Predict都是处理模型预测结果的重要工具,但在使用时有些许区别:
共同点
-
模型依赖:两者都依赖于一个已经训练好的 tf.keras.Sequential 模型。这意味着在调用这两个函数之前,你需要有一个已经通过训练数据学习过的模型。
-
数据输入:它们都需要输入数据来进行处理。这些数据可以是测试集或验证集,用于评估模型性能或生成预测结果。
-
批量处理:两者都可以处理批量数据,即可以一次性输入多个样本给模型进行处理,这有助于提高处理效率。
区别
-
目的不同:
-
evaluate:主要用于评估模型的性能。它会根据提供的数据(通常是测试集或验证集)和模型的预测结果,计算并返回一些性能指标,如准确率、损失值等。这些指标可以帮助你了解模型在未见过的数据上的表现如何。
-
predict:主要用于生成预测结果。它接收输入数据,通过模型进行前向传播,然后返回模型对每个输入样本的预测结果。这些预测结果可以用于后续的分析或决策。
-
-
输出不同:
-
evaluate 的输出通常是一个包含损失值和评估指标(如准确率)的列表或字典。
-
predict 的输出是一个包含预测结果的数组或列表,其形状和格式取决于模型的输出层设计。
-
温度系数(Temperature)
是用来调整模型输出的随机性的。温度高的话,概率分布会更平滑,模型会更倾向于选择可能性低的词,这样结果更多样化,更有创意。温度低的话,模型会更倾向于高概率的词,输出更确定和保守。比如,温度设为0的话,可能每次都选概率最高的词,变得很机械。
Top-k
这个参数是每次生成时只考虑概率最高的前k个词。比如k=50,模型就从这50个里选一个。但问题是有时候这些前k个词的概率可能都很低,或者有的上下文下概率分布比较平缓,这时候top-k可能还是会引入不太相关的词。
Top-p
也叫核采样。这个是根据累积概率来选择词。比如p=0.9,模型会从概率最高的词开始累加,直到总和超过0.9,然后只从这些词里选。这样能动态调整候选词的数量,根据不同的上下文自适应。比如有些情况可能只需要几个词就达到p,有些可能需要更多。
平衡多样性与质量:通常结合温度系数和Top-p使用(例如temperature=0.7, top_p=0.9
)。
二、词解
token
指将原始文本分割成更小的单元,这些单元可以是完整的单词(如“hello”)、标点符号(如“,”)、或者是基于某种算法生成的子词。例如,“unhappy”这个单词可能被分解成“un”和“happy”两个tokens。
M、B、T
M表示百万参数,用于描述中小规模模型的参数量。例如:110M,BERT-Base模型的参数规模。
B表示十亿参数,是描述模型参数规模的核心单位。例如 7B,是70亿参数(如Llama 2-7B、Mistral-7B);13B是130亿参数(如Qwen-14B)。
T表示万亿参数,代表超大规模模型。例如,1T就是1万亿参数(如GPT-4等)。
过拟合
在大模型训练中,过拟合指的是模型在训练数据集上学得过于精细,以至于它不仅学习到了训练数据中的基本模式和规律,还捕捉到了其中的噪声、异常值以及仅存在于训练集中的特定细节。这导致模型在训练数据上的表现非常好(例如,准确率非常高),但在未见过的数据(如验证集或测试集)上表现不佳,即模型的泛化能力较差。
epoch 和 Iteration
epoch:一个epoch代表将完整训练数据集输入神经网络完成一次完整训练循环。这包含两个核心阶段:前向传播阶段计算预测值与实际值的误差,反向传播阶段根据误差调整网络参数。例如当训练集包含10000张图片时,模型完整遍历这10000个样本即完成一个epoch。
Iteration:指完成一个batch(批次)样本训练所需的计算次数。当batch_size=200时,处理10000个样本需要50次迭代才能完成一个epoch。这种区别解释了为何训练过程中需要同时关注epoch总数与每个epoch内的迭代次数。
鲁棒性
鲁棒性(Robustness):是指一个系统、模型或算法在面对不确定性、干扰或异常情况时,仍能保持稳定性能或正确功能的能力。这一概念广泛用于工程、统计学、计算机科学等领域,核心是强调“抗干扰能力”和“容错性”。