LoRA超参数指南

itmatou
itmatou 发布于 2025年04月12日 11时13分
LoRA超参数指南

LoRA 超参数的最佳实践,并了解它们如何影响微调过程。

有数百万种可能的超参数组合,选择正确的值对于微调至关重要。您将学习超参数的最佳实践 - 基于来自数百篇研究论文/实验的见解以及它们如何影响模型。 我们建议您使用 Unsloth 的预选默认值。

目标是更改超参数数字以提高准确性,但也要抵消过度拟合或欠拟合 。过度拟合是模型记住数据并努力解决新问题的地方。我们想要一个通用的模型,而不是一个仅仅记住的模型。

关键微调超参数

Learning Rate

定义模型权重在每个训练步骤中调整的程度。

  • 更高的学习率 : 更快的训练,减少过拟合,请确保不要让它太高,因为它会欠拟合
  • 更低的学习率 :更稳定的训练,可能需要更多的 epoch。
  • 典型范围 :1e-4 (0.0001) 至 5e-5 (0.00005)。

模型在每次迭代中参数更新的步长大小。

学习率过大时,参数更新步长过大,可能会导致参数跨过最优解,训练过程不稳定,甚至发散;学习率过小时,参数更新缓慢,可能导致模型陷入局部最优解,训练时间延长‌

Epochs

模型看到完整训练数据集的次数。

  • 推荐:1-3 个 epoch(任何超过 3 个的事物通常都不是最佳选择,除非你希望你的模型有更少的幻觉,但也更少创造力)
  • 更多 Epochs:更好的学习,更高的过拟合风险
  • 较少的 epochs:可能会对模型进行欠训练。

高级超参数

超参数功能推荐设置
LoRA Rank控制用于适应的低秩因子的数量。4-128
LoRA Alpha权重更新的缩放因子。LoRA Rank * 1 or 2
Max Sequence Length模型可以学习的最大上下文。根据数据集需求进行调整
Batch Size每个训练步骤处理的样本数值越高,需要的 VRAM 就越多。1 表示长上下文,2 或 4 表示较短的上下文。
LoRA Dropout防止过拟合0.1-0.2
Warmup Steps在训练开始时逐渐提高学习率总步数的 5-10%
Scheduler Type在训练过程中动态调整学习率。Linear Decay
Seed or Random State确保结果的可重复性。固定数字(例如,42)
Weight Decay惩罚较大的权重更新以防止过度拟合。1.0 或 0.3(如果您有问题)

Unsloth 中的 LoRA 超参数

如果您愿意,可以手动调整下面的超参数 - 但请随意跳过它,因为 Unsloth 会自动为您选择均衡的默认值。

model = FastLanguageModel.get_peft_model(
	model,
    r = 16, # Choose any number > 0 ! Suggested 8, 16, 32,64, 128
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj"],
    lora_alpha = 16,
    lora_droput = 0,  # Supports any, but=0 is optimized
    # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
    use_gradient_checkpointing = "unsloth",  # True or "unsloth" for vety long context
    random_state = 3407,
    use_rslora = False,  # We support rank stabilized LoRA
    loftq_config = None,  # And LoftQ
)

1、r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128

微调过程的等级。较大的数字会占用更多内存,并且速度会变慢,但可以提高更难任务的准确性。我们通常建议使用 8 (用于快速微调) 和最多 128 的数字。太大的数字会导致过度拟合,从而损害模型的质量

2、target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj",], 我们选择所有模块进行微调。您可以删除一些以减少内存使用量并加快训练速度,但我们强烈建议不要这样做。只需在所有模块上进行训练即可!

3、lora_alpha = 16,

微调的比例因子。较大的数字将使 finetune 了解有关您的数据集的更多信息,但可能会促进过度拟合。我们建议它等于秩 r,或将其翻倍。

4、lora_dropout = 0, # Supports any, but = 0 is optimized

将此值保留为 0 可加快训练速度!可以减少过度拟合,但不会那么多。

5、bias = "none", # Supports any, but = "none" is optimized

将此值保留为 0 以获得更快、更少的过度拟合训练!

6、use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context

选项包括 TrueFalse“unsloth”。 我们建议使用 “unsloth”,因为我们将内存使用量额外减少了 30%,并支持超长的上下文微调。您可以在此处阅读:https://unsloth.ai/blog/long-context 了解更多详情。

7、random_state = 3407,

用于确定确定性运行数的编号。训练和微调需要随机数,因此设置此数字可使实验可重现。

8、use_rslora = False, # We support rank stabilized LoRA

自动设置 lora_alpha = 16 的高级功能。如果你愿意,你可以使用它!

9、loftq_config = None, # And LoftQ

高级功能,用于将 LoRA 矩阵初始化为权重的前 r 个奇异向量。可以在一定程度上提高准确性,但可能会使内存使用量在开始时呈爆炸式增长。

避免过度配合和不足配合

过拟合Overfitting

记住训练数据,无法推广到看不见的输入

  • 如果您的训练持续时间较短,请降低学习率。对于更长的训练运行时间,请提高学习率。因此,最好对两者进行测试,看看哪个更好。
  • 增加批量大小(batch size)。
  • 减少训练 epoch 的数量。
  • 将您的数据集与通用数据集(例如 ShareGPT)相结合
  • 提高 dropout rate 以引入正则化。

欠拟合Underfitting

虽然不太常见,但欠拟合是由于缺乏可学习的参数而导致低秩模型无法泛化的地方,因此您的模型可能无法从训练数据中学习。

  • 如果您的训练持续时间较短,请提高学习率。对于较长的训练运行,请降低学习率。
  • 训练更多epochs
  • 提高rank 和 alpha。Alpha 应至少等于rank 数字,对于较小的模型/更复杂的数据集,rank 应该更大;通常在 4 到 64 之间。
  • 使用与域更相关的数据集。

 

评论(0)