大模型微调训练技术中各个参数的意义及影响

作为学习大模型微调技术的新手,详细了解各个参数的意义和对最终结果的影响可以让你减少实验次数,尽快训练出让自己满意的大模型

大模型微调训练技术中各个参数的意义及影响
2021年10月15日 和媳妇儿在青岛

距离上次完成一个大模型的微调实验已经过去了接近半年,好多技术都更新了,出现了多个能够直接对大模型进行微调的工具框架, LLaMa-Factory 是我目前尝试的几个当中使用最顺畅的。

GitHub - hiyouga/LLaMA-Factory: Unified Efficient Fine-Tuning of 100+ LLMs (ACL 2024)
Unified Efficient Fine-Tuning of 100+ LLMs (ACL 2024) - hiyouga/LLaMA-Factory

当然还有咱们国产的 ModelScope发布的Ms-Swift 框架,表示也很不错,但我难在了自定义数据集上,主要是因为不熟悉可能入手起来很困难,花了1个小时没找到详细的入门示例,最后放弃了,转投了LLama-Factory。

GitHub - modelscope/ms-swift: Use PEFT or Full-parameter to finetune 400+ LLMs (Qwen2.5, Llama3.2, GLM4, Internlm2.5, Yi1.5, Mistral, Baichuan2, DeepSeek, ...) or 150+ MLLMs (Qwen2-VL, Qwen2-Audio, Llama3.2-Vision, Llava, InternVL2.5, MiniCPM-V-2.6, GLM4v, Xcomposer2.5, Yi-VL, DeepSeek-VL2, Phi3.5-Vision, GOT-OCR2, ...).
Use PEFT or Full-parameter to finetune 400+ LLMs (Qwen2.5, Llama3.2, GLM4, Internlm2.5, Yi1.5, Mistral, Baichuan2, DeepSeek, ...) or 150+ MLLMs (Qwen2-VL, Qwen2-Audio, Llama3.2-Vision, Llava, Inter…

在完成第一次测试后,我成功实现了从云端完成微调训练,然后推送到 Huggingface,再转换为 ollama格式 gguf模型,最后本地运行测试。

一切都"挺顺利"的,一坐又是一天...,但最后获得结果真实一把屎一把尿,整个模型输出乱套了,就像是吃醉了酒,根本不听使唤。

💡
我可能是第一个成功把Q问大模型训练成傻子的博主吧哈哈!

在尝试第二次训练之前,我决定详细了解下各个参数的意义以及影响,这对后续训练效果的提升至关重要。

一:学习率 (Learning Rate)

学习率控制模型在每次迭代中参数更新的步长。学习率过高可能导致模型训练不收敛,参数更新过快,无法找到最优解;学习率过低则可能导致训练过程过慢,甚至陷入局部最小值。

  • 高学习率:可能导致模型在损失函数的优化过程中跳跃过大,无法稳定收敛,甚至发散。
  • 低学习率:训练过程缓慢,可能需要更多迭代次数才能收敛,且容易陷入局部最小值。

建议:

通常从较小的学习率(如 1e-5 或 1e-6)开始,逐步调整以找到最佳值。可以使用学习率调度器(如线性衰减、余弦衰减)来动态调整学习率。

二:训练轮数 (Number of Epochs)

训练轮数表示模型在整个训练数据集上迭代的次数。更多的训练轮数可以使模型更好地学习数据中的模式,但也增加了过拟合的风险。

  • 少训练轮数:模型可能无法充分学习数据中的复杂模式,导致欠拟合。
  • 多训练轮数:模型可能过度拟合训练数据,导致在测试数据上的泛化能力下降。

建议:

从较少的训练轮数(如 3-5 轮)开始,逐步增加,同时监控验证集上的性能,以避免过拟合。可以使用早停法(Early Stopping)来自动停止训练,当验证集上的性能不再提升时。

三:批量大小 (Batch Size)

批量大小表示每次迭代中用于计算梯度和更新参数的样本数量。较大的批量大小可以提高训练的稳定性和效率,但也会增加内存需求。

  • 大批量大小:梯度估计更稳定,训练过程更平滑,但可能导致模型收敛到较宽的最小值,泛化能力可能下降。
  • 小批量大小:梯度估计更嘈杂,训练过程更不稳定,但可能导致模型收敛到更尖锐的最小值,泛化能力可能更好。

建议

通常从较小的批量大小(如 16 或 32)开始,逐步调整以找到最佳值。可以使用梯度累积(Gradient Accumulation)技术来模拟大批量训练,同时减少内存需求。

四:参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT)

