LoRA微调方法理解

        最近和大模型一起爆火的,还有大模型的微调方法。这类方法只用很少的数据,就能让大模型在原本表现没那么好的下游任务中“脱颖而出”,成为这个任务的专家。而其中最火的大模型微调方法,又要属LoRA。

1.LoRA简介

1.1 LoRA简介

        先从最近大火的LoRA(《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGEMODELS》)说起。

        该文章在ICLR2022中提出,说的是利用低秩适配(low-rankadaptation)的方法,可以在使用大模型适配下游任务时只需要训练少量的参数即可达到一个很好的效果。

        LoRA是怎么去微调适配下游任务的?

        流程很简单,LoRA利用对应下游任务的数据,只通过训练新加部分参数来适配下游任务。

        而当训练好新的参数后,利用重参的方式,将新参数和老的模型参数合并,这样既能在新任务上到达fine-tune整个模型的效果,又不会在推断的时候增加推断的耗时。

        LoRA的示意图如下:

        图中蓝色部分为预训练好的模型参数,LoRA在预训练好的模型结构旁边加入了A和

### Lora模型微调方法 #### 设置环境和准备资源 为了对Lora模型进行微调,需下载并准备好预训练模型以及所需的微调数据集。预训练模型可从Hugging Face Model Hub获取,而数据集则建议采用自定义的JSONL格式文件[^2]。 #### 配置训练参数 在开始微调之前,需要配置一系列用于控制训练过程的关键参数。这些参数决定了诸如批处理大小、梯度累积步数等重要方面: ```python from transformers import TrainingArguments args = TrainingArguments( output_dir="lora_finetuned_model", per_device_train_batch_size=8, gradient_accumulation_steps=4, logging_steps=10, num_train_epochs=3, save_strategy="epoch" ) ``` 此段代码展示了如何创建`TrainingArguments`对象来指定输出目录、每设备训练批次大小以及其他必要选项[^3]。 #### 数据预处理 对于输入到模型中的文本数据,通常需要将其转换成适合模型理解的形式。这一步骤涉及分词化操作,并可能还需要额外编码步骤以适应特定任务需求。具体实现取决于所使用的库和支持的功能。 #### 构建Trainer实例 一旦完成了上述准备工作,则可以通过构建`Trainer`类的一个新实例来进行实际的微调工作。这里会传入先前已设定好的参数集合及其他必要的组件,比如已经加载完毕的数据集与collator函数: ```python from transformers import Trainer, DataCollatorForSeq2Seq trainer = Trainer( args=args, model=lora_model, train_dataset=processed_training_data, tokenizer=tokenizer_used_for_lora, data_collator=DataCollatorForSeq2Seq(tokenizer_used_for_lora, padding=True), ) # 执行训练流程 trainer.train() ``` 这段Python脚本说明了怎样初始化一个`Trainer`对象并将它关联至具体的模型架构上;随后通过调用`.train()`方法启动整个训练循环。 #### 更新策略差异 值得注意的是,在Lora特有的调整过程中,虽然看起来像是常规意义上的迭代优化——即先执行前向传播计算预测值再依据误差反向修正权重——但实际上并没有直接改变原始网络层内的核心参数取值。相反,仅针对某些选定位置上的增量做适当调节,从而达到更高效且稳定的改进效果[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值