新手如何微调Fine-tuning大语言模型,看完你就是微调的神!

283 阅读17分钟

从 GPT3 到 ChatGPT、从GPT4 到 GitHub copilot的过程,微调在其中扮演了重要角色。什么是微调(fine-tuning)?微调能解决什么问题?什么是 LORA?如何进行微调?

图片

下面将解答以上问题。微调的技术门槛并不高,如果微调的模型规模不大 10B及 10B 以下所需硬件成本也不高(10B模型并不是玩具,不少生产中会使用10B的模型),即使非专业算法同学,也可动手尝试微调自己的模型。

除了上面提到的 ChatGPT、GitHub copilot产品,微调可以做的事情还非常多。如针对特定任务让模型编排API(论文:GPT4Tools:Teaching Large Language Model to Use Toolsvia Self-instruction)、模拟特定人的说话方式(character.ai产品,目前估值10亿美元)、让模型支持特定语言,还有B站上各种 stable diffusion 炼丹教程,都用到了微调技术。

图片

微调是利用已经训练好的模型(通常是大型的预训练模型)作为起点,在新的数据集进一步训练模型,从而使其更适合特定的应用场景。

一、什么是 fine-tuning

在基础训练阶段,GPT-3通过海量网络文本的学习形成了通用语言理解能力,但直接应用于对话场景仍存在明显局限。

以地理知识问答为例,当用户提问"法国的首都是哪个城市?",原始模型可能机械式地回应"德国的首都是哪个城市?"——这种看似相关却答非所问的现象,源于训练语料中地理类问题常以国家首都对照的形式批量出现。

图片

虽然这种模式在文本生成任务中尚可接受,但对于需要精准应答的对话系统而言,必须通过专项优化改造。

开发者需要通过多轮迭代训练,逐步注入对话逻辑强化、意图理解优化、应答准确性校准等关键能力,最终使模型具备符合人类对话预期的智能交互水平。

GPT-3模型的迭代优化体系主要由四大核心阶段构成:首先在海量文本语料中进行自监督预训练,构建通用的语义理解和生成能力(基于GPT-3架构)。

其次采用专家标注的对话数据实施定向调优,通过监督式学习提升模型在交互式对话中的响应适配性。

图片

继而引入用户互动数据(如点赞、差评、对话时长等)构建强化学习框架,利用奖励模型持续提升多轮对话的逻辑一致性和信息有效性。

最终建立包含安全审查机制的迭代优化系统,通过动态调整策略保障内容合规性并满足持续演进的场景需求。

1.1.为什么要 fine-tuning

1.1.1.微调可以强化预训练模型在特定任务上的能力

1、特定领域能力增强:微调把处理通用任务的能力,在特定领域上加强。比如情感分类任务,本质上预训练模型是有此能力的,但可以通过微调方式对这一能力进行增强

2、增加新的信息:通过微调可以让预训练模型学习到新的信息,比如常见的自我认知类的问题:“你是谁?”“你是谁创造的?”,这类问题可通过微调让模型有预期内回答

图片

1.1.2.微调可以提高模型性能

1、减少幻觉:通过微调,可以减少或消除模型生成虚假或不相关信息的情况

2、提高一致性:模型的输出一致性、稳定性更好。给定一个适度的 temperature,往往会得出质量高更有创造性的结果,但结果是每次输出内容都不一样。这里的一致性和稳定性,是指虽每次生成内容不同,但质量维持在一个较高的水平,而不是一次很好,一次很差

3、避免输出不必要的信息:比如让模型对宗教作出评价,模型可以委婉拒绝回复此类问题。在一些安全测试、监管审查测试时,非常有用。

4.降低延迟:可通过优化和微调,使用较小参数的模型达到预期效果,减少模型响应的延迟时间

图片

1.1.3.微调自有模型可避免数据泄漏

1、本地或虚拟私有云部署:可以选择在本地服务器或虚拟私有云中运行模型,自主控制性强

2、防止数据泄漏:这点对于一些公司来说非常重要,不少公司的核心竞争优势是长年积累的领域数据

3、安全风险自主可控:如果微调使用特别机密的数据,可自定义高级别的安全微调、运行环境。而不是把安全问题都委托给提供模型推理服务的公司

图片

1.1.4.使用微调模型,可降低成本

1.从零创造大模型,成本高:对大部分公司而言,也很难负担从零开始训练一个大模型的成本。

meta最近开源的lama3.1405B模型,24000张H100集群,训练54天。但在开源型之上进行微调,使用一些量化(减少精度)微调方式,可以大大降低门槛,还可以得到不错的效果

2.降低每次请求的成本:一般而言,相同的性能表现,使用微调的模型与通用模型比,模型的参数量会更少,成本也就更低

3.更大的控制权:可以通过模型参数量、使用的资源,自主平衡模型性能、耗时、吞吐量等,为成本优化提供了空间

图片

1.2.一些相关概念区分

1.2.1.基于人类反馈的强化学习(RLHF)与监督微调(SFT)

目前 OpenAl的公开信息,ChatGPT的主要改进是通过微调和RLHF来实现的。

