You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PEFT微调预训练模型时,是否优化新初始化的未预训练层?

PEFT微调预训练模型时新初始化层的处理逻辑

用PEFT(比如LoRA)微调预训练模型(像DistilBert这类)时,新初始化的未预训练层(比如分类任务里的分类头)默认是会被优化的,不会被冻结。

道理很直白:PEFT的核心是冻结预训练模型的主体参数,只给指定的target_modules(比如你示例里的注意力层q_lin、k_lin、v_lin)加轻量级适配器(比如LoRA矩阵),然后只训练这些适配器参数;但下游任务新增的层不属于预训练模型的原有参数,PEFT不会自动冻结它们,这些层的参数会跟着微调过程正常更新。

拿你给的DistilBert+LoRA代码举例:

from peft import LoraConfig, TaskType

lora_config = LoraConfig(
    r=8, # 秩数
    lora_alpha=32, # 缩放因子
    lora_dropout=0.05, # LoRA层的dropout概率
    target_modules=["q_lin", "k_lin","v_lin"], # 仅在多头注意力层应用LoRA
    bias='none',
    task_type=TaskType.SEQ_CLS # 序列分类任务
)

用这个配置初始化PEFT模型后,DistilBert的预训练主体参数(除了指定注意力层的LoRA适配器)会被锁住,但新增的分类层参数是可训练的,会和LoRA适配器参数一起参与反向传播更新。

要是你非要冻结新增的分类层,得手动给该层设置requires_grad=False,不过下游任务里一般没必要这么做——毕竟分类头就是为当前任务专门加的,必须通过训练来适配任务数据。

内容的提问来源于stack exchange,提问作者Qdr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:34:54