LoRA微调关键参数

一、什么叫“参数”,什么叫“超参数”

1. 模型参数(Parameters)

这是训练过程中被学习出来的

  • 权重矩阵 W
  • 偏置 b
  • LoRA 中的 AB 矩阵本身的数值

这些是通过 loss → 反向传播 → 梯度下降自动更新的。


2. 超参数(Hyperparameters)

这是训练前人工设定的,用于控制“学习规则”的:

  • 学习率 lr
  • batch size
  • 训练步数 / epoch
  • 正则化系数
  • LoRA 的 r、α、dropout、target_modules

2️⃣ 关键参数

参数 说明 常见取值 / 范例
r LoRA 的秩,低秩矩阵的大小 4~64(小模型 r 小,大模型 r 可大一些)
alpha 缩放因子,影响 (\Delta W) 的幅度 16、32
dropout 对 LoRA 注入的增量矩阵做 dropout 0~0.1
target modules 选择哪些模块做 LoRA Transformer 的 q_projv_proj
fan_in_fan_out 是否交换矩阵维度 True/False,取决于原模型实现

详解

明白了,你希望我把 LoRA 微调主要针对的 Transformer 层、LoRA 参数和调参建议做一个系统梳理,并说明 各参数如何设置及对模型影响。下面我帮你整理成工程可落地的表格和说明。


一、主要作用层与对应 LoRA 参数

层类型 说明 LoRA 调整的参数 调参要点 / 建议
注意力层 Q/K/V 投影矩阵 Transformer 的多头自注意力核心矩阵 A, B (低秩矩阵) rank r 控制微调能力,alpha 控制增量幅度,dropout 可防过拟合
输出线性层(Output Projection) 注意力输出的线性映射 A, B rank 一般可同 Q/K/V,alpha 可适当减小
嵌入层(Embedding) 词嵌入向量映射 A, B 对高频词可保守,r 不宜太大,防止破坏原始空间
Feed-Forward 层 / MLP 两层线性 + 激活 A, B rank r 较小即可,主要调控非线性表达
分类头 / 输出层 下游任务特定输出 A, B alpha 可适当增大以快速适配任务

二、主要 LoRA 参数及设置建议

参数 作用 调参思路 / 常见值 对模型的影响
r(rank) 低秩矩阵的维度 4~64
小模型 4~16,中型 16~32,大模型 32~64
r 越大,微调能力越强,但参数量增加,可能影响稳定性
alpha 缩放增量矩阵 ΔW 幅度 16~32 alpha 越大,LoRA 对原模型影响越明显;过大可能破坏原模型特性
dropout 对增量矩阵做 Dropout 0~0.1 避免 LoRA 过拟合小样本数据,r 小时可适当增加
target modules 选择微调哪些模块 q_proj、v_proj、k_proj、output_proj、embedding、MLP 只微调核心层可减少参数,提高训练速度
fan_in_fan_out 是否交换矩阵维度 True / False 根据原模型实现决定,常用 True 对齐权重布局

三、调参策略(针对主要应用场景)

  1. 小型 NLP 模型 / 少量训练样本

    • r = 4~16
    • alpha = 16
    • dropout = 0.05
    • target modules = q_proj + v_proj
  2. 中型 / 大型语言模型(如 LLaMA-7B)

    • r = 32~64
    • alpha = 32
    • dropout = 0~0.05
    • target modules = q_proj, k_proj, v_proj, output_proj
  3. 嵌入层微调

    • r = 16
    • alpha = 16
    • dropout = 0~0.1
    • 用于特定任务词汇增量适应,防止破坏原空间
  4. 多任务 / 风格注入(Diffusion、生成模型)

    • r = 32~64
    • alpha = 32
    • target modules = UNet 中注意力层 + 条件投影层

四、注意事项

  1. 先冻结原始权重

    • LoRA 只更新 A 和 B,原始矩阵 W 保持不动
  2. 控制参数量

    • rank r 越大,微调参数越多;一般建议 微调参数 < 10% 原始参数
  3. 调节 alpha

    • alpha 控制 LoRA 对原模型输出的影响
    • 小样本场景 alpha 可适当小,以防过拟合
  4. Dropout 防过拟合

    • 对小数据集尤其重要
    • 对大数据集,可设置为 0

target model选择

在 LoRA 微调中,target modules(要微调的层)不一定全部选,通常根据任务和资源选择局部或全局。选择策略可以按下面思路:


一、选择策略

1️⃣ 核心层优先(推荐做法)

  • 多头自注意力层q_proj、k_proj、v_proj、output_proj

  • 原因:

    • 注意力层是 Transformer 的核心,微调它可以快速调整模型的表达能力
    • 参数量大,用 LoRA 增量微调效果明显

2️⃣ 嵌入层(Embedding Layer)

  • 当任务需要处理 特定词汇或领域术语 时微调
  • r 不宜太大,避免破坏原始嵌入空间

3️⃣ Feed-Forward / MLP 层

  • 对于任务需要改变非线性映射能力时才微调
  • rank 可较小,一般 4~16

4️⃣ 输出层 / 分类头

  • 对下游任务特定输出才微调
  • 对通用 LLM 不建议全部微调输出层

二、全局 vs 局部选择

策略 适用场景 优缺点
局部微调(只微调注意力层 + 部分嵌入) 小数据集、小模型、快速微调 参数少,训练快,不破坏原模型能力
全局微调(所有 Transformer 层 + 嵌入 + FFN) 大数据集、复杂任务 微调能力最强,但参数量大、训练成本高

实际工程中,大多数场景采用 局部微调,比如只选择 q_proj、v_proj、output_proj 和嵌入层,这样 参数量少、训练快、对原模型破坏小


三、调参示例

  • 小型客服智能助手

    • target modules: q_proj + v_proj + embedding
    • r = 8~16
    • alpha = 16
    • dropout = 0.05
  • 中型 LLM 文本生成任务

    • target modules: q_proj + k_proj + v_proj + output_proj
    • r = 32
    • alpha = 32
  • 领域特定嵌入增强

    • target modules: embedding
    • r = 16
    • alpha = 16

总结

不必全部选。优先微调 注意力层 + 嵌入层,根据任务复杂度和数据量决定是否扩展到 MLP / 输出层。
局部微调通常足够,大幅减少训练参数,避免过拟合。

posted @ 2025-12-29 21:13  向着朝阳  阅读(77)  评论(0)    收藏  举报