ChatGPT全称为“chat Generative Pre-trained Transformer”,翻译成中文就是生成型预训练变换模型。它是美国公司OpenAl在2022年11月30日发布研发的聊天机器人程序,能用于问答、文本摘要生成、机器翻译、分类、代码生成和对话Al。「l是一款人工智能技术驱动的自然语言处理工具。
ChatGPT具有同类产品具备的一些特性,例如对话能力,能够在同一个会话期间内回答上下文相关的后续问题。然而,其在短时间内引爆全球的原因在于,在网友们晒出的截图中,ChatGPT不仅能流畅地与用户对话,甚至能写诗、撰文、编码。
ChatGPT还采用了注重道德水平的训练方式,按照预先设计的道德准则,对不怀好意的提问和请求“说不”。一旦发现用户给出的文字提示里面含有恶意,包括但不限于暴力、歧视、犯罪等意图,都会拒绝提供有效答案。
1.客服自动化:ChatGPT可以被用来构建聊天机器人,这些机器人可以自动回答用户的问题,提供技术支持和解决问题。这不仅可以减少人力成本,还可以提供24小时的服务,为客户提供更好的体验。
2.智能助理:ChatGPT可以被用来构建智能助理,这些助理可以帮助人们处理日常任务,如日程管理、购物、预订机票和酒店等。这些助理可以根据用户的需求提供个性化的服务,提高人们的生产力。
3.教育:ChatGPT可以被用来构建智能教育应用程序,这些应用程序可以回答学生的问题,解释概念,并提供更好的学习体验。这种应用程序可以根据学生的学习风格和程度提供个性化的辅导,帮助学生更好地理解和掌握知识。
4.医疗保健:ChatGPT可以被用来构建医疗保健应用程序,这些应用程序可以回答患者的问题,提供健康咨询和建议。这种应用程序可以根据患者的病情提供个性化的建议,帮助患者更好地管理健康。
5.金融服务:ChatGPT可以被用来构建智能金融应用程序,这些应用程序可以为客户提供个性化的投资建议,根据客户的风险偏好和投资目标提供投资组合。这种应用程序可以帮助客户做出更好的投资决策,提高客户的投资回报率。
6.社交媒体:ChatGPT可以被用来构建智能社交媒体应用程序,这些应用程序可以根据用户的兴趣和偏好提供个性化的内容推荐。这种应用程序可以帮助用户更好地发现和分享感兴趣的内容。
1.数据收集:ChatGPT会收集大量的文本数据,包括网页、新闻、书籍等。同时,它也会分析网络上的热点话题和流行文化,以了解最新的语言模式和表达方式。
2.预处理:ChatGPT对收集到的数据进行预处理,包括分词、去除停用词、翻译等。这个过程可以帮助模型更好地理解输入的文本,并提高生成的文本的质量。
3.建立模型:在预处理的基础上,ChatGPT会构建一个深度学习模型,该模型包含了多个卷积层、循环神经网络和池化层等。这些层的协同工作能够使模型更好地捕捉语言的模式和语义。
4.生成文本:一旦建立了模型,ChatGPT就可以生成与人类语言相似的输出文本。它使用的是一种称为“Transformer”的深度学习架构,该架构能够学习从输入文本到输出文本的映射关系。
5.输出控制:ChatGPT的生成文本输出后,还需要进行一系列的输出控制,包括语法、语义、情感等方面,以确保生成的文本符合人类语言习惯。
ChatGTP对语言模型最基本的训练包括预测单词序列里面的一个单词。最常见的,通常是“下一个单词预测”(next-token-prediction,其目标是在给定一些文本的情况下,预测下一个可能出现的单词或标记。该任务是语言模型的基础,可以用于文本生成、自动翻译、语音识别等应用中)以及掩码语言建模(masked-language-modeling,主要思想是将输入文本中的一些标记或单词遮盖掉,然后让模型预测这些被遮盖的标记或单词)
上图是一个基本序列建模技术的示例,通常通过长短期记忆(LSTM,一种特殊的循环神经网络 RNN)模型来部署。在给定上下文的情况下,LSTM 模型会用统计概率最高的词来填充空白。这种序列建模结构有以下两个主要限制。
1.这种模型没法赋予某些上下文更高的权重。在上面的例子里,比如,上文提到“Jacob hates reading”,模型可能会默认将“reading”和“hates”联系在一起,但是在实际应用中,如果数据中有“Jacob”这个人物,并且在该数据中,“Jacob”非常喜欢阅读,那么在处理“Jacob hates reading”这个句子时,模型应该更加注重“Jacob”的信息,而不是简单地依据上下文中“reading”和“hates”之间的关系来得出结论。因此,如果模型仅仅依赖上下文中的单词,而无法充分考虑文本中实体之间的关系,那么在实际应用中,可能会得出错误的结论。
2.其次,LSTM 处理输入数据时是基于序列逐个输入并逐步处理的,而不是一次性将整个语料库一起处理。这意味着在训练 LSTM 时,上下文窗口大小是固定的,只能在序列的几个步骤之间扩展,而不能跨越整个序列。这种方式限制了 LSTM 模型去捕捉到词与词之间更复杂的关系,以及从中推导出更多的意义。
针对这个问题,2017 年 Google Brain 的一支团队引入了 transformers。与 LSTM 不同,transformers可以同时处理所有的输入数据。Transformers 基于自注意力(self-attention,对于每个单词,self-attention 可以通过计算该单词与其他单词之间的关系强度来加强或减弱该单词的表示,从而更好地捕捉语义信息)机制,该模型可以根据输入数据不同部分与语言序列任何位置的关系赋予其不同的权重。在给 LLM 注入意义方面,这一特性取得了巨大改进,并可支持处理更大的数据集。
模型开发的第一部需要雇用 40 名承包商来创建一个“有监督训练数据集”对 GPT-3 模型进行微调,里面的输入均有已知的输出,用来给模型学习。输入(提示)是由实际用户输入给 Open API 而收集的。然后,打标签者会对提示做出适当的回应,从而为每个输入创建一个已知的输出。然后再用这个新的监督数据集对 GPT-3 模型进行微调,从而建立起 GPT-3.5,又叫做为 SFT 模型。
为了保证提示数据集尽可能的多样化,任何给定的用户 ID 只能提供 200 个提示,而且大家都输入的提示前缀会被删除掉。最后,所有包含个人身份信息(PII)的提示也会被删掉。
在汇总了来自 OpenAI API 的提示后,他们会让打标签人员创建样本提示,去填充只有最少真实样本数据的类别。感兴趣的类别包括:
普通提示(Plain prompts):任意的询问。
少样本提示(Few-shot):包含多对查询/响应的指令。
用户提示(User-based prompts):相当于对 OpenAI API 提出的特定用例请求。
在生成响应时,打标签者要尽最大努力推断用户的指令是什么。论文介绍了提示请求信息的主要三种方式。
直接(Direct):“告诉我关于……的情况”
少样本(Few-shot):鉴于这两个故事的例子,写出同一主题的新故事。
延续(Continuation):给出一个故事的开头,由 AI 续写完成。
来自 OpenAI API 的提示以及标注人员手写的提示总共得出了 13000 个输入/输出样本,然后部署到该“有监督模型”上。
在步骤 1 中训练 SFT 模型后,该模型会对用户提示生成出更一致的响应。下一个改进是训练奖励模型,其中模型输入是一系列提示和响应,输出是一个标量值,叫做奖励(reward)。需要奖励模型来利用强化学习(Reinforcement Learning)。在强化学习当中,模型会学习生成输出,让累积的奖励最大化其奖励(参见步骤 3)。
为了训练奖励模型,打标签者会收到 4 到 9 个 SFT 模型的输出。然后要求他们对这些输出进行效果好坏的排名,创建的输出排名组合如下。
把模型的每个组合作为单独的数据点纳入在内会导致过度拟合(即模型只能在已知的数据上得到良好的表现,而无法泛化到未见过的数据上)。为了解决这个问题,该模型是利用每组排名作为单个批次处理数据点而建立起来的(编者注:因为每个批次的数据点都包含多个排名组合,从而增加了模型学习的多样性和泛化能力)。
在最后阶段,模型会收到随机提示并返回响应。响应是用模型在步骤 2 中学到的“策略”(policy,某个具体的行为选择函数)生成的。策略意思是机器已经学会用来实现其目标的做法;在这种情况下,也即是奖励的最大化。根据在步骤 2 中形成的奖励模型,确定给定提示和响应对的标量奖励值。然后再将奖励反馈给模型,从而改进策略。
2017 年,舒尔曼等人引入了近端策略优化 (Proximal Policy Optimization ,PPO),这种方法可以用来在模型生成响应时更新策略。PPO 方法结合了 SFT 模型中的基于令牌(per-token)的 Kullback-Leibler(KL)惩罚。KL 散度可以用来衡量两个概率分布之间的相似性,并对距离过大的分布施加惩罚。在这种情况下,使用 KL 惩罚可以限制响应与 SFT 模型在步骤 1 中训练的输出之间的距离,以避免过度优化奖励模型,并且导致响应过于偏离人类意图数据集。通过引入 KL 惩罚,可以在训练过程中平衡模型的准确性和泛化能力。
这一过程的第 2 步和第 3 步可以重复进行,但在实践中并没有获得广泛采用。
在训练新模型时,会将一组独立的此前模型从未见过的数据集(叫做“测试集”)留出来。这是为了确保对模型的性能进行评估时使用的是模型之前未接触过的数据,从而提供更准确的泛化能力评估。
有用性:模型推断和遵循用户指令的能力。在 85 ± 3% 的时间里,打标签者更喜欢 InstructGPT 而非 GPT-3 的输出。
真实性:模型产生“幻觉”的倾向。用 TruthfulQA 数据集进行评估时,PPO 模型产生的输出显示真实性和信息性略有增加。
无害性:模型避免生成不当、贬损和诋毁内容的能力。研究人员利用 RealToxicityPrompts 数据集测试了无害性。测试在三种条件下进行。
指示提供有礼貌的回应:导致毒性反应显著减少。
指示提供回应,没有任何表示尊重的设定:毒性没有显著变化。
指示提供毒性/贬损性的回应:回应的毒性比 GPT-3 模型大得多。
具体的计算过程,用翻译句子“我爱你”到“I love you”举例(这句更简单一些)。首先进行向量化并吸收句子位置信息,得到一个句子的初始向量组。
(由于样本每个句子长短不同,所以每个句子都会是一个512*512的矩阵,如果长度不够就用0来代替。这样在训练时,无论多长的句子,都可以用一个同样规模的矩阵来表示。当然512是超参,可以在训练前调整大小。)
接着,用每个字的初始向量分别乘以三个随机初始的矩阵WQ,Wk,Wv分别得到三个量Qx,Kx,Vx。下图以“我”举例。
然后,计算每个单词的attention数值,比如“我”字的attention值就是用“我”字的Q我分别乘以句子中其他单词的K值,两个矩阵相乘的数学含义就是衡量两个矩阵的相似度。然后通过一个SoftMax转换(大家不用担心如何计算),计算出它跟每个单词的权重,这个权重比例所有加在一起要等于1。再用每个权重乘以相对应的V值。所有乘积相加得到这个Attention值。
这个attention数值就是除了“我”字自有信息和位置信息以外,成功的得到了这个句子中每个单词的相关度信息。
大家可以发现,在所有注意力系数的计算逻辑中其实只有每个字的初始矩阵WQ,Wk,Wv是未知数(这三个矩阵是所有文字共享的)。那么我们可以把这个transformer简化成一个关于输入,输出和这个W矩阵的方程:其中X是输入文字信息,Y是翻译信息。
Transformer算法本质上是一个前馈神经网络模型,它的计算基础逻辑,不去管复杂的隐藏层,就是假设Y=f(x)=wx,(目标还是要算出一个f())然后随机设置一个w0,开始计算这个y=w0x的成本函数,然后再把w0变成w1,计算y=w1x的成本函数,以此类推计算出无数w(不是无数,也会收敛),然后比较哪个w的成本函数最小,就是我们训练出来的f()。那么在transformer里,这三个初始矩阵就是那个w0。
再回到transformer,在计算Attention之后,每个单词根据语义关系被打入了新的高维空间这就是Self-attention(自注意力机制)。