GPT发展简介
Language Model
本质上chatGPT是一种Language Model,所以什么是LM? LM是一种概率模型,计算$p(w_i|w_1,w_2….w_i-1)$,也就是基于一个word序列的输入,来计算下一个word的概率分布,这种模型在20世纪中期就有了,后来在搜索引擎推荐,分词,机器翻译等任务中有非常重要的作用。例如分词,本质上就是对句子的单字进行划分,使得划分结果在语言模型中的联合分布概率最大化。 “今天天气不错,要不出去春游吧”
Max{P(分词序列)} = P(今天|天气|不错|,|要不|出去|春游|吧)
那么LM基本可以分为2个阶段
- n-gram
- 神经网络
n-gram
n-gram指条件概率,表示下一个词依赖多少个前面的词,4-gram就是依赖之前的4个词来预测下一个,这种方式从上世界80年代开始,统治了NLP相当长的一段时间,但是因为参数太庞大,训练数据太稀疏,导致学习能力欠佳。 举例:记词表大小为(vocab_size),则4-gram如果以条件概率估计,假设用函数F来标识,则是一个F{X}=Y的函数,其中X的参数空间是{vocab_size,vocab_size,vocab_size,vocab_size}的向量,而Y是一个{1,vocab_size},假设使用英文词表,一个高频词表已经是1w左右词汇量,那么参数列表就是一个100亿大小的空间。不过不用担心,因为训练样本是非常稀疏的,即使如果读一本100w字的小说,比如“我”这个词,几乎不可能直接和“月亮”,”纤维“,”电流“这些词接壤。
神经网络
神经网络则带给了LM新的生命,Bengio提出的神经网络模型,从两个方面改进了n-gram。 首先,用稠密向量来表征单词,这就把原来基于词汇表大小的稀疏向量空间 {vocab * size}缩小到了{vec * dim},大大提升了LM的表征能力,比如说词汇的关联性,多个词汇的组合的意义,这在n-gram年代是无法解决的问题,那会用one-hot,词表多大,向量维度就有多大。
● 用向量间欧式距离公式就可以度量相关性大小 ● 用向量累加可以表示组合词语后的语义
其次,用神经网络来表征LM,这样大大减少了模型的参数规模,因为神经网络的hidden layer unit,这些都是通用的。
Bengio的这个改进可以说是非常重要的突破,同时也是他第一个将attention机制引入了NLP(可以说对后来NLP领域的全面attention化起到了引路人的作用),在机器翻译领域,Bengio和Lecun,Hinton合成AI 3巨头,并且在2018年获得了图灵奖。
LLM(Large Language Model)
LLM是在神经网络表征LM发展后期出现的,这个概念从2018年之后比较火,我个人的理解就是相对于LM只是在一些例如说 wiki_chinese 这样的训练集上去训练,参数规模大小300MB左右,数据集有限。LLM发展到以海量的内容作为预训练,模型参数规模基本每年10x的速度在膨胀。这就是LLM,现如今,对于中小公司是没有能力去做LLM的,好在NLP是支持pre-train的,这样我们可以复用google,facebook训练出的语言模型来做自己的事情。
NLP发展历程
如果我们从2013年左右到现在去看NLP的发展,大致可以把深度学习对NLP的技术发展分成三个阶段
阶段一 传统深度学习模型
这一阶段主要通过一些传统深度学习模型,大多数基于RNN,CNN,主要依托于各种改进LSTM模型来实现序列预测,少量改进CNN来实现更好的特征抽取器,以Seq2Seq技术作为总体框架,后续加入了attention机制来解决Context长度问题。
RNN & CNN
这里不做过多介绍,大家这样理解。RNN是基于时序特征来训练的,比如$w_1,w_2,….w_n$,因此非常适合NLP,因为语言都是有序的,今天天气不错,而不是天气今天不错。CNN是基于空间关系来训练的,理解一张图片的每个像素点,是一个[-255,255]的int,那么CNN是能够学习二维特征的,比如一个圆圈,或者一头牛。
基于以上,RNN代表recurrence,在每个时序下标上重复,CNN代表convolution,在二维特征上卷积。一般来说NLP都使用RNN做LM的模型架构,可能用CNN来做输出前的一个特征抽取,过去二十年间,基本都是在RNN上面做变种,Bi-RNN, Gated RNN, LSTM, Bi-LSTM等等,太多了。
阶段二 大规模预训练模型
以Bert模型和GPT模型为代表,所有NLP任务被分为两段式,第一个阶段是大规模预训练模型,让模型在整个网络数据集上训练,具备了非常强的通用语义表征能力,可以理解为这个阶段模型已经认识所有的文字,并且学习到了文字如何在计算机世界中表示。第二个阶段是针对特定下游任务的fine tune,可以理解为,让第一步中的通用大模型,向你要解决的子任务去微调优化,是一种让大模型适应子任务的做法。
下面先简单说一下阶段二中的关键技术
Transformor
Google2018年发布的论文,《Attention is all you need》,里面将attention机制发挥到了机制—这是第一个完全抛弃了RNN,CNN的NLP模型,仅用了Attention机制,在这篇论文中引入了一个新的结构-Transformer,这个结构成为了新一代NLP所有工作的最强底座。
为什么Transformer强呢,因为历史上的RNN结构会出现信息丢失的情况,可以理解为越靠近的信息,权重越大,过远的信息就不被关注,但是在语言学中这是有问题的。比如“周一我们要参加团队的双周会,早上10点开始,每个人要总结自己的工作”,这句话中,“周一”,“早上10点”是关联度很高的信息,“双周会”,“总结”,“工作”这是关联度很高的信息,在RNN中想要训练出这样的参数可不容易,天生丢失。但是在Transformer中,是通过单步非循环就训练出注意力机制的,这使得模型可以随意跨越距离去理解语义。可以从下面这张图去理解。
Tranformer与以前的模型相比,它在语言任务上的效率提高了几个数量级。基于Transformer的模型(例如 OpenAI 的 GPT 和 Google 的 Bert)的文本生成、文本分类,情感识别等诸多领域有了非常大的提升,这些模型全部已经是LLM的范畴了。这些预训练的模型都是基于非常庞大的数据集来训练的(来看一下数据,Bert模型340M参数,800M数据)。
LLM出产的模型是具有“世界知识”的,并且在“上下文学习”方面非常有效。然而,在生成连贯的文本时,这些模型需要相对高级的提示,并且在执行任务或人工指令(例如“写故事”或“调试此代码”)时表现不是很好,在一些伦理道德范畴也会出现反社会反人类的思想,可以说距离商业化还有一定距离。
阶段三 AGI 通用人工智能
以GPT3为为代表,NLP的LLM逐渐脱离开fine tune,GPT3相比GPT2的区别只在于参数更大(600x),数据量更大,更长时间的训练。但是GPT3提出了incontext-learning的概念,要注意,这些in-context learning都是在预测阶段的case,不是训练阶段的,这和我们常说的zero-shot learning是有区别的。 有些同学可能玩chatGPT的时候有疑问,说是不是我问的问题,chatGPT见过,就好像上面的instruction dataset,其实这是不对的,chatGPT基于理解来生成内容,而不是记忆和检索。这也是深度学习上一个很重要的概念的实践,zero-shot learning,零次学习,指模型通过已有领域A的学习,来迁移到B,理解和推测从未见过的知识。我举个例子,模型学习了“黑色的马叫做黑马”,然后通过零次学习,理解了“黑色的狗叫做黑狗”
2021年CMU的刘鹏飞等人发表的文章里,系统的描述了这种架构。原本的“Pre-train + Fine-tune”范式,被“Pre-train, Prompt, and Predict”范式所取代。原本需要预训练模型根据下游任务调整的形式,被替换成了调整下游任务以适应预训练模型的方法,成为一种pretrain + fine tune的新形式。
通过这种新的架构,可以让模型更加通用,一个预训练模型就可以在几十个下游task上表现良好,当然训练的数据和参数规模按照”定律“进一步增大,GPT3参数173B,模型大小800GB,训练数据集45TB,训练成本综合1.2B美刀。 GPT3在实际使用到聊天中,主要的缺点有:
- 对用户的明确指令没有follow,答非所问
- 瞎编乱造,一本正经地讲一个错误的事情(现在chatGPT还有一点点)
- 缺乏解释性:模型给出的具体决策或者说预测,自身缺乏可解释性
- 脏数据影响:因为基于超大数据集,所以可能存在反社会,脏话等等 - (可以用数据工程预处理来解决)
那么chatGPT相比它的前辈,做出了哪些改变?主要就是通过RL在prompt上调优
指令数据集上的微调
这点上是集成了GPT3的变体IntructGPT的成果,instruction dataset,是由问答对来组成,问题比如是“翻译这句话Y”,“什么是X”,配对的答案是一个正确的人类的回答,这个dataset都是人工编写的,所以成本非常高,有时很多答案甚至需要某个领域的专家来回答。
指令数据集解决了一部分缺点1,缺点3
RLHF Reinforcement Learning from Human Feedbacks
这个是chatGPT提升的核心动力,是和GPT3拉开差距的一部分。
首先简单解释一下强化学习,强化学习的核心就是从经验中学习,从不断的尝试中,学习如果做出决策。例如alphago,自动驾驶等均属于强化学习。
以一个下象棋的例子来解释
- policy,策略,用来在某个棋盘状态下,决定要做什么action
- action,一个分布,比如概率最大的action是车9进1
- 车9进1后,对方也做出了action,此时棋盘进入新状态
- reward function计算奖惩值,然后policy进入下一步计算
RLHF是一种RL的整合形式,分为3个步骤
- 从问题库中抽取一小部分,开始人工标注回答,用这个问答队(Instuction dataset),来训练policy,这同时就是基线模型
- 用基线policy模型,针对另一些问题集,生成一系列回答(每个问题,生成多份回答),然后人工对回答进行打标,54321星例如,这样就产生了一份ranking答案的数据集,这个数据集用来训练reward model
- Proximal Policy Optimization (PPO) ,就是一个端到端的RL模型,使用第1步中的policy model + 第2步中的reward model,通过PPO算法,通过reward来优化policy
1,2,3步骤都会被重复大量进行,比如说以下场景
- 更多的打标员产生了更多的instruction dataset,然后policy model被拿过来做fine tune
- 随着policy改进,更多的问题被多重回答,更多的ranker进行评分,然后用来fine tune reward model,变得更好
- 用更好的reward model来优化policy
1,2,3的所有过程,就是对pretrain的原始大模型做prompt优化的过程。
这就是chatGPT的独到之处,那我们一定比较好奇的是,除了算法,工程,硬件,在RLHF这方面人工情况是怎样的。这是我搜集到的数据:第1步是最贵的数据,因为完全由人工编写,而且不乏专业人士,这部分数据量大概是12-15k对。第2步中每个问题,生成4-9个回答,打标后的数据量是150-200k。如果有专业公司想要去训练自己的chatGPT,那这个应该就可以作为成本的预估。
chatGPT的这种方式也存在至少一个可见的缺点,就是RLHF打标是依赖人工的,目前是外包团队,有数据偏好性。
chatGPT很强,空间也很大,建议大家多多学习和研究,2023年可能就算是真正的AI元年了,引用OpenAI CEO的话“Trust the exponential,Flat looking backwards,vertical looking forwards”。
参考
- ChatGPT: Optimizing Language Models for Dialogue: https://openai.com/blog/chatgpt/
- Training language models to follow instructions with human feedback: https://arxiv.org/pdf/2203.02155.pdf
- why chatGPT so good: https://scale.com/blog/chatgpt-reinforcement-learning#Training%20on%20code
- 何以动摇Fine-tune?一文综述Prompt Tuning发展: https://blog.csdn.net/BAAIBeijing/article/details/121005830