从 GPT1 - GPT4 拆解
- 从 GPT1 - GPT4
- GPT1:更适用于文本生成领域
- GPT2:扩展数据集、模型参数,实现一脑多用(多个任务)
- 复现 GPT2
- GPT3:元学习 + 大力出奇迹
- 复现 GPT3
- InstructGPT:指示和提示学习 + 人工反馈强化学习 RLHF
- 复现 InstructGPT
- GPT3.5:思维链CoT + InstructGPT
- GPT4
论文:
- Improving Language Understanding by Generative Pre-Training
- Language Models are Unsupervised Multitask Learners
- Language Models are Few-Shot Learners
- Training language models to follow instructions with human feedback
- GPT-4 Technical Report
- Can large language models provide useful feedback on research papers? A large-scale empirical analysis
从 GPT1 - GPT4
大语言模型构建流程:
- 预训练阶段:使用大量数据构建基础模型,赋予模型生成文本和理解世界知识的能力
- 有监督微调阶段:使用高质量数据集对模型进行细化,增强其理解和执行指令的能力
- 奖励建模阶段:构建模型以评估文本质量,为强化学习提供基础
- 强化学习阶段:根据用户反馈调整模型,以生成更高质量的文本
训练数据:
GPT1:更适用于文本生成领域
GPT-1:仅使用Transformer的解码器部分。
- 左图 Transformer
- 右图 GPT
是一个自回归模型,使用了单向(从左到右)的训练方式。
它预测下一个词是基于之前所有词的。
其自回归特性,它更擅长根据之前的上下文生成文本。
主要用于文本生成任务,如文本补全、翻译、摘要等。
12 个(图中12x)Transformer的解码器 组成:
左边:
- 展示了模型的主要组件,包括12层的堆叠结构
- 这些层包括文本和位置嵌入层(Text & Position Embed),多头遮蔽自注意力(Masked Multi Self Attention),层归一化(Layer Norm),和前馈网络(Feed Forward)。
- 在顶部是文本预测分类器(Text Prediction Classifier),用于输出模型预测的结果。
右边:
- 展示了该模型如何被应用于四种不同的NLP任务:分类(Classification)、蕴含(Entailment)、相似性(Similarity)和多项选择(Multiple Choice)。
- 每种任务的处理流程都有所不同,但都遵循着开始(Start)、文本(Text)/前提(Premise)/假设(Hypothesis)/答案(Answer)等部分的提取(Extract),之后通过Transformer处理,最后通过一个线性层(Linear)得到结果。
- 这些流程说明了模型如何处理不同类型的输入,如在相似性任务中比较两段文本,在多项选择任务中从多个选项中选择一个答案等。
无监督预训练:
给定一个无标签的序列u={u1,···,un},优化目标是最大化下面的似然函数:
这个公式描述的是一个语言模型的工作原理,一步步拆解:
- 首先,你有一串没有标记的词语,就像一串珍珠,我们叫它
u
。这串珍珠里每一颗都有它的位置,比如u1, u2, ... , un
,就像是第1颗, 第2颗, ... , 最后一颗
。 - 要猜每颗珍珠(每个词)是什么,只能看它前面几颗珍珠(前面的词)。这就是
L1(U)
这个公式告诉我们的,我们要尽可能地猜得准确,这样游戏得分就会越高。 - 游戏开始前,我们给每颗珍珠配上了一个
UWe
,让它们看起来更容易被识别,还有一个计分板Wp
记录分数。 - 然后,我们开始一轮轮游戏,每一轮我们都用
transformer_block
来帮助我们,让我们更好地猜下一颗珍珠。这个超级电脑每轮都会变得更聪明。 - 最后,当我们猜完所有的珍珠后,超级电脑会使用
softmax
来告诉我们每颗珍珠最可能是什么。
你在玩一个猜词游戏,你要猜的不是珍珠,而是一连串的词,电脑会帮你记住前面的词,然后猜下一个词。
你想让你的得分越高越好,因为这意味着你猜的越准确。
游戏规则,就是最大化这个似然函数L1(U)
,这个函数告诉我们我们的猜词游戏得分多高。
有监督的精调:
对于有标签的数据集C,每个实例有m个输入token{x1,...,xm} 和标签y组成
就像教一台机器分辨不同的水果一样。
在这个任务中,每个水果(比如苹果、香蕉、橘子)都有一些特征(比如形状、颜色、大小),这些特征就像是输入的tokens(令牌)。
- 第一部分(P(y|x1,…,xm)):预测标签的概率
- 这个部分的公式是在计算机器根据水果的特征来预测这个水果是什么的概率。
- 比如,给定一个水果的形状、颜色和大小,机器会计算出这个水果是苹果、香蕉还是橘子的概率。
- "softmax"是一种特殊的数学函数,它可以把输入的数据转换成概率,使得所有可能的水果的概率加起来总和是1。
- 第二部分(L_2©):损失函数
- 这部分是一个“损失函数”,它用来衡量机器的预测有多准确。
- 如果机器的预测很准确,这个损失值会很小;如果预测不准确,损失值就会变大。
- 具体来说,这个损失函数是计算机器预测的概率和实际的标签(比如,这个水果真的是苹果还是香蕉)之间的差异。
- 第三部分(L_3©):正则化的损失函数
- 最后这部分是在原来的损失函数基础上加了一点调整,这种调整叫做“正则化”,它有助于让机器学习得更好。
- 如果不使用正则化,这个模型可能会非常“刻板”。它可能只学会识别它看到的那些特定的苹果和橘子,而不是学会识别这两种水果的一般特征。
- 这里的λ是一个小数,用来控制正则化的程度。
GPT1 训练数据:BookCorpus 7000 本书籍。
核心思想是:
- 做打生成式,输入都是一问一答
- 使用无监督生成式预训练代替传统标注数据,这意味着它在训练时不依赖于标记好的数据集。
让机器通过广泛阅读来自主学习语言,通过阅读大量文本来学习如何生成文本,而不是依赖于特定的“问题-答案”对。
这种方法允许GPT-1掌握语言的广泛用法,并能在各种情境中灵活应用所学知识,而不仅仅是回应特定的提示或问题。
GPT2:扩展数据集、模型参数,实现一脑多用(多个任务)
GPT1 的问题在于:
- 一个简单的专家模型,还不是很专家
- 只能做一个特定任务,不能迁移
GPT2 扩展数据集、模型参数,实现一脑多用(多个任务)。
GPT2被训练来学习很多很多的故事和对话:
- 第一部分(p(x)):预测下一个词
- 这部分的公式是关于如何预测故事中的下一个词。
- 比如,如果到目前为止的故事是“有一个小猫爬上了…”,机器人需要猜测下一个词是什么。
- 它通过学习大量的故事来做出这样的猜测,可能会猜“树”因为在它读过的很多故事里,小猫常常爬上树。
- 公式中的 “s_1, …, s_{n-1}” 就像是到目前为止的故事部分,而机器人要预测的就是“s_n”,也就是接下来的词。
- 第二部分(p(output|input)):基于输入预测输出
- 这部分是说,如果我们给机器人一些特定的信息或提示(input),它可以根据这些信息来讲故事(output)。
- 比如,如果我们告诉机器人“讲一个关于太空的故事”,它就会基于它学过的关于太空的知识来讲故事。
- 第三部分(p(output|input, task)):针对特定任务的预测
- 最后这部分是更具体的。这里不仅仅是告诉机器人要讲什么样的故事(input),还告诉它要完成一个特定的任务(task)。
- 比如,“讲一个关于太空的故事,故事里要有一只名叫Tom的宇航员猫”。
- 这时,机器人会根据这些更详细的要求来讲一个符合要求的故事。
牛逼之处,在于当模型容量非常大、数据量非常丰富的时候,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务。
通过阅读海量的文本,学到了很多东西。
GPT-2这样的模型因为读过很多东西,学了很多知识,所以它能处理各种不同的任务,就算这些任务以前没直接学过。
GPT2 训练数据:Reddit 高赞文章 800 万篇 40G。
复现 GPT2
https://huggingface.co/uer/gpt2-chinese-cluecorpussmall
GPT3:元学习 + 大力出奇迹
GPT2 的极限没有被开发出来,模型参数、训练数据还是太少了。
GPT3 参数增长到 1750 亿,45 TB 训练数据。
除了大,GPT3 还提出了提示的情景式学习方式。
左图是传统的方式,右图是GPT3提出的提示引导。
在一个预训练模型处理多种不同的任务中,不是每个任务都有一个单独的模型,而是使用“提示”(Prompts)来指导同一个预训练模型完成不同的任务。
这种方法的优势在于它不需要针对每个任务训练一个完整的模型,只需要调整相对较小的提示部分,就可以引导同一个大模型完成不同的任务。
这种原理来自于 — 元学习。
通过学习任务间共性和差异,发现规律,并迁移到新任务上。
使用少量数据,寻找初始化范围,使得模型在有限数据集上,快速拟合。
prompt学习方法,根据提示情景,有针对的回答。
用户:你觉得tiktok是个好应用吗?
GPT:Do you think tiktok is a good app?
GPT:tiktok 是什么呀?
GPT:我不能做出有偏袒的评价。
提示学习方法的核心在于,通过给模型不同的指令或情境,可以影响模型的输出,使其更适合特定的用途或遵循特定的交流原则。
在实际应用中,这使得同一个模型可以在不同的情境下以不同的方式回答相同的问题,这非常有用,尤其是在需要模型适应多种对话风格和需求的场合。
有 3 种学习方式:
- 零样本:没有任何例子,直接干活
- 单样本:给一个例子,直接干活
- 少量样本:给几个例子,直接干活
GPT3 只需要给一个或者几个例子,就能一直按照原意去干活。
GPT3 受限 Transformer 建模能力,对于长文章会重复输出;也不能保证生成的内容不包含敏感内容。
复现 GPT3
阿里魔搭:GPT-3预训练生成模型-中文-13B
模型加速框架:
- Colossal-AI
- 悟道的FastMoE
数据:
- 大模型通用数据
- wiki百科
- commoncrawl大型数据集
- The Pile 数据集:一个 825.18 GB 的英语文本数据集
- BookCorpus 免费书籍:书籍 主要用于训练模型的故事讲述能力和反应能力
- 悟道200G文本语料
SFT:
- 改善模型在语言生成任务上的表现。这涉及到让模型学会生成更流畅、更准确、更连贯的文本。
- 主要使用标准的语言处理数据集,这些数据集包含广泛的文本类型,用于提升模型的通用语言理解和生成能力。
InstructGPT:指示和提示学习 + 人工反馈强化学习 RLHF
InstructGPT 在 GPT-3 的基础上通过进一步的训练来专门优化执行指令的能力。
专门针对理解和执行复杂指令进行了优化,旨在提供更加精准的指令执行和更好的用户体验。
这意味着 InstructGPT 更擅长根据用户给出的指令产生相关的输出,比如回答问题、解释概念、生成文本等。
指示学习和提示学习:
- 指示学习:更加依赖于人类提供的示范数据和指令 — 快速获取专业知识和技能
- 提示学习:更加依赖于模型自身的推断能力,以及少量的提示信息 — 缩小搜索空间,更准确学习任务的关键特征和规律
俩者,是一起用的。
人工反馈强化学习 RLHF。
- 单纯训练得到的模型并不可控,模型是训练集分布的拟合,当生成数据时,训练数据的分布极大影响生成内容的质量
- 不能只靠训练数据的影响,要人为可控的保证生成数据的真实性、可用性、无害性
- 就要引入人类偏好的机制,使用强化学习引入
- 强化学习是通过奖励函数来指导模型训练
训练流程:
- 数据集
- 有监督微调 SFT:问答对
- 奖励模型 RM:模型生成的,人工排序打分
- 强化学习 PPO:无人工标注答案,问题来自用户
RM 损失函数:
目标是,最大化人类喜欢(好回答)、不喜欢的(坏回答)的差值。
- 和 :
- 表示问题, 表示好回答,而
- 是模型给好回答的分数,而
- :
- 这个符号表示sigmoid函数,一种特殊的数学函数。
- 它将任何数值转换为0到1之间的数,这有助于将分数转换为概率(类似于百分比)。
- 相减和对数:
- 我们计算好回答的分数减去坏回答的分数,然后使用
- 接着,我们取这个概率的对数。对数是一种数学运算,它在处理概率时更加方便。
- 期望值 :
- 公式中的
- 通过平均这些结果,我们确保模型在各种情况下都能学习区分好回答和坏回答。
- 负号和最小化损失:
- 公式前的负号表示我们希望最小化这个值。
- 在机器学习中,我们通常尝试最小化称为“损失”的值,这告诉我们模型的表现有多差。
- 通过最小化这个损失,我们实际上在教模型更好地区分好回答和坏回答。
强化学习 PPO:
- 目标函数 :
- 这个公式是一个目标函数,用于指导机器学习模型的学习过程。
- 第一部分:
- 这部分可能看起来复杂,但我们可以分步骤来理解:
- 代表期望值,即我们在许多不同的实例()上计算此公式然后取平均。
- 是评估回答 质量的分数,
- 第二部分:
- 是模型对给定输入
这个公式的目的是指导模型学习如何更好地回答问题:
- 第一部分鼓励模型提供高质量的回答,并学习在不同情况下做出更好的选择
- 第二部分则帮助模型保留在预训练阶段学到的知识。通过调整 和 ,我们可以控制模型学习的方向和速度
复现 InstructGPT
- SFT
- 特别针对对话任务,而不是GPT-3的生成任务。
- 这意味着Fine-Tune的重点在于使模型更好地理解和回应对话中的询问,提高在交互式环境中的表现。
- 包括更好地理解用户的意图、提供更相关的回答,以及更有效地处理对话流程。
- 会使用更专注于对话的数据集。
- 这些数据集可能包括对话记录、问题回答对,以及其他相关的交互式通信样本。
- 这样的数据集帮助模型学习对话中的特定模式,比如问答、澄清问题、跟进问题等。
问题在于:
- 没那么多真实数据
- 只能利用现有的各种自然语言处理(NLP)数据集来构造类似真实用户输入的Prompt。
- 这种方法,可以模拟真实用户输入的多样性和复杂性,尽管它们不是直接来自用户。
- 优点是能够生成大量多样化的训练数据,但它的缺点可能是无法完全复制真实用户的具体偏好和行为模式。
GPT-3和InstructGPT在SFT上的差异。
任务1:让GPT-3生成具体主题的新闻文章。
- 收集有监督的Prompt数据:
- 数据集包括各种新闻文章及其摘要或主题,例如一篇关于气候变化的文章及其简短描述。
- 精调GPT-3模型:
- 使用这些文章和摘要对GPT-3进行精调,目的是让模型学会根据给定的摘要或主题生成相关的新闻文章。
- NTP任务:
- 模型通过预测在给定摘要下每个句子的下一个词来生成整篇文章。
- 生成输出并进行解码:
- 模型现在能够根据如“气候变化影响”这样的主题生成多篇新闻文章。
- 文章生成后,进行语言和事实上的校对和优化。
任务2:提高InstructGPT在特定客户服务对话中的表现。
- 收集有监督的Prompt数据:
- 数据集包括客户服务的真实对话记录,包括客户问题和理想的回答。
- 精调InstructGPT模型:
- 使用这些对话记录对InstructGPT进行精调,目的是提高模型在理解和回应特定类型的客户问题方面的能力。
- NTP任务:
- 模型学习如何根据客户的问题生成合适的回答,预测下一个合适的词汇来构建完整的对话。
- 生成输出并进行解码:
- 模型现在能够对新的客户问题生成多个可能的回答。
- 回答生成后,进行优化以确保它们的相关性和准确性。
对比:
- GPT-3的SFT:更侧重于生成特定类型的内容,如新闻文章。精调侧重于改进模型在长篇内容生成上的能力。
- InstructGPT的SFT:更专注于对话任务,精调目标是提高模型在交互式环境中的表现,如更好地理解询问和生成相关回答。
- 奖励建模 RM
暗物智能标注平台:https://www.dm-ai.cn/
在这里,“RM” 指的是 “Ranking Model”(排序模型),它是一种机器学习模型,用于对特定任务的输出进行排序。
- 使用GPT-3生成数据:首先,GPT-3生成一系列的回答、文本片段或其他类型的输出。这些输出是针对一组特定的提示(prompts)生成的。
- 收集高质量的提示:随后,从这些生成的数据中收集高质量的提示。这些高质量的提示是指那些能够引导GPT-3生成更准确、更相关、或者在特定任务上表现更好的输出的提示。
- 训练排序模型(RM):最后一步是训练一个排序模型,该模型的目的是对GPT-3生成的输出进行评估和排序。这个模型会学习识别哪些回答或文本片段是高质量的,从而对它们进行优先排序。
这个过程使用GPT-3生成大量数据,然后通过一个专门训练的排序模型来识别和优先处理那些高质量的输出。
用于提高GPT-3在特定任务上的表现,确保最终的输出是最相关和最有用的。
- PPO
PPO 开源代码:https://github.com/lvwerra/trl
确保模型在各种任务上的表现达到最优。
GPT3.5:思维链CoT + InstructGPT
InstructGPT 在上文。
思维链CoT 点击链接即可。
GPT4