peft微调参数解析


前言

本文讨论用peft库进行大模型微调,采取LoRA和P-Tuning(v2)两种方式。


一、LoRA

基于LoRA的原理,将权重矩阵分解为两个更低维的矩阵,以减少训练的参数量,即ΔW = AB。ΔW = (m,n),A=(m,r),B=(r,n)。所以最主要的一个参数为r,即矩阵的秩。

另LoRA中规定一个缩放系数alpha,本质上是LoRA应用于预训练权重的影响大小。scaling = alpha / r ,weight += (lora_B @ lora_A) * scaling。通常r和alpha设置为1:2。

Lora中同时提供dropout参数来防止过拟合。

用peft库可直接使用LoraConfig方法设置各参数。

Config = LoraConfig(r=8,              
                    lora_alpha=16,  
                    target_modules=lora_module_name,  
                    lora_dropout=0.1, 
                    bias="none",
                    task_type="CAUSAL_LM",
                    inference_mode=False,
                   )

其中target_modules可以设置LoRA应用于模型的哪些层,通常应用于每个Transformer层中的Key和Value权重矩阵。此外,我们还可以将LoRA应用于Query权重矩阵、投影层Projection、多头注意力模块之间的其他线性层Head以及线性输出层MLP。

二、P-Tuning(v2)

根据P-Tuning的原理,原始方法中的离散Prompt模板影响模型效果的稳定性,故在P-Tuning中,引入可微的virtual token,该方法将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。但P-Tuning只在输入层加入了virtual token,且virtual token的位置是可变的,不一定是前缀。

而P-Tuning v2的变化为,该方法在每一层都加入了virtual tokens作为输入,而不是仅仅在输入层。

Config = PrefixTuningConfig(num_virtual_tokens=30,
                            task_type="CAUSAL_LM",              
                            prefix_projection = False,
                            inference_mode=False
                           )

其中num_virtual_tokens是virtual tokens的数量,即prompt的长度。
prefix_projection表示是否投影前缀嵌入(token),默认值为false,表示使用P-Tuning v2, 如果为true,则表示使用 Prefix Tuning。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值