网站优化推广软件,c 网站开发模板,网站开发多语言切换思路,广州网页制作随着#xff0c;ChatGPT 迅速爆火#xff0c;引发了大模型的时代变革。然而对于普通大众来说#xff0c;进行大模型的预训练或者全量微调遥不可及。由此#xff0c;催生了各种参数高效微调技术#xff0c;让科研人员或者普通开发者有机会尝试微调大模型。 因此#xff0c… 随着ChatGPT 迅速爆火引发了大模型的时代变革。然而对于普通大众来说进行大模型的预训练或者全量微调遥不可及。由此催生了各种参数高效微调技术让科研人员或者普通开发者有机会尝试微调大模型。 因此该技术值得我们进行深入分析其背后的机理本系列大体分七篇文章进行讲解。 大模型参数高效微调技术原理综述一-背景、参数高效微调简介 大模型参数高效微调技术原理综述二-BitFit、Prefix Tuning、Prompt Tuning 大模型参数高效微调技术原理综述三-P-Tuning、P-Tuning v2 大模型参数高效微调技术原理综述四-Adapter Tuning及其变体 大模型参数高效微调技术原理综述五-LoRA、AdaLoRA、QLoRA 大模型参数高效微调技术原理综述六-MAM Adapter、UniPELT 大模型参数高效微调技术原理综述七-最佳实践、总结 本文为大模型参数高效微调技术原理综述的第二篇。 BitFit 背景 虽然对每个任务进行全量微调非常有效但它也会为每个预训练任务生成一个独特的大型模型这使得很难推断微调过程中发生了什么变化也很难部署 特别是随着任务数量的增加很难维护。 理想状况下我们希望有一种满足以下条件的高效微调方法 到达能够匹配全量微调的效果。 仅更改一小部分模型参数。 使数据可以通过流的方式到达而不是同时到达便于高效的硬件部署。 改变的参数在不同下游任务中是一致的。 上述的问题取决于微调过程能多大程度引导新能力的学习以及暴露在预训练LM中学到的能力。 虽然之前的高效微调方法Adapter-Tuning、Diff-Pruning也能够部分满足上述的需求。但是作者提出了一种参数量更小的稀疏的微调方法BitFit来满足上述的需求。 技术原理 BitFit论文BitFit: Simple Parameter-efficient Fine-tuning or Transformer-based Masked Language-models是一种稀疏的微调方法它训练时只更新bias的参数或者部分bias参数。 对于Transformer模型而言冻结大部分 transformer-encoder 参数只更新bias参数跟特定任务的分类层参数。涉及到的bias参数有attention模块中计算query,key,value跟合并多个attention结果时涉及到的biasMLP层中的biasLayernormalization层的bias参数。 在Bert-Base/Bert-Large这种模型里bias参数仅占模型全部参数量的0.08%0.09%。但是通过在Bert-Large模型上基于GLUE数据集进行了 BitFit、Adapter和Diff-Pruning的效果对比发现BitFit在参数量远小于Adapter、Diff-Pruning的情况下效果与Adapter、Diff-Pruning想当甚至在某些任务上略优于Adapter、Diff-Pruning。 image.png 同时通过实验结果还可以看出BitFit微调结果相对全量参数微调而言, 只更新极少量参数的情况下在多个数据集上都达到了不错的效果虽不及全量参数微调但是远超固定全部模型参数的Frozen方式。 image.png 同时通过对比BitFit训练前后的参数发现很多bias参数并没有太多变化例如跟计算key所涉及到的bias参数。发现计算query和将特征维度从N放大到4N的FFN层intermediate的bias参数变化最为明显只更新这两类bias参数也能达到不错的效果反之固定其中任何一者模型的效果都有较大损失。 image.png Prefix Tuning 背景 在Prefix Tuning之前的工作主要是人工设计离散的模版或者自动化搜索离散的模版。对于人工设计的模版模版的变化对模型最终的性能特别敏感加一个词、少一个词或者变动位置都会造成比较大的变化。而对于自动化搜索模版成本也比较高同时以前这种离散化的token搜索出来的结果可能并不是最优的。 除此之外传统的微调范式利用预训练模型去对不同的下游任务进行微调对每个任务都要保存一份微调后的模型权重一方面微调整个模型耗时长另一方面也会占很多存储空间。 基于上述两点Prefix Tuning提出固定预训练LM为LM添加可训练任务特定的前缀这样就可以为不同任务保存不同的前缀微调成本也小同时这种Prefix实际就是连续可微的Virtual TokenSoft Prompt/Continuous Prompt相比离散的Token更好优化效果更好。 image.png 技术原理 Prefix Tuning论文Prefix-Tuning: Optimizing Continuous Prompts for Generation在输入token之前构造一段任务相关的virtual tokens作为Prefix然后训练的时候只更新Prefix部分的参数而PLM中的其他部分参数固定。 针对不同的模型结构需要构造不同的Prefix。 针对自回归架构模型在句子前面添加前缀得到 z [PREFIX; x; y]合适的上文能够在固定 LM 的情况下去引导生成下文比如GPT3的上下文学习。 针对编码器-解码器架构模型Encoder和Decoder都增加了前缀得到 z [PREFIX; x; PREFIX0; y]。Encoder端增加前缀是为了引导输入部分的编码Decoder 端增加前缀是为了引导后续token的生成。 image.png 该方法其实和构造Prompt类似只是Prompt是人为构造的“显式”的提示并且无法更新参数而Prefix则是可以学习的“隐式”的提示。 同时为了防止直接更新Prefix的参数导致训练不稳定和性能下降的情况在Prefix层前面加了MLP结构训练完成后只保留Prefix的参数。 image.png 除此之外通过消融实验证实只调整embedding层的表现力不够将导致性能显著下降因此在每层都加了prompt的参数改动较大。 image.png 另外实验还对比了位置对于生成效果的影响Prefix-tuning也是要略优于Infix-tuning的。其中Prefix-tuning形式为 [PREFIX; x; y]Infix-tuning形式为 [x; INFIX; y]。 image.png Prompt Tuning 背景 大模型全量微调对每个任务训练一个模型开销和部署成本都比较高。同时离散的prompts指人工设计prompts提示语加入到模型方法成本比较高并且效果不太好。 基于此作者提出了Prompt Tuning通过反向传播更新参数来学习prompts而不是人工设计prompts同时冻结模型原始权重只训练prompts参数训练完以后用同一个模型可以做多任务推理。 技术原理 Prompt Tuning论文The Power of Scale for Parameter-Efficient Prompt Tuning该方法可以看作是Prefix Tuning的简化版本它给每个任务定义了自己的Prompt然后拼接到数据上作为输入但只在输入层加入prompt tokens并且不需要加入 MLP 进行调整来解决难训练的问题。 image.png 通过实验发现随着预训练模型参数量的增加Prompt Tuning的方法会逼近全参数微调的结果。 image.png 同时Prompt Tuning 还提出了 Prompt Ensembling也就是在一个批次Batch里同时训练同一个任务的不同 prompt即采用多种不同方式询问同一个问题这样相当于训练了不同模型比模型集成的成本小多了。 image.png 除此之外Prompt Tuning 论文中还探讨了 Prompt token 的初始化方法和长度对于模型性能的影响。通过消融实验结果发现与随机初始化和使用样本词汇表初始化相比Prompt Tuning采用类标签初始化模型的效果更好。不过随着模型参数规模的提升这种gap最终会消失。 Prompt token 的长度在20左右时的表现已经不错超过20之后提升Prompt token长度对模型的性能提升不明显了同样的这个gap也会随着模型参数规模的提升而减小即对于超大规模模型而言即使 Prompt token 长度很短对性能也不会有太大的影响。 image.png 结语 本文针对讲述了仅更新一部分参数高效微调方法BitFit以及通过增加额外参数的软提示高效微调方法Prefix Tuning、Prompt Tuning下文将对高效微调方法P-Tuning、P-Tuning v2进行讲解。 如果觉得我的文章能够能够给你带来帮助欢迎点赞收藏加关注~~