GPT系列
大模型
GPT演进路线图
预备知识
- 了解 Transformer 基本知识(模型结构、Self Attention原理等等)
- 强化学习算法PPO(Instruct GPT需要)
GPT-1
论文:《Improving Language Understanding by Generative Pre-Training》
GPT(Generative Pretrained Transformer)
首先使用未标注的数据训练一个预训练语言模型,然后再使用有标注的数据在子任务上做微调(Pre-train + Fine-tune)。
下图为Transformer Decoder 和 GPT1结构图的对比
GPT只能关注上文的信息,无法关注到下文的信息。
无监督预训练
GPT使用标准的语言模型的目标函数来最大化似然函数:
语言模型就是要预测第 i 个词出现的概率
Transformer 编码器和解码器的区别:输入一个序列到编码器中,对第 i 个元素抽取特征的时候,可以看到整个序列的所有元素,而对于解码器来说,因为有掩码的存在,在对第 i 个元素抽取特征的时候,只能看到当前元素和它前边的元素,它后边的元素通过一个掩码使得在计算注意力机制的时候变为0。
GPT和BERT的区别:
BERT 用的不是标准的语言模型,用的是一个带掩码的语言模型,是一个完形填空,给定一个句子,把中间的词挖掉,然后预测中间的那个词,在预测这个词的时候既能看到它之前的词,又能看到它之后的词,所以用的是Transformer 的编码器。
主要区别在于两者目标函数的选取:GPT的预测更难,只通过前边的来预测下一个词。
有监督的微调
语言模型的基于最大似然估计损失函数
作者发现把预训练目标作为辅助目标加入下游任务loss中,将会提高有监督模型的泛化性能,并加速收敛。因此,有监督任务的最终优化目标是:
训练
GPT数据集:
- BooksCorpus:7000多本未出版的书籍
- Word Benchmark:10亿
GPT模型大小:12层,768维
参数量:1.17亿
BERT数据集:
- BooksCorpus:8亿个词
- English Wikipedia:25亿词
BERT大小:
- base:12层,768维(对标GPT)
- large:24层,1024维
GPT和BERT实验对比
GPT 先于 BERT
GPT-2
论文:《Language Models are Unsupervised Multitask Learners》
图解GPT-2:https://jalammar.github.io/illustrated-gpt2/
增大数据集 + 增大模型 + zero-shot
GPT-2试图通过增大模型、增加数据量来超越BERT,但是最终结果不理想,所以使用了 Zero-Shot 来作为该论文的创新点。
通过任务提示来训练一个预训练模型,然后无需进行有监督的fine-tune就可以执行下游任务。
比如翻译任务可以输入为(translate to french, english text, french text)
,
阅读理解任务可以输入为 (answer the question, document, question, answer)
。
数据集:
- 网页爬取:WebText 只抓取了人类策划/过滤的网页,800万文档(40G)
输入表示
BPE(Bype Pair Encoder)这种输入表示能够将词级 LM 的经验优势与字节级方法的通用性相结合。由于我们的方法可以为任何 Unicode 字符串分配一个概率,这允许我们在任何数据集上评估我们的 LM,而不管预处理、标记化或词汇大小。
模型
与 GPT1 类似,有如下的修改
-
层归一化移动到每个子块的输入,并且在最终的子注意力块之后额外添加了一个层归一化(Post-Norm 改为 Pre-Norm)
同一设置下,Pre-Norm会更容易训练,单最终效果不如 Post-Norm。
Post-Norm 在残差层后归一化,对参数正则化效果更强,进而模型的鲁棒性更好
Pre-Norm 相对于 Post-Norm,因为有一部分参数直接加在了后面,不需要对这部分参数进行正则化,正好可以防止模型的梯度消失或爆炸,如果层数少,Post-Norm效果好,层数多,为保证模型的训练,Pre-Norm更好。
现在的大模型为了训练的稳定性,基本上都使用的是 Pre-Norm。 -
改进初始化:按残差层个数进行缩放,缩放比例为 1 N \frac{1}{\sqrt{N}} N1, N N N 是残差层数
当子模块的深度堆叠多层时,为了确保训练的稳定性并防止梯度消失或爆炸,将残差层的权重缩放是一个常用的策略。当一个Transformer有12个堆叠的层,每个层都有一个注意力模块和一个前馈神经网络模块,那么这个模型将有24个残差层。这样的缩放确保了当输出的值相对大时,残差连接不会对模型产生过大的影响,从而帮助模型更稳定地训练
-
词汇表扩展到 50257
-
上下文大小从 512 增加到 1024,使用 512 的batch size
-
transformer block 的层数从12层扩大到48层(transformer 6 层,GPT1 12层,GPT2 48层)
-
特征向量维度从GPT1的768维扩大到1600维(transformer 512维,GPT1 768维,GPT2 1600维)
四种参数大小的模型:
实验
zero-shot
GPT-2的最大贡献就是验证了通过海量数据和大量参数训练出来的语言模型,可以迁移到下游其他任务,无需额外训练和fine-tune。通过Prompting方法调动了zero-shot学习的能力。但大量实验表明,GPT-2的无监督学习能力还有很大的提升空间,GPT-2在很多不同的task中,有些表现良好,但在某些领域仍然表现欠佳,比如summarization、QA等。作者提出,模型容量仍然是无监督模型在问答领域表现不佳的主要原因。随着模型参数量的增加,GPT-2的效果也会稳步提升,这就有了未来GPT-3的大力出奇迹。
GPT-3
论文:《Language Models are Few-Shot Learners》
Few-shot(in-context learning 不做梯度)、模型大、数据多、效果好
在推理的时候,在prompt中提供一些示例供模型学习,以更好的回答问题:
模型
相对于 GPT-2 的修改:使用了 Sparse Transformer 来减少参数量。
包括多种大小的模型:
数据集
- 根据与一系列高质量参考语料库的相似性下载和过滤了 CommonCrawl 版本
- 文档级别、内部和跨数据集执行模糊重复数据删除,以防止冗余并保持验证集的完整性作为过度拟合的准确度量
- 已知的高质量参考语料库
局限性
虽然 GPT-3 取得了非常亮眼的效果,但是出于严谨的学术态度,论文里还是客观的分析了自己的一些局限性:
-
当生成文本长度较长时,GPT-3 还是会出现各种问题,比如重复生成一段话,前后矛盾,逻辑衔接不好等等;
-
模型和结构的局限性,对于某一些任务,比如填空类型的文本任务,使用单向的自回归语言模型确实存在一定的局限性,这时候如果同时考虑上文和下文的话,效果很可能会更好一些;
-
预训练语言模型的通病,在训练时,语料中所有的词都被同等看待,对于一些虚词或无意义的词同样需要花费很多计算量去学习,无法区分学习重点;
-
样本有效性或者利用率过低,训一个模型几乎要把整个互联网上的文本数据全都用起来,这与我们人类学习时所需要的成本存在非常大的差异,这方面也是未来人工智能研究的重点;
-
有一个不太确定的点是,模型到底是在“学习”还是在“记忆”?我们当然希望它能够学习,但是在使用数据量如此大的情况下,很难去判断它到底是什么样的;
-
众所周知,GPT-3 的训练和使用成本都太大了;
-
GPT-3 跟很多深度学习模型一样,都是不可解释的,没办法知道模型内部到底是如何作出一系列决策的;
-
模型最终呈现的效果取决于训练数据,这会导致模型会出现各种各样的“偏见”;
GPT-3 的发展路线
Codex
论文:《Evaluating Large Language Models Trained on Code》
为了具备代码/推理能力:GPT3 + 代码训练 = Codex)
InstructGPT
为了更好理解人类:GPT3 + 指令学习 + RLHF = instructGPT
使用标注的数据集在比GPT-3小100倍的模型微调的效果甚至比GPT-3还要好一点(标注的数据信噪比更小)
GPT-3 虽然在各大 NLP 任务以及文本生成的能力上令人惊艳,但是他仍然还是会生成一些带有偏见的,不真实的,有害的造成负面社会影响的信息,而且很多时候,他并不按人类喜欢的表达方式去说话。在这个背景下,OpenAI 提出了一个概念“Alignment”,意思是模型输出与人类真实意图对齐,符合人类偏好。因此,为了让模型输出与用户意图更加 “align”,就有了 InstructGPT 这个工作。
InstructGPT总共干了三件事情:
1、将 prompt 和答案标出来,然后用最正常的 GPT 微调出一个模型;
2、训练一个奖励模型去拟合人对模型中多个输出之间的排序,训练好之后将其放入到强化学习的框架中;
3、通过强化学习模型调整 SFT 模型,使得输出的结果在排序上更符合人的喜好。
ChatGPT
ChatGPT的训练流程与InstructGPT是一致的,差异只在于
- InstructGPT(有1.3B 6B 175B参数的版本),是在GPT-3(原始的GPT3有1.3B 2.7B 6.7B 13B 175B等8个参数大小的版本)上做Fine-Tune
- 22年11月份的初版ChatGPT是在GPT-3.5上做Fine-Tune
GPT-4
GPT-4是一个大型多模态模型(Large Multimodal Model),能够接受图像和文本输入,并输出文本。 OpenAI首先发布了GPT-4的文本输入功能,图像输入功能敬请期待。
实验表明,GPT-4 在各种专业和学术考试中表现出了与人类水平相当的性能(human-level performance)。例如,它通过了模拟律师考试,且分数在应试者的前 10% 左右;相比之下,GPT-3.5 的得分在倒数 10% 左右。
GPT-4的训练稳定性是史无前例的,这得益于对抗性测试计划和来自于ChatGPT的经验教训,对 GPT-4 进行迭代调整,从而在真实性、可控性等方面取得了有史以来最好的结果。
在过去的两年里,OpenAI重建了整个深度学习堆栈,并与Azure共同设计了一台超级计算机以便于应付他们的工作负载。 将继续专注于可靠的扩展,进一步完善方法,以帮助其实现更强大的提前预测性能和规划未来的能力,这对安全至关重要。
OpenAI还开源了OpenAI Evals,这是他们的自动化评估AI模型性能的框架,任何人都可以提交他们模型的缺陷以帮助改进。
OpenAI 正在通过 ChatGPT 和 API(有候补名单)发布 GPT-4 的文本输入功能。图像输入功能方面,为了获得更广泛的可用性,OpenAI 正在与其他公司展开合作。
OpenAI 还在为机器学习模型设计的传统基准上评估了 GPT-4。GPT-4 大大优于现有的大型语言模型,以及大多数 SOTA 模型
GPT-4 新特性
- 重点强化了创作能力,作曲,写小说,能够生成歌词、创意文本、实现风格变化等
- 强大的识图能力,除本身带了对于图片 OCR 外,还有对位置和细节的理解能力。解析报表图片并进行汇总,直接回答图片中包含的提问内容等
- 增加了对于长文本的处理能力:GPT-4 文字输入限制提升至 2.5 万字,ChatGPT 4096字
- 回答准确性显著提高
- 多了一种新的交互方式,就是对于图片的理解
参考文献
GPT,GPT-2,GPT-3论文精读
https://github.com/Mooler0410/LLMsPracticalGuide
拆解追溯 GPT-3.5 各项能力的起源
ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT