吴恩达DeepLearning.AI课程系列 —— 大语言模型微调

大语言模型微调有很多种类型,但是其中很重要的是指令微调。指令微调是一种特殊的语言模型微调技术,旨在提高模型理解和执行特定指令的能力。其主要目标是训练模型理解并执行各种自然语言指令。这些指令可能包括任务描述、问题或命令。通过这种方式,模型学会了更好地理解人类意图并产生相应的输出。

我们所输入的提示词其实就是指令中的一种,因此其实就是强化模型听懂人话并输出合适内容的能力。一些具体的案例就包括了将原本的预训练大模型GPT-3调整为能够正常对话的ChatGPT。

在这里插入图片描述

那对于指令微调而言,其所需要的训练数据一般由"指令-响应"对组成。例如:

  • 指令:“总结以下段落的主要观点”

  • 响应:[相应的总结]

那由于互联网这么多年来的累计,我们其实可以从大量的渠道获取到这类的信息,比如在贴吧、知乎这种我们就能够得到一问多答得回复,又或者我们利用微信、QQ等聊天工具里得私聊一问一答,也能够得到大量得数据。

在这里插入图片描述

那即便我们找不到一些合适的数据,其实我们还有一种很合适的方法就是由AI来为我们生成数据。一般来说,由于是要模拟人类的语言来生成数据,因此我们都会选择最强的模型(GPT-4o或者Claude 3.5 Sonnet) 来进行生成。

那生成的方式也不难,其实就是给出一段需要何种类型对话的介绍,然后设计一个提示词的模板,传给模型,就可以让其为该场景生成数据了。然而需要注意的是,一般我们不会在大语言模型搭建的Web界面去获取数据,因为这样过于低效。我们一般都需要通过大语言模型公司提供的接口然后设计一套自动化采集的流程来实现数据的生产。

当然设计这样一个提示词模板并通过API接口让模型能够很好的理解你的意思也是一件不那么容易的事情,但是GitHub上其实有大量的开源项目帮助我们完成,因此我们也可以在借鉴前辈的基础上完成自己定制化的模型。

在经过指令微调后模型不仅可以执行它在微调数据集中明确学习的任务,还能将这种执行指令的能力泛化到新的、未见过的任务中。这种泛化能力使得模型在面对各种不同类型的指令时都能给出恰当的回应,大大提高了模型的实用性和灵活性。

在这里插入图片描述

微调这个任务总体分为三大步骤:

  • 数据准备:将收集到的数据进行处理,使其能够符合模型微调训练的格式与大小。

  • 训练:调整参数使得训练出来的模型效果更好。

  • 评估:评测整体模型的能力,确保微调后的模型能够满足需求。

在后面的课程里也将深入的对这部分内容逐一讲解。

在这里插入图片描述

Data Preparation

对于模型训练而言,高质量的数据是至关重要的。想象一下,如果我们用垃圾食品喂养一个孩子,他能健康成长吗?显然不能。同理,AI模型也需要"优质食材"来茁壮成长。那么,什么是AI的"优质食材"呢?

首先,是高质量的信息。就像我们追求食品的新鲜度一样,AI需要准确、可靠、有深度的信息。陈旧的数据、错误的知识,就像变质的食物,只会让AI"消化不良"。其次,多样性至关重要。想象一下,如果一个人从小到大只吃白米饭,营养会全面吗?显然不会。AI也一样,它需要"五谷杂粮"——多样化的主题、不同的观点、各种文化背景的数据,才能全面发展"智力"。

再者,真实性不可或缺。就像天然食材比人造食品更有营养,来自真实世界的数据比人工生成的数据更有价值。这些真实数据包含了语言的细微差别和现实世界的复杂性,能让AI更好地理解和适应我们的世界。最后,数量也很重要。就像人需要定量的食物摄入才能维持健康,AI也需要足够多的数据来学习和成长。数据量不足,就像营养不良,会限制AI的"体格发展"。相反,如果用"垃圾数据"喂养AI会怎样呢?低质量、单一、虚假或稀少的数据,就像垃圾食品,可能会导致AI"发育不良"。它可能会产生偏见,无法处理复杂任务,或在现实应用中表现糟糕。

在了解了什么样的数据是好的之后,我们就可以来看看我们具体如何来对这些数据进行处理。我们以做菜的案例来举例。假如我们要做一顿AI模型大餐,首先,我们需要收集原材料,也就是指令-响应对。想象一下,这就像是在菜市场精心挑选新鲜的蔬菜和肉类。每一对指令和响应都是独特的食材,它们包含了丰富的信息和知识。有些可能来自真实的人类对话,有些则可能是专家精心设计的问答集。这个步骤决定了我们"菜品"的基本风味,所以选择优质、多样的"食材"至关重要。

