应用深度学习 | 陈縕侬 | ADL 8.2: Parameter-Efficient Fine-Tuning (Adapter, LoRA) 如何低成本微调模型

深度学习模型微调新方法:Adapter与LoRA的高效实践

媒体详情

上传日期
2025-06-07 14:14
来源
https://www.youtube.com/watch?v=R3jZVKUlSjA
处理状态
已完成
转录状态
已完成
Latest LLM Model
gemini-2.5-pro-preview-06-05

转录

下载为TXT
speaker 1: 像刚刚有提到说我们的目标就是要调整这个link model嘛。 可是调整一个参数非常多的model好像不太可行,所以就会衍生出越来越多各式各样聪明的方法,让我们可以用比较小的course,就是调整比较少的参数,但也可以达到类似的效果。 那这样子一来其实就更加实际。 那在比如说在学术界也比较可比较能做好。 那为什么我们要做这个efficient的aptation呢? 好,那其实这边有11个嗯有一些分析讨论。 那他们就是发现说哎在现在这种AI的这个paradigm上面,大部分的这些paper focus比较多是focus在accuracy instead of efficiency,就是大家只着着重在我的performance到底怎样。 所以你会看到大部分的paper里面,report都是很多table里面的数值嘛,就是performance。 可它并通常不一定会说哦,这个是花了多少时间才训练出来的,对不对? 然后你看到他就做做了一些比较这边有几个就是AI领域比较知名的conference,有领域的,然后那个领域,然后还有machine learning面的这个。 然后他就他就去算这个words,然后去看说有哪有多少量的paper是focus在这个方向上面,那你会发现说focus在performance,也就是这上面的是远高于efficiency。 对那当然也有也会有一些bo的啦。 好,所以这倒告诉我们说嗯,目前大家在做这些research或在做产品的时候,我们实际上花费的这个course,其实是没有被大家考虑进去的。 就是你虽然做到这么好的performance,但你花了更多的effort。 这些其实是没有把这个把把这个把这个additional的course,就是呈现在你呈现给他的这个table里面。 那随着现在的这个training course越来越高,你就会发现这种过去这种以C为主的这些发展,就会渐渐的被比较有钱的组织啊,尤其是业界给多的,为什么呢? 因为他们就有比较多的资源啊,所以他们才比较有机会做出比较高的。 因为这些其实是没你没有被考虑进去的,所以这才衍生了非常多这些学术界的sear会, 觉得说我们必须要有一些更不错的方式,然后也可以做到performance很好,但是相较之下co也比较低的这些方法。 所以渐渐的越来越多论文就开始开始focus在这种training的cost training effency上面做讨论。 你看到那个时候是2018年哦,所以其实都还就是早在那个开始之前就是这样子的方向。 那现在如果再去看的话,会越会比过去多非常非常多。 着重在eff的paper上面。 好,那我们来想一下就是要怎么减少我们需要tun的参数。 那假设说哦这是一个pre的language model啊,那这个橘色是什么呢? 橘色就是里面的很多很多很多vector,那很就是里面的这些wait啦。 因为每一层不就是就是一个fefor或或attention嘛,所以里面有非常非常多的wait。 那假设原本是橘色的那经过了天之后啊,假设全部都被我做了这个,然后全部变成这个紫色。 那想象中其实就是把原本的这个H然后反正每一个都会做一些微调,对,然后回调之后呢就会变成H所以这是理想上,如果我可以做到所有的wait,就是直接把这个贝塔拿过去做,那这是理想的情境。 好,就是这个H pro可以从H变成H pr那, 他们之间的差异就是一个delta H那有一个还蛮有名的方法呢叫做adapter adapter他的想法就是这样子。 好,假设现在我们的模型呢大部分都是transformer类型的模型嘛。 那transformer之前也就是讲呃大家也了解它的细节里面就是有非常多重复的这个transformer的这个block,然后里面会有attention啊,然后后面会有这个forward,对,然后做一些zation,然后每一层都是呃每一个block里面都是长这样子。 好,那现在呢他希望能够做一些微调微调这些阐述,那他他的想法是什么? 他的想法就是哎这些橘色的原本就有的东西我要keep住,完全不要动,那我要多加上紫色的部分叫做adapter。 也就是当我过了这个呃attention之后,那我希望再过一个这个adapter可以调整它参数。 那原本这个模型里面有的所有橘色参数我都不动,我只是在上面多加了additional的layer。 好,那这个怎么使怎么implement呢? 哦,概念上其实也蛮简单的,你想我刚刚我们的目标是不是要把H变成H加delta,H变成H pr嘛. 好,那他怎么做? 假设说这边这个橘色进来这边是H那理想上经过fine tun后是不是会变成H pr那? 他怎么去模拟这个H pr的情况,就是把这个H那这边是它额额外多加上的这个参数嘛,呃多加上了这个layer,它就可以tun这个layer。 那这个layer tun出来它的目标其实就是他在他在学这个第H刚刚有说到H pr是, 不是就会变成变成是H加上H所以他的目标如果是可以训练这个H然后最后再把这个原本的加在一起。 基本上它这个凹铺从这边出去之后,其实就等同于是H pr就, 像是这一个,然后经过佛之后的这个H就是在这一块,那后面这一块也可以做同样的事情。 所以他其实就是在模拟这件事情,模拟哎我只我只额外的学一个delta H然后可以影响原本的H变成H pr那H变成H pr其实就像刚刚看到的,就是从原本全部橘色变成全部紫色紫色嘛,但是现在它不是全部为的调,原本的为的全部都不动。 它多加一个小小的adapter,然后在里面的每一个好,所以概念其实就这样非常的简单。 好,那它有一个好处就是您看呢原本的模型其实是完全不会动到的所有的任务。 好,假设现在我要听这个模型,让他可以在比如说什zation做的很好好了,所以我就把这个summarization adap方向去,然后tuning tuning tuning。 好,那tuning完了之后,好假设说现在我要做嗯translation了,那我就把这个sumsummarization adapt拔掉,然后换成另外一组adapter,然后再tuning tuntuning,让它在translation上面做的好。 所以每一个任务它都会有一个test specific的一个就是这个adap所, 以它就可以它就可以拔掉,有点像是一个嗯你可以直接插上去可插拔的一个方式。 对你要用A任务的时候,你就把这个A插进去,然后要用B的时候就把B插进去。 那所有的这些任务它还是会共用原本的这original的这个model。 但是这种可插拔的好处你嗯有几个,一个就是你就不用担心说你。 听之后原本的整个坏掉,因为它不会坏掉,你把它拔掉,你把这个ap拔掉就好。 它还是跟原本的一样,就是不会有这个over或就导致它烂掉的风险。 然后每一个每一个任务只需要存这个adap就行了,就你不会是原本你可能tun一个model,把这个model成a task,你是不是要把整个位存下来,成B也要把整个存下来,那你这个story就会比较耗呃空间。 但现在你只要存这个A跟B的adapter,所以更更能够省这个storage,然后也比较robust。 好,那刚刚呢是第一个方法。 那第二个方法呢就是非常的有名,叫做Lora。 好,它的这个loa其实就是low rank的意思,就是low rank adaptation。 所以这个L这个O会是小写,然后这个R跟A就是low rank adaptation。 好,那是什么意思呢? 他的想法是这样子,他的想法就很聪明。 这边也是刚刚我们看到这个transformer的block里面的这个呃大致上的样子嘛,那想象中是不是我们就是要把这些参数做一个调整。 好,那它的它的idea是什么? 什么叫做low rank? 好意思就是说我们的这个我们里面的这些所参数,你可把它想成就非常非常多个vector,非常多的要做调整嘛。 好,那调整可以有非常非常多不同的细节的这个weight的值可以进行调整。 但是他想他觉得如果我们现在在做一个adaptation概念上,你可以把它想成是就是把这个模型往一个某个方向上面移过去。 所以这个方向其实是一个相较之下比较high level的概念。 对它不不一定会是哦你每一个wait都要往就是要一个加一一个加一个减一么就是一个一些细节,而是它调整的状况比较像是一个high level的方向。 所以这个low R对应的其实就像是在这些的里面的一个eivector。 如果我们做一些简单的这个你的这个大空间上面的微维的调整,就是有点像是你每一个轴在这个高维空间中的每一个轴做一点点的微微的转动、微微的调整、微微的变动。 哎,那其实整个wait就会都不一样了嘛。 他他的想法就是这边的这个调整其实是一个high level的方向,所以实际上我们不需要考虑。 我们大致上可以想象,如果我可以知道这个大方向是怎么转的,基本上就等同于我们知道所有的wait是怎么调整的嘛。 好,所以它的示意图就是这样这样子。 好,这个啊它也是一个additional的的资讯,然后在这个原本的link model旁边。 好,那他怎么做的呢? 我这边要看一下这个细节。 好,假设刚刚看到这个feforward这个部分,好,forward这部分原本原本它就是这这个layer,然后过来变成这个H那刚刚是不是说到我们是希望把这个H变成H嘛? 这个H就是H加delta H那它的implement其实跟刚刚的那个和概念其实是有点像的哦。 好,但是这边有一个非常重要的地方在这里,就是他现在呢要把这个H然后学一个这个delta H然后再把这个delta H加在这里面嘛。 好,所以这边的这个东西是什么? 这边的这个东西它的重点就是它中间在学的时候是给他一个维度比较小的这个vector,有点像是头Eck。 也就是说他有点像是把这个比较高稍微比较高维的压到一个比较低维的空间,让它可以在这个低维空间做调整。 在这个低维的中间中调整之后,我展开到原本的这个维度,才可以跟原本的这个呃维度一样才可以加在一起。 所以这边就只是把低维空间的展开回去而已,所以还一点想,原本是一个高维空间的一个点嘛。 好,那他现在就是把它降维降维到只有嗯比如说只有两维,然后在这个两两维的空间中让他做一些微微的,就是让他根据data塔决定他往哪个方向。 好,然后他在这个两维的空间中知道它的方向了之后,我再把它转回去。 原本这个高维空间,那是不是你只你要存的东西就只有这两维空间中的这个调整就好了。 然后你要听你的东西,也就只有这个小小的资讯。 然后他展开之后,展开到原本的高维空间,它就跟原本的就可以加在一起,然后就得到我们想要的这个H pr然后这边就是tuning的时候,我们预计要tun的, 所以我们要tun的东西非常非常的少。 当然这会depend on你这边用多少个dimension啦,就是你是把它压到多少个,就是考虑多少个rank。 好,所以他的想法呢就是我们在做link model的fine tun的时候,我们是在update这些wait嘛。 那在update这些wait,其实概念上给我们的其实是一个比较嗯high level的,为在这个空间中level的一个方向。 你可以把它想成其实就是一个low intrinsic的一个information,可以让它只存这个小小的资讯,那你就可以保有。 我知道这个微调是往哪个大方向去调整,所以实际上被调调整的这些位的数量还是很多的。 可是你只要存很少东西啊,你可以看一下它的performance在GPT -3上面呢,然它是一个非常大的模型,它是用175B来做这个实验。 然后如果是用fine,好,这个是你所需要训练的参数量哦,反正就是机器的惊就是175B嘛。 好,那如果你用这些是一些其他的比较呃那个meter的fine方式,那这是它的比较的basline,然后这就是它propose的方式。 所以你可以根据选择不同尺寸的这个刚刚说中间的那个low R的的的dimen选的数量,然后去决定你要tun你的参数量。 所以在如果他只tun 4.7M那performance就已经可以在这些任务上面到达,就是几乎是最好了。 对那如果可以Q多一点的话,这两个就是会在上升比较多。 那这个其实就是跟这个comparable,所以你可以发现他他就是想要告诉你说,他的performance其实是跟你直接tuning整个for wait其实是差不多的。 然后他也秀了一个图,好,这个图怎么看呢? 这是两个不同的data set。 那往右边其实就是你可以圈你的这个参数的量。 对,所以越右边就是co越多,那这边就是纵轴歪轴就是performance,然后这边有非常多不同的方法,然后蓝色就是fine tun所, 以它很右边,因为它就是要tun非常多的东西,然后performance可以到这,然后你们可以看到它的啊是粉红色这一条。 你看粉红色这一条在performance基本上都是在很很高,然后也是相较之下它的那个training的的。 也是比较少的,而且有一些方法它其实是会有点over的. 你看呢因为它调的东西可能是蛮少的嘛,满少就可以调动。 可是当它可以调多一点的时候,它其实就会就会drop了,所以弯弯的这样其实不太好支热这样比较好。 所以他的最后的结论就是他认为是在这个performance wise是可以到达很好,而且呢在上面也显示了更好的这个使用情境。 所以A其实就变成是现在大家非常非常常用的一个tunmodel的方式。 那之前讲到这个protuning其实也是一个parameter efficient的fine tuning的方法,因为我们tuning的东西就是prompt嘛。 对,虽然它不是tuning model,但是也是一个tun比较少资讯,然后进而导致我最后是可以回调到我的task上面的方法。 所以其实这种pro的方法其实也可以拿来一起跟model的fine来做比较,所以就有另外一篇论文。 但是因为这很难比较嘛,因为嗯你tun的量其实是不太一样的。 你如果是tuning adapter,你如果是tun刚刚说的那个low low rank那个vector,或者是你tuning的是这个promp,其实你tun的这个可动的这些位实在是差异太大太大了,所以要做一个很好的比较也不容易。 那这篇论文呢它就算是在比较呃fair的情况下,然后去做不同方法上面的的讨论跟分析。 好,然后它主要就是比了这个fine tunfine,tun就是for wait,然后adapter就刚刚讲的,然后还有一个tun那个perfect tuning,大家之前有也有学过,就是是tun的部分。 那这是刚刚说到这个啊,然后在非常多不同的task上面,他就想说哎那到底哪一个会比较好呢? 好结论就是诶没有一个最好,就是每一种都有各自擅长的地方。 对,这就是他的结论。 对所以他在这他这篇论文他propose一个有点像是组合所有的方法的一个approach,就是把它全部组合在里面。 你看啊在这儿,然后这个有perfect,这边有adapter布拉布拉布拉。 对,因为他觉得no one can fit哦,所以应该要就是应该要全部放在一起。 可是全部放在一起你要怎么让他学习控制,说到底是现在要用哪一个呢? 所以他的这些选用某一个的时候,都有一个gate让他去决定说哦要不要使用这个方式。 然后就这个gate他就会自动学习要怎什么时候该打开,什么时候不该打开。 所以其实他想法也还蛮嗯蛮合理的。 对,然后他也做了实验,然后training过后,然后performance的确就是相较之下比起来,的确就是比这种individual再好一些,那当然整个的model就会比较大对。 好,那刚刚我们看到for improvement在我们已知的这些任务上面,我们是可以让他变得更好的。 就是透过这个已知的任务的data来去tuning,不管tuning我们prop或是tuning我们的link model。 但是其实还有另外一个要improve的方向,因为我们是通采嘛,对不对? 所以除了已知的任务,尽可能的考古题全部都做,然后做的很好以外,哎,在未知的任务上面我也希望他也还是要很不错嘛,因为它是通彩啊,这不就是我为什么要使用这个通彩的。 一开始motivation嘛就是希望他能够handle unknown的unknown的状况,可是既然它是弄,我要怎么让它handle呢? 所以在实际上对实际上的应用跟产品大家是怎么做的? 好,基本上他的做法就是我既然我有一些现成,但考试本来就会考的。 但有一些我不知道这些使用者会出什么奇奇怪怪的题目嘛,所以我就要尽可能去收集各式各样不同任务的这些额外的资料。 因为有有一些是我的考古题里面本来就包含了,我就直接选进去,这是弄的那还会有很多弄的那我就要收集。 比如说我就找一些人人来帮我出个考题,那他可能就会考出哎我可能之前不知道的这些这些任务嘛,那我就可以再把它学进去。 所以他的想法就是我就是要收集尽可能越来越多不同diverse这个task,我才能够让这个通才这种通用的能力可以上升。 那他在handle未来更多没见过的任务的时候,performance还是可以keep住。 那其实这个方法呢就是g p 3.5所做的,就是叫做它它就是用F的概念,也就是透过这个human的feedback,然后再improve他自己。 那这个human的feedback其实就是这一块,就是去收集human可能的出题,然后又是un弄的。

