简单学点大模型-大模型之Adaptation

10.1 为什么需要Adaptation?

语言模型,例如GPT-3,通常是任务不可知(task-agnostic)。

task-agnostic

task-agnostic通常指的是⼀种可以在多个不同任务上运行,而不需要对每个单独任务进行特别调整或训练的方法。例如, ⼀个task-agnostic的语言模型在训练时不会专门针对特定任务进行优化,例如情感分析、文本摘要或问题回答。相反,它被设计为能够捕捉到语言的通用特性和结构,以便可以用于许多不同的下游任务。通用模型可能在特定任务上不如专门为该任务训练的模型表现出色。这就引出 了如何将task-agnostic的模型适应特定任务的需求。

下游任务与语言模型的训练任务之间的不同之处非常复杂。这些差异可以从格式、主题和时间三个方面来探讨,每个方面都可能涉及许多具体的挑战和需求。

10.1.1 格式

1、下游任务的格式

  • 自然语言推理(NIL):NLI的逻辑推理过程涉及多层次的比较和理解。
  • 问题回答(QA):回答问题的过程涉及数据库的查询,需要用连接、过滤和聚合等运算对相关事实集进行推理。
  • 解析电子健康记录(EHR):EHR涉及专业词汇和专业知识的训练。

2、原始模型训练的格式

  • BERT:BERT训练主要为下一句预测和填充mask标记任务。
  • GPT-3:主要面向广泛的文本生成任务。

10.1.2 主题

  • 特定领域的需求:例如医疗记录分析或法律文档解析。这些任务可能涉及专门的术语和知识,与模型的通用训练任务相去甚远。
  • 广泛主题的灵活性: 如果下游任务突然聚焦在⼀个新的或非常独特的领域上,这可能会超出模型的训练范围。

10.1.3 时间

  • 新知识的需求: 随着时间的推移,新的信息和知识不断涌现。例如,GPT-3在拜登成为总统之前就已训练完毕,因此可能缺乏有关他总统任期的最新信息。
  • 非公开信息的需求: 有时下游任务可能涉及在训练期间不公开的 信息。这可能需要更多特定领域的专业知识和调整。

10.2 通用的adaptation配置

下面提供使用预训练语言模型(LM)的参数来适配(adapt)下游任务的⼀般设置。

  1. 预训练语言模型(Pre-trained LM): 用参数\theta _{LM}表示。这个模型被训练来理解和生成文本,但不特别针对任何特定任务。
  2. 下游任务数据集(Downstream Task Dataset): 获得了⼀组来自下游任务分布的样本数据。这些数据可以是文本分类、情感分析等任务的特定实例,每个样本由输入x和目标输出y组成,如:(x^{(1)},y^{(1)}),...,(x^{(n)},y^{(n)})
  3. 适配参数(Adaptation Parameters): 为了使预训练的LM适合特定的下游任务,需要找到⼀组参数\gamma ,这组参数可以来自现有参数的子集或引入的新的参数集\Gamma。这些参数将用于调整模型,使模型在特定任务上的表现更好。
  4. 任务损失函数(Task Loss Function): 定义⼀个损失函数\iota _{task} 来衡量模型在下游任务上的表现。例如,交叉熵损失是⼀种常见的选择,交叉熵越小,模型预测准确率越高。
  5. 优化问题(Optimization Problem): 找到⼀组适配参数 ,使得任务损失在整个下游数据集上最小化。数学上,这可以通过以下优化问题表示:

10.3 当前主流的几种Adaptation方法

10.3.1 探测法(Probing)

对于Adaptation来说,首先冻结语言模型的参数,从语言模型的最后一层训练一个Probing来进行分类输出。

具体地,对于一个在训练在主任务上的大型神经网络,Probe是一个插入在其中间层的浅层神经网络,通常是一个分类器层。Probe有助于探查不同层捕获的信息。使用辅助任务对Probe进行训练和验证,以发现是否捕获了此类辅助信息。

Probing主要适用于Encoder-only 模型(例如,BERT),但Decoder-only模型也可以使用。

假设我们要研究BERT模型的编码表示形式是否捕获语言信息,例如“动词是否为助动词”或“短语是否为主语名词”。这些任务可以被构造为探针的“辅助任务”。例如,在“I am learning LLM”的句子中,“-am”是辅助动词,“ learning”是主要动词,“ I”是主语名词,而“ LLM”是宾语。可以通过探究每个层在各个probe任务上的表现来探究每一层学到了什么样的信息。

固定长度表示的策略
由于许多任务(例如分类)需要固定长度的输出,Transformer编码器如何将L 个令牌映射到1个嵌入向量成为了一个问题。下面介绍了两种常见策略:

  • CLS token策略:在预训练和微调期间,我们在提示符前加上⼀个名为CLS的特殊token。使用与CLS token对应的嵌入向量作为“序列级”嵌入,根据[CLS]分割。
  • 平均化token策略:另⼀种常见方法是对L 个token求平均。注意,由于每个嵌入向量都是与上下文相关并且位置关联的,这并不使模型具有置换不变性。

10.3.2 微调法(Fine-tuning)

在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器。

对于Adaptation,微调是⼀种强大的工具,可以使预先训练的语言模型更好地符合人类的期望和需求。通过监督学习、人类反馈和强化学习等收段,可以显著提高模型在特定任务和场景下的性能。

微调的优势:模型微调可以获得更好的零样本学习能力,以适应新的、没有在训练中出现过的下游任务。

微调的过程

经典的fine-tuning方法包括将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务。所需的fine-tuning量取决于预训练语料库和任务特定语料库之间的相似性。如果两者相似,可能只需要少量的fine-tuning。如果两者不相似,则可能需要更多的fine-tuning。

10.3.3 轻量级微调(Lightweight fine-tuning)

轻量级微调是一种针对小数据集的微调方法,通过冻结部分预训练模型的参数,仅添加任务层更新需要微调的参数。这种方法可以减少显存使用,并提高模型性能。

轻量级微调的变体

  • 提示调整(Prompt Tuning):通过微调模型的输入prompt提示来优化模型的表现。提示调整可以被视为⼀种更灵活的微调方法,允许用户通过调整输⼊提示来导向模型的输出,而不是直接修改模型参数。
  • 前缀调整(Prefix Tuning):与提示调整类似,前缀调整也集中在输入部分。它通过添加特定前缀来调整模型的行为,从而对特定任务进行特定的行为定制。
  • 适配器调整(Adapter Tuning):适配器调整是通过在模型的隐藏层之间插入可训练的“适配器”模块来微调模型的⼀种方法。 这些适配器模块允许模型在不改变原始预训练参数的情况下进行微调,从而降低了存储和计算的需求。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值