OpenAI的AI 研究员和创始成员Andrej Karpathy在微软2023年Build大会上有一个主题为State of GPT的演讲,介绍了OpenAI是如何训练GPT的。
对于GPT的训练来说,通常有四个阶段,预训练(Pretraining),有监督的微调(Supervised Finetuning),奖励建模(Reward Modeling)和强化学习(Reinforcement Learning),这几个阶段依次进行,在数据集,模型和训练成本会有很多不同。
预训练(Pretraining)
第一步是让模型拥有基本的语言能力,也就是给出一段文字,模型可以预测出下一个单词,这是整个训练过程中最耗时的部分。
以开源的LLaMA为例,为了训练65B模型,Meta公司使用了2,000个GPU,大约21天的训练时间,以及大约数百万美元的成本。这些是在预训练阶段应该考虑的数量级。
这个阶段是通过收集TB级别的互联网的文本(当然会混杂非常多低质量的数据),让模型从这些文本中学习词汇、语法、事实以及某种程度的推理能力。这个阶段结束后,模型可以生成一些有意义且语法正确的文本,但可能无法理解具体任务的需求。
Tokenization
在进行GPT训练之前,有一个关键的预处理步骤Tokenization,它是把输入文本转化成模型能够读取的整数序列的过程。
一方面,LLM服务通常按照输入的token数量来计费,另一方面,能够处理的最大token长度也是LLM竞争的重要因素,因为这决定了模型能够记住多长的上下文信息以便作出回答。
在tokenization过程中,文本会被转换为整数序列,以便模型可以理解和处理。你可以将其理解为GPT使用一本固定的密码本,用于在文字和整数之间进行无损转换。有多种算法可供选择,其中一种常用的算法是字节对编码(byte pair encoding),它将文本分割成较小的文本块,并将它们合并为token。因此,token与单词之间的转换关系并非严格的1:1,通常一个token大约相当于0.75个单词。
Few-Shot prompting
在这个阶段,模型只是在试图对输入的文档进行补全,因为在语言建模任务中被迫进行大量的多任务学习,仅仅是预测下一个token,它就被迫要理解文本的结构以及其中的各种概念。
所以通过少量的提示(few-shot prompting),可以非常高效地对任何你感兴趣的任意下游任务进行微调。
过去如果想要训练一个情感分类模型,需要收集一些积极和消极的例子,然后训练某种NLP模型来进行分类。现在,你可以通过给LLM一些少量的提示而不需要改变模型来做到,这叫做few-shot prompting。
这是一个通过提示工程对base模型进行操作,让它相信自己在模仿一个文档并执行任务的例子。
有监督的微调(Supervised Finetuning)
想要让GPT完成特定的任务,还有一条不同的道路,就是收集小型但高质量的数据集,通常是由人针对特定任务精心编写的QA,对模型进行有监督微调。
这个阶段算法上没有改变,只是更换了训练集,同时在训练中改变了模型的部分参数。
数据集中的一条随机prompt,比如“你能写一个关于垄断购买力这个术语相关性的简短介绍吗?”承包商会遵循详细的标注文档写下一个理想的回答,然后把这个QA作为了输入和输出的样本让模型学习。使得模型能更好地适应特定任务或应用,例如回答问题或编写文章。
奖励建模(Reward Modeling)
在奖励建模步骤中,我们把数据收集转变为比较的形式。也就是让模型对同一个问题给出3个答案,然后让评估员对答案进行排名。
因为为prompt编写答案的成本和难度都很高,但是比较不同答案的好坏就简单很多,所以这个阶段就将答案的质量排名作为奖励函数,指导模型优化。
强化学习(Reinforcement Learning)
在强化学习阶段,我们会再次获得大量的prompt,并根据奖励模型进行强化学习,也被叫做Alignment(与人类对齐)。
Source
https://build.microsoft.com/en-US/sessions/db3f4859-cd30-4445-a0cd-553c3304f8e2?source=sessions
网友评论