最新摘要 (详细摘要)

生成于 2025-06-07 14:20

概览/核心摘要 (Executive Summary)

本次演讲深入探讨了在大型语言模型时代,如何通过参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)技术,以较低的计算成本调整模型以适应特定任务。演讲指出,传统研究领域过度关注模型精度(Accuracy)而忽略了效率(Efficiency),导致训练成本高昂,这种趋势有利于资源雄厚的业界,而不利于学术界。

为解决此问题,演讲重点介绍了两种主流的PEFT方法:Adapter TuningLoRA (Low-Rank Adaptation)
1. Adapter Tuning的核心思想是冻结预训练模型的绝大部分参数,仅在模型层与层之间插入少量可训练的“适配器”模块。这些适配器是任务专属的,可以“即插即用”,从而在不改变原始模型的情况下实现对特定任务的适配,同时极大节省了存储空间。
2. LoRA则基于一个关键假设:模型在微调过程中的权重更新矩阵具有“低内在秩”(Low Intrinsic Rank)。因此,它通过学习两个低秩矩阵来模拟完整的权重更新,将需要训练的参数数量减少了几个数量级。实验数据显示,在GPT-3 (175B)模型上,LoRA仅用约4.7M的可训练参数,就能达到与全量微调(175B参数)相媲美的性能。

