赞
踩
参数高效微调是指冻结LLM的大部分模型参数,微调少量的或者额外新增的模型参数。目前高效微调技术主要由:Prefix Tuning、P-Tuning V1/V2、LoRA、QLoRA.
微调技术的发展:
adapter tuning -> prefix tuning ->P-Tuning v1/v2 -> LoRA -> QLoRA.
在prefix-tuning之前的工作主要是人工设计离散的template或者自动化搜索离散template,问题在于最终的性能对人工设计的template的特别敏感:加一个词或者少一个词,或者变动位置,都会造成很大的变化,所以这种离散化的token的搜索出来的结果可能并不是最优的.
坦福的研究人员于2021年年初通过此论文《Prefix-Tuning:Optimizing Continuous Prompts for Generation》提出Prefix Tuning方法,其使用连续的virtual token embedding来代替离散的token,且与Full-finetuning更新所有参数的方式不同,如下图所示
下图是在自回归模型和encoder-decoder模型的例子
框架可以理解为如下:
对于上述这个过程,有以下几点值得注意
2021年4月,google research 在论文 The Power of Scale for Parameter-Efficient Prompt Tuning中提出Prompt Tuning.
Prompt Tuning原理如下图所示:冻结主模型全部参数,在训练数据前加入一小段Prompt,只训练Prompt的表示层,即一个Embedding模块。论文实验表明,只要模型规模够大,简单加入 Prompt tokens 进行微调,就能取得很好的效果。
大体框架如下:
该方法可以看做是对Prefix tuning的简化版本 。
Prefix tuning 是在每次前面都添加前缀token来学习。Prompt Tuning是使用single prompt representation prepended to the embeded input. 需要的参数更少,并且也允许transformer 更新中间层的任务表示。
Prefix Tuning 依赖于 前缀的reparameterization 来稳定学习,这需要大量的参数。PromptTuning 不要reparamterization 并且在模型尺寸和SuperGLUE任务上都很鲁棒。
PromptTuning 冻结整个预训练模型,只允许每个下游任务在输入文本前添加额外的k个可调tokens(意味着它给每个任务都定义了自己的Prompt,在输入层加入prompt tokens,即We freeze the entire pre-trained model and only al-low an additional k tunable tokens per downstreamtask to be prepended to the input text)
Model tuning需要为每个下游任务生成整个预训练模型的任务特定副本,并且推理必须分批执行
Prompt tuning只需要为每个任务存储一个小的特定于任务的提示,并使用原始的预训练模型支持混合任务推理
对于T5“XXL”模型,对tuned model而言,每个副本需要110亿个参数,相比之下,对tuned prompts而言,每个任务只需要20,480个参数—假设提示长度为5个tokens,则减少了5个数量级以上
且通过实验发现,随着预训练模型参数量的增加,Prompt Tuning的方法会逼近全参数微调的结果
将自然语言的离散模版转化为可训练的隐式prompt (连续参数优化问题)
清华大学的研究者于2021年3月通过此篇论文《GPT Understands, Too》提出P-Tuning,其与prefix tuning类似:比如考虑到神经网络本质上是连续的,故离散提示可能不是最优的(sinceneural networks are inherently continuous, discrete promptscan be sub-optimal ),从而也采取连续的提示
总之,P-Tuning成功地实现了模版的自动构建,且借助P-tuning,GPT在SuperGLUE上的成绩首次超过了同等级别的BERT模型,这颠覆了在那年之前“GPT不擅长NLU”的结论,也是该论文命名的缘由
P-Tuning是在Prompt-Tuning的基础上,对Prompt部分进行进一步的编码计算,加速收敛。具体来说,PEFT中支持两种编码方式,一种是LSTM,一种是MLP。与Prompt-Tuning不同的是,Prompt的形式只有Soft Prompt。
P Tuning将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。
Prompt Tuning和P-Tuning等方法存在两个主要的问题:
Prefix Tuning原理如下图所示:相较于Prompt-Tuning和P-tuning,Prefix-Tuning不是将Prompt加在输入的Embedding层,而是将其作为可学习的前缀,放置在Transformer模型中的每一层中,具体表现形式为past_key_values。
P-Tuning V2和Prefix Tuning的区别主要在于:移除重参数化的编码器,即没有MLP。
P-Tuning V2具体做法基本同Prefix Tuning,可以看作是将文本生成的Prefix Tuning技术适配到NLU任务中,然后做了一些改进:
1、移除重参数化的编码器。以前的方法利用重参数化功能来提高训练速度和鲁棒性(如:Prefix Tuning中的MLP、P-Tuning中的LSTM)。在作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。
2、针对不同任务采用不同的提示长度。
提示长度在提示优化方法的超参数搜索中起着核心作用。在实验中,作者发现不同的理解任务通常用不同的提示长度来实现其最佳性能。
从图3中,可以观察到,针对简单任务:较短的Prompt(20)即可取得不错的效果。针对复杂任务:如阅读理解,需要更长的Prompt(100)。
重参数化与最佳提示长度有密切关联。例如,在RTE、CoNLL04和BoolQ中,MLP重参数化比嵌入更早达到最佳结果。
3、引入多任务学习(MPT-2)。先在多任务的Prompt上进行预训练,然后再适配下游任务
P-Tuning v2是一种在不同规模和任务中都可与微调相媲美的提示方法。P-Tuning v2对从330M到10B的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的幅度超过了Prompt Tuning和P-Tuning。
参考LLM指令微调
To be added more details about 模型量化
本质是对LoRA的改进,相比LoRA进一步降低显存消耗.
(QLoRA通过将模型量化到4位精度并使用分页优化器管理内存峰值来改进LoRA)
参考:
参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2
Prompt-Tuning——深度解读一种新的微调范式
参考:https://blog.csdn.net/v_JULY_v/article/details/132116949?spm=1001.2014.3001.5501
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。