大模型会成为AI时代的一项基础设施。作为像水、电一样的基础设施,预训练大模型这样的艰巨任务,只会有少数技术实力强、财力雄厚的公司去做。绝大多数人,是水、电的应用者。对这部分人来说,掌握如何用好大模型的技术,更加重要。
用好大模型的第一个层次,是掌握提示词工程(Prompt Engineering)
用好大模型的第二个层次,是大模型的微调(Fine Tuning),这也是今天这篇文章的主题。
为什么要对大模型进行微调
通常,要对大模型进行微调,有以下一些原因:
第一个原因是,因为大模型的参数量非常大,训练成本非常高,每家公司都去从头训练一个自己的大模型,这个事情的性价比非常低;
第二个原因是,Prompt Engineering的方式是一种相对来说容易上手的使用大模型的方式,但是它的缺点也非常明显。因为通常大模型的实现原理,都会对输入序列的长度有限制,Prompt Engineering 的方式会把Prompt搞得很长。
越长的Prompt,大模型的推理成本越高,因为推理成本是跟Prompt长度的平方正向相关的。
另外,Prompt太长会因超过限制而被截断,进而导致大模型的输出质量打折口,这也是一个非常严重的问题。
对于个人使用者而言,如果是解决自己日常生活、工作中的一些问题,直接用Prompt Engineering的方式,通常问题不大。
但对于对外提供服务的企业来说,要想在自己的服务中接入大模型的能力,推理成本是不得不要考虑的一个因素,微调相对来说就是一个更优的方案。
第三个原因是,Prompt Engineering的效果达不到要求,企业又有比较好的自有数据,能够通过自有数据,更好的提升大模型在特定领域的能力。这时候微调就非常适用。
第四个原因是,要在个性化的服务中使用大模型的能力,这时候针对每个用户的数据,训练一个轻量级的微调模型,就是一个不错的方案。
第五个原因是,数据安全的问题。如果数据是不能传递给第三方大模型服务的,那么搭建自己的大模型就非常必要。通常这些开源的大模型都是需要用自有数据进行微调,才能够满足业务的需求,这时候也需要对大模型进行微调。
什么时候需要LLM微调
说起LLM,总会涉及到上下文学习、零样本、单样本和少样本推理等话题。我们先快速了解一下它们主要的功能。
上下文学习(In-context learning) 是一种通过在提示中加入特定任务示例来改进提示的方法,为LLM提供了完成任务的蓝图。
零样本(Zero-shot)、单样本(One-shot)和少样本(Few-shot)推理 零样本推理是在提示中直接使用输入数据,不添加额外示例。如果零样本推理未能达到预期结果,可以使用单样本或少样本推理。这些策略涉及在提示中添加一个或多个已完成的示例,帮助较小的LLM表现得更好。
上下文学习的问题 将以上这些技术直接应用于用户提示,旨在优化模型输出,使其更符合用户偏好。问题是它们并不总是有效,尤其是对于较小的LLM。除此之外,在提示中包含的任何示例都会占用宝贵的上下文窗口空间,减少了包含其他有用信息的空间。
当以上方式无法解决相关问题时,这就需要LLM微调。但它与预训练阶段使用大量非结构化文本数据不同,微调是一个监督学习过程。这意味着你使用标记好的示例数据集来更新LLM的权重。这些标记好的示例通常是prompt-response,使得模型能更好地完成特定任务。
如何对大模型进行微调
从参数规模的角度,大模型的微调分成两条技术路线:
一条是对全量的参数,进行全量的训练,这条路径叫全量微调FFT(Full Fine Tuning)。
一条是只对部分的参数进行训练,这条路径叫PEFT(Parameter-Efficient Fine Tuning)****。
FFT的原理,就是用特定的数据,对大模型进行训练,将W变成W`,W`相比W ,最大的优点就是上述特定数据领域的表现会好很多。
但FFT也会带来一些问题,影响比较大的问题,主要有以下两个:
一个是训练的成本会比较高,因为微调的参数量跟预训练的是一样的多的;
一个是叫灾难性遗忘(Catastrophic Forgetting),用特定训练数据去微调可能会把这个领域的表现变好,但也可能会把原来表现好的别的领域的能力变差。
PEFT主要想解决的问题,就是FFT存在的上述两个问题,PEFT也是目前比较主流的微调方案。
从训练数据的来源、以及训练的方法的角度,大模型的微调有以下几条技术路线:
一个是监督式微调SFT****(Supervised Fine Tuning),这个方案主要是用人工标注的数据,用传统机器学习中监督学习的方法,对大模型进行微调;
一个是基于人类反馈的强化学习微调RLHF****(Reinforcement Learning with Human Feedback),这个方案的主要特点是把人类的反馈,通过强化学习的方式,引入到对大模型的微调中去,让大模型生成的结果,更加符合人类的一些期望;
还有一个是基于AI反馈的强化学习微调RLAIF****(Reinforcement Learning with AI Feedback),这个原理大致跟RLHF类似,但是反馈的来源是AI。这里是想解决反馈系统的效率问题,因为收集人类反馈,相对来说成本会比较高、效率比较低。
不同的分类角度,只是侧重点不一样,对同一个大模型的微调,也不局限于某一个方案,可以多个方案一起。
微调的最终目的,是能够在可控成本的前提下,尽可能地提升大模型在特定领域的能力。
流行的参数高效微调技术(PEFT)方案
参数高效微调方法,可大致分为三个类别:增加式方法、选择式方法和重新参数化式方法。
1 增加式方法(Additive methods)
增加式方法通过增加额外的参数或层来扩展现有的预训练模型,且仅训练新增加的参数。目前,这是PEFT方法中被应用最广泛的类别。
在增加式方法中,大致分为Adapter类方法和软提示(Soft Prompts)。2019年1月至2022年3月期间,Adapter类的方法Adapter Tuning,软提示类的方法Prefix Tuning、P-Tuning、Prompt Tuning、P-Tuning v2相继出现。
1.1 Adapter Tuning
Adapter的架构如下:
在每一个Transformer层中的每个子层之后插入两个串行的Adapter。在Adapter微调期间,绿色层是根据下游数据进行训练的,而预训练模型的原参数保持不变。
Adapter的特点
Adapter 模块主要由两个前馈(Feed-forward)子层组成。
1. 第一个前馈子层将原始特征的维度d投影到一个更小的维度m,应用非线性函数,再投影回维度d的特征(作为Adapter模块的输出)。
2. 总参数量为2md + d + m。通过设置m < d,我们限制了每个任务添加的参数数量。
3. 当投影层的参数初始化接近零时,根据一个skip-connection,将该模块就初始化为近似恒等函数,以确保微调的有效性。
Adapter的实验结果
使用公开的预训练BERT作为基础模型。Adapter微调具有高参数效率,可以生成性能强劲的紧凑模型,与完全微调相比表现相当。Adapter通过使用原始模型0.5-5%大小的参数量来微调,性能与BERT-LARGE上具有竞争力的结果相差不到1%。
1.2 Soft Prompts
早期的提示微调通过修改输入文本来控制语言模型的行为,称为硬提示(Hard Prompts)微调。这些方法很难优化,且受到最大模型输入长度的限制。下图为离散的人工设计的Prompt示例:
比如改变输入形式去询问模型:
软提示(Soft Prompts)将离散的“提示”问题转为连续的“提示”问题,通过过反向传播和梯度下降更新参数来学习Prompts,而不是人工设计Prompts。有仅对输入层进行训练,也有对所有层进行训练的类型。下面将介绍几种热门的Soft Prompts微调方法。
1.2.1 Prefix Tuning
Prefix Tuning的灵感来源是,基于Prompt Engineering的实践表明,在不改变大模型的前提下,在Prompt上下文中添加适当的条件,可以引导大模型有更加出色的表现。
Prefix Tuning的出发点,跟Prompt Tuning的是类似的,只不过它们的具体实现上有一些差异。
Prompt Tuning是在Embedding环节,往输入序列X前面加特定的Token。
而Prefix Tuning是在Transformer的Encoder和Decoder的网络中都加了一些特定的前缀。
具体来说,就是将Y=WX中的W,变成W` = [Wp; W],Y=W`X。
Prefix Tuning也保证了基座模型本身是没有变的,只是在推理的过程中,按需要在W前面拼接一些参数。
其结构如下:
只优化前缀(红色前缀块),该前缀添加到每一个Transformer Block中。
Prefix Tuning的特点
1. 冻结预训练语言模型的参数,为每个任务存储特定的连续可微的前缀,节省空间。
2. 训练间增加MLP层以达到稳定。
3. 对于不同模型构造不同的Prefix。
Prefix Tuning的实验结果
对于表格到文本任务,使用GPT-2MEDIUM和GPT-2LARGE模型。在表格到文本任务上,Prefix Tuning优于Fine-Tuning(全量微调)和Adapter-Tuning。对于摘要任务,使用BART-LARGE模型。在摘要任务上,Prefix Tuning比全量微调弱。
1.2.2 P-Tuning
其结构如下:
P-Tuning的特点
1. P-Tuning只在输入层加入可微的Virtual Token,其会自动插入到文本提示的离散Token嵌入中。
2. Virtual Token不一定作为前缀,其插入位置是可选的。
P-Tuning的实验结果
使用的是GPT系列和BERT系列的模型。P-Tuning与全参数效果相当,且在一些任务上优于全参数微调,可以显著提高GPT模型在自然语言理解方面的性能,并且BERT风格的模型也可以获得较小的增益。
1.2.3 Prompt Tuning
Prompt Tuning的出发点,是基座模型(Foundation Model)的参数不变,为每个特定任务,训练一个少量参数的小模型,在具体执行特定任务的时候按需调用。
Prompt Tuning的基本原理是在输入序列X之前,增加一些特定长度的特殊Token,以增大生成期望序列的概率。
具体来说,就是将X = [x1, x2, …, xm]变成,X` = [x`1, x`2, …, x`k; x1, x2, …, xm], Y = WX`。
根据我们在《揭密Transformer:大模型背后的硬核技术》一文中介绍的大模型背后的Transformer模型,Prompt Tuning是发生在Embedding这个环节的。
如果将大模型比做一个函数:Y=f(X),那么Prompt Tuning就是在保证函数本身不变的前提下,在X前面加上了一些特定的内容,而这些内容可以影响X生成期望中Y的概率。
其结构如下:
上图中,仅Virtual Token部分会由梯度下降法去更新参数。
Prompt Tuning的特点
1. 只在输入层加入Prompt,并且不需要加入MLP进行调整来解决难训练的问题。
2. 提出了Prompt Ensembling,即通过在同一任务上训练N个提示,也就是在同一个批次中,对同一个问题添加不同的Prompt,相当于为任务创建了N个独立的“模型”,同时仍然共享核心语言建模参数。
Prompt Tuning的实验结果
使用的是预训练的各种T5模型。在流行的SuperGLUE基准测试中,Prompt Tuning的任务性能与传统的模型调优相当,且随着模型规模的增加,差距逐渐减小。在零样本领域迁移中,Prompt Tuning可以改善泛化性能。
1.2.4 P-Tuning v2
其结构如下:
P-Tuning v2的特点
P-Tuning v2每一层的输入都加入了Tokens,允许更高的任务容量同时保持参数效率;且添加到更深层的提示对模型的预测有更直接的影响。
P-Tuning v2的实验结果
使用的是BERT系列和GLM系列模型。P-Tuning v2是一种在不同规模和任务中都可与微调相媲美的提示方法。在NLU任务中,整体上P-Tuning v2与全量微调的性能相差很小。
2 选择式方法
选择性方法对模型的现有参数进行微调,可以根据层的深度、层类型或者甚至是个别参数进行选择。
2.1 BitFit
2022年9月5日,BitFit出现,这是一种稀疏微调方法,仅修改模型的Bias(偏置项)或其中的子集。
BitFit的特点
1. 冻结大部分Transformer编码器的参数,只训练偏置项和任务特定的分类层。
2. 优化的偏置项参数包括Attention模块中计算Query、Key、Value时,计算MLP层时,计算Layernormalization层时遇到的偏置项参数。
3. 每个新任务只需要存储偏置项参数向量(占总参数数量的不到0.1%)和任务特定的最终线性分类器层。
BitFit的实验结果
使用公开可用的预训练BERTBASE、BERTLARGE和RoBERTaBA模型。BitFit微调结果不及全量参数微调,但在极少数参数可更新的情况下,远超Frozen(冻结模型参数)方式。
3 重新参数化方法
基于重新参数化的高效微调方法利用低秩表示来最小化可训练参数的数量,其中包括2021年10月到2023年3月间出现的LoRA和AdaRoLA方法。
3.1 LoRA
LoRA是跟Prompt Tuning和Prefix Tuning完全不相同的另一条技术路线。
LoRA背后有一个假设:我们现在看到的这些大语言模型,它们都是被过度参数化的。而过度参数化的大模型背后,都有一个低维的本质模型。
大白话说:大模型参数很多,但并不是所有的参数都是发挥同样作用的;大模型中有其中一部分参数,是非常重要的,是影响大模型生成结果的关键参数,这部分关键参数就是上面提到的低维的本质模型。
LoRA的基本思路,包括以下几步:
首先, 要适配特定的下游任务,要训练一个特定的模型,将Y=WX变成Y=(W+∆W)X,这里面∆W主是我们要微调得到的结果;
其次,将∆W进行低维分解∆W=AB (∆W为m * n维,A为m * r维,B为r * n维,r就是上述假设中的低维);
接下来,用特定的训练数据,训练出A和B即可得到∆W,在推理的过程中直接将∆W加到W上去,再没有额外的成本。
另外,如果要用LoRA适配不同的场景,切换也非常方便,做简单的矩阵加法即可:(W + ∆W) - ∆W + ∆W`。
该方法认为模型权重矩阵在特定微调后具有较低的本征秩,故基于秩分解的概念,将预训练模型的现有权重矩阵分成两个较小的矩阵。
LoRA的特点
1. 将矩阵乘积BA加到原模型参数矩阵W上可以避免推理延迟。
2. 可插拔的低秩分解矩阵模块,方便切换到不同的任务。
LoRA的实验结果
使用的模型是RoBERTa、DeBERTa、GPT-2、GPT-3 175B。在多个数据集上,LoRA在性能上能和全量微调相近,且在某些任务上优于全量微调。
3.2 AdaLoRA
AdaLoRA的特点
该方法基于权重矩阵的重要性而自适应调整不同模块的秩,节省计算量,可理解为LoRA的升级版。
AdaLoRA的做法是让模型学习SVD分解的近似。在损失函数中增加了惩罚项,防止矩阵P和Q偏离正交性太远,以实现稳定训练。
AdaLoRA的实验结果
使用的模型是DeBERTaV3-base 和BART-large模型。AdaLoRA的性能通常高于参数量更高的方法。其中,AdaLoRA在0.32M微调参数时,在CoLA数据集上达到了70.04的Mcc分数。
4 参数微调方法小结
以上几类参数高效微调方法,各有千秋。Adapter方法在预训练模型的层中插入可训练模块的形式简单,但增加推理延时。Soft Prompts方法避免了人工“硬提示”的局限性,却可能难收敛。
Soft Prompts方法中,Prefix Tuning率先提出可用梯度下降法优化的的Tokens,而 P-Tuning、Prompt Tuning、P-Tuning v2相继作出不同的改变,比如:
1. 加入的Tokens:P-Tuning仅限于输入层,而Prefix-Tuning在每一层都加。
2. P-Tuning和Prompt Tuning仅将连续提示插入到输入嵌入序列中,而Prefix Tuning的“软提示”添加在每一个Transformer Block中。
3. Prompt Tuning不需要额外的MLP来解决难训练的问题,P-Tuning v2移除了重参数化的编码器。
BitFit方法只更新模型内部偏置项参数所以训练参数量很微小,但整体效果比LoRA、Adapter等方法弱。LoRA方法不存在推理延时,但无法动态更新增量矩阵的秩,不过改进版AdaLoRA解决了这个问题。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段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 总结与展望
- L2.1 API接口
阶段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 其他大模型介绍
- L3.1 Agent模型框架
阶段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%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