GPT-1
简介
2018年6月,OpenAI公司发表了论文"Improving Language Understanding by Generative Pretraining"(用生成式预训练提高模型的语言理解能力), 推出了具有 1.17亿个参数的GPT-1(Generative Pre-training,生成式预训练)模型。
GPT-1 采用 传统的语言模型方法进行预训练,即使用单词的上下文来预测单词,使得GPT更擅长自然语言生成任务(NLG), 而BERT更擅长处理自然语言理解任务(NLU)
模型架构
下图中间的就是GPT-1:
从上图可知,GPT采用的是 单向Transformer模型。例如给定一个句子\([u_1,u_2, ..., u_n]\),GPT-1在预测单词\(u_i\)的时候,只会利用\([u_1, u_2, ..., u_{n-1}]\) 的信息,而BERT会同时利用上下文的信息\([u_1, u_2, ..., u_{(i-1)}, u_{(i+1)},.., u_n]\)
训练过程
GPT-1的训练包括两阶段过程:1. 无监督的预训练语言模型;2.有监督的下游任务fine-tunning
无监督的预训练语言模型
给定句子\(U=[u_1, u_2, ..., u_n]\),GPT训练语言模型时的目标是 最大化下面的似然函数:
\[L_1(U)=\sum_ilogP(u_i|u_{i-k},...,u_{i-1};\theta) \]上述公式含义即:预测每个词\(u_i\) 的概率,这个概率是基于它前面\(u_{i-k}\)到\(u_{i-1}\),以及模型\(\theta\)
这里的k表示上文的窗口大小,理论上,k取得越大,模型所能获取的上文信息越充足,模型的能力越强。
GPT-1是一个 单向语言模型,模型对输入U进行特征嵌入得到transformer第一层的输出\(h_0\),再经过多层transformer 特征编码,使用最后一层的输出即可得到当前预测的概率分布,计算过程如下:
\[h_0 = UW_e + W_p \]\(W_p\)代表单词的位置编码,形状为\([max\_seq\_len, embedding\_dim]\),\(W_e\)的形状为\([vocab\_size, embedding\_dim]\)
得到输入张量\(h_0\)后,要将\(h_0\)传入GPT的 Decoder Block中,依次得到\(h_t\):
\[h_t = transformer\_block(h_{l-1}) l \in[l,t] \]最后通过得到的\(h_t\)来预测下一个单词:
\[P(u)=softmax(h_tW_e^T) \]有监督的下游任务fine-tunning
GPT预训练后,会针对具体的下游任务队模型进行微调
微调采用的是 有监督学习,训练样本包括单词序列\([x_1, x_2, ..., x_n]\)和label y
GPT微调的目标任务:根据单词序列\([x_1, x_2, ..., x_n]\)预测标签y
其中,\(W_y\)表示预测输出的矩阵参数,微调任务的目标是最大化下面的函数:
\[L_2 = \sum_{(x,y)}log{P(y|x^1, ..., x^m)} \]综合两个阶段的目标任务函数,可知GPT的最终优化函数为:
\[L_3 = L_2 + \lambda L_1 \]整体训练过程架构图
根据下游任务适配的过程分两步:
- 根据任务定义不同输入
- 对不同任务增加不同的分类层
具体定义可以参见下图:
GTP数据集
GPT使用了BooksCorpus数据集,文本大小约5GB,包含7400W+的句子。这个数据集由7000本独立的、不同风格类型的书籍组成,选择该部分数据集的原因:
-
- 书籍文本包含大量高质量长句,保证模型学习长距离信息依赖
-
- 书籍未开源公布,所以很难在下游数据集上见到,更能体验模型的泛化能力
GPT模型的特点
模型的一些关键参数为:
优点
- GPT在9个任务上的表现sota
- 更易于并行化
缺点
- GPT-1语言模型是单向的
- 针对不同的任务,需要不同数据集进行模型微调,相对比较麻烦
PS:
- GPT-1的模型架构?
答:Transformer的Decoder模块(去掉中间第二个子层) - GPT-1预训练任务?
答:1.无监督预训练;2.有监督任务微调 - GPT-1模型基本参数?
答: 12层,12个head,768维,参数量1.17亿
GPT-2
简介
2019年2月,OpenAI推出了GPT-2,同时,发表了该模型的论文"Language Model are Unsupervised Multitask Leaners"(语言模型是无监督的多任务学习者)
相比于GPT-1,GPT-2突出的思想为多任务学习,其目标旨在仅采用无监督预训练得到一个泛化能力更强的语言模型,直接应用到下游任务中。 GPT-2并没有对GPT-1的网络结构进行过多的创新与设计,而是使用了更多的网络参数与更大的数据集:最大模型共计48层,参数量达15亿
GPT-2模型架构
在模型方面,相对与GPT-1,GPT-2做了微小的改动:
-
LN层被放置在Self-Attention层和Feed Forward层前,而不是像原来那样后置(目的:随着模型层数不断增加,梯度消失和梯度爆炸的风险越来越大,这些调整能够减少预训练过程中各层之间的方差变化,使梯度更加稳定)
-
在最后一层Transformer Block后增加了LN层
-
输入序列的最大长度从512扩充到1024
GPT-2 训练核心思想
GPT-2模型的学习目标:使用无监督的预训练模型做有监督的任务
GPT-2模型目的:模型从大规模数据中学到的能力能够直接在多个任务之间进行迁移,而不需要额外提供特定任务的数据进行Fine-Tuning
因此,GPT-2提出了新的观点:zero-shot,通过zero-shot,在迁移到其他任务上的时候不需要额外的标注数据,也不需要额外的模型训练
GPT-2的训练只包括无监督的预训练过程,和GPT-1第一阶段训练一样,也属于一个单项语言模型:
- 语言模型其实也是在给序列的条件概率建模,即\(p(s_n|s_1, s_2, ..., s_{n-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的效果,必须要足够大且覆盖面广
- GPT-2专门爬取了大量的网络文本数据,GPT-2的文章取自Reddit上高赞的文章,命名为WebText
- 数据集共有约800万篇文章,累积体积约40G
- 为了避免和测试集的冲突,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 亿参数
- 4。 模型架构调整,层归一化
-
- 训练参数,batch_size 从 64 增加到 512,上文窗口大小从512 增加到 1024
优点:
- 文本生成效果好,仅通过zero-shot学习,就有7个任务超过之前sota的方法
- 海量数据和大量参数训练出来的词向量有迁移到其他类别任务中而不需要额外训练
缺点:
- 无监督学习能力有待提升
- 有些任务上的表现不如随机
GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间。也正是基于这个思想,诞生了GPT-3
PS:
-
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^2)\)
- 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 learning核心思想在于 通过少量的数据寻找一个合适的初始化范围,是的模型能够在有限的数据集上快速你和,并获得不错的效果。
以"英语到法语的翻译任务"为例,对比传统的微调策略和GPT-3三种情境学习方式:
虽然in-context learning与fine-tuning一样都需要一些有监督标注数据,但两者的区别在于:
- fine-tuning基于标注数据对模型参数进行更新,而In-context learning使用标注数据时不做任何的梯度回传,模型参数不更新
- In-context learning 依赖的数据量(10 ~ 100)远远小于fine-tning一般的数据量
GPT-3通过大量下游任务实验验证:few-shot效果最佳,one-shot效果次之,zero-shot效果最差
GPT-3数据集
一般来说,模型的参数越多,训练模型所需要的数据就越多,GPT-3共训练了5个不同的语料大约45TB的文本数据。
不同数据的介绍:
- 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 模型的特点
优点:
- 整体上,GPT-3在zero-shot或one-shot设置下能取得尚可的成绩,在few-shot设置下有可能超过基于fine-tunel的SOTA模型
- 去除了fine-tuning任务
缺点: - 由于40TB海量数据的存在,很难保证GPT-3生成的文章不包含一些非常敏感的内容
- 对于部分任务比如:“填空类型”等,效果具有局限性
- 当生成文本长度较长时,GPT-3可能重复生成一段话,前后矛盾,逻辑衔接不好等
- 陈本太大
PS:
-
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)
强化学习
理解强化学习基本要素,这里以flappy bird为代表,讲解强化学习的基本要素:
如何让AI实现自动打游戏?
ChatGPT强化学习步骤
从人类反馈中进行强化学习,该方法总体包括三个步骤:
-
- 监督学习(SFT 模型), 预训练的语言模型在少量已标注的数据上进行调优, 以学习从给定的 prompt 列表生成输出的有监督的策略
-
- 训练奖励模型(reward): 标注者们对相对大量的 SFT 模型输出进行收集和排序, 这就创建了一个由比较数据组成的新数据集. 在此数据集上训练新模型, 被称为训练奖励模型(Reward Model, RM)
-
- 强化学习(PPO算法): 对RM 模型用于进一步调优和改进 SFT 模型, PPO 输出结果的是策略模式
步骤1,只进行一次,步骤二和步骤三可以持续重复执行
- 强化学习(PPO算法): 对RM 模型用于进一步调优和改进 SFT 模型, PPO 输出结果的是策略模式
监督学习
工作原理:
训练奖励模型
奖励模型的目的是为 SFT 模型输出进行打分, 代表这些输出对于人类来说可取程度有多大. 即模仿人类偏好的系统.
强化学习
强化学习被应用于通过优化 RM 模型来调优 SFT 模型. 所使用的特定算法称为近端策略优化(PPO).
ChatGPT特点
特点
- 回答理性又全面,ChatGPT更能做到多角度全方位回答
- 降低学习成本,可以快速获取问题答案
缺点
- 由于ChatGPT服务不稳定
- 对于部分任务比如:查询某语言系统关键字等,会给出没有意义的答案
PS:
- ChatGPT模型原理?
答:有监督的微调 + 奖励模型 + 强化学习 - 强化学习的关键信息?
答:1. 一种机器学习方法;2. 关注智能体和环境的交互;3. 目标追求最大化