接下来,我们要把这些食材组合在一起,就像把各种配料放入锅中。这个步骤叫做连接对,有时还需要加入一些"调味料"——也就是提示模板。这就像是在烹饪时加入独特的香料,让整道菜的口感更加丰富。提示模板可以帮助AI模型更好地理解和处理信息,就像香料能让食物的味道更加突出一样。那在实际操作中就是除了input和ouput以外,还额外添加一个名为template的信息来告诉模型一些背景的知识,从而使其更好的进行理解。

第三步是最技术性的部分:分词、填充和截断。这个过程就像是把食材切成大小均匀的块,确保它们能被均匀烹调。在AI的世界里,这意味着将文本转化为模型可以理解的格式。有些句子可能需要"切短"(截断),而有些则需要"填充"以达到统一长度。这个步骤确保了我们的"数据大餐"每一口都恰到好处。

最后一步是将处理好的数据分成训练集和测试集。这就像是将做好的菜分成两份:一份用来品尝和调整口味(训练集),另一份用来给美食评论家最终评判(测试集)。训练集帮助模型学习和改进,而测试集则用来评估模型的表现,确保它不仅能应对见过的情况,还能处理新的挑战。

当我们完成这些步骤后我们就可以获取到直接能够用于训练的数据集了!

Training Process

在准备好数据集后,我们就可以把数据集放到神经网络中进行训练了。那训练大语言模型其实和训练传统的神经网络区别不是很大,也就是添加训练数据集,并用input的问题来询问模型,并让模型来回答问题。然后我们就可以利用模型的回复与实际数据集中output的差距来计算出Loss的值。然后通过反向传播的方式更新参数。

我们也可以从代码的角度来看看这个过程

那对于大语言模型的训练参数而言,有几个重要的超参数需要重点考虑:

  1. 学习率(Learning rate):学习率是最重要的超参数之一。它决定了每次参数更新的步长大小。如果学习率太大,模型可能会错过最优解;如果太小,训练可能会非常缓慢。选择合适的学习率对模型的收敛速度和最终性能至关重要。

  2. 学习率调度器(Learning rate scheduler):这是一种动态调整学习率的机制。随着训练的进行,学习率调度器可以根据预设的规则或模型的表现来调整学习率。常见的策略包括:

  • 步进式衰减:在特定的epoch后降低学习率

  • 指数衰减:学习率按指数函数逐渐减小

  • 余弦退火:学习率按余弦函数周期性变化

  1. 优化器超参数(Optimizer hyperparameters):不同的优化算法(如SGD、Adam、RMSprop等)都有其特定的超参数。例如:
  • 动量(Momentum):用于SGD优化器,帮助加速收敛并减少振荡

  • Beta1和Beta2:用于Adam优化器,控制一阶矩估计和二阶矩估计的指数衰减率

  • Weight decay:一种正则化技术,用于防止过拟合

这些超参数的调整对模型的训练过程和最终性能有着重要影响。通常,研究人员会使用网格搜索、随机搜索或更高级的超参数优化算法(如贝叶斯优化)来寻找最佳的超参数组合。

在大语言模型(LLM)的训练中,由于模型规模庞大,计算资源需求高,超参数的选择变得更加关键。合适的超参数设置可以显著提高训练效率,缩短收敛时间,并最终提升模型性能。

此外,对于LLM的微调过程,这些超参数的选择可能需要根据具体任务和数据集进行调整,以达到最佳的迁移学习效果。因此,理解和掌握这些超参数的作用,对于成功训练和优化大语言模型至关重要。

Evaluation & iteration

那在训练完成以后呢,我们其实就还需要对训练好的模型进行评估。最常见的评估方式其实就包括以下三种:

  1. 人工评估(Human Evaluation):这是最可靠但也最耗时和昂贵的方法。人工评估通常涉及专家或训练有素的评估者对模型输出进行直接判断。评估者可能会根据各种标准(如准确性、流畅性、相关性等)对模型的回应进行评分。尽管这种方法可能存在主观性,但它能捕捉到机器难以量化的微妙之处,如语言的恰当性或创造性。

  2. 测试套件(Test Suites):测试套件是预先设计的一系列测试用例,用于评估模型在各种任务和场景中的表现。这些测试通常包括:

    测试套件可以自动化执行,提供客观、可重复的评估结果。然而,设计全面而有代表性的测试套件本身就是一项挑战,假如大语言模型在训练过程中就已经把题目放进去了,那它在该测试上的成绩肯定相对而言比较高。因此也经常会出现榜首的模型能力反而没有后面好的情况发生。

  • 高质量的测试数据,确保评估的准确性

  • 涵盖广泛的场景,测试模型的泛化能力

  • 包含模型在训练中未见过的数据,评估其处理新情况的能力

  1. Elo排名(Elo Rankings):Elo排名系统最初用于国际象棋评级,现在被应用于AI模型的比较。我们经常听说的大语言模型斗兽场就是此类型。在这个系统中:

    Elo排名的优势在于它可以持续更新,随着新模型的加入自动调整排名。然而,它主要反映模型之间的相对表现,可能无法完全反映模型在特定任务上的绝对能力。

  • 模型被视为"选手",通过彼此之间的"对战"来确定排名

  • 每次"对战"后,模型的排名会根据结果和对手的强度进行调整

  • 这种方法允许对多个模型进行相对比较,而不需要绝对的评分标准

