【NLP高频面题 - 高效微调篇】LoRA微调时有哪些可配置的参数?
【NLP高频面题 - 高效微调篇】LoRA微调时有哪些可配置的参数?
重要性:★★★
LoRA 微调示例:
from peft import LoraConfig, get_peft_model
# LoRA 配置
config = LoraConfig(
r=16,
lora_alpha=16,
target_modules=["query", "value"],
lora_dropout=0.1,
bias="none",
modules_to_save=["classifier"],
)
model = get_peft_model(model, config)
model.print_trainable_parameters()
"trainable params: 667,493 || all params: 86,543,818 || trainable%: 0.7712775047664294"
LoraConfig(PeftConfig)源码
lora 主要参数解读:
r
解读: LoRA低秩矩阵中rank的大小,需要在模型复杂性、适应能力以及欠拟合、过拟合的风险之间进行权衡。
较小的 r 对应的是更简单的低秩矩阵,模型在训练中学习的参数更少。这可以加快训练速度,并可能降低计算需求。
但是,随着 r 越小,低秩矩阵捕获特定任务信息的能力就会降低,模型在新任务上的表现可能不如较高的r。
实际训练中需要尝试不同的 r 值,以找到合适的平衡点,以在新任务上实现所需的性能。
lora_alpha
解读: 一个比例因子,用于在前向传播过程中将 LoRA参数以一定的缩放比例应用于模型之中,用于调整原始模型输出加上低秩适应两者组合结果的大小。正如下面公式所示,此比例因子值越大,Lora参数的影响就越大。
scaling = alpha / r
weight += (lora_B @ lora_A) * scaling
lora_dropout
解读: 用于控制在训练过程中应用于 LoRA 层的 dropout参数比例,取值在0-1之间。0.1表示丢弃10%的神经元,这部分被丢弃的神经元不参与计算。
注:Dropout 是一种正则化技术,只用于训练过程,通过随机丢弃一部分神经元来,来减少训练过程中模型对特定特征的依赖,从而防止模型过拟合,尤其适用于数据量较小或模型较复杂的情况下。
inference_mode
解读:是否为推理模式,设置为False表示训练模式。
target_modules
解读:用于指定模型中具体哪些模块将应用 LoRA 适配器,这里的模块与具体模型的结构有关,一般都需要包括注意力部分的q、k、v模块。
NLP 大模型高频面题汇总
NLP基础篇
-
【NLP 面试宝典 之 模型分类】 必须要会的高频面题
-
【NLP 面试宝典 之 神经网络】 必须要会的高频面题
-
【NLP 面试宝典 之 主动学习】 必须要会的高频面题
-
【NLP 面试宝典 之 超参数优化】 必须要会的高频面题
-
【NLP 面试宝典 之 正则化】 必须要会的高频面题
-
【NLP 面试宝典 之 过拟合】 必须要会的高频面题
-
【NLP 面试宝典 之 Dropout】 必须要会的高频面题
-
【NLP 面试宝典 之 EarlyStopping】 必须要会的高频面题
-
【NLP 面试宝典 之 标签平滑】 必须要会的高频面题
-
【NLP 面试宝典 之 Warm up 】 必须要会的高频面题
-
【NLP 面试宝典 之 置信学习】 必须要会的高频面题
-
【NLP 面试宝典 之 伪标签】 必须要会的高频面题
-
【NLP 面试宝典 之 类别不均衡问题】 必须要会的高频面题
-
【NLP 面试宝典 之 交叉验证】 必须要会的高频面题
-
【NLP 面试宝典 之 词嵌入】 必须要会的高频面题
-
【NLP 面试宝典 之 One-Hot】 必须要会的高频面题
-
…