datawhale 大模型学习 第六章-大模型之Adaptation

2024-01-27 05:12

本文主要是介绍datawhale 大模型学习 第六章-大模型之Adaptation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、为什么需要Adaptation

1.1 简介

        从语言模型的训练方式来说,例如GPT-3,训练语料通常是海量的,各种领域的,不针对任何特定任务的文本信息。
        这种方法的优点在于模型具有广泛的适用性,但也带来了一些挑战。比如下游任务的多样性,不同的下游任务与语言模型的预训练方式可以非常不同:

  • 格式不同:BERT训练过程中使用了MASK标记,而许多下游任务可能并不使用这些标记。
                      自然语言推理任务(NLI)涉及两个句子的比较以产生单一的二进制输出
  • 主题变化:专业领域的时候,需要的文本或者话术都需要集中在专业领域。
  • 时间转变:下游任务中出现了预训练中没有出现过的knowledge。原因有:1. 训练时多数据集已经和预测数据集不同。2. 下游任务数据集不能公开使用

1.2 大模型Adaptation训练一般流程

  1. 准备一个预训练大模型(pre-trained LM):适配阶段的开始,我们已经有了一个预训练的语言模型,用参数\Theta _{lm}来表示
  2. 下游任务数据集(downstream task dataset):下游任务的训练集。例如文本分类任务,由输入x和输出y组成:\left ( x_{1},y_{1} \right ).....\left ( x_{n},y_{n} \right )
  3. 适配参数(Adaptation Parameters):为了使得预训练大模型(LM)适配下游任务,需要定义参数\gamma,调整参数以后使得大模型在下游任务上面表现更好
  4. 任务损失函数(Task Loss Function):损失函数 ℓtask ​来衡量模型在下游任务上的表现。例如,交叉熵损失是一种常见的选择,用于衡量模型预测的概率分布与真实分布之间的差异。
  5. 优化问题(Optimization Problem):根据下面的方式优化\gamma,找到最好的\gamma _{best}

二、几种主流的Adaptaion方法

2.1 Probing

  • probing引入了新的模型参数,通常是线性层或者浅的网络层
  • probing通常用来探究模型得到的representation的意义,比如如果 模型的probe能预测词性,那么就存储了词性信息。
  • 在adaptation中,通过模型最后一层的输出来训练probe(prediction head)
  • 主要应用于encoder—only模型,但也能用骨decoder-only模型

        

2.2 Fine-tuning

  • 使用全部的预训练参数作为初始化:
    • 参数包括模型参数和prediction head参数
    • optimizer sate和预训练无关,会在训练过程中更新丢弃
    • 学习率至少比预训练少一个数量级(例如:预训练阶段的学习率是1*e-3,那么fine-tuning阶段的学习率是1*e-4),并且时间短。
  • 根据不同的下游任务都要存储特殊化的模型,expensive。
  • 通常比probing表现好

2.3 Lightweight Fine-tuning

 轻量finetune 目的是提升模型的表现能力,通过一次full fine通用适配下游任务,而不需要针对每个下游任务finetune 

2.3.1 常见的三中方法
  1. 提示调整(Prompt Tuning):通过改变模型的输入prompt提示词语来优化模型的表现。在不训练模型的情况下,只通过调整输入参数来尝试获取更好的结果
  2. 前缀调整(Prefix Tuning):与提示调整类似,前缀调整也集中在输入部分,不过是每一层的前面都添加了输入部分(比如Bert有12层,那么这个前缀变量就会添加到这12层Block前面,Prompt Tuning只添加输入层)。它通过添加特定前缀的可训练张量,使得模型的输出结果更好。
  3. 适配器调整(Adapter Tuning):适配器调整是通过在模型的隐藏层之间插入可训练的“适配器”模块来微调模型的一种方法。这些适配器模块允许模型在不改变原始预训练参数的情况下进行微调,从而降低了存储和计算的需求。
