LLM模型微调

633 阅读6分钟

模型微调理论

什么是微调

Finetune是指在一个已经预先训练好的机器学习模型的基础上,通过在特定领域或任务的数据集上重新训练模型,以进一步提高其性能。这个过程通常涉及到在已经预训练好的模型上微调参数,以适应新的数据集和任务。

为什么要微调

A mouse riding on the head of an elephant, using reins to steer the giant creature.

微调技术

fine-tuning技术

Fine-tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。经典的fine-tuning方法将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务。

微调可以简单概括以下四个步骤。

  1. 在源数据集(例如ImageNet数据集)上预训练神经网络模型,即源模型
  2. 创建一个新的神经网络模型,即目标模型。这将复制源模型上的所有模型设计及其参数(输出层除外)。我们假定这些模型参数包含从源数据集中学到的知识,这些知识也将适用于目标数据集。我们还假设源模型的输出层与源数据集的标签密切相关;因此不在目标模型中使用该层。
  3. 向目标模型添加输出层,其输出数是目标数据集中的类别数。然后随机初始化该层的模型参数。
  4. 在目标数据集上训练目标模型。输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。

适配器训练(adapter training)

随着计算机硬件性能的提高,预训练模型参数量越来越多,在训练下游任务时进行全模型微调变得昂贵且耗时,Adapter 的出现缓解了这个问题。Adapter在预训练模型每层中插入用于下游任务的参数,在微调时将模型主体冻结,仅训练特定于任务的参数,减少训练时算力开销。

Adapter模块设计方法

 2019年,Houlsby N等人将Adapter引入NLP领域,作为全模型微调的一种替代方案。Adapter主体架构下图所示。

 在预训练模型每一层(或某些层)中添加Adapter模块(如上图左侧结构所示),微调时冻结预训练模型主体,由Adapter模块学习特定下游任务的知识。通过添加Adapter模块来产生一个易于扩展的下游模型。Adapter方法不需要微调预训练模型的全部参数,只微调adapter中的少量参数,然后使用原模型+Adapter 中的参数组成一个微调后的模型。来存储有关该任务的知识,降低对模型微调的算力要求。

prompt-tuning技术

prompt-tuning是一种更近期的精调预训练语言模型的方法,重点是调整输入提示(input prompt)而非修改模型参数。这意味着预训练模型保持不变,只有输入提示被修改以适应下游的任务。通过设计和优化一组提示,可以使预训练模型执行特定任务。只需要考虑如何设计模板或指令,而模型和训练目标则都是复用预训练阶段的,即在整个训练过程中,无须添加任何参数(或只需要添加非常少量的与模板有关的参数),而其他参数都是训练好的。 例如:在文本情感分类任务中,输入为"I love this movie.",希望输出的是"positive/negative"中的一个标签。可以设置一个Prompt,形如:"The movie is ___",然后让模型用来表示情感状态的答案(label),如“fantastic”、“boring”等,将空补全,最后再将答案转化成情感分类的标签(positive/negative)作为输出。

使用 Prompt Tuning解决问题的流程

  1. 构建Prompt

x = "I love this movie."。首先,设计一个Prompt模板(Prompt Template): Overall it was a [z] movie,在实际研究中,[z]是需要模型进行填充的空位,[z]的位置和数量决定了Prompt的类型。

[z]位置的不同:cloze prompt([z]在句中);prefix prompt([z]在句末)

Prompt模板的选择:手工设计模板;自动构建模板

  1. 构建Answer

Answer,指的是[z]答案。在上述案例中,可以是“fantastic”、“boring”等。构建答案空间(Answer Space)能够重新定义任务的目标,使任务从输出“positive”或“negative”标签转变成选择恰当的词汇填空,使情感分类任务转变为语言模型构建任务。此时的关键在于如何定义标签空间(Label Space)与答案空间(Answer Space)之间的映射。 构建答案空间同样需要选择合适的形式和方法。在Prompt Learning中,

答案形式:Token、Span、Sent;

答案空间是否有边界:bounded、unbounded;

选择方法: 人工选择、自动学习。

  1. 匹配答案与标签

最后为了得到最终的输出(output),还需要根据之前定义好的映射,将预测到的Answer与实际任务中的Label匹配。标签(positive/negative)。

P-tuning——自动构建模版

重新审视了关于模版的定义,放弃了“模版由自然语言构成”这一常规要求,从而将模版的构建转化为连续参数优化问题, 并不关心模版长什么样,我们只需要知道模版由哪些token组成,该插入到哪里,插入后能不能完成我们的下游任务,输出的候选空间是什么。

  • 左图的做法是传统的做法,我们事先定义好一个prompt,如这里的"The capital of 原始样本 is 【MASK】";
  • P-tuning做法是用一些伪Prompt代替这些显式的prompt,具体的做法是可以用预训练词表中的【unused】token作为伪Prompt(bert的vocab里有【unused 1】 ~ 【unused99】,就是为了方便增加词汇的),然后通过训练去更新这些token的参数。

也就是,P-tuning的 Prompt不是显式的,不是我们可以看得懂的字符,而且一些隐式的、经过训练的、模型认为最好的prompt token。