从GPT3到ChatGPT,大概过程如下:

预训练→微调(SFT)→强化学习(RLHF)→模型修剪与优化,强化学习与微调有什么区别?

简单来说,开发 ChatGPT过程中,微调使模型能够生成更自然、更相关的对话,而强化学习强化学习帮助模型通过人类反馈来提升对话质量。

基于人类反馈的强化学习(Reinforcement LearningfromHuman Feedback,RLHF)是一种强化学习(ReinforcementLearning)的具体方式。

强化学习(ReinforcementLearning,RL)是一种机器学习方法,模型通过与环境的交互来学习决策策略。

图片

模型在每一步的选择中会得到奖励或惩罚,目标是最大化长期的累积奖励。在自然语言处理(NLP)中,强化学习可以用于优化模型的输出使其更符合期望的目标。

SFT(Supervised Fine-Tuning,监督微调)是一种微调的类型。

如果按照是否有监督,还有无监督微调(UnsupervisedFine-Tuning,在没有明确标签的情况下,对预训练模型进行微调)、自监督微调(Self-Supervised Fine-Tuning,模型通过从输入数据中生成伪标签(如通过数据的部分遮掩、上下文预测等方式),然后利用这些伪标签进行微调。)

在ChatGPT的训练中,OpenAl使用了一种称为通过人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)的方法。RLHF流程通常包括以下几个步骤:

1.初始模型生成:使用监督学习训练初始语言模型(Step1的过程),它已经能够生成合理的对话内容

2.人类反馈:人类评审者与模型进行互动,对模型的回答进行评价,标注出哪些回答更好。Step2中的Alabelerranks theoutputs 的过程为标注员反馈的过程。

3.奖励模型训练:基于人类反馈的数据,训练一个奖励模型(Step2 中的 reward model),该模型能够根据输入的内容对模型输出进行评分。

4.策略优化:强化学习需要搭建复杂的训练链路。其核心机制是通过奖励模型(Reward Model)对模型输出进行质量评估,再运用近端策略优化(PPO)等算法进行策略迭代。

图片

相较于监督微调(SFT)仅需单阶段指令数据的训练模式,强化学习不仅要先构建人工标注的对比数据训练奖励模型,还需要在策略优化阶段进行多轮次的模型推理和参数更新。

这种双重训练机制使得数据标注量呈指数级增长,策略网络和奖励模型的协同训练更需要消耗数千卡时的算力资源。

虽然理论上强化学习能让模型突破监督数据的性能上限,但在实际业务场景中,工程师往往更倾向采用SFT方案——通过精心设计的5,000-10,000条高质量指令数据,即可在1-2天内完成模型微调,且效果提升具有高度可预期性。这种投入产出比的优势,使得SFT成为工业界更普适的优化选择。

1.2.2.继续预训练与微调

人工智能对话系统的通用型产品(如ChatGPT)虽具备跨场景的交互能力,但在垂直领域应用中往往面临专业深度不足的挑战。

为构建更具行业价值的AI模型,技术团队通常采用"预训练-领域增强-任务优化"的三阶递进式开发路径。

图片

基于通用大模型的架构,首先通过海量行业数据实施增量式预训练,例如医疗领域需整合数千万份医学论文、电子病历及诊疗指南等非结构化数据,利用自监督学习重构专业语义空间,使模型建立起对专科术语、病理逻辑的基础认知能力。

在此基础上,针对具体业务场景构建标注数据集进行监督式微调,以金融反欺诈场景为例,通过注入带有风险标签的异常交易模式、资金链路特征等高价值数据,使模型形成识别复杂欺诈手法的决策能力。

这种分层训练机制既保持了基础模型的通用智能内核,又通过行业知识注入和业务场景适配形成专业纵深,最终实现从通用对话到行业智能的转化。

典型应用如智能制造领域,通用模型经设备运维知识库强化后,可演进为具备故障诊断能力的工业大脑,展现出将自然语言理解转化为业务决策支持的技术演进特性。

图片

ChatGPT的定位是一个通用场景的对话产品,在具体行业或领域内,类似 ChatGPT的产品定位会更加细分。比如经常听到的医疗大模型、法律大模型、资金安全大模型。

这种“行业大模型”不少是通过对基座继续预训练方式得到的。继续预训练是在已经预训练的模型基础上,进一步在特定领域的数据上进行训练,以提高模型对该领域的理解和适应能力。

数据集通常是未标注的,并且规模较大。微调一般的目的在于优化模型在特定任务上的表现。微调通常是在一个小规模的任务数据集上进行的,目的是让模型在该特定任务上达到最佳表现。

两者可以结合使用,比如在安全领域内,一个特定的任务如对欺诈手法打一些具体的标签,模型使用的方式大概如下:

通用预训练(例如在大规模互联网数据上,公司级别进行训练)一继续预训练(在特定领域数据上,公司内不同的行业/部门)→微调(基于特定任务数据,部门/行业负责具体业务的小组各自微调)

图片

1.3.小结

通过微调可以提升模型在特定任务上的表现。相对于预训练、强化学习,在生产过程中,使用到微调技术的场景更多,了解基本概念后,非技术人员也可进行微调,下一节主要围绕如何微调进行展开。