演讲最后总结,没有一种PEFT方法是万能的,不同方法各有优势,因此出现了结合多种方法的融合策略。此外,为了提升模型的泛化能力以应对未知任务,需要通过收集多样化的指令数据进行训练,这正是GPT-3.5等模型采用人类反馈指令微调(Instruction Tuning)的核心思路。


参数高效微调的动机与背景

  • 问题核心:直接微调(Fine-Tuning)一个包含海量参数的大型语言模型,计算成本和资源消耗巨大,对于多数研究者和开发者而言并不可行。
  • 学术界与工业界的失衡
    • 演讲者引用分析指出,AI领域的研究论文过去更侧重于提升模型性能(Accuracy),而较少关注训练效率(Efficiency)
    • “大部分的这些paper focus比较多是focus在accuracy instead of efficiency,就是大家只着着重在我的performance到底怎样。”

    • 这种以性能为导向的范式,使得拥有更多计算资源的大型科技公司在竞争中占据绝对优势,限制了学术界的发展。
  • 发展趋势:为了应对高昂的训练成本,学术界和业界开始积极探索更经济、高效的微调方法,使得关注训练效率的论文数量显著增加。

方法一:Adapter Tuning (适配器微调)

  • 核心思想:在不改动原始预训练模型(图中“橘色”部分)的前提下,向其内部结构中插入一些小型的、可训练的神经网络模块,即“适配器”(Adapter,图中“紫色”部分)。
  • 工作原理
    1. 冻结原模型:预训练模型(如Transformer)的权重保持不变。
    2. 插入适配器:在Transformer的每个块(Block)中的注意力层(Attention)和前馈网络(Feed-forward Network)之后,插入适配器模块。
    3. 学习残差:适配器的目标是学习一个对原始输出的增量调整(ΔH)。假设原始输出为H,微调后的理想输出为H',则H' = H + ΔH。适配器通过训练来模拟生成ΔH,然后通过残差连接(Residual Connection)将其加回到原始H上,从而得到H'
  • 优点与应用
    • 模块化与可插拔:每个下游任务可以训练一个独立的适配器。使用时,只需将相应的适配器“插入”模型即可,非常灵活。
    • 存储高效:只需为每个任务存储小体积的适配器参数,而无需保存整个模型的副本,极大地节省了存储成本。
    • 鲁棒性强:由于原始模型被冻结,避免了在微调过程中对模型通用能力的破坏(即“灾难性遗忘”),模型更加稳健。

