Prefix-Tuning:自动化构造 Prompts 的高效微调

8 阅读6分钟

基座预训练模型表现出来的能力已经非常强大,但是在许多非通用细分场景下的应用结果不能够令人满意。为满足相关需求的同时降低计算门槛和减少能源消耗,微调技术由此诞生,进而产生许多高效微调方法。本文介绍 Prefix Tuning 方法,从架构、原理、优势等方面阐述,带您迅速领悟其中奥义。

起源

大语言模型的对话方式

让我们想一想日常如何使用大语言模型,如果给出非常模糊的指示,将无法从大模型的回复中得到一个好的答案。这里的指示被称为提示词 (Prompt) 。随着更大参数模型的推出,作为用户的我们也逐渐学会了如何编写更好、更具体的提示词说明,这样大模型就知道如何做得更好。

Prefix-Tuning 灵感来源

提示词告诉大模型需要提取什么信息以生成期望的结果。受提示启发,2021 年提出了 Prefix-tuning 微调方法。它在 Transformer 架构之前添加前缀层,同时保持大模型的所有参数不变。因为它是大模型的预处理步骤,所以被称为前缀 (Prefix)。前缀的作用类似于提示词,告诉大模型在编码器中提取什么信息,以便在解码层生成正确的结果。

思想

Prefix-Tuning 的关键点是为大模型提供正确的上下文或提示词,可以引导其执行下游的自然语言生成任务,而无需修改或调整模型的参数。

具体来说,Prefix-Tuning 旨在学习一个连续的提示,可以进行端到端的优化,而不是依赖手动的提示词工程。当添加到输入之前,学习到的前缀提供了引导模型行为朝向任务目标所需的上下文。

通过利用提示词,同时实现连续提示的端到端优化,Prefix-Tuning 提供了一种在不进行大量参数调整的情况下调整大语言模型的方法。前缀允许以轻量级的方式将任务特定知识注入到预训练模型中。Prefix-Tuning 的目标是找到一个提示,可以引导模型生成整个序列,而不仅仅是单个单词。

架构

通过 Transformer 解码器结构发力的自回归模型具有输入 (X) 和输出 (Y),其中提示词将引导它从 X 中提取什么信息以生成 Y,Prefix-Tuning 在 X 之前添加前缀层以引导提取信息。Prefix-Tuning 将 X 和 Y 连接起来,然后在 X 之前添加前缀,前缀中的参数将影响从中提取生成 Y 的内容。

在微调过程中,前缀中的参数将被训练以记住从 X 中提取生成 Y 的信息。前缀调整初始化一个可训练的自由矩阵来存储前缀参数。前缀矩阵不需要很大。相关报告称,他们只初始化了 GPT-2 模型参数数量的 0.1% 就达到了其他微调方法所取得的性能,训练规模大幅减少。

下图是 Transformer 中多头注意力块的示意图,自注意力有三个输入:查询 (Q)、关键字 (K) 和值 (V) 矩阵。Prefix-Tuning 将可训练的前缀向量 PK 添加到键矩阵 K,并将可训练的前缀向量 PV 添加到值矩阵 V 中。

image.png

工作原理

Prefix-Tuning 的关键思想是将一个学习到的连续向量(称为前缀)前置到预训练模型的输入中。前缀调整将 X 和 Y 连接成一个单一序列: Z = [X; Y]。这个连接步骤是为了创建一个 “类似编码器” 的功能,因为在 GPT-2 等解码器模型中没有编码器,因此将 X 和 Y 连接允许模型从 Y 回到 X,这对于 Y 依赖于 X 的条件生成任务是必要的。通过将 X 和 Y 连接成一个序列 Z,模型可以通过自注意机制在 X 和 Y 之间进行双向关注。

接下来,将前缀向量 U 添加到 Z 前面,形成输入Z' = [U; X; Y]。然后将这个连接的单个序列 Z' 自回归地输入到 Transformer 模型中。模型关注 Z' 中的先前标记,以预测下一个标记。

image.png

前缀 U 是一个尺寸为(前缀长度 × d)的矩阵,其中 d 是隐藏维度大小。对于前缀长度为 10 和隐藏大小为 1024 的情况,前缀将包含10240 个可调参数。

在训练过程中,前缀数值被优化以最大化在给定输入 X 的情况下生成正确输出文本 Y 的可能性,损失函数的梯度仅针对前缀参数进行计算,预训练模型本身的参数被完全固定。这个训练过程调整前缀,使其对每个输入 X 分配高概率的目标描述 Y。通过许多训练对,前缀学会引导模型正确执行特定任务的生成。这样可以有效地 “引导” 模型生成任务的输出,同时避免对预训练模型中的数百万参数进行任何更改,前缀可以被视为向模型注入特定任务的知识。

优势

Prefix-Tuning 相对于全参数微调提供了几个优势:

内存高效

每个任务只需要存储小的前缀,而不是预训练模型的完整副本,这样可以实现大规模任务的扩展。

训练速度更快

仅更新前缀参数比全参数微调模型要快得多,不需要通过完全预训练模型进行梯度计算。

模块化

预训练模型保持不变,无需任何修改,这使得可以灵活地组合前缀和预训练模型。

更好的泛化能力

冻结预训练参数可能会提高对新数据集和主题的泛化能力,依赖模型的能力而不是过度拟合参数,未经触及的预训练模型可以更好地利用其在这个新领域的能力。

个性化

前缀可以独立学习,以实现个性化。一个预训练模型可以支持个性化前缀。

可解释性

紧凑的前缀可以比大型微调模型提供更多的可解释性,更容易检查注入了哪些知识。

结语

Prefix-Tuning 为将预训练模型适应自然语言生成任务提供了一种高效的替代方案。通过仅优化一个小的连续前缀,它可以在使用小于 0.1% 的任务特定参数的情况下,达到与全参数微调相匹配的性能。通过保持预训练模型不变,并将任务知识注入到一个小的可调前缀中,前缀调整指向更模块化和轻量级的基础模型调整方法,这将实现预训练模型在许多下游应用中的可扩展使用。