Prompt Tuning:大模型微调实战
随着深度学习技术的不断发展,大模型在各种任务中取得了显著的成果。然而,大模型的训练需要大量的数据和算力,导致在实际应用中受到限制。为了解决这个问题,研究者们提出了微调的方法,即使用预训练模型在少量数据上进行训练,使其适应特定的任务。
在 Prompt Tuning 之前,Finetuning 是常用的微调方法。Finetuning 是通过使用大模型进行下游任务重训的方法,但由于大模型参数量过大,Finetuning 需要大量的数据和更多的算力去更新学习参数,不够实用。
在 Prompt 思想的启发下,Prefix-Tuning 提出了给每一个 input 输入增加一个连续的任务相关的 embedding 向量来进行训练。这里的连续是相对于人工定义的文本 prompt token 的离散来说的。例如一个人工定义的 prompt token 数组是[‘The’, ‘movie’, ‘is’, ‘[MASK]’],把其中的 token 替换成一个 embedding 向量做为输入的话,其中 embedding 就是连续的表达方式。
具体来说,Prefix Tuning 在输入 token 前构造一段任务相关的 virtual tokens 作为 prefix,训练时只更新 Prefix 不分的参数,而 Transformer 的其他不分参数固定,和构造 prompt 类似,只是 prompt 是人为构造的即无法在模型训练时更新参数,而 Prefix 可以学习<隐式>的 prompt。
另外,还有 Adapter Tuning 和 P-tuning 等方法。Adapter Tuning 是固定原预训练模型的参数,只对新增的 adapter 进行微调。P-tuning 将 prompt 转为可学习的 embedding 层,v2 则加入了 prompts tokens 作为输入。这些方法可以在推理时直接用训练好的 AB 两个矩阵和原预训练模型的参数相加,相加结果替换原预训练模型参数。
在实际应用中,Prompt Tuning 具有以下优点:
高效性:通过只更新部分参数,降低了计算量和参数量,加速了训练过程。
实用性:仅需少量数据即可进行有效的微调,降低了对大量标注数据的依赖。
灵活性:可以针对不同的任务定制不同的 Prompt,具有较强的任务适应性。
为了实现 Prompt Tuning,我们需要进行以下步骤:
定义任务相关 embedding 向量:根据任务需求定义连续的任务相关 embedding 向量。这些向量可以是手动设计的,也可以通过其他方式自动学习得到。
修改输入前缀:在输入数据前添加定义好的 embedding 向量作为前缀。这些前缀将与原始输入一起传递给模型进行训练。
微调模型:使用带有前缀的输入数据进行微调。在这个过程中,只有前缀部分的参数会被更新,而原始预训练模型的参数保持不变。
评估和优化:在验证集上评估模型的性能并进行优化调整。通过不断迭代和优化,我们可以得到适用于特定任务的微调模型。
总结来说,Prompt Tuning 是一种高效、实用的模型微调方法。通过在输入前添加连续的任务相关 embedding 向量进行训练,可以降低计算量和参数量,加速训练过程。同时,仅需少量数据即可进行有效的微调,降低了对大量标注数据的依赖。此外,可以针对不同的任务定制不同的 Prompt,具有较强的任务适应性。在实际应用中,Prompt Tuning 可以帮助我们快速适应各种任务需求,提高模型的性能表现。
评论