ChatGPT 模型原理
目录
什么是 ChatGPT
GPT-1 介绍
GPT-2 介绍
GPT-3 介绍
ChatGPT 介绍
什么是 ChatGPT
ChatGPT 是由 OpenAI 在 2022 年 11 月 30 日发布的全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,真正像人类一样来交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。
在我们挖掘 ChatGPT 模型原理之前,需要回顾下 ChatGPT 的成长史,即我们需要对 GPT-1、GPT-2、GPT-3 等一系列模型进行了解和学习,以便我们更好的理解 ChatGPT.
GPT-1 介绍
2018 年 6 月,OpenAI 公司发表了论文“Improving Language Understanding by Generative Pre-training”《用生成式预训练提高模型的语言理解力》, 推出了具有 1.17 亿个参数的 GPT-1(Generative Pre-training , 生成式预训练)模型。
GPT-1 采用了传统的语言模型方法进行预训练,即使用单词的上文来预测单词,使得 GPT 更擅长处理自然语言生成任务 (NLG), 而 BERT 更擅长处理自然语言理解任务 (NLU).
GPT-1 模型架构
看三个语言模型的对比架构图,中间的就是 GPT-1
- 从上图可以很清楚的看到 GPT 采用的是单向 Transformer 模型,例如给定一个句子
[u1, u2, ..., un]
, GPT-1 在预测单词
ui 的时候只会利用[u1, u2, ..., u(i-1)]
的信息,而 BERT 会同时利用上下文的信息[u1, u2, ..., u(i-1), u(i+1), ..., un]
.
GPT 采用了 Transformer 的 Decoder 模块。但是 GPT 的 Decoder Block 和经典 Transformer Decoder Block 还有所不同
GPT 中取消了第二个 encoder-decoder attention 子层,只保留 Masked Multi-Head Attention 层,和 Feed Forward 层。
注意:对比于经典的 Transformer 架构,解码器模块采用了 6 个 Decoder Block; GPT 的架构中采用了 12 个 Decoder Block.
GPT-1 训练过程
GPT-1 的训练包括两阶段过程:1.无监督的预训练语言模型;2.有监督的下游任务 fine-tunning.
无监督的预训练语言模型
给定句子
U = [u1, u2, ..., un]
, GPT 训练语言模型时的目标是最大化下面的似然函数:上述公式具体来说是要预测每个词 ui 的概率,这个概率是基于它前面 ui-k 到 ui?1 个词,以及模型 Θ。这里的 k 表示上文的窗口大小,理论上来讲 k 取的越大,模型所能获取的上文信息越充足,模型的能力越强。
GPT-1 是一个单向语言模型,模型对输入 U 进行特征嵌入得到 transformer 第一层的输 h0,再经过多层 transformer 特征编码,使用最后一层的输出即可得到当前预测的概率分布,计算过程如下:
Wp 代表单词的位置编码,形状是
[max_seq_len, embedding_dim]
, We 的形状是[vocab_size, embedding_dim]
.得到输入张量 h0 后,要将 h0 传入 GPT 的 Decoder Block 中,依次得到 ht:
最后通过得到的 ht 来预测下一个单词:
有监督的下游任务 fine-tunning
GPT 预训练后,会针对具体的下游任务对模型进行微调。微调采用的是有监督学习,训练样本包括单词序列
[x1, x2, ..., xn]
和 label y. GPT 微调的目标任务是根据单词序列[x1, x2, ..., xn]
预测标签 y.其中 Wy 表示预测输出的矩阵参数,微调任务的目标是最大化下面的函数:
综合两个阶段的目标任务函数,可知 GPT 的最终优化函数为:
整体训练过程架构图
根据下游任务适配的过程分两步: 1、根据任务定义不同输入, 2、对不同任务增加不同的分类层.
具体定义可以参见下图:
GPT-1 数据集
GPT-1 使用了 BooksCorpus 数据集,文本大小约 5 GB,包含 7400w+ 的句子。这个数据集由 7000 本独立的、不同风格类型的书籍组成,选择该部分数据集的原因:
01 书籍文本包含大量高质量长句,保证模型学习长距离信息依赖。
02 书籍未开源公布,所以很难在下游数据集上见到 ,更能验证模型的泛化能力。
GPT-1 模型的特点
模型的一些关键参数为:
参数 | 取值 |
---|---|
transformer 层数 | 12 |
特征维度 | 768 |
transformer head 数 | 12 |
总参数量 | 1.17 亿 |
优点
GPT-1 在 9 个任务上的表现 sota
更易于并行化
缺点
GPT-1 语言模型是单向的。
针对不同的任务,需要不同的数据集进行模型微调,相对比较麻烦
思考总结
- GPT-1 模型架构?
答案:Transformer 的 Decoder 模块(去除中间第二个子层)
- GPT-1 预训练任务?
答案:1、无监督预训练;2 有监督任务微调。
- GPT-1 模型基本参数?
答案:12 层、12 个 head、768 维、参数量 1.17 亿
GPT-2 介绍
2019 年 2 月,OpenAI 推出了 GPT-2, 同时,他们发表了介绍这个模型的论文“Language Models are Unsupervised Multitask Learners”(语言模型是无监督的多任务学习者).
相比于 GPT-1, GPT-2 突出的核心思想为多任务学习,其目标旨在仅采用无监督预训练得到一个泛化能力更强的语言模型,直接应用到下游任务中。GPT-2 并没有对 GPT-1 的网络结构进行过多的创新与设计,而是使用了更多的网络参数与更大的数据集: 最大模型共计48层, 参数量达15亿.
GPT-2 模型架构
在模型方面相对于 GPT-1 来说 GPT-2 做了微小的改动
LN 层被放置在 Self-Attention 层和 Feed Forward 层前,而不是像原来那样后置(目的:随着模型层数不断增加,梯度消失和梯度爆炸的风险越来越大,这些调整能够减少预训练过程中各层之间的方差变化,使梯度更加稳定)
在最后一层 Tansfomer Block 后增加了 LN 层
输入序列的最大长度从 512 扩充到 1024
GPT-2 训练核心思想
GPT-2 模型的学习目标:使用无监督的预训练模型做有监督的任务。
GPT-2 模型目的:模型从大规模数据中学到的能力能够直接在多个任务之间进行迁移,而不需要额外提供特定任务的数据进行 Fine-Tuing.
因此 GPT-2 提出了新的观点:zero-shot. 通过 zero-shot, 在迁移到其他任务上的时候不需要额外的标注数据,也不需要额外的模型训练。
GPT-2 的训练只包括无监督的预训练过程,和 GPT-1 第一阶段训练一样,也属于一个单向语言模型
语言模型其实也是在给序列的条件概率建模,即 p(sn|s1,s2,...,sn?1)
在 zero-shot 的设定下,不同任务的输入序列应该与训练时见到的文本长得一样,也就是以自然语言的形式去作为输入,例如下面两个任务的输入序列是这样改造的
机器翻译任务:translate to french, { english text }, { french text } 阅读理解任务:answer the question, { document }, { question }, { answer }
为什么上述输入序列的改造是有效的?或者说为什么 zero-shot 是有效的?这里引用原文的一句话:
Our approach motivates building as large and diverse a dataset as possible in order to collect natural language demonstrations of tasks in as varied of domains and contexts as possible.
大概意思是,从一个尽可能大且多样化的数据集中一定能收集到不同领域不同任务相关的自然语言描述示例。
部分训练语料展示:
综上,GPT-2 的核心思想:当模型的容量非常大且数据量足够丰富时,仅仅靠语言模型的学习便可以完成其他有监督学习的任务,不需要在下游任务微调。
GPT-2 的数据集
为了保证 zero-shot 的效果,必须要足够大且覆盖面广数据集共有约 800 万篇文章,累计体积约 40G
所以 GPT-2 专门爬取了大量的网络文本数据,GPT-2 的文章取自于 Reddit 上高赞的文章,命名为 WebText.
为了避免和测试集的冲突,WebText 移除了涉及 Wikipedia 的文章
GPT-2 模型的特点
与 GPT-1 的区别
主推 zero-shot,而 GPT-1 为 pre-train + fine-tuning
训练数据规模更大,GPT-2 为 800w 文档 40G,GPT-1 为 5GB
模型大小,GPT-2 最大 15 亿参数,GPT-1 为 1 亿参数
模型结构调整,层归一化
训练参数,batch_size 从 64 增加到 512,上文窗口大小从 512 增加到 1024
优点
文本生成效果好,仅通过 zero-shot 学习,就有 7 个任务超过之前 sota 的方法。
海量数据和大量参数训练出来的词向量模型有迁移到其它类别任务中而不需要额外的训练。
缺点
无监督学习能力有待提升
有些任务上的表现不如随机
GPT-2 模型总结
GPT-2 验证了通过海量数据和大量参数训练出来的词向量模型可以直接迁移到其它类别任务中而不需要额外的训练。
但是很多实验也表明,GPT-2 的无监督学习的能力还有很大的提升空间,甚至在有些任务上的表现不比随机的好。
尽管在有些 zero-shot 的任务上的表现不错,但是我们仍不清楚 GPT-2 的这种策略究竟能做成什么样子。
GPT-2 表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,基于这个思想,诞生了我们下面要介绍的 GPT-3.
思考总结
GPT-2 模型架构? 答案:相较 GPT-1 做了微小的改动:1.Pre_LayerNorm; 2.最后一层后加入 LN 层;3.序列长度扩大到 1024
GPT-2 预训练任务?
答案:无监督预训练
GPT-2 提出的新思想?
答案:zero-shot:零样本学习,达到开箱即用的效果
GPT-3 介绍
2020 年 5 月,OpenAI 发布了 GPT-3, 同时发表了论文“Language Models are Few-Shot Learner”《小样本学习者的语言模型》.
不同模型之间参数的对比
GPT-3 提出核心观点:Few-Shot 思想。相比 GPT-2 的 Zero-Shot,需要使用少量样本在下游任务上去做微调,从而让模型给出更准确的答案。
GPT-3 模型架构
实际上 GPT-3 不是一个单一的模型,而是一个模型系列。系列中的每个模型都有不同数量的可训练参数。下表显示了每个模型、体系结构及其对应的参数:
在模型结构上,GPT-3 延续使用 GPT 模型结构,但是引入了 Sparse Transformer 中的 sparse attention 模块(稀疏注意力)
sparse attention 与传统 self-attention(称为 dense attention)的区别在于:
dense attention:每个 token 之间两两计算 attention,复杂度 O(n?) sparse attention:每个 token 只与其他 token 的一个子集计算 attention,复杂度 O(n\*logn)
具体来说,sparse attention 除了相对距离不超过 k 以及相对距离为 k,2k,3k,... 的 token,其他所有 token 的注意力都设为 0,如下图所示:
使用 sparse attention 的好处主要有以下两点:
- 减少注意力层的计算复杂度,节约显存和耗时,从而能够处理更长的输入序列
- 具有“局部紧密相关和远程稀疏相关”的特性,对于距离较近的上下文关注更多,对于距离较远的上下文关注较少
最大版本 GPT-3 175B 或“GPT-3”模型具有 175 个 B 参数、96 层的多头 Transformer、Head size 为 96、词向量维度为 12288、文本长度大小为 2048.
GPT-3 训练核心思想
GPT-3 模型训练的思想与 GPT-2 的方法相似,去除了 fine-tune 过程,只包括预训练过程,不同只在于采用了参数更多的模型、更丰富的数据集和更长的训练的过程。
但是 GPT-3 模型在进行下游任务评估和预测时采用了三种方法,他们分别是:Few-shot、One-shot、Zero-shot.
其中 Few-shot、One-shot 也被称之为情境学习 (in-context learning,也可称之为提示学习). 情境学习理解:在被给定的几个任务示例或一个任务说明的情况下,模型应该能通过简单预测以补全任务中其他的实例。即情境学习要求预训练模型要对任务本身进行理解。
In-context learnin 核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果。
下面以从“英语到法语的翻译任务”为例,对比传统的微调策略和 GPT-3 三种情景学习方式。
传统的微调策略
传统的微调策略存在问题
01 微调需要对每一个任务有一个任务相关的数据集以及和任务相关的微调。
02 需要一个相关任务大的数据集,而且需要对其进行标注
03 当一个样本没有出现在数据分布的时候,泛化性不见得比小模型要好
下面以从“英语到法语的翻译任务”为例,对比传统的微调策略和 GPT-3 三种情景学习方式。
情景学习方法
三种方式
zero shot:给出任务的描述,然后提供测试数据直接让预训练好的模型去进行翻译。
one shot:给出任务描述,在进行新样本翻译之前,插入一个样本做指导。相当于给一个例子,告诉模型英语翻译为法语,应该这么翻译。
few shot:给出任务描述,在进行新样本翻译之前,插入 N 个样本做指导。相当于给 N 个例子,告诉模型英语翻译为法语,应该怎么翻译。
in-context learning 虽然它与 fine-tuning 一样都需要一些有监督标注数据,但是两者的区别是:
fine-tuning 基于标注数据对模型参数进行更新,而 in-context learning 使用标注数据时不做任何的梯度回传,模型参数不更新。
in-context learning 依赖的数据量(10~100)远远小于 fine-tuning 一般的数据量。
GPT-3 通过通过大量下游任务实验验证:few-shot 效果最佳,one-shot 效果次之,zero-shot 效果最差。
GPT-3 数据集
一般来说,模型的参数越多,训练模型所需的数据就越多。GPT-3 共训练了 5 个不同的语料大约 45 TB 的文本数据。
数据集 | 数量(tokens) | 训练数据占比 |
---|---|---|
Common Crawl(filterd) | 4100 亿 | 60% |
Web Text2 | 190 亿 | 22% |
Books1 | 550 亿 | 8% |
Books2 | 550 亿 | 8% |
Wikipedia | 30 亿 | 2% |
不同数据的介绍:
- Common Crawl 语料库来自网络爬行中数据,如网页数据等。
- WebText2 是来自具有 3+ upvotes 的帖子的所有出站 Reddit 链接的网页文本。
- Books1 和 Books2 是两个基于互联网的图书语料库。
- 英文维基百科页面 也是训练语料库的一部分。
GPT-3 模型的特点
与 GPT-2 的区别
效果上,超出 GPT-2 非常多,能生成人类难以区分的新闻文章;
主推 few-shot,相比于 GPT-2 的 zero-shot,具有很强的创新性;
模型结构略微变化,采用 sparse attention 模块;
海量训练语料,45TB(清洗后 570GB),相比于 GPT-2 的 40GB;
海量模型参数,最大模型为 1750 亿,GPT-2 最大为 15 亿参数;
优点
- 整体上,GPT-3 在 zero-shot 或 one-shot 设置下能取得尚可的成绩,在 few-shot 设置下有可能超越基于 fine-tune 的 SOTA 模型。
- 去除了 fune-tuning 任务。
缺点
- 由于 40TB 海量数据的存在,很难保证 GPT-3 生成的文章不包含一些非常敏感的内容
- 对于部分任务比如:“填空类型”等,效果具有局限性
- 当生成文本长度较长时,GPT-3 可能重复生成一段话,前后矛盾,逻辑衔接不好等等。
- 成本太大
GPT-3 模型总结
GPT 系列从 1 到 3, 通通采用的是 transformer 架构,可以说模型结构并没有创新性的设计。
GPT-3 的本质还是通过海量的参数学习海量的数据,然后依赖 transformer 强大的拟合能力使得模型能够收敛
得益于庞大的数据集,GPT-3 可以完成一些令人感到惊喜的任务
但是 GPT-3 也不是万能的,对于一些明显不在这个分布或者和这个分布有冲突的任务来说,GPT-3 还是无能为力的。
思考总结
GPT-3 模型架构?
答案:和 GPT-2 基本一致,提出 sparse attention
GPT-3 预训练任务?
答案:无监督预训练
GPT-3 提出的新思想?
答案:ICL:Few-Shot、One-Shot、Zero-Shot
ChatGPT 介绍
ChatGPT 是一种基于 GPT-3 的聊天机器人模型。它旨在使用 GPT-3 的语言生成能力来与用户进行自然语言对话。例如,用户可以向 ChatGPT 发送消息,然后 ChatGPT 会根据消息生成一条回复。
GPT-3 是一个更大的自然语言处理模型,而 ChatGPT 则是使用 GPT-3 来构建的聊天机器人。它们之间的关系是 ChatGPT 依赖于 GPT-3 的语言生成能力来进行对话。
目前基于 ChatGPT 的论文并没有公布,因此接下来我们基于 openai 官网的介绍对其原理进行解析:
ChatGPT 原理
模型越大、参数越多,模型效果越好吗?
过拟合、出现模型能力不一致问题。
- 原始的 GPT-3 就是能力非一致模型,类似 GPT-3 的大型语言模型都是基于来自互联网的大量文本数据进行训练, 能够生成类似人类的文本,但它们可能并不总是产生符人类期望的输出。
ChatGPT 为了解决模型的不一致问题,使用了人类反馈来指导学习过程,对其进行了进一步训练。所使用的具体技术就是强化学习 (RLHF) .
什么是强化学习
强化学习(Reinforcement Learning, RL), 又称增强学习,是机器学习方法的一种,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。
强化学习的关键信息
- 一种机器学习方法
- 关注智能体与环境之间的交互
- 目标是追求最大回报
强化学习的架构
理解强化学习基本要素
这里我们以一个简单小游戏 flappy bird 为代表为大家讲解强化学习的基本要素:
Agent(智能体):强化学习训练的主体。这里小鸟就是 Agent.
Environment(环境):整个游戏的大背景,包括:Agent、地面、柱子、建筑等。
State(状态):当前 Environment 和 Agent 所处的状态。属于动态变化
Policy(策略):根据观测到的状态来进行决策,来控制 Agent 运动。policy 函数π是个概率密度函数:
Reward(奖励):Agent 在当前 State 下,采取了某个特定的 Action 后,会获得环境的一定反馈(或奖励)就是 Reward.
如何让 AI 实现自动打游戏?
第一步:通过强化学习(机器学习方法)学出 Policy 函数,该步骤目的是用 Policy 函数来控制 Agent.
第二步:获取当前状态为 s1, 并将 s1 带入 Policy 函数来计算概率,从概率结果中抽样得到 a1,同时环境生成下一状态 s2,并且给 Agent 一个奖励 r1.
第三步:将新的状态 s2 带入 Policy 函数来计算概率,抽取结果得到新的动作 a2、状态 s3、奖励 r2.
第四步:循环 2-3 步骤,直到打赢游戏或者 game over, 这样我们就会得到一个游戏的 trajectory(轨迹), 这个轨迹是每一步的状态,动作,奖励。
ChatGPT 强化学习步骤
从人类反馈中进行强化学习,该方法总体上包括三个步骤:
01 监督学习(SFT 模型), 预训练的语言模型在少量已标注的数据上进行调优,以学习从给定的 prompt 列表生成输出的有监督的策略。
02 训练奖励模型(reward): 标注者们对相对大量的 SFT 模型输出进行收集和排序,这就创建了一个由比较数据组成的新数据集。在此数据集上训练新模型,被称为训练奖励模型(Reward Model, RM)
03 强化学习(PPO 算法): 对 RM 模型用于进一步调优和改进 SFT 模型,PPO 输出结果的是策略模式
步骤一只进行一次,而步骤二和步骤三可以持续重复进行。
监督学习
工作原理:
① 数据收集: 选择一个问题列表, 标注人员按要求写下预期的输出. 可用于调优预训练的语言模型。
② 模型选择: ChatGPT 的开发人员选择了 GPT-3.5 系列中的预训练模型, 而不是对原始 GPT-3 模型进行调优。使用的基线模型是最新版的 text-davinci-003(通过对程序代码调优的 GPT-3 模型)
由于此步骤的数据量有限,该过程获得的 SFT 模型可能会输出仍然并非用户关注的文本,并且通常会出现不一致问题。
为了克服这个问题,使用的策略是让人工标注者对 SFT 模型的不同输出进行排序以创建 RM 模型,而不是让人工标注者创建一个更大的精选数据集。
训练奖励模型
奖励模型的目的是为 SFT 模型输出进行打分,代表这些输出对于人类来说可取程度有多大。即模仿人类偏好的系统。
工作原理:
选择问题列表,SFT 模型为每个问题生成多个输出(4 到 9 之间的任意值)
标注者将输出从最佳到最差排序。结果是一个新的标签数据集,该数据集的大小大约是用于 SFT 模型的精确数据集的 10 倍;
此新数据用于训练 RM 模型 . 该模型将 SFT 模型输出作为输入,并按优先顺序对它们进行排序。
模型选择: RM模型是GPT-3的蒸馏版本(参数量为6亿), 目的是通过该训练模型得到一个预测值(得分), 模型损失函数为下图表示:
强化学习
强化学习被应用于通过优化 RM 模型来调优 SFT 模型。所使用的特定算法称为近端策略优化(PPO).
工作原理:(明确任务:模型是通过 RL 来更新)
第一步:输入问题
第二步:将问题输入到 PPO 模型 (可以理解为 ChatGPT 模型), 得到输出结果。
第三步:将第二步得到的结果输入到 RM 奖励模型中,然后得到一个奖励分数。
如果奖励分数比较低,代表 ChatGPT 模型输出结果不对,此时需要利用 PPO 算法更新 ChatGPT 模型参数
第四步: 循环上述步骤, 不断更新ChatGPT、RM模型.
ChatGPT 特点
优点
回答理性又全面,ChatGPT 更能做到多角度全方位回答。
降低学习成本,可 以快速获取问题答案。
缺点
由于 ChatGPT 服务 不稳定。
对于部分任务比如: “查询某语言系统关键字”等,会给出没有意义的答案
思考总结
ChatGPT 模型原理?
答案:有监督的微调 + 奖励模型 + 强化学习
强化学习的关键信息?
答案:1.一种机器学习方法;2.关注智能体和环境的交互;3.目标追求最大回报。