在实践中,这些方法通常被结合使用,以获得对模型性能的全面评估。研究人员和开发者需要根据具体需求和资源来选择合适的评估方法组合。

在这里插入图片描述

除此之外,与Test Suites类似,LLM Benchmarks也是评估大语言模型性能的综合测试套件。它包含多种评估方法,旨在全面衡量模型的各项能力。Test Suites和Benchmarks虽然都用于评估模型性能,但有着明显的区别。Test Suites通常是更为全面和细致的测试集合,针对特定模型或应用定制,包含大量测试用例以覆盖各种场景,用于持续验证模型功能和诊断具体问题。而Benchmarks则是高度标准化的评估框架,专注于代表性任务,提供简洁的综合分数,便于不同模型间的直接比较。Benchmarks通常是公开的、行业通用的,更新频率较低以保持一致性,而Test Suites可能是内部保密的,会随需求变化频繁更新。在实践中,两者常结合使用,以全面评估模型性能并进行有效比较。

在Benchmark中,ARC测试模型回答小学水平问题的能力;HellaSwag评估模型的常识推理;MMLU则涵盖了从基础数学到美国历史、计算机科学和法律等多个领域的知识测试。特别值得注意的是TruthfulQA,它检测模型对网上常见虚假信息的抵抗力。这些测试共同构成了一个全面的评估体系,能够从多个角度对比不同LLM的性能,如图中所示的Llama-2、FreeWilly2和FreeWilly1的对比结果。这种多维度的评估方法有助于研究人员和开发者更全面地了解和改进模型性能。

通过上面的各种测试,我们可能知道了模型大概的评分如何。但是测评本身不是目的,测评真正的目的是帮我们找到大语言模型中存在的问题,从而能够在后续的训练中进一步优化我们的模型。

那在分析问题的过程中,我们首先需要深入了解基础模型的行为特征是很重要的。这有助于判断问题是源于基础模型还是微调过程。假如是基础模型出现问题,那我们可能要回到微调前预训练的步骤先解决,再去考虑进行下一步的微调。

假如发现预训练模型没啥问题,那我们可能要考虑的就是是不是数据层面出了问题。比如说我们发现模型有时候可能会写错别字,那我们就需要看看是不是数据里面有很严重的拼写错误。又比如说可能输出过长以及内容重复,那我们也需要看看数据集中是否存在问题。然后我们解决这部分的问题后重新进行训练。

这种错误分析方法强调了系统性地识别和解决模型输出中的问题的重要性。通过仔细分析这些错误,研究人员和开发者可以更有针对性地改进模型,无论是通过调整训练数据、优化模型参数,还是改进后处理步骤。这个过程不仅有助于提高模型的整体性能,还能帮助我们更深入地理解模型的行为和局限性。

后续:一些在开始训练前的思考…