方法二:LoRA (Low-Rank Adaptation 低秩适配)

  • 核心思想:LoRA基于一个关键假设:大型语言模型在针对特定任务进行微调时,其权重的变化量(ΔW)是一个具有“低内在秩”(Low Intrinsic Rank)的矩阵。这意味着复杂的、高维度的权重调整,可以被一个更简单的、低维度的变化来近似表示。
    > “他觉得如果我们现在在做一个adaptation...它调整的状况比较像是一个high level的方向...这个low rank对应的其实就像是在这些...里面的一个eigenvector。”
  • 工作原理
    1. 权重更新分解:LoRA不直接学习巨大的权重更新矩阵ΔW,而是将其分解为两个更小的低秩矩阵AB的乘积(ΔW ≈ B * A)。
    2. 降维与升维
      • 矩阵A将高维的输入特征投影到一个非常低的维度空间(例如,从d维降到r维,r << d),形成一个“瓶颈”(Bottleneck)。
      • 矩阵B再将这个低维表示投影回原始的高维空间。
    3. 高效训练:在微调过程中,原始模型权重W保持冻结,只有低秩矩阵AB的参数被训练。这使得需要训练的参数量急剧减少。
  • 性能与数据
    • 实验案例:在 GPT-3 (175B) 模型上进行的实验。
    • 参数对比
      • 全量微调 (Full Fine-tuning):需要训练 175B 个参数。
      • LoRA:根据选择的秩(rank)的大小,仅需训练 4.7M37.7M 的参数。
    • 结论:实验图表显示,LoRA(图中粉色线)在性能上几乎可以与全量微调相媲美,但其所需训练的参数量(成本)却极低。它在性能和效率之间取得了出色的平衡,并且相比其他一些方法更不容易过拟合。

