导语
大语言模型(下文用LLM缩写指代)是当下科技圈名副其实的当红炸子鸡。自从OpenAI平地惊雷般的推出了ChatGPT,这项振奋人心的前沿技术终于向世人揭开了它神秘的面纱。OpenAI的成功更多是来自商业上,当然不可否认它同Deepmind在技术上的路线之争同样十分精彩,OpenAI如同当年的波尔证明了“上帝不掷骰子”,取得了路线之争的胜利之后,在大模型产品商业化的路上从此一骑绝尘。正确的方向被找到之后,各种XxxGPT也竞相登场,虽然从能力上鲜有能够匹敌ChatGPT,但确实为此类应用的普及起到了推波助澜的作用,尤其是对国内的普通小白用户来说。自此,商业化完成度较高的大模型应用成功触及到普通消费者的生活,它的出现极大的提升了某些工作领域的生产效率。之后开源大模型的出现,更是点燃了广大IT从业者对这项技术的热情,让普通人也能有机会部署运行本地大模型。最新的PEFT等技术,让训练大模型成了普通开发者也能参与的游戏,开启了全民大炼钢铁的新纪元。
现在各方势力因为各自的利益将LLMs捧到了一个风口浪尖。针对AI到底是机遇还是灾难的思辨也甚嚣尘上。哈爸觉得AI的发展还远远没达到需要担心失控的程度,而大模型也没有外界描述的那么无所不能。同时我也坚信它终将会进化成所有人都需要掌握的新世代生产工具。如果想要使用、驾驭它,首先就要降格它的神性,要打破外界给予它的外在包装,抽丝剥茧,抓住问题的本质。笔者前段时间基于公开的论文方法以多个开源的大语言模型为基座,实践了如何从零开始微调自己的领域模型。过程中踩了很多坑,也有一些个人的思考,遂计划把之前的工作总结成系列文章并开源训练代码,希望能够深入浅出的给读者展示如何一步步训练自己的专属模型,愿与同好交流学习。
Glossary
本文中将出现的关键词汇
-
LLM
-
PEFT
-
无/有/自监督学习
-
Rewarding Model
-
强化学习
什么是大语言模型
大语言模型是一种基于人工智能的自然语言处理技术,它具有庞大的语言知识和学习能力,可以生成自然语言文本、回答问题、完成任务等。这些模型通常使用深度学习技术,特别是递归神经网络(RNN)、卷积神经网络(CNN)或变换器架构(如GPT、BERT等)等。
大语言模型之所以称为“大”,是因为它们具有巨大的参数数量,通常以数亿到数万亿的参数为基础构建。这些参数用来存储语言模型的知识,包括语法、语义、常识和文化背景等。这些模型在大规模文本数据上进行预训练,以学习和理解语言的模式和特征。
一旦经过预训练,大语言模型可以用于多种自然语言处理任务,包括文本生成、文本分类、命名实体识别、机器翻译、问答系统等。它们还可以用于生成自然语言文本,如文章、新闻、散文、对话等。
大语言模型的原理
大语言模型本质上还是一个机器学习的模型,那么它必然遵守机器学习解决问题的范式。大家可以再进一步阅读之前,先问自己几个问题,
-
它的产生是解决什么实际问题
-
用什么方法解决上述实际问题
-
模型的架构
-
训练数据集
-
优化算法(目标函数)
-
损失函数
-
如何评估模型效果
-
如果部署推理服务
在正式拆解LLM之前,让我们先用一个非常经典的例子熟悉下上面的范式。
“Hello Logistic Regression”
A. 现实中的具体问题
我们有一组包含不同房屋的数据,每个房屋都有一些特征和相应的价格。能否基于这些特征来预测新房屋的价格?
B. 问题建模
基于上述问题的复杂程度,选择使用逻辑回归模型去抽象它是较为合适的。逻辑回归是一种广义线性模型,它通过学习特征与房屋价格之间的关系来进行预测。假设我们选取的有用特征为面积(area)和房龄(age),所以实际的问题就可以转换成下面这个数学问题,
C. 损失函数
通过将现实问题数学化,我们能够预测特定输入条件下的房价。模型的预测与实际历史房价之间的差异被称为误差,通常用损失函数来度量。在这个案例中,我们选择使用经典的L2范数作为损失函数来衡量模型预测与真实值之间的误差。这一方法帮助我们精确地了解模型的性能,并不断改进我们的房价预测能力。
D. 优化目标
在这个实际问题中,我们的优化目标是通过训练获得一组权重参数,以使损失函数最小化。
相信通过这个简单的例子,大家应该已经对这个范式有比较直观的感受。那么,让我们一起用这个工具来梳理大语言模型的脉络,让它变的不再神秘。
“Hello LLM”
LLM的流派和家族谱系比较多,为避免产生歧义,下文中具体以OpenAI推出的GPT-3为例。
A. 现实中的具体问题
大语言模型通过理解和生成自然语言文本,解决了多领域的现实问题,包括自然语言处理、数据处理、自动化任务等。
B. 问题建模
大语言模型的模型建模是基于语言模型。它们通过学习文本数据中的单词、短语和句子之间的关系来理解语言。这些模型被训练成能够预测下一个单词是什么,基于前面的上下文。通过大规模的文本数据集,它们学习了语法、语义、语境和常见短语的使用方式。这种训练允许大语言模型在接收到输入时能够生成自然而流畅的文本,或者理解输入的文本并产生相关的响应。
因此,大语言模型的模型建模可以被视为在语言模型的基础上进行扩展和优化,以实现各种自然语言处理任务,包括文本生成、机器翻译、情感分析、问题回答等。这些模型的性能取决于它们的规模、训练数据的多样性以及训练方法的精细调整,以便更好地模拟和理解人类语言的复杂性。
C. 损失函数
在GPT-3的训练中,损失函数通常是基于语言模型的最大似然估计(Maximum Likelihood Estimation,MLE)。MLE的目标是最大化给定输入文本的条件概率,也就是模型预测下一个词语或标记的概率,使其尽可能接近实际数据中的下一个词语或标记。
具体来说,GPT-3使用了一个概率分布来表示在给定上下文的条件下,下一个词语的可能性,然后通过最大化训练数据中观察到的实际下一个词语的似然概率来训练模型。损失函数的目标是最小化负对数似然(Negative Log-Likelihood)或交叉熵损失,以使模型生成更接近真实文本的输出。
D. 优化目标
GPT-3的训练过程采用了自监督学习(self-supervised learning)的方法,其优化目标是最大化给定输入文本的条件概率分布。具体来说,GPT-3的目标是最大化给定上下文文本的条件下,下一个词语(或标记)的似然概率。
在自监督学习中,GPT-3使用了一个遮蔽语言模型(masked language model)的设置,其中一些词语或标记在训练数据中被遮蔽,而模型的任务是预测这些被遮蔽的词语。这种自监督学习任务通过最大化预测正确词语的似然概率来进行训练,即最大化正确的预测词语的条件概率。
具体来说,GPT-3使用了负对数似然(Negative Log-Likelihood)损失函数来量化模型的性能。这个损失函数的目标是最小化模型的预测与真实数据中的词语或标记之间的差距,以使模型能够生成更接近真实数据的文本序列。
大规模语言模型构建流程
根据 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 大会上披露的信息,OpenAI 构建大规模语言模型的流程如下图所示,分为四个主要阶段,包括预训练、有监督微调、奖励建模和强化学习。这四个阶段分别要使用不同规模的数据集、不同类型的算法,以生成不同种类的模型,因此需要大不相同的资源支持。
预训练
在预训练阶段,大型语言模型需要使用海量训练数据,包括互联网上的各种来源,如网页、维基百科、书籍、GitHub、论文、问答网站等,以构建一个庞大的语言模型,其中包含了数千亿甚至数万亿个单词,并且这些内容具有多样性。为了完成这一训练过程,需要使用数千块高性能的GPU和高速网络,组成一个庞大的计算机集群,这个集群在数十天的时间内完成深度神经网络参数的训练,从而构建了基础语言模型。
GPT-3这一语言模型的规模巨大,其训练过程需要庞大的计算资源。具体来说,GPT-3 完成一次训练需要的计算量相当惊人,达到了3640PFlops,这相当于大约1000块高性能GPU,使用平均利用率达到50%的情况下,需要近一个月的时间才能完成。其他类似规模的语言模型,如Baichuan系列,也需要类似庞大的计算资源和时间。
因此,大规模语言模型的训练任务是复杂、计算密集且耗时的,需要强大的计算资源以及解决分布式计算效率和稳定性等挑战。
指令微调
指令微调的目的是通过少量高质量的数据,这些数据包括用户提供的提示词和期望的输出结果,来提高语言模型的性能。用户提供的提示词可以是问题、闲聊对话、或者任务指令等不同形式的输入。
例如:提示词(Prompt):
北京有几个行政区?
理想输出:
北京市共辖有16个行政区。这包括东城区、西城区、朝阳区、海淀区、丰台区、石景山区、通州区、顺义区、房山区、大兴区、昌平区、怀柔区、平谷区、密云区、延庆区以及门头沟区。
在指令微调过程中,首先使用与之前的预训练阶段相同的语言模型训练算法,但是这次基于一个已经训练好的基础语言模型进行训练,以创建一个有监督微调模型,通常被称为SFT模型。这个SFT模型在经过训练后,具备了初步的指令理解和上下文理解的能力,可以用于解决各种问题,如开放领域的问题、阅读理解、翻译、生成代码等任务,甚至对于未知任务也有一定的适应能力。
有监督微调阶段所需的训练数据相对较少,因此相对于预训练阶段,它不需要大量计算资源。根据模型的规模和训练数据的大小,通常需要数十块GPU和数天的时间来完成SFT模型的训练。SFT模型具备了一定的任务完成能力,因此可以提供给用户使用,许多ChatGPT类型的模型都属于这种类别,例如Alpaca、Vicuna、MOSS、ChatGLM-6B等。这些模型通常效果很好,甚至在某些评估中可以达到与ChatGPT相当的效果水平。
最近的研究表明,在有监督微调阶段,选择训练数据对SFT模型的性能有重大影响,因此如何构建高质量的、数量较少的训练数据是这个阶段研究的重点。
奖励建模
在奖励建模阶段,主要任务是创建一个模型,用于评估SFT模型生成的不同输出的文本质量,这些输出都是针对相同的提示词。这个奖励模型(RM模型)使用一个二分类模型,用来比较两个不同的输出,判断哪一个更好。需要指出,RM模型与基础语言模型和SFT模型不同,它本身不能单独提供给用户使用。
奖励模型的训练方式通常与SFT模型类似,需要使用数十块GPU,并花费数天的时间来完成。然而,奖励模型的准确性对于后续的强化学习阶段非常关键,因此训练这个模型通常需要大规模的训练数据。Andrej Karpathy 在报告中提到,这部分数据标注需要成百上千万的对比数据,并且很多标注任务需要花费很长时间才能完成。示例中的文本表达要非常流畅,标注质量排序需要非常详细的规则,标注人员需要非常认真地按照规则进行标注,这需要大量人力资源。此外,奖励模型的泛化能力也是一个关键问题,即如何确保RM模型可以对各种不同提示词生成的文本进行高质量的评估,这是一个需要重点研究的难题,因为它与文本生成的复杂性等价。因此,如何确定RM模型的泛化边界也是这个阶段需要解决的难点问题之一。
强化学习
在这个阶段,根据数十万用户提供的提示词,使用在前一阶段训练的RM模型来评估SFT模型对用户提示词的文本补全结果的质量,并结合语言模型建模目标,以获得更好的性能。这个阶段需要的提示词数量与有监督微调阶段类似,通常在十万数量级,并且无需提前为这些提示词提供理想的回复。
在强化学习阶段,通过调整SFT模型的参数,使生成的文本能够获得更高的奖励。相对于预训练阶段,这个阶段需要的计算资源较少,通常只需要数十块GPU,并在数天内完成训练。根据Ouyang L等人的研究表明,当模型参数相同的情况下,强化学习可以获得比有监督微调更好的效果。然而,到2023年9月为止,为什么强化学习相对于有监督微调能够取得更好结果仍没有一个完全解释和广泛共识。
另外,Andrej Karpathy也指出强化学习方法存在问题,它会降低基础模型的多样性,从而减少模型生成的多样性。经过强化学习方法的训练后,RL模型就是最终提供给用户使用,它是类似ChatGPT系统的,具备理解用户指令和上下文的能力。然而,强化学习方法的稳定性较低,而且有许多超参数需要调整,这使得模型的收敛变得更加复杂。再加上RM模型的准确性问题,使得在大规模语言模型中如何有效应用强化学习变得非常困难。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
四、AI大模型商业化落地方案
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2024最新版CSDN大礼包:《AGI大模型学习资源包》免费分享
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。