当前位置:AIGC资讯 > AIGC > 正文

微调(一)

微调有两种办法,

一是模型全部参数的微调,二是少量参数高效的微调。前者由于参数多,需要的GPU多,并且全参数微调可能把模型带偏,后者只需要微调少量参数,需要的GPU少,还可能达到不错的效果,成为大家研究的重点,取了个专有名词Parameter-Efficient Fine-Tuning,简称PEFT,即高效参数微调。

PEFT主要分为:

1、Additive类:在预训练模型的基础上增加额外的参数或网络层,微调时只训练这些新增的部分,这包括Adapter(在Transformer子层后加入小的全连接层,微调只学习新加的全连接层参数)

、Soft Prompts(在输入的embedding中加入向量作为soft prompts),并对这些向量的参数进行微调,避免构造Prompts模板。

2、Selective类:选择模型中的部分层,如最后几层或偏置项进行微调,而不是调整整个模型、

3、Reparametrization-based类:使用低秩表征来最小化可训练的参数,认为大量参数只有一部分起到关键作用,并在这关键子空间中寻找参数进行微调。

4、Hybrid类:混合了以上多种方法,结合了它们的优点

以下细讲

Additive类

Adapter Tuning

结构简洁明了,在Transformer的前馈层后加入上图中右边所示的Adapter层,Adapter是一个bottleneck结构,先把d维特征映射为m维,然后通过一个非线性层,最后映射回d维特征,m<<d,即m远小于d,Adapter包括偏置项的参数量为2md+m+d,由于m很小,起到了限制参数量的作用。模型微调的时候,学习的参数包含上图绿色部分,除了Adapter,还有Transformer本身的Layer Norm层。

Adapters微调训练的参数量、全模型微调参数量和准确率关系如下图。总体上,在BERT Large模型上用0.5-5%的参数微调,基本达到全参数微调性能,差距仅1%以内。在GLUE上,用3.6%的参数微调和全参数微调性能差距仅0.4%

Soft Prompts

Prefix-Tuning

Prefix-Tuning是一种针对自然语言生成任务的轻量级微调方法,它在传统的全参数微调(Fine-tuning)和不修改任何模型参数的上下文学习之间提供了一种平衡。这种方法的核心思想是冻结预训练模型(PLM)的参数,并只优化一小部分连续的任务特定向量,即所谓的"prefix"。Prefix-Tuning的灵感来源于针对语言模型的提示(prompting)技术,它允许模型的后续token将这个prefix视为一系列“虚拟token”,从而对特定任务进行调整。

在具体实现上,Prefix-Tuning通过在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后再训练时只更新这部分参数,而保持PLM中的其他参数不变,对于自回归模型架构,如GPT-2,Perfix-Tuning在句子钱买你添加前缀,形成[PREFIX; x; y]的结构;而对于编码器-解码器架构模型,如BART,则在编码器和解码器的输入前都添加前缀,形成[PREFIX; x; PREFIX'; y]的结构

为什么?

因为自回归模型的特点是它们在生成序列时依赖于之前生成的token(即前文)。这种模型一次生成一个token,依赖于之前所有的token的历史信息。

在Prefix-Tuning中,通过在输入序列的开始添加一个连续的任务特定向量(即PREFIX),可以位模型提供一个任务相关的上下文。这个PREFIX相当于给模型一个初始的提示,帮助它理解接下来需要执行的任务。

形成【PREFIX;x;y】的结构,其中x是实际的输入(如线性化的数据表),y是期望的输出序列(如文本描述)。这样,PREFIX作为起始点,x提供详细信息,y是生成任务的输出。

编码器-解码器模型(如BART):

编码器-解码器模型由两部分组成:编码器(Encoder)负责读取和理解输入数据,解码器(Decoder)负责生成输出序列。这种模型通常用于需要同时理解输入并生成相关输出的任务,如机器翻译或文本摘要。

在Prefix-Tuning中,由于编码器和解码器都需要对任务有共同的理解,所以在编码器的输入前添加一个PREFIX来引导输入的编码,同时编码器和解码器都需要对任务有共同的理解,所以在编码器的输入前添加另一个PREFIX(通常与编码器前的PREFIX不同,表示为PREFIX')来引导输出序列的生成。

形成[PREFIX; x; PREFIX'; y]的结构,其中第一个PREFIX帮助编码器理解任务上下文,x是输入数据,第二个PREFIX'帮助解码器生成与任务相关的输出,y是解码器生成的序列。

总结

### 文章总结
文章深入探讨了微调(Fine-tuning)技术的两种主要方法:全参数微调和高效参数微调(PEFT),后者成为了当前研究的重点。全参数微调虽全面但需大量GPU资源且可能导致模型偏离原始预训练性能;而PEFT通过微调少量关键参数实现高效调优,效果显著且资源消耗少。
#### PEFT的主要分类:
1. **Additive类**:
- **Adapter Tuning**:在Transformer层中添加轻量的Adapter层,这些层作为bottleneck结构,仅使用较少的额外参数(远小于原始维度),通过在这些Adapter层中进行微调,能在使用很少参数的情况下达到接近全模型微调的性能。
- **Soft Prompts/Prefix-Tuning**:在模型输入中插入可训练的向量(Prefix),这些向量作为任务特定的“提示”,通过优化这些Prefix参数来适应不同任务,而无需更改预训练模型的核心参数,适用于自然语言生成任务。
2. **Selective类**:此方法选择模型中的部分层(如最后几层或特定层)进行微调,而非整个模型,从而进一步减少可训练的参数量,提高效率。
3. **Reparametrization-based类**:利用低秩矩阵分解等技术减少可训练参数的数量,通过专注于关键子空间中的参数来进行调优。
4. **Hybrid类**:结合以上多种方法,融合不同策略的优点,以达到更好的调优效果。
#### 典型案例剖析:
- **Adapter Tuning**:在BERT等大型模型上,通过微调占比极小的参数(0.5-5%),就能达到接近全模型微调的性能,证明了其高效性。
- **Prefix-Tuning**:该方法特别适用于自然语言生成任务,通过在输入前添加可训练的Prefix向量,为目标任务提供任务相关的上下文提示,实现零样本或少样本学习下的有效输出。对于自回归模型和编码器-解码器模型,分别设计了不同的Prefix添加方式,以更好地适应不同架构的需求。

更新时间 2024-08-20