如何构建一个大模型?看完你就知道了!

根据 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 大会上公开的信息,OpenAI 使用的大语言模型构建流程如图1所示,主要包含四个阶段:预训练、有监督微调、奖励建模和强化学习

这四个阶段都需要不同规模的数据集及不同类型的算法,会产出不同类型的模型,所需要的资源也有非常大的差别。

IMG_256

图1 OpenAI 使用的大语言模型构建流程

预训练(Pretraining)阶段需要利用海量的训练数据(数据来自互联网网页、维基百科、书籍、GitHub、论文、问答网站等),构建包含数千亿甚至数万亿单词的具有多样性的内容。

利用由数千块高性能 GPU 和高速网络组成的超级计算机,花费数十天完成深度神经网络参数训练,构建基础模型(Base Model)。

基础模型对长文本进行建模,使模型具有语言生成能力,根据输入的提示词,模型可以生成文本补全句子。

有一部分研究人员认为,语言模型建模过程中隐含地构建了包括事实性知识(Factual Knowledge)和常识知识(Commonsense)在内的世界知识(World Knowledge)。

根据文献 [1] 中的介绍,GPT-3 完成一次训练的总计算量是 3 640PFLOPS,按照 NVIDIA A100 80GB GPU 和平均利用率达到 50% 计算,需要花费近一个月的时间使用 1 000 块 GPU 完成。

文献[1] BROWN T B, MANN B, RYDER N, et al. Language models are few-shot learners[J]. arXiv preprint

arXiv:2005.14165, 2020.

由于 GPT-3 的训练采用 NVIDIA V100 32GB GPU,其实际计算成本远高于上述计算。

文献 [2] 介绍了参数量同样是 1 750 亿个的 OPT 模型,该模型训练使用 992 块 NVIDIA A100 80GB GPU,整体训练时间将近 2 个月。

文献[2] ZHANG S, ROLLER S, GOYAL N, et al. Opt: Open pre-trained transformer language models[J].

arXiv preprint arXiv:2205.01068, 2022.

BLOOM[32] 模型的参数量也是 1 750 亿个,该模型训练一共花费 3.5 个月,使用包含384块NVIDIA A100 80GB GPU 集群完成。

可以看到,大语言模型的训练需要花费大量的计算资源和时间。LLaMA、Falcon、百川(Baichuan)等模型都属于基础语言模型。由于训练过程需要消耗大量的计算资源,并很容易受到超参数影响,因此,如何提升分布式计算效率并使模型训练稳定收敛是本阶段的研究重点。

有监督微调(Supervised Fine Tuning),也称为指令微调,利用少量高质量数据集,通过有监督训练使模型具备完成问题回答、翻译、写作等能力。

有监督微调的数据包含用户输入的提示词和对应的理想输出结果。用户输入包括问题、闲聊对话、任务指令等多种形式和任务。

例如:提示词:复旦大学有几个校区?理想输出:复旦大学现有 4 个校区,分别是邯郸校区、新江湾校区、枫林校区和张江校区。其中邯郸校区是复旦大学的主校区,邯郸校区与新江湾校区都位于杨浦区,枫林校区 位于徐汇区,张江校区位于浦东新区。

利用这些有监督数据,使用与预训练阶段相同的语言模型训练算法,在基础模型的基础上进行训练,得到有监督微调模型(SFT 模型)。经过训练的 SFT 模型具备初步的指令理解能力和上下文理解能力,能够完成开放领域问答、阅读理解、翻译、生成代码等任务,也具备了一定的对未知任务的泛化能力。

由于有监督微调阶段所需的训练数据量较少,SFT 模型的训练过程并不需要消耗大量的计算资源。根据模型的大小和训练数据量,通常需要数十块 GPU,花费数天时间完成训练。SFT 模型具备了初步的任务完成能力,可以开放给用户使用,很多类 ChatGPT 的模型都属 于该类型,包括 Alpaca、Vicuna、MOSS、ChatGLM-6B 等。很多这类模型的效果非常好, 甚至在一些评测中达到了 ChatGPT 的 90% 的效果。当前的一些研究表明,有监督微调阶 段的数据选择对 SFT 模型效果有非常大的影响,因此构造少量并且高质量的训练数据是本阶段的研究重点。

奖励建模(Reward Modeling)阶段的目标是构建一个文本质量对比模型。对于同一个提示词,SFT 模型对给出的多个不同输出结果的质量进行排序。

奖励模型可以通过二分类模型,对输入的两个结果之间的优劣进行判断。奖励模型与基础模型和 SFT 模型不同,奖励模型本身并不能单独提供给用户使用。

奖励模型的训练通常和 SFT 模型一样,使用数十块 GPU,通过数天时间完成训练。

由于奖励模型的准确率对强化学习阶段的效果有至关重要的影响,因此通常需要大规模的训练数据对该模型进行训练。

Andrej Karpathy 在报告中指出,该部分需要百万量级的对比 数据标注,而且其中很多标注需要很长时间才能完成。图 2 给出了 InstructGPT 系统中奖励模型训练样本标注示例。

IMG_257

图2 InstructGPT 系统中奖励模型训练样本标注示例

可以看到,示例中文本表达都较为流畅,标注其质量排序需要制定非常详细的规范,标注者也需要认真地基于标规范进行标注,需要消耗大量的人力。

同时,保持众包标注者之间的一致性,也是奖励建模阶段需要解决的难点问题之一。

此外,奖励模型的泛化能力 边界也是本阶段需要重点研究的一个问题。

如果奖励模型的目标是针对系统所有的输出都能够高质量地进行判断,那么该问题的难度在某种程度上与文本生成等价,因此限定奖励模型应用的泛化边界是本阶段需要解决的问题。

强化学习(Reinforcement Learning,RL)阶段根据数十万用户给出的提示词,利用前一阶段训练的奖励模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。

该阶段使用的提示词数量与有监督微调阶段类似,数量在十万量级,并且不需要人工提前给出该提示词所对应的理想回复。

使用强化学习,在 SFT 模型的基础上调整参数,使最终生成的文本可以获得更高的奖励(Reward)。该阶段需要的计算量相较预训练阶段也少很多,通常仅需要数十块 GPU,数天即可完成训练。

文献 [3] 给出了强化学习和有监督微调的对比,在模型参数量相同的情况下,强化学习可以得到相较于有监督微调好得多的效果。

文献[3] OUYANG L, WU J, JIANG X, et al. Training language models to follow instructions with human feedback[J]. Advances in Neural Information Processing Systems, 2022, 35: 27730-27744.

关于为什么强化学习相比有监督微调可以得到更好结果的问题,截至 2023 年 9 月还没有完整或得到普遍共识的解释。

Andrej Karpathy 也指出,强化学习并不是没有问题的,它会使基础模型的熵降低,从而减少模型输出的多样性。

经过强化学习方法训练后的 RL 模型,就是最终提供给用户使用、具有理解用户指令和上下文的类 ChatGPT 系统。

由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,叠加奖励模型的准确率问题,使得在大语言模型上有效应用强化学习非常困难。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容