在实际项目中,微调的任务可能像以下的步骤这样展开:

  1. 确定你的任务:这一步需要你深入思考并明确定义模型要完成的具体任务。例如,如果你在开发一个问答系统,你需要决定它是开放域还是针对特定领域的。你要考虑输入会是什么样的,期望的输出格式如何,以及如何定义任务的成功标准。在这个阶段,仔细考虑任务的各种边界条件和可能遇到的特殊情况也很重要,这将帮助你在后续步骤中做出更好的决策。

  2. 收集与任务相关的输入/输出数据:一旦明确了任务,下一步就是收集相关的数据。这可能涉及多个来源,包括公开的数据集、公司内部的历史数据、专家标注的数据,甚至是通过用户交互收集的实时数据。关键是要确保你的数据集具有足够的多样性和代表性,能够覆盖任务可能遇到的各种情况。高质量、全面的数据集是成功训练模型的基础。

  3. 如果数据不足,生成数据:在很多情况下,现有的数据可能不足以训练出理想的模型。这时,你可以考虑多种方法来扩充数据集。数据增强技术如同义词替换或回译可以创造更多的变体。利用现有的大语言模型生成额外的样本也是一个选择。你还可以设计规则来自动生成数据,或者组织众包来创建更多的人工标注数据。无论采用哪种方法,都要注意保持生成数据的质量和真实性,确保它们能真正帮助提升模型性能。

  4. 微调一个小型模型:从一个相对小的模型开始是个明智的选择,比如参数在400M到1B范围内的模型。选择一个合适的预训练模型作为起点,然后决定使用全参数微调还是像LoRA这样的高效微调方法。设置合适的学习率、批次大小等超参数也很重要。在这个阶段,进行多次实验,比较不同设置下的效果,能帮助你更好地理解模型的行为和性能边界。

  5. 调整提供给模型的数据量:这一步涉及进行一系列的数据规模实验。你可以从一个小的数据集开始,然后逐步增加数据量,观察模型性能的变化。这将帮助你理解数据量和模型性能之间的关系,找到最佳的平衡点。同时,也要考虑数据质量和数量之间的权衡,有时少量高质量的数据可能比大量低质量的数据更有价值。

  6. 评估你的LLM:全面评估模型性能是crucial。使用各种评估指标,如准确率、F1分数、BLEU等,根据任务的性质选择合适的指标。对于生成任务,人工评估可能更为重要。深入分析模型在不同类型输入上的表现,进行详细的错误分析,找出常见问题和失败模式。这些洞察将指导你后续的优化工作。

  7. 收集更多数据来改进:基于评估结果,有针对性地扩充数据集。重点收集模型表现欠佳的案例,增加难例和边界条件的样本。考虑引入一些对抗样本来提高模型的鲁棒性。持续更新数据集以反映最新的使用场景也很重要,这能确保模型与实际应用保持同步。

  8. 增加任务复杂度:随着模型性能的提升,可以逐步提高任务的难度。这可能包括引入需要多步推理的问题,或者要求模型同时处理多个相关任务。你可以增加输入的长度或复杂性,要求更高质量或更详细的输出。加入一些约束条件或额外要求,如控制输出的风格,也是提高任务复杂度的好方法。

  9. 增加模型大小以提升性能:如果小模型的性能遇到瓶颈,可以考虑使用更大的模型。评估更大模型带来的性能提升,同时权衡增加的计算资源成本。可以探索模型压缩技术如知识蒸馏,或者考虑优化模型架构,比如使用混合专家模型。选择合适的模型大小需要平衡性能、效率和资源限制。

在整个过程中,保持迭代和实验的心态至关重要。每一步都可能需要多次尝试和调整。同时,要持续关注模型在实际应用中的表现,及时收集用户反馈,不断优化模型和整个系统。这是一个循环往复的过程,随着你对任务和模型的理解深入,你可能需要回到前面的步骤进行调整。通过这种系统化的方法,你可以逐步提升模型性能,最终达到预期的效果。

在这里插入图片描述

除此之外,在大语言模型的应用中,任务复杂性与模型规模的匹配至关重要。任务可以大致分为提取类和扩展类:提取类任务如关键词识别、主题分类等,通常只需要较小的模型;而扩展类任务如对话生成、代码编写等,则往往需要更大的模型来处理。这是因为扩展类任务需要生成更多的原创内容,对模型的能力要求更高。此外,任务的组合也会影响所需的模型规模。当模型需要同时处理多种任务或执行更通用、更灵活的操作时,通常需要更大的模型来支持。

在这里插入图片描述

那对于模型微调所需要的资源,在这门课程中也有提及。

另外随着技术的发展,越来越多更加轻量化微调的方式也被推出来。PEFT(Parameter-Efficient Finetuning)是一系列旨在高效调整大型语言模型的技术,包括加法方法、适配器、软提示、选择性调整和基于重参数化的方法。这些技术通过不同的方式(如增加少量参数、调整特定层或使用提示)来优化模型性能,同时最小化计算资源的使用。这些方法往往有重叠和交叉,反映了它们在实践中的灵活应用和持续创新,目标是在保持模型质量的同时提高微调过程的效率。

在这里插入图片描述

PEFT中,其中比较最出名的就是LoRA(Low-Rank Adaptation of LLMs)。LoRA是一种高效的大型语言模型微调技术,它通过在部分层中引入少量可训练的低秩矩阵来适应新任务,而不是调整全部模型参数。这种方法大大减少了可训练参数数量和GPU内存使用,同时保持了接近全参数微调的性能和相同的推理速度,使得模型能够快速、高效地适应各种新任务,而无需每次都调整所有参数。

如何学习大模型 AI ?

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

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

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

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

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值