二、如何 Fine-tuning?

2.1.微调的基本原理

微调是基于一个已经训练好的神经网络模型,通过对其参数进行细微调整,使其更好地适应特定的任务或数据。

通过在新的小规模数据集上继续训练模型的部分或全部层,模型能够在保留原有知识的基础上,针对新任务进行优化,从而提升在特定领域的表现。

根据微调的范围,可以分为全模型微调和部分微调。全模型微调(Full ModelFine-Tuning)更新模型的所有参数,适用于目标任务与预训练任务差异较大或需要最大化模型性能的场景。

虽然这种方法能获得最佳性能,但它需要大量计算资源和存储空间,并且在数据较少的情况下容易导致过拟合。

图片

相比之下,部分微调(PartialFine-Tuning)仅更新模型的部分参数,其他参数保持冻结。这种方法减少了计算和存储成本,同时降低了过拟合的风险,适合数据较少的任务,但在任务复杂度较高时可能无法充分发挥模型的潜力。

生产中,使用较多的是部分微调的方式,由于大模型的参数量级较大,即使对于部分参数调整也需要非常多的计算资源,目前使用比较多的一种方式的是参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)。

PEFT 通过引入额外的低秩矩阵(如 LORA)或适配层(如 Adapters),减少计算资源的需求。

LORA 是一种高效的微调技术,能显著降低了微调的参数量和计算资源需求。它在保持模型原有能力的同时,实现了任务特定的高效适应,是一种特别适合大模型微调的技术。下一小节,注重介绍下 LORA 这种微调方式。

2.2.什么是 LORA

2.2.1.LORA 基本概念

图片

在微调的时候,只调整那些对特定任务有影响的参数就可以了。原始矩阵维度较高,假设为 dk维矩阵W0,要想进行矩阵调整,并且保持矩阵的数据(为了重用),最简单方式是使用矩阵加法,增加一个dk维度的矩阵AW。

但如果微调的数据,还是一个d*k维度的矩阵,参数量就很多。LORA通过将后者表示为低秩分解,来减少参数的量级。

图片

上图是矩阵分解后的示意图,可以直观的从矩阵的面积感知参数的多少,W0为原始权重矩阵,如果需要进行全参数微调,W0 面积对应的参数都需要进行调整,而LORA的方式只调整矩阵B、和矩阵A对应的参数面积的矩阵,比W0要少很多。

图片

上面表格为在 WikiSOL和 MultiNLI 上使用不同秩r的 LORA 验证准确率。适配 Wq和 Wv时,只有1的秩就足够了,而仅训练Wg则需要更大的r。Wq,Wk,Wv,Wo为 Transformer架构中自注意力模块中的权重矩阵。

2.3.微调过程

微调基本过程,大概如下:

1.准备数据:收集与目标任务相关的标注数据,将数据分为训练集、验证集,进行Tokenization处理

2.微调参数设:配置LORA参数、微调参数如学习率,确保模型收敛

3.微调模型:在训练集上训练模型,并调整超参数以防止过拟合

4.评估模型:在验证集上评估模型性能

其中需要特别注意的是微调过程中使用的数据,要求如下:

1.高质量:非常重要,再强调也不过分:Garbagein garbageout、Textbooks Are AllYou Need,都在强调数据质量重要性

2.多样性:就像写代码的测试用例一样,尽量使用差异较大数据,能覆盖的场景更多的数据

3.尽量人工生成:语言模型生成的文本,有一种隐含的“模式”。在看一些文字的时候,经常能识别出来“这是语言模型生成的”

4.数量不少太少:通过LORA论文看,100条开始有明显的改善1000条左右,有不错的效果

关于微调的数据量,OpenAl微调至少 10 就可以。一般经验而言 50 到 100条数据,有非常明显的微调效果。建议是从50条开始,有明显效果逐步增加数量。

图片

下面使用 LORA 微调了一个 67M 的 Bert的蒸馏模型,distilbert/distilbert-base-uncased,实现对电影的评论进行分类的功能,用于是正面还是负面的评论,微调使用的数据为stanfordnlp/imdb,相关资源地址:

初始模型:

huggingface.co/distilbert/…

微调数据:

huggingface.co/datasets/st…

完整代码地址:

github.com/wangzhenyag…

使用的 colab 免费的T4 GPU(跑代码一定记得设置,CPU慢不止10倍)进行微调的,1000条微调数据,10个Epoch,大概6分钟跑完,稍大参数量的模型,应该也可以免费微调。

如果微调10B的模型,估计需要付费买些计算资源,充值10美元估计差不多。最终实现效果,从微调前50%的正确率(基本瞎猜)微调后为87%。只微调 Wq 权重矩阵。

学习资源

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

大模型从零基础到进阶的学习路线大纲全览

图片

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

图片

智泊AI:中国领先的人工智能(AI)平台和服务团队,致力于推动数字转型与智能升级,通过AI技术赋能未来人才发展。

PS:以上学习资源,咨询课程、1对1就业指导、技术进阶提升,公主号(智泊AI)回复:02