LLM大模型Prompt-Tuning技术进阶

简介: 近年来,随着Prompt-Tuning技术的崛起,研究者们发现,在拥有超过10亿参数的大规模模型上,采用Prompt-Tuning相较于传统的Fine-tuning方法能带来显著的性能提升。特别是在小样本甚至零样本学习场景下,Prompt-Tuning能够极大地激发模型的潜力。这一成就的取得主要归功于三个关键因素:模型庞大的参数量、训练过程中使用的海量语料,以及精心设计的预训练任务。

LLM的Prompt-Tuning主流方法

面向超大规模模型的Prompt-Tuning

近年来,随着Prompt-Tuning技术的崛起,研究者们发现,在拥有超过10亿参数的大规模模型上,采用Prompt-Tuning相较于传统的Fine-tuning方法能带来显著的性能提升。特别是在小样本甚至零样本学习场景下,Prompt-Tuning能够极大地激发模型的潜力。这一成就的取得主要归功于三个关键因素:模型庞大的参数量、训练过程中使用的海量语料,以及精心设计的预训练任务。

在2022年底至2023年初的AIGC浪潮中,超大规模模型如OpenAI的ChatGPT、GPT-4,Google的Bard,以及百度公司的文心一言等引起了广泛关注。这些模型的成功得益于强大的Prompt-Tuning技术。以GPT-3为例,其采用的Prompt-Tuning方法主要包括:

  • 上下文学习(In-Context Learning,
  • ICL):这种方法直接利用少量训练样本作为任务的提示,帮助模型在没有额外训练的情况下适应新任务。
  • 指令学习(Instruction-Tuning):通过构建一套详细的任务指令集,使模型能够根据不同指令产生相应的输出,增强了模型的通用性和适应性。
  • 思维链(Chain-of-Thought,
  • CoT):这种方法通过引导模型进行推理和解释,帮助模型生成更加合理和连贯的结果,提高了模型的逻辑性和准确性。

1. In-Context Learning(上下文学习)

In-Context learning从训练集中挑选少量的标注样本,设计任务相关的指令形成提示模板,用于指导测试样本生成相应的结果。

常用的In-context learning方法包括:

  • zero-shot learning

  • 定义: 给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试.

  • 示例: 向模型输入“这个任务要求将中文翻译为英文. 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.

  • one-shot learning

  • 定义: 在预训练和真正翻译的样本之间, 插入一个样本做指导. 相当于在预训练好的结果和所要执行的任务之间, 给一个例子, 告诉模型英语翻译为法语, 应该这么翻译.

  • 示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.

  • few-shot learning

  • 定义: 在预训练和真正翻译的样本之间, 插入多个样本(一般10-100条)做指导. 相当于在预训练好的结果和所要执行的任务之间, 给多个例子, 告诉模型应该如何工作.

  • 示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 再见->goodbye, 购买->purchase, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.

目前In-context Learning依然与普通的fine-tuning有一定差距,且预测的结果方差很大,同时也需要花费时间考虑template的构建。

2. Instruction-Tuning(指令学习)

面向超大规模模型第二个Prompt技术是指令学习。其实Prompt-Tuning本质上是对下游任务的指令,简单的来说:就是告诉模型需要做什么任务,输出什么内容。上文我们提及到的离散或连续的模板,本质上就是一种对任务的提示。因此,在对大规模模型进行微调时,可以为各种类型的任务定义指令,并进行训练,来提高模型对不同任务的泛化能力。

Instruction-Tuning和Prompt-Tuning的核心一样,就是去发掘语言模型本身具备的知识。而他们的不同点就在于:

  • Prompt是去激发语言模型的补全能力,比如给出上半句生成下半句、或者做完形填空。
  • Instruction-Tuning则是激发语言模型的理解能力,通过给出更明显的指令/指示,让模型去理解并做出正确的action.
  • Promp-Tuningt在没有精调的模型上也能有一定效果,但是Instruct-Tuning则必须对模型精调,让模型知道这种指令模式。

举例说明:

  • 例如在对电影评论进行二分类的时候,最简单的提示模板(Prompt)是“. It was [mask].”,但是其并没有突出该任务的具体特性,我们可以为其设计一个能够突出该任务特性的模板(加上Instruction),例如“The movie review is . It was [mask].”,然后根据mask位置的输出结果通过Verbalizer映射到具体的标签上。这一类具备任务特性的模板可以称之为指令Instruction.

3. Chain-of-Thought(思维链)

思维链 (Chain-of-thought,CoT) 的概念是在 Google 的论文 “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” 中被首次提出。思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理。