PEFT 旨在通过最小化微调参数数量和计算复杂度,实现高效的迁移学习。它仅更新模型中的部分参数,显著降低训练时间和成本,适用于计算资源有限的情况。

  • Prefix Tuning:在输入前添加可学习的 virtual tokens 作为 Prefix,仅更新 Prefix 参数,Transformer 其他部分固定。减少需要更新的参数数量,提高训练效率。
  • Prompt Tuning:在输入层加入 prompt tokens,简化版的 Prefix Tuning,无需 MLP 调整。随着模型规模增大,效果接近 full fine-tuning。
  • Adapter Tuning:设计 Adapter 结构,嵌入 Transformer 的结构中,固定预训练模型的参数,只对新增的 Adapter 结构进行微调。减少引入的参数数量,提高训练效率。
  • LoRA:在涉及到矩阵相乘的模块,引入两个低秩矩阵模块 A 和 B,模拟 full fine-tuning 的过程,仅对语言模型中起关键作用的低秩本质维度进行更新。

建议:

根据具体任务和计算资源选择合适的 PEFT 方法。例如,对于计算资源有限的情况,可以优先选择 LoRA 或 Adapter Tuning。

五:正则化 (Regularization)

正则化技术(如 L1、L2 正则化)用于防止模型过拟合。通过在损失函数中添加正则化项,限制模型参数的复杂度,使模型更加平滑。

  • L1 正则化:使模型参数稀疏,有助于特征选择,减少模型复杂度。
  • L2 正则化:使模型参数平滑,防止参数值过大,提高模型的泛化能力。

建议:

根据任务需求选择合适的正则化方法。通常 L2 正则化在大多数任务中表现良好,可以从小的正则化系数(如 1e-4 或 1e-5)开始,逐步调整。

六:Dropout

Dropout 是一种正则化技术,通过在训练过程中随机丢弃部分神经元的输出,防止模型过拟合。

  • 高 Dropout 比例:增加模型的泛化能力,但可能导致训练过程不稳定,收敛速度变慢。
  • 低 Dropout 比例:模型可能过拟合,但训练过程更稳定。

建议:

通常从较小的 Dropout 比例(如 0.1 或 0.2)开始,逐步调整以找到最佳值。

七:温度参数 (Temperature)

温度参数用于控制模型输出的概率分布的锐度。较高的温度值使输出分布更平滑,增加输出的多样性;较低的温度值使输出分布更尖锐,减少输出的多样性。

  • 高温度值:增加输出的多样性,但可能导致输出质量下降。
  • 低温度值:减少输出的多样性,提高输出质量,但可能使输出过于集中。

建议:

根据任务需求选择合适的温度值。通常从 1.0 开始,逐步调整以找到最佳值。

八:Top-K 和 Top-P

Top-K 和 Top-P 是用于控制模型输出采样的方法。Top-K 选择概率最高的 K 个标记进行采样;Top-P 选择累积概率达到 P 的标记进行采样。

  • Top-K:选择概率最高的 K 个标记,减少输出的多样性,但提高输出质量。
  • Top-P:选择累积概率达到 P 的标记,平衡输出的多样性和质量。

建议:

根据任务需求选择合适的 Top-K 和 Top-P 值。通常从较小的 K 值(如 36)和较大的 P 值(如 0.7)开始,逐步调整以找到最佳值。