LLaMA Factory 中配置学习率与 Adam 优化器的完整指南

133 40~52 min

LLaMA Factory 是针对大语言模型(如 LLaMA、Mistral 等)进行高效微调和训练的开源框架。学习率(Learning Rate)和优化器(如 Adam)的设置直接决定了模型的训练效率和最终性能。本文将通过 理论解析 + 实际配置示例,帮助用户深入理解 LLaMA Factory 中学习率与 Adam 的配置逻辑,并提供最佳实践建议。


1. 学习率(Learning Rate)的核心作用与挑战

1.1 学习率的意义

  • 参数更新步长的控制器:学习率决定了模型在每次反向传播时,根据梯度调整参数的幅度。

    • 公式:参数新值 = 参数旧值 - 学习率 * 梯度

  • 影响训练的两大关键

    • 收敛速度:学习率过小 → 训练缓慢;学习率过大 → 震荡甚至发散。

    • 模型性能:不合适的学习率会导致模型陷入局部最优或过拟合。

1.2 LLaMA Factory 中的学习率特点

  • 更小的默认值:由于大语言模型的参数量庞大(数十亿级别),LLaMA Factory 的默认学习率通常较低(如 1e-51e-4)。

  • 与训练策略强相关:如 LoRA 微调、全参数训练等不同模式需要差异化的学习率设置。


2. Adam 优化器在 LLaMA Factory 中的关键参数

Adam 是 LLaMA Factory 默认的优化器,其核心参数如下:

# 配置文件示例 (config.yaml)
optimizer:
  name: adamw
  lr: 2e-5        # 初始学习率
  betas: [0.9, 0.999]  # 一阶矩和二阶矩的衰减率
  eps: 1e-8       # 数值稳定性常数
  weight_decay: 0.01  # L2正则化系数

2.1 参数解析

参数

作用

推荐值

lr

初始学习率(Base Learning Rate)

1e-5 到 3e-5(LoRA)

betas

控制梯度一阶矩(动量)和二阶矩(自适应学习率)的指数衰减系数

[0.9, 0.999]

eps

防止分母为零的小常数(对低精度训练更重要)

1e-8

weight_decay

L2正则化系数,防止过拟合

0.01(常用)

2.2 AdamW 与 Adam 的区别

  • AdamW:在 LLaMA Factory 中默认使用 AdamW,其改进了权重衰减(Weight Decay)的实现方式,将正则化项与参数更新解耦,更适合大模型的稳定训练。


3. LLaMA Factory 中的学习率配置实战

3.1 基础配置示例

# 配置文件 config.yaml
training:
  learning_rate: 2e-5
  optimizer: adamw
  scheduler: cosine  # 学习率调度策略
  warmup_steps: 100  # 预热步数

3.2 学习率调度策略

LLaMA Factory 支持多种学习率调度器,通过 scheduler 参数指定:

调度策略

适用场景

配置文件示例

linear

通用任务,线性衰减学习率

scheduler: linear

cosine

长时间训练任务,平滑衰减

scheduler: cosine

constant

学习率保持不变

scheduler: constant

warmup_xxx

结合预热(如 warmup_cosine

scheduler: warmup_cosine

3.3 预热(Warmup)的重要性

  • 作用:在训练初期逐步增加学习率(如从 0 到目标值),避免初始梯度不稳定。

  • 配置示例

    scheduler: warmup_cosine
    warmup_ratio: 0.1  # 预热占总训练步数的比例(如 10%)

4. 最佳实践与调优建议

4.1 学习率与训练模式的对应关系

训练模式

推荐学习率范围

说明

全参数微调

1e-6 到 3e-5

需要极低学习率避免破坏预训练权重

LoRA 微调

1e-4 到 3e-4

可适当提高(仅更新适配器参数)

QLoRA

1e-4 到 5e-4

量化训练需更高学习率补偿精度损失

4.2 学习率调试技巧

  1. 网格搜索法:在 1e-53e-51e-4 等关键值附近尝试。

  2. 损失曲线观察

    • 理想情况:损失平稳下降,波动较小。

    • 学习率过大:损失剧烈震荡或突然上升。

    • 学习率过小:损失下降缓慢,甚至停滞。

  3. 批量大小(Batch Size)的联动调整

    • 批量大小加倍 → 学习率可适当提高(如乘以√2)。

4.3 Adam 参数的微调

  • beta1/beta2:仅在极端情况下调整(如训练发散时尝试 beta1=0.8)。

  • weight_decay

    • 防止过拟合:增大至 0.1

    • 避免欠拟合:降低至 01e-4


5. 常见问题与解决方案

5.1 训练损失不下降

  • 可能原因:学习率过低、梯度消失、参数未正确更新。

  • 解决方案

    • 检查梯度是否正常(使用 --gradient_checkpointing)。

    • 逐步提高学习率(如从 1e-53e-5)。

5.2 训练过程震荡

  • 可能原因:学习率过高、批量大小过小。

  • 解决方案

    • 降低学习率(如从 3e-41e-4)。

    • 增加批量大小(需同步调整学习率)。

5.3 过拟合

  • 可能原因:学习率过大、训练步数过多。

  • 解决方案

    • 降低学习率(如 1e-45e-5)。

    • 增大 weight_decay(如 0.010.1)。


6. 总结

在 LLaMA Factory 中,学习率与 Adam 优化器的配置是平衡训练效率和模型性能的核心。通过理解学习率的动态调整逻辑(如预热、余弦衰减)和 AdamW 的自适应机制,开发者可以快速调试出适合任务的参数组合。建议始终遵循以下原则:

  1. 从小学习率开始:尤其是全参数微调场景。

  2. 监控损失曲线:根据训练动态调整参数。

  3. 善用预训练配置:参考官方提供的配置文件(如 llama3-8b-lora.yaml)。

通过本文的指导,读者可以避免常见的训练陷阱,高效利用 LLaMA Factory 释放大语言模型的潜力。


0