不同高效微调方法的比较与融合

  • 争议与不确定性:没有万能方法
    • 一篇论文对多种PEFT方法(包括全量微调、Adapter、Prefix-Tuning、LoRA等)在多个任务上进行了公平比较。
    • 核心结论:> “没有一个最好,就是每一种都有各自擅长的地方。” 这表明不存在一种在所有场景下都最优的PEFT方法。
  • 决策与建议:融合策略
    • 鉴于单一方法的局限性,研究者提出了一种融合模型,将Adapter、Prefix-Tuning等多种方法集成在一起。
    • 该模型通过一个门控机制(Gating Mechanism)来自动学习在特定情境下应该激活哪一种或哪几种微调方法。
    • 实验证明,这种组合方法的性能优于任何单一方法,但代价是模型结构更复杂、整体参数量更大。

超越已知任务:提升模型的泛化能力

  • 挑战:PEFT解决了在已知任务上的高效微调问题。但对于一个“通才”(Generalist)模型,如何提升其在未知(Unknown)任务上的表现?
  • 解决方案:指令微调与多样化数据
    • 核心思路是,要让模型能处理未见过的任务,就必须让它在训练阶段接触到尽可能多样化(diverse)的任务和指令。
    • “我就要尽可能去收集各式各样不同任务的这些额外的资料...我才能够让这个通才这种通用的能力可以上升。”

    • 这需要主动收集或由人类创造大量新颖、多样的“考题”(指令和数据),并将其纳入微调数据中。
  • 与GPT-3.5的关联
    • 该方法正是 GPT-3.5 成功的关键之一,即基于人类反馈的指令微调(Instruction Tuning from Human Feedback)。通过收集大量人类提出的问题和指令,模型学会了遵循指示并泛化到更广泛的未知场景。