2.3.1.1 提示调整(Prompt Tuning
  • Prompt Tuning通过在输入前添加k个可学习的、连续的标记嵌入(定义为Γ)来工作。
  • 新的输入长度现在为L′=L+k,其中L是原始输入的长度。
  • 这些额外的标记嵌入Γ通过在带标签的任务数据上进行微调训练来学习。
  • 微调训练过程中,大模型的参数是冻结的,不更新的

提示词不同的初始化策略:

  • 随机词汇词嵌入(Embedding of random vocab words):选择随机的词汇作为嵌入。
  • 类标签词嵌入(Embedding of class label words):使用与分类标签相关的词汇进行嵌入。
  • 随机初始化(Random init):这种方法通常效果不佳,不推荐使用。
2.3.1.2 Prefix Tuning
2.3.1.2.1 注意力计算公式

键(K)、值(V)和查询(Q),分别具有维度\mathbb{R} ^{d*L^{​{}'}},\mathbb{R} ^{d*L^{​{}'}},\mathbb{R} ^{d*L}

正常自注意力(self-attention):
 L{}' = L

 K = W_{key}x_{1:L}

 V = W_{value}x_{1:L}

 Q = W_{value}x_{1:L}

其中W_{key},W_{value},W_{query}​是学习到的权重矩阵。

Prefix Tunining的第i个block里面的自注意力:

k :表示prefix Truning添加的token长度

P(i)_{key}P(i)_{value}​∈\mathbb{R}^{d*k}:表示可学习变量

K_{prefix} = [P(i)_{key}​,K_{key }]

V_{prefix} = [P(i)_{value}​,V_{key }]

Q不变

Head_{i} =  Atten-op(Q,K_{prefix},V_{prefix})

总的来说,前缀调整通过在注意力机制的键和值部分添加可学习的权重,为模型提供了一种强大的微调手段。这种方法允许模型更好地捕捉任务特定的模式,并与提示调整等其他技术相辅相成,提供了一种灵活和强大的任务特定优化手段。

2.3.1.3 Adapter Tuning

Adapter Tuning(适配器调整)通过在每个(冻结的)Transformer层之间添加新的学习“bottleneck”层(称为适配器)来实现。

dapter Tuning 通常是操作于序列中每个元素x∈Rd的2层残差网络。适配器的计算定义如下:Adapter(x) = x +W_{up}*\delta \left ( W_{down}x \right )

它们将x投影到一个瓶颈维度r,然后再投影回维度d。符号σ表示一个非线性激活函数

2.3.2 Lightweight Fine-tuning其他特性

  • Lightweight Fine-tuning的表达能力相当复杂,因为它与特定的预训练语言模型(LM)紧密相连。如果预训练LM的权重为0,则Pormpt/Prefix Tuning将不起作用。
  • 以上提到的Promt/Prefix/Adapter Tuning提供了一种实现个性化模型的方法。假设我们想为N个用户部署个性化模型,通过Prefix Tuning,我们可以存储N个前缀,每个用户一个。然后,在一个小批量内,通过在每个输入之前附加相应的用户特定前缀,可以并行运行每个用户的个性化模型。这种方法实现了用户特定的调整,同时有效地利用了并行处理能力。
  • Lightweight Fine-tuning方法的鲁棒性得到了提升,这些方法倾向于在与全面微调相比,改善分布外(out-of-distribution,OOD)的性能,例如在不同主题或领域的文本上的表现。例如,Prompt Tuning方法提高了OOD的准确性:与在SQuAD上训练并在领域外的MRQA 2019任务上测试的全面微调(模型调整)相比,Prompt Tuning方法在F1结果上表现得更好。

2.4 总结

  • 冻结(灰色):整个/大部分语言模型
  • 优化(蓝色,根据任务变化):少量额外参数(参数的<1%)
  • 方法:提示调整、前缀调整、适配器调整,以及其他方法(LoRA,BitFit等)

这篇关于datawhale 大模型学习 第六章-大模型之Adaptation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649154

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了