找回密码
 会员注册
查看: 38|回复: 0

大模型微调方法总结

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-20 23:37:05 | 显示全部楼层 |阅读模式
作者:ethanLoRA,Adapter,Prefix-tuning,P-tuning,Prompt-tuning。1、LoRApaper:LoRAow-RankAdaptationofLargeLanguageModels(https://arxiv.org/pdf/2106.09685.pdf)code:[GitHub-microsoft/LoRA:Codeforloralib,animplementationof"LoRAow-RankAdaptationofLargeLanguageModels"](https://github.com/microsoft/LoRA"GitHub-microsoft/LoRA:Codeforloralib,animplementationof"LoRAow-RankAdaptationofLargeLanguageModels"")简介自然语言处理目前存在一个重要范式:一般领域数据的大规模预训练,对特定任务或领域的适应(finetune)。但是随着预训练语言模型越来越大,这个范式存在以下问题:●当我们finetune大模型时,由于训练成本太高,不太可能重新训练所有模型参数●以前的方法(论文发表于2021年)都或多或少有其它性能问题,如adapter增加了模型层数,引入了额外的推理延迟;prefix-tuning比较难训练,效果不如直接finetune。基于上述背景,论文作者得益于前人的一些关于内在维度(intrinsicdimension)的发现:模型是过参数化的,它们有更小的内在维度,模型主要依赖于这个低的内在维度(lowintrinsicdimension)去做任务适配。假设模型在任务适配过程中权重的改变量是低秩(lowrank)的,由此提出低秩自适应(LoRA)方法,LoRA允许我们通过优化适应过程中密集层变化的秩分解矩阵来间接训练神经网络中的一些密集层,同时保持预先训练的权重不变。方法LoRA的实现思想很简单,如下图所示,就是冻结一个预训练模型的矩阵参数,并选择用A和B矩阵来替代,在下游任务时只更新A和B。结合来看,LoRA的实现流程如下:●在原始预训练语言模型(PLM)旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的内在秩。●训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。●模型的输入输出维度不变,输出时将BA与PLM的参数叠加。●用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。实现接下来我们从公式上解释LoRA的实现。假设要在下游任务微调一个预训练语言模型(如GPT3),则需要更新预训练模型参数,公式表示如下:W0是预训练模型初始化的参数,ΔW就是需要更新的参数。如果是全参数微调,则它的参数量=W0参数量(如果是GPT3,则ΔW≈175B)。从这可以看出要全参数微调大语言模型,小家小户是不可能的。由于前人的工作发现预训练的语言模型具有较低的“内部维度(intrinsicdimension)”,在任务适配过程中,即使随机投影到较小的子空间,仍然可以有效地学习。因此,LoRA做的就是增加小参数模块去学习改变量ΔW。在训练过程中,W0是固定不变的,只有A和B包含训练参数,是变化的。而在推理的过程中,只需要把改变量放回原模型,就不会有任何延迟。如果想切换任务,只需要切换任务的过程中,减去BA,然后换上用其它任务训练好的BʹAʹ就可以了。总结总的来说,基于大模型的内在低秩特性,增加旁路矩阵来模拟fullfinetuning,LoRA是一个能达成lightweightfinetuning的简单有效的方案。目前该技术已经广泛应用于大模型的微调,如Alpaca,stablediffusion+LoRA,而且能和其它参数高效微调方法有效结合,例如State-of-the-artParameter-EfficientFine-Tuning(PEFT)2、Adapterpaper:Parameter-EfficientTransferLearningforNLP(https://arxiv.org/pdf/1902.00751.pdf)MAD-X:AnAdapter-BasedFrameworkforMulti-TaskCross-LingualTransfer(https://arxiv.org/pdf/2005.00052.pdf)简介2019年,HoulsbyN等人将Adapter引入NLP领域,作为全模型微调的一种替代方案。Adapter主体架构下图所示。在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示),微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识。每个Adapter模块由两个前馈子层组成,第一个前馈子层将Transformer块的输出作为输入,将原始输入维度d投影到m,通过控制m的大小来限制Adapter模块的参数量,通常情况下m<
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 14:53 , Processed in 0.505095 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表