7.1 引言
在自然语言处理任务中,虽然语言模型(例如GPT-3)在很多任务上能够仅通过提示(prompting)进行上下文学习,但它们并不适用于所有下游任务。特别是当下游任务的格式和主题与语言模型的训练数据存在差异时(例如,自然语言推理NLI、问题回答QA等),就需要对模型进行适配(adaptation)。适配帮助模型调整以应对特定任务的数据分布、领域知识或格式要求。
7.1.1 为什么需要Adaptation?
语言模型通常是任务不可知的(task-agnostic),即它们通过广泛的训练数据获得对多种任务的处理能力,但无法针对特定任务进行优化。下游任务与原始训练任务之间的差异主要表现在以下几个方面:
- 格式差异:例如,自然语言推理(NLI)任务涉及两个句子的比较以进行逻辑推理,而语言模型通常用于生成下一个标记,这两者存在本质差异。
- 主题差异:某些下游任务专注于特定领域(如医疗或法律),这些任务可能包含模型未见过的术语和概念。
- 时间差异:语言模型的知识通常在训练时已固定,无法动态更新,因此可能缺乏最新的信息。
因此,适配任务对于语言模型来说至关重要,它通过调整模型以满足特定任务的要求,从而提升模型在这些任务上的表现。
7.1.2 通用的Adaptation配置
在语言模型适配过程中,通常会涉及以下几个步骤:
- 预训练语言模型(LM):这是一个通用的语言模型,已在大规模文本数据上进行训练,但并未针对任何特定任务进行优化。
- 下游任务数据集:来自具体任务的数据集,例如情感分析或文本分类任务的样本数据。
- 适配参数:为使预训练的模型适应特定任务,需要找到一组适配参数,通常来自原有模型的部分参数或全新参数。
- 任务损失函数:通过定义损失函数来评估模型在特定任务上的表现,例如交叉熵损失。
- 优化问题:通过最小化任务损失函数来优化适配参数,使得模型能够更好地完成特定任务。
7.2 当前主流的几种Adaptation方法
7.2.1 Probing
Probing是一种在模型预训练阶段广泛使用的微调策略,主要用于分析和理解语言模型的内部表示。通过在模型的输出层加上一个简单的预测头(例如线性层),可以用来预测特定任务的标签(例如词性标注)。Probing通常用于理解模型如何存储和表示任务相关的信息。
- 固定长度表示策略:很多下游任务要求固定长度的输出。常见的方法包括:
- CLS Token策略:通过在输入前添加一个特殊的CLS token,并将其嵌入向量作为整个序列的表示。
- 平均化Token策略:通过对所有输入Token的嵌入进行平均,生成一个固定长度的表示。
7.2.2 Fine-tuning
Fine-tuning是最常见的适配方法,通过优化预训练语言模型的所有参数(包括任务特定的预测头)来适应下游任务。微调通常使用较小的学习率,并在相对较短的时间内进行。
- 零样本学习(Zero-shot learning):微调后的模型通常在未见过的任务上表现得更好,能够通过调整提示(prompt)来快速适应新任务。
- 人类对齐语言模型的微调:在微调过程中,使用人类反馈来对模型进行调整,确保模型的输出符合人类的期望和需求,例如减少有害内容的生成。
7.2.3 Lightweight Fine-tuning
**轻量级微调(Lightweight Fine-tuning)**是一种节省计算资源的微调方法,旨在减少模型存储需求的同时保持较好的任务性能。常见的轻量级微调技术包括:
- 提示调整(Prompt Tuning):通过优化输入的提示(prompt)而非修改模型本身的参数来调整模型,使其适应特定任务。
- 前缀调整(Prefix Tuning):在输入前添加任务特定的前缀,并在每个注意力层中加入可学习的权重,以调整模型的输出。
- 适配器调整(Adapter Tuning):通过在模型的隐藏层插入可训练的适配器模块来进行微调,这样可以在不修改原始预训练参数的情况下对模型进行优化。
7.2.3.1 Prompt Tuning
Prompt Tuning是一种专注于输入调整的轻量级微调方法,通过在输入的前面添加可学习的嵌入标记(tokens),优化任务的表现。与传统的微调方法相比,Prompt Tuning不改变模型的参数,减少了计算和存储负担。
7.2.3.2 Prefix Tuning
Prefix Tuning主要用于生成任务,通过在每个注意力层添加可学习的权重来优化生成过程。与Prompt Tuning类似,Prefix Tuning通过修改输入的结构来调整模型行为,但它在每一层的注意力机制中加入额外的权重,从而更加精细地捕捉任务特定的上下文。
总结
在语言模型的适配过程中,Probing、Fine-tuning 和 Lightweight Fine-tuning 是主要的适配方法。通过不同的策略(如调整输入提示、插入适配器模块、修改输入结构等),可以显著提升模型在特定任务上的表现,而不必完全依赖传统的全量微调。通过这些技术,语言模型能够更好地处理下游任务的多样性和复杂性,实现更加高效和灵活的人工智能应用。
标签:Tuning,适配,模型,微调,任务,特定,Adaptation From: https://blog.csdn.net/weixin_46378554/article/details/144081164