跳转至

PEFT 微调总结

参考资料:LLM微调方法总结

参考资料:HF:高效微调篇

什么时候需要微调?

参考资料:提示词、RAG、微调哪个会让大模型表现更好?

An image caption

RAG(Retrieval-Augmented Generation)能够很好的增加大模型的知识储备,其结合了检索和生成。具体来说,检索模块从文本语料库中检索与当前输入相关的信息,生成模块利用检索到的信息作为上下文,生成与当前任务相关的文本。

RAG能拓宽模型的知识,Tuning能增加模型的能力,Prompt兼具。

微调概述

微调方法分类

参考文献:Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning

An image caption

主要可以分为Additive、Selective、Reparametrization三种类型,即增量、选择、重参数。

微调中的内存占用

对于模型而言,1B的参数量约等于4GB内存占用。而然除了模型本身占用内存之外还有:

  • 参数的梯度占用内存约等于1个模型本身占用的内存
  • 优化器占用内存约等于1~2个模型本身占用的内存

SGD:在每个参数上维护一个动量向量,其大小与模型参数相同。

Adam:维护一阶矩估计(动量项)和二阶矩估计(动量平方)每个状态都与模型参数相同。

PEFT(Parameter-Efficient Fine-Tuning)是一种针对大型预训练模型进行高效微调的方法,能够显著的降低计算资源和存储空间,通常训练的参数量不足全部的1%。

BitFit 方法

BitFit 通过只调整模型中的偏置(bias)参数,而保持权重(weights)参数不变,从而显著减少微调所需的参数量和计算资源。这种方法的背后动机是,偏置项虽然参数量小,但对模型的输出有显著影响,因此只调整偏置项可以在保持模型性能的同时,减少训练参数量。

P-tuning 方法

Prefix-tuning

An image caption

Prefix-Tuning的思想:相较于Prompt-Tuning和P-tuning,Prefix-Tuning不再将Prompt加在输入 的Embedding层,而是将其作为可学习的前缀,放置在Transformer模型中的每一层中,具体表现形 式为past_key_values。

Prompt-tuning

Prompt-tuning给每个任务都定义了自己的Prompt,拼接到数据上作为输出,但只在输入层加入prompt tokens,然后多任务混合训练。这个prompt可以被随机或指定初始化然后训练。

An image caption

效果表现非常好!如下图所示,其中的prompt design是指给明确任务的Prompt。

An image caption

P-tuning v1

简单来说,就是将Prompt-tuning中的pre-tokens经过MLP或LSTM再传递到模型中。

该方法的核心是使用可微的virtual token替换了原来的discrete tokens,且仅加入到输入层,并使用prompt encoder (BiLSTM+MLP) 对virtual token进行编码学习。效果:相同参数规模,如果进行全参数微调,Bert在NLU任务上的效果,超过GPT很多;但是在P.Tuning下,GPT可以取得超越Bert的效果。

An image caption

该方法有一些不足,整理如下:

An image caption

P-tuning v2

P-Tuning v2主要是基于P-tuning和prefix-tuning技术,引入Deep Prompt Encoding和Multi-task Learning等策略进行优化。P-Tuning v2是一种在不同规模和任务中都可与微调相媲美的提示方法,从330M到10B的模型显示出一致的改进,并在序列标注等困难的序列任务上以很大的幅度超过了Prompt Tuning和P-Tuning。

An image caption

Deep Prompt Encoding

An image caption

Multi-task Learning

基于多任务数据集的Prompt进行预训练,然后再适配到下游任务。对于pseudo token的continous prompt,随机初始化比较难以优化,因此采用multi-task方法同时训练多个数据集,共享continuous prompts:去进行多任务预训练,可以让prompt有比较好的初始化。

LoRA 方法

思想比较简单,引入低秩矩阵来进行微调,这里不多介绍,可以使用PREF库实现。

An image caption
An image caption

Qlora 方法

An image caption
An image caption

IA3

An image caption

IA3通过可学习的向量对激活值进行抑制或放大。具体来说,会对K、V、FFN三部分的值进行调整,训练过程中同样冻结原始模型的权重,只更新可学习的部分向量部分。训练完成后,与Lor类似,也可以将学习部分的参数与原始权重合并,没有额外推理开销。