一:GPT-1---预测未来
在自然语言中,大量的未标记文本语料库非常丰富,但是有标签的数据训练的效果比较好,如果想要在没有标签的数据集上训练出好的模型比较难。因此作者提出了一个想法,在无标签的数据上训练一个预训练模型,然后在这些有标签的子任务上训练一个微调模型。(当时之前是CV领域的主流做法)与以前的方法相比,在微调期间利用任务感知的输入转换来实现有效的迁移,同时只需要对模型体系结构进行最小的更改。(一)模型架构
GPT-1的模型架构基于Transformer的解码器(但是没有用针对编码器的注意力机制),由多个相同的Transformer块组成。跟RNN模型相比,transformer在迁移学习时学到的feature更稳健一些,可能是因为transformer更有结构化的记忆,使其能够处理更长的文本信息,从而能够抽取出更好的句子层面和段落层面的语义信息。 GPT-1的输入是一个固定长度的文本序列,输出是预测下一个单词的概率分布。 在GPT的时候,预训练语言模型时,是在自然的文本上训练的,但在下游任务时对输入进行了改造,加入了开始符、结束符和分隔符,这些符号模型在之前并不知道,但是因为有微调的环节,所以模型会认识这些符号。(二)训练过程
GPT1的训练主要分成无监督预训练和有监督微调两部分:- 无监督预训练指的是现在大规模语料下,训练一个语言模型
- 有监督微调指的是基于下游任务的标注数据进行模型参数调整
(三)GPT、Transformer、Bert
1.GPT为什么使用transformer的解码器?
GPT用于预测下一个单词,因此预测第i个词的时候,不会看到这个词的后面这些词是谁,而只能看到前面的,所以这个地方只能用Transformer的解码器,Transformer解码中包含了掩码机制,在对第i个元素抽特征的时候,它只会看到当前元素和它之前的这些元素,他后面那些元素会通过一个掩码,使得在计算注意力机制的时候变成0,所以不看后面的东西。2.GPT和Bert不同之处
预训练任务:
- BERT采用的是Masked Language Model (MLM)和Next Sentence Prediction (NSP) 两个任务。其中,MLM任务是将输入文本中的一部分随机被遮挡掉,然后模型需要根据上下文预测这些遮挡掉的词是什么;NSP任务则是判断两个句子是否是相邻的。这两个任务使得BERT在理解句子内部和句子之间的关系方面都具有很好的表现。
- GPT则采用的是单一的预测任务,即语言模型。该模型通过训练预测一个序列中下一个单词的概率分布,从而学习到文本中单词之间的关系。
训练数据:
- BERT的训练数据来自于网页文本和书籍,因此涵盖了非常广泛的领域和主题。
- 而GPT则主要采用了新闻和维基百科等文章,使其在学术和知识层面的表现更好。
网络结构
- BERT是一个双向的Transformer Encoder,通过自注意力机制来学习句子内部和句子之间的关系。
- 而GPT是一个单向的Transformer Decoder,仅通过自注意力机制学习句子内部的关系。
应用场景
- 由于BERT具有双向性和广泛的训练数据,因此在自然语言理解的任务中表现非常出色。
- GPT则在生成自然语言的任务中表现更加突出,比如文本摘要、对话生成和机器翻译等方面。
主要区别:在于两者要解决的问题不同
- Bert(完形填空),BERT主要用于自然语言理解的任务
- GPT(预测未来),而GPT则主要用于生成自然语言的任务
二:GPT-2---纯无监督预训练+zero shot+prompt使用
(一)摘要
1.参数量
与GPT相比,GPT-2模型更大,有12到48层,最大的48层包含1542M的参数量。- 在一个新数据集WebText上训练,是百万级别的;
- 提出GPT-2,参数量1.5B,15亿;
- 数据是从Reddit中爬取出来的优质文档,共800万个文档,40GB。
2.目标:无监督预训练+不需要微调---》prompt的使用
当前的机器学习对数据分布的微小变化脆弱而敏感,是狭隘的专家模型,而不是一个多面手。我们的目标是构建能执行很多任务的通用系统,最终不需要为每个任务创建和标准训练集。 之前工作大多是一个任务利用一个数据集;多任务学习在NLP中使用较少;目前最好方式还是预训练+微调。(包括前面的GPT-1都是先预训练,然后针对任务进行微调) 语言模型可以在zero-shot设定下实现下游任务,即不需要用有标签的数据再微调训练。 下游任务转向做zero-shot而放弃微调,相较于GPT,出现一个新的问题:GPT-2样本输入的构建不能保持GPT的形态,因为模型没有机会学习Start,Delim,Extract这些特殊token。 在做下游任务的时候,模型不能被调整,若引入之前模型没有见过的符号的话,模型并不认识,所以在构造下游任务的输入时,不能引入模型没有见过的符号,而是要使得整个下游任务的输入,跟之前预训练的输入文本一样。 GPT-2使用一种新的输入形态:增加文本提示,后来被称为prompt(不是GPT-2第一个提出,他使用的是18年被人提出的方案)。3.Zero-shot
Zero-shot学习(ZSL)是机器学习领域的一种先进方法,它旨在使模型能够识别、分类或理解在训练过程中未见过的类别或概念。 Zero-shot学习的核心在于将从训练数据中学到的知识(如特征、模式或关系)转移到未见过的类别上。- Fine-tuning:预训练 + 训练样本计算loss更新梯度,然后预测。会更新模型参数
- Zero-shot:预训练 + task description + prompt,直接预测。不更新模型参数(0个样本)
- One-shot:预训练 + task description + example + prompt,预测。不更新模型参数(1个样本)
- Few-shot:预训练 + task description + examples + prompt,预测。不更新模型参数(10-100个小样本)
(二)结论
1.GPT2与GPT的不同,除了上面说的参数、zero-shot,还包括下面:
- 把normalization放到前面
Pre-Normalization(Pre-Norm,层前归一化):与原始Transformer的Post-Norm(层后归一化)不同,LLaMA采用了Pre-Norm策略,即将层归一化层置于自注意力和前馈神经网络层之前。这种方法有助于稳定训练过程,尤其是在深层网络中,可以缓解梯度消失或爆炸的问题。
为了提高训练稳定性,LLaMa 对每个 Transformer 子层的输入进行归一化,而不是对输出进行归一化
模型越大,世界知识越多,zero-shot效果更好,所以考虑用更多的数据,做更大的模型。
于是GPT-3应运而生!
三:GPT-3---暴力出奇迹
(一)摘要
GPT-2虽然提出zero-shot,比bert有新意,但是有效性方面不佳。GPT-3考虑Few-Shot,用少量文本提升有效性。 GPT-3的可学习参数达到1750亿,是之前的非稀疏语言模型的10倍以上(稀疏模型是指很多权重是0,是稀疏的),并在few-shot的设置上测试它的性能。 对于所有子任务,GPT-3的模型和GPT-2一样,GPT-3不做任何的梯度更新或者是微调。因为做子任务时不需要计算梯度,因为参数量很大参数很难调。GPT3不需要做任何的梯度更新,也是其一大特点。 GPT3能生成一些新闻类的文章,而且人类读起来是很难区分的(二)模型
在所有NLP模型中,GPT-3在两个方面达到了史无前例的高度:- 一是参数量,达到了1750亿,比刚推出时世界最大NLP模型Tururing大10倍,比同系列的GPT-2高出116倍。
- 二是数据集,具体数值很难估计。不过,英语维基百科的全部内容(涵盖约600万篇文章)仅占其训练数据集的0.6%。除此之外,它还涵盖了其他数字化书籍和各种Web链接。这意味着数据集的文本类型非常丰富,包括新闻报道、诗歌、小说、宗教、科学、生活等等。人类所能查询到的知识领域均在其中。(也可能存在不良内容的风险)只有通过庞大的知识库的训练,才能把GPT-3培养成一个“全才”,这也是为什么在用户体验中,GPT-3可以不分学科完成所有文本生成任务。
- GPT-3采用了一种Sparse Transfromer模型。我们知道,Transformer是谷歌研发的一款功能强大的序列模型,最早用在BERT模型中。该模型最大的特点是采用自注意力机制(self-attention)改善了RNN训练慢的缺点。GPT-3同样采用了 Transformer架构,不同的是它融合了一种稀疏式自注意力机制(Sparse Self-attention Layers),与传统Transfromer模型相比,它可以更好的处理长文档,操作简单,同时在zero-shot和few-shot训练中达到了最佳性能。
稀疏自注意力是一种改进的自注意力机制,用于提高计算效率和减少计算复杂度。
在传统的自注意力机制中,每个输入元素(token)都需要与所有其他输入元素计算注意力权重,这导致了计算复杂度为 (O(N^2))(其中 (N) 是序列长度)。当序列长度很大时,这种计算复杂度会变得非常高,难以处理长序列。
稀疏自注意力通过引入稀疏矩阵,使得每个输入元素只与部分输入元素计算注意力权重,从而降低计算复杂度。
除了上面区别之外,GPT-3模型和GPT-2一样,GPT-3是不做梯度更新的few-shot(可以认为GPT-2是不做梯度更新的zero-shot,因为没有样例,就不用更新),是将一些有标签的样例放在预测文本的上下文。
(三)数据集生成
爬取一部分低质量的Common Crawl作为负例,高质量的Reddit作为正例(加入之前gpt,gpt-2,bert中使用的高质量的数据),进行对抗学习,去预测它属于正例还是负例。接下来对所有Common Crawl数据进行预测如果属于正例,则采纳他作为GPT3的数据集)+去重(lsh)lsh算法
主要用于大数据规模时,计算两两之间的相似度。基本思想:基于一个假设,如果两个文本在原有数据空间是相似的,那么他们分别经过哈希函数转换以后的他们也具有很高的相似度。 LSH(局部敏感哈希)是一种哈希技术,用于在大规模数据集中快速找到相似的数据项。LSH可以通过构建一个函数集来实现,这个函数集能够将数据项映射到一个哈希桶中,使得相似的数据项落入同一个桶中的概率很高,而不相似的数据项分散到不同的桶中。(四)问题
1.局限性
- 生成长文本依旧困难,比如写小说,可能还是会重复;
- 语言模型只能看到前面的信息(旧的信息,实时的获取不了);
- 语言模型只是根据前面的词均匀预测下一个词,而不知道前面哪个词权重大;
- 只有文本信息,缺乏多模态;
- 样本有效性不够;
- 模型是从头开始学习到了知识,还是只是记住了一些相似任务,这一点不明确;
- 可解释性弱,模型是怎么决策的,其中哪些权重起到决定作用?
2.负面影响
可能会生成假新闻;可能有一定的性别、地区及种族歧视四:GPT3.5 (Instruct GPT)---人类反馈强化学习
(一)背景
GPT-3纵然很强大,但是对于人类的指令理解的不是很好,只要人类说的话不属于GPT-3的范式,他几乎无法理解,并且GPT-3 被训练来预测大型互联网文本数据集上的下一个单词,而不是安全地执行用户想要的语言任务,是“预测网页上文本的下一句话”,而不是“安全的忠实的完成用户的命令”。 本文中,InstructGPT采用基于人类反馈的强化学习(RLHF)来不断微调预训练语言模型(LLM),旨在让模型能够更好地理解人类的命令和指令含义,使语言模型在各种任务上与用户意图保持一致。并且给语言模型定下了3H的目标:- helpful 要能够帮助用户完成指定的任务
- honest 不要编造事实或者误导读者
- harmless 不要带有害信息和偏见
(二)技术架构
对语言模型,为了达到上面的3H目标, 这篇文章开始了fine tuning。核心技术就是使用来自人类反馈中强化学习(RLHF)来fine tune GPT-3,使得GPT-3模型能够执行指定的任务。因为安全和对齐问题是复杂且主观的,无法通过简单的自动指标完全捕获,所以使用人类偏好作为奖励信号这种技术来微调模型。 整个fine tune过程分为三个步骤:- 有监督微调:首先作者雇佣了40人,对每个prompt,写出期待的输出,用来训练监督学习的baseline。
- 奖励模型训练:对于更大范围的prompt,对比模型输出和人类标注的输出,从而训练一个奖励模型。
- 强化学习训练:使用这个奖励模型做RF来fine-tune第一步生成的baseline,最大化reward。
1.有监督微调(需要人工标注)
先简单地微调一下GPT-3,需要人工标注:- 工程师团队设计了一个prompt dataset,里面有大量的提示文本,这些文本介绍了任务是啥。
- 把这个prompt dataset发给人类标注员进行标注,其实就是回答问题。
- 用这个标注过的数据集微调GPT-3。
2.奖励模型训练(需要人工标注)
训练一个奖励模型,需要人工标注,目的是让RM模型(主要作用是对生成的文本进行打分排序)学习人类导师对GPT-3输出的答案的排序的能力,最终K取的是9,也就是需要对9个输出结果排序,控制好的答案和差的答案之间的奖励分数差要大,使得sigmoid中的差值大,log中的趋于1,损失趋于0。- 拿这个微调过的GPT-3去预测prompt dataset里面的任务,获得一系列结果,图中是四个。
- 把这四个结果交给人类标注员进行标注,把预测的结果从好到坏进行标注。
- 用这些标注的结果训练一个奖励模型(reward model),这个模型在下一步会用到。
3.强化学习训练(不用任何人工标注)---强化学习来增强预训练模型
用PPO(所有PPO是在策略梯度更新的基础上,添加一个约束,希望每次更新策略差异不要太大)持续更新策略的参数,不用任何人工标注。使用GPT-3预测prompt dataset中的文本,这里GPT-3被一个策略包装并且用PPO更新。用第二步训练好的奖励模型给策略的预测结果打分,用强化学习术语说就是计算reward。这个计算出来的分数会交给包着GPT-3内核的策略来更新梯度。4.总结:
就是结合了监督学习和强化学习。监督学习先让GPT-3有一个大致的微调方向,强化学习用了AC(Actor-Critic)架构里面的近端策略优化PPO(Proximal Policy Optimization)更新方法来更新GPT-3的参数。PPO是OpenAI的baseline method,可以说使用PPO是InstructGPT非常重要的一个选择。(三)模型评估
1.3B 参数 InstructGPT 模型的输出优于 175B GPT-3 的输出,且参数少了 100 多倍。 这些模型具有相同的架构,唯一不同的是 InstructGPT 是根据人类数据进行微调的。- InstructGPT 模型在真实性方面比 GPT-3 强
- InstructGPT 与 GPT-3 相比有害性上略有改善,但偏差并没有改善。
- 可以通过修改RLHF 微调程序来最小化公共 NLP 数据集的性能回归。(性能回归测试regression tests是一种比较方法,用于检查软件应用程序在连续构建中的性能。通俗地讲,如果第二个版本基于第一个版本之上,那么认为第二个版本在几乎所有指标上都取得比第一个版本更好的性能,才算通过第二个版本的性能回归测试。)
- 模型不产生任何训练数据的“保留”标签的偏好。
- InstructGPT 模型显示了对 RLHF 微调分布之外的指令的有前途的泛化。
- InstructGPT 仍然会犯一些简单的错误。 例如,InstructGPT仍然可能无法遵循指令、编造事实、对简单问题给出长对冲答案,或者无法检测到带有错误前提的指令。
(四)补充一下chatgpt
ChatGPT 是基于 GPT3.5 的基础模型框架,核心变化在于通过真实的调用数据以及人类反馈的强化学习进行训练。ChatGPT3.5 主要用于自然语言处理、机器翻译等任务,而 ChatGPT3.5-Turbo 拥有更强大的强度,可用于更复杂的语言分析,比如情感分析、语法结构分析。所以,ChatGPT 和 GPT3.5 是同一系列的产品,但 ChatGPT 是在 GPT3.5 的基础上进行了改进和优化。五:GPT4---多模态
(一)架构
GPT-4 是一个大型多模态模型(接受图像和文本输入,发出文本/图像输出),GPT-4模型是基于GPT-3.5构建的,增加了视觉语言模型组件:(二)3.5/4的区别
- GPT3.5和GPT4的最大不同之处在于规模,GPT3拥有175B参数,而GPT4拥有3.3T参数,可以有效地解决复杂语言任务。
- GPT4使用了树型推理(Tree-Based Reasoning)来完成建模,这使得GPT4更加稳定、精确、高效。GPT4的模型可以有效地解决自然语言交互(NLU)和自然语言理解(NLU)等复杂NLP任务。
- 更创造性的写作能力,包括编歌曲、写剧本、学习用户写作风格
- 可以接受图片输入(暂不可用)、并生成字幕等
- 可以处理超过25000字长文本
- 智能程度大幅提升。以美国BAR律师执照统考为例:GPT3.5可以达到10%水平分,GPT4可以达到90%水平分。生物奥林匹克竞赛从GPT3.5的31%水平分,直接飙升到99%水平分,国际奥赛金奖水准。