CoT 没有像 ICL 那样简单地用输入输出对构建提示,而是结合了中间推理步骤,这些步骤可以将最终输出引入提示。简单来说,思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习(即通过x1,y1,x2,y2,…xtest作为输入来让大模型补全输出ytest),思维链多了中间的中间的推导提示。

以一个数学题为例:

  • 模型无法做出正确的回答。但如果说,我们给模型一些关于解题的思路,就像我们数学考试,都会把解题过程写出来再最终得出答案,不然无法得分。CoT 做的就是这件事

  • 类似的算术题,思维链提示会在给出答案之前,还会自动给出推理步骤:

“罗杰先有5个球,2盒3个网球等于6个,5 + 6 = 11”

“食堂原来有23个苹果,用了20个,23-20=3;又买了6个苹果,3+6=9

上述例子证明了思维链提示给出了正确答案,而直接给出答案的传统提示学习,结果是错的,连很基本的数学计算都做不好。简单来说,语言模型很难将所有的语义直接转化为一个方程,因为这是一个更加复杂的思考过程,但可以通过中间步骤,来更好地推理问题的每个部分。

CoT分类:

  • Few-shot CoT :是 ICL 的一种特殊情况,它通过融合 CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT,output〉。
  • Zero-shot CoT:与 Few-shot CoT 不同 在 prompt 中不包括人工标注的任务演示。相反,它直接生成推理步骤,然后使用生成的 CoT 来导出答案。(其中 LLM 首先由 “Let’s think step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式)。

一个有效的思维链应该具有以下特点:

  • 逻辑性:思维链中的每个思考步骤都应该是有逻辑关系的,它们应该相互连接,从而形成一个完整的思考过程。

  • 全面性:思维链应该尽可能地全面和细致地考虑问题,以确保不会忽略任何可能的因素和影响。

  • 可行性:思维链中的每个思考步骤都应该是可行的,也就是说,它们应该可以被实际操作和实施。

  • 可验证性:思维链中的每个思考步骤都应该是可以验证的,也就是说,它们应该可以通过实际的数据和事实来验证其正确性和有效性。

PEFT(大模型参数高效微调)

目前在工业界应用大模型主流方式:参数高效微调方法(Parameter-Efficient Fine-Tuning,PEFT),PEFT 方法仅微调少量或额外的模型参数,固定大部分预训练参数,大大降低了计算和存储成本,同时最先进的 PEFT 技术也能实现了与全量微调相当的性能。

该方法可以使 PLM 高效适应各种下游应用任务,而无需微调预训练模型的所有参数,且让大模型在消费级硬件上进行全量微调(Full Fine-Tuning)变得可行。

目前应用较多的PEFT方法主要分为三大类:

  • Prefix/Prompt-Tuning:在模型的输入或隐层添加 k kk个额外可训练的前缀 tokens(这些前缀是连续的伪 tokens,不对应真实的 tokens),只训练这些前缀参数;
  • Adapter-Tuning:将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数;
  • LoRA:通过学习小参数的低秩矩阵来近似模型权重矩阵 W WW的参数更新,训练时只优化低秩矩阵参数;

此外Huggface 开源的一个高效微调大模型的库PEFT,该算法库支持上述三类方法,可以直接调用。

1. Prefix Tuning

Prefix-Tuning 在模型输入前添加一个连续的且任务特定的向量序列(continuous task-specific vectors),称之为前缀(prefix)。前缀被视为一系列“虚拟 tokens”,但是它由不对应于真实 tokens 的自由参数组成。与更新所有 PLM 参数的全量微调不同,Prefix-Tuning 固定 PLM 的所有参数,只更新优化特定任务的 prefix。因此,在生产部署时,只需要存储一个大型 PLM 的副本和一个学习到的特定任务的 prefix,每个下游任务只产生非常小的额外的计算和存储开销。

Fine-tuning 更新所有 PLM 参数,并且需要为每个任务存储完整的模型副本。Prefix-tuning 冻结了 PLM 参数并且只优化了 prefix。因此,只需要为每个任务存储特定 prefix,使 Prefix-tuning 模块化且节省存储空间。

以 GPT2 的自回归语言模型为例,将输入 x xx 和输出 y yy 拼接为 z = [ x ; y ] z=[x;y]z=[x;y] ,经过 LM 的某一层计算隐层表示h = [ h 1 , . . . , h i , . . . . , h n ] , h i = L M Ø ( z i , h < i ) ,其中,

X idx 和Y i d x 分别为输入和输出序列的索引。

Prefix-Tuning 在输入前添加前缀,即 z=[Prefix,x,y]z=[Prefix,x,y] ,P i d x 为前缀序列的索引,

P idx为前缀的长度。前缀索引对应着由θ θθ参数化的向量矩阵 P θ ,维度为∣ P i d x ∣ × d i m ( h i ) 。隐层表示的:若索引为前缀索引P idx ,直接从 P θ 复制对应的向量作为h i (在模型每一层都添加前缀向量);否则直接通过 LM 计算得到,同时,经过 LM 计算的h i 也依赖于其左侧的前缀参数P θ

,即通过前缀来影响后续的序列隐层激化值。

但是直接优化 P θ 会导致训练不稳定,通过一个更小的矩阵 P w 和一个更大的前馈神经网络 MLP θ

对P θ 进行重参数化: P θ [ i , : ] = M L P θ ( P w [ i , : ] )。在训练时,LM 的参数 Ø 被固定,只有前缀参数 θ 为可训练的参数。训练完成后,只有前缀P θ被保存。

P-Tuning 与 Prefix-Tuning 的方法思路很相近,P-Tuning 利用少量连续的 embedding 参数作为 prompt使 GPT 更好的应用于 NLU 任务,而 Prefix-Tuning 是针对 NLG 任务设计,同时,P-Tuning 只在 embedding 层增加参数,而 Prefix-Tuning 在每一层都添加可训练参数。

Prompt Tuning 方式可以看做是 Prefix Tuning 的简化,固定整个预训练模型参数,只允许将每个下游任务的额外 k kk个可更新的 tokens 前置到输入文本中,也没有使用额外的编码层或任务特定的输出层。

2. Adapter Tuning

与 Prefix Tuning 和 Prompt Tuning 这类在输入前可训练添加 prompt embedding 参数来以少量参数适配下游任务,Adapter Tuning 则是在预训练模型内部的网络层之间添加新的网络层或模块来适配下游任务。

假设预训练模型函数表示为Ø w ( x ),对于 Adapter Tuning ,添加适配器之后模型函数更新为

Ø w,w 0 (x), w是预训练模型的参数, w 0 是新添加的适配器的参数,在训练过程中, w被固定,只有 w 0被更新。∣ w 0 ∣ < < ∣ w ∣,这使得不同下游任务只需要添加少量可训练的参数即可,节省计算和存储开销,同时共享大规模预训练模型。

Series Adapter的适配器结构和与 Transformer 的集成如上图所示。适配器模块被添加到每个 Transformer 层两次:多头注意力映射之后和两层前馈神经网络之后。适配器是一个 bottleneck(瓶颈)结构的模块,由一个两层的前馈神经网络(由向下投影矩阵、非线性函数和向上投影矩阵构成)和一个输出输出之间的残差连接组成。

3. LoRA

上述Adapter Tuning 方法在 PLM 基础上添加适配器层会引入额外的计算,带来推理延迟问题;而 Prefix Tuning 方法难以优化,其性能随可训练参数规模非单调变化,更根本的是,为前缀保留部分序列长度必然会减少用于处理下游任务的序列长度。因此微软推出了LoRA方法。

低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换,也就是:通过一个较低维度的表示来近似表示一个高维矩阵或数据集。

基本原理:LoRA技术冻结预训练模型的权重,并在每个Transformer块中注入可训练层(称为秩分解矩阵),即在模型的Linear层的旁边增加一个“旁支”A和B。其中,A将数据从d维降到r维,这个r是LoRA的秩,是一个重要的超参数;B将数据从r维升到d维,B部分的参数初始为0。模型训练结束后,需要将A+B部分的参数与原大模型的参数合并在一起使用。

python伪代码

input_dim = 768 # 例如,预训练模型的隐藏大小
output_dim = 768 # 例如,层的输出大小
rank = 8 # 低秩适应的等级'r'
W = ... # 来自预训练网络的权重,形状为 input_dim x output_dim
W_A = nn.Parameter(torch.empty(input_dim, rank)) # LoRA权重A
W_B = nn.Parameter(torch.empty(rank, output_dim)) # LoRA权重B初始化LoRA权重
nn.init.kaiming_uniform_(W_A, a=math.sqrt(5))
nn.init.zeros_(W_B)

def regular_forward_matmul(x, W):
  h = x @ W
  return h

def lora_forward_matmul(x, W, W_A, W_B):
  h = x @ W # 常规矩阵乘法
  h += x @ (W_A @ W_B) * alpha # 使用缩放的LoRA权重,alpha缩放因子
  return h

LoRA方法是目前最通用、同时也是效果最好的微调方法之一。

如何系统的去学习AI大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值