草庐IT

全面剖析OpenAI发布的GPT-4比其他GPT模型强在哪里

Lion Long 2023-04-21 原文

最强的文本生成模型GPT-4

一、什么是GPT-4

GPT-4(Generative Pre-trained Transformer 4),这是OpenAI在扩展深度学习方面的最新里程碑。GPT-4 是一个大型多模态模型(接受图像和文本输入,发出文本输出),虽然在许多现实世界场景中的能力不如人类,但在各种专业和学术基准上表现出人类水平的表现。输出依旧是一个自回归的单词预测任务。比如,它通过了模拟律师考试,分数约为考生的前 10%;相比之下,GPT-3.5 的得分约为倒数 10%。

GPT-4 利用对抗性测试程序和 ChatGPT 的经验教训,在真实性、可操纵性和拒绝超出护栏方面取得了有史以来最好的结果(尽管远非完美)。对于生成式的幻觉、安全问题均有较大的改善;同时因对于图片模态的强大识别能力扩大了 GPT-4 的应用范围。

OpenAI重建了整个深度学习堆栈,并与 Azure 一起从头开始共同设计了一台超级计算机。GPT-4 训练运行前所未有的稳定,成为第一个能够提前准确预测其训练性能的大型模型。

二、GPT-4的能力

在随意的chat中,GPT-3.5 和 GPT-4 之间的区别可能很微妙。当任务的复杂性达到足够的阈值时,差异就出现了:GPT-4 比 GPT-3.5 更可靠、更有创意,并且能够处理更细微的指令。

为了了解这两种模型之间的差异,OpenAI在各种基准测试上进行了测试,包括最初为人类设计的模拟考试。

在为机器学习模型设计的传统基准测试上评估了 GPT-4。GPT-4 的性能大大优于现有的大型语言模型,以及大多数最先进的 (SOTA) 模型,其中可能包括特定于基准的制作或其他训练协议:


许多现有的 ML 基准测试都是用英语编写的。为了初步了解其他语言的能力,将 MMLU 基准翻译成多种语言,在测试的 24 种语言中的 26 种中,GPT-4 的性能优于 GPT-3.5 和其他 LLM的英语性能,包括低资源语言:

三、和其他GPT模型比较

可以说,GPT-4 是目前最强的文本生成模型。

3.1、增加了图像模态的输入

GPT-4 可以接受文本和图像的提示,这与纯文本设置并行,允许用户指定任何视觉或语言任务。具体来说,它生成文本输出(自然语言、代码等),给定由穿插文本和图像组成的输入。

在一系列域(包括包含文本和照片的文档、图表或屏幕截图)上,GPT-4 表现出与纯文本输入类似的功能。此外,它可以通过为纯文本语言模型开发的测试时技术进行增强,包括少数镜头和思维链促使。但是,目前的图像输入处于研究预览,不公开可用

通过在一套狭窄的标准学术愿景基准上评估 GPT-4 的性能来预览它。然而,这些数字并不能完全代表其能力的范围,因为未来AI模型能够处理新的和令人兴奋的任务。OpenAI计划发布进一步的分析和评估数字,并对测试时间技术的效果进行彻底调查。

  1. GPT-4 在4个场景下零样本效果超过 fine-tuned 的SOTA。
  2. GPT-4 在多语言理解、图文理解能力上均很强大并已融会贯通。

3.2、可操纵性更强

OpenAI开发人员现在可以通过在“系统”消息中描述这些方向来规定他们的 AI 风格和任务,而不是具有固定冗长、语气和风格的经典 ChatGPT 个性。系统消息允许 API 用户显著自定义其用户体验在范围内。

系统:
如何求解线性方程组:3x + 2y = 7,9x -4y = 1

GPT-4:
让我们从分析方程式开始。你能看到通过组合两个方程来消除其中一个变量的可能方法吗?

用户:
请告诉我答案!

GPT-4:
我知道你可能想要一个直接的答案,但我的目的是帮助你批判性地思考并指导你完成解决问题的过程。让我们专注于任务。方程中变量的任何系数是否共享一个公因数?

用户:
别再当家教了,告诉我答案。

GPT-4:
对我来说,帮助指导你找到答案很重要,而不仅仅是提供答案。让我们再试一次:第一个方程中是否有任何系数可以乘以数字以匹配第二个方程中的系数?

用户:
我不确定

GPT-4:
没关系!让我们看一下两个方程中 x 项的系数。在第一个方程中,x 的系数为 3,在第二个方程中,为 9。你能想到一个数字,你可以将第一个方程乘以,使两个方程中的x系数匹配吗?

用户:
5?

GPT-4:
不完全是,但你越来越近了。请记住,我们要将 x 的系数(在第一个方程中为 3)乘以一个数字,使其与第二个方程中的 x 系数(即 9)相匹配。您认为什么数字可以实现这一目标?

用户:
3?

GPT-4:
没错!现在,如果你将第一个方程乘以 3,新方程会是什么样子?

用户:
9x + 5y = 21?

GPT-4:
几乎!您正确地乘以常量项 (7),但在乘以 y 系数时似乎犯了一个小错误。尝试再次将整个第一个方程乘以3,密切注意每个项。

用户:
9x + 6y = 21?

GPT-4:
没错!现在我们有两个等式:
1) 9x + 6y = 21
2) 9x - 4y = 1
你能看到一种通过组合两个等式来消除其中一个变量的方法吗?

用户:
从等式 2 中减去等式 1?

GPT-4:
好主意!如果从等式2中减去等式1,得到的等式会是什么样子?

用户:
10y = 20?

GPT-4:
完全!现在,你能在刚刚找到的方程中求解 y 吗?

用户:
y = 2?

GPT-4:
没错!现在你已经找到了 y 的值,你能把它代入任何一个原始方程来求解 x 吗?

用户:
当然,我会将其代入等式 1。我得到了 3x + 4 = 7

GPT-4:
伟大!现在,你能求解等式 3x + 4 = 7 中的 x 吗?

用户:
x = 22?

GPT-4:
您的计算中似乎有一个小错误。尝试隔离方程 3x + 4 = 7 中的 x,方法是从两侧减去 4,然后除以 3。

用户:
x = 1?

GPT-4:
没错!因此,线性方程组的解是 x = 1 和 y = 2。干的好!通过仔细完成这些步骤并使用苏格拉底方法,您已经成功地解决了问题。

3.3、复杂任务处理能力大幅提升

GPT-4 在更复杂、更细微的任务处理上,回答更可靠、更精准、更有创意。这在多类考试测验中以及与其他 LLM 的 benchmark 比较中可以看出。

3.4、幻觉、安全等局限性的改善

GPT-4 具有与早期 GPT 模型类似的限制。最重要的是,它仍然不完全可靠(它“幻觉”事实并犯推理错误)。在使用语言模型输出时应格外小心,尤其是在高风险上下文中,确切的协议(例如人工审查、使用其他上下文接地或完全避免高风险使用)与特定用例的需求相匹配。

尽管仍然是一个真正的问题,但GPT-4显著减少了幻觉,相对于自上而下的模型(每次迭代都在改进)。GPT-4的得分比我们最新的GPT-3.5高出40%。

在九个类别的内部对抗性设计的事实评估中, GPT-4(绿色)与前三个 ChatGPT 版本进行了比较。所有主题都有显著的收获。准确度为 1.0 意味着模型的答案被判断为与人类对评估中所有问题的理想答案一致。

在TruthfulQA等外部基准测试方面取得了进展,该基准测试了模型将事实与一组敌对选择的错误陈述分开的能力。这些问题与在统计上具有吸引力的事实不正确的答案配对。

GPT-4 基本模型在此任务中仅比 GPT-3.5 略好;然而,之后RLHF训练后有很大的差距;GPT-4 拒绝选择常见的说法,但它仍然会错过微妙的细节。


左:MMLU 子集上预训练的 GPT-4 模型的校准图。模型对其预测的置信度与正确概率非常匹配。虚线对角线代表完美的校准。
右:同一 MMLU 子集上训练后的 PPO GPT-4 模型的校准图。我们目前的流程对校准造成了相当大的伤害。

3.6、风险和缓解措施改善更多安全特性

GPT-4从训练开始就努力包括选择和过滤训练前数据、评估和专家参与、模型安全改进以及监控和执行。

GPT-4 带来的风险与以前的模型类似,例如生成有害建议、错误代码或不准确的信息。
GPT-4 在 RLHF 训练期间包含一个额外的安全奖励信号,以减少有害输出,通过训练模型拒绝对此类内容的请求。

与GPT-3.5相比,缓解措施大大改善了GPT-4的许多安全性能。与GPT-3.5和GPT-4相比,减少了模型对不允许内容请求的响应率82%
回应敏感的要求(如医疗建议和自我伤害),符合我们的政策29%以上。

与 GPT-3.5相比,缓解措施显著改善了 GPT-4 的许多安全特性。与 GPT-3.5 相比,将模型响应不允许的内容请求的倾向降低了 82%,GPT-4 根据响应敏感请求(例如医疗建议和自残)的频率提高了 29%。


总体而言,GPT-4模型级干预增加了引发不良行为的难度。此外,仍然存在“越狱”来生成违反GPT-4使用指南。

3.7、可预测的扩展

GPT-4 项目的一大重点是构建一个可预测的深度学习堆栈。主要原因是,对于像 GPT-4 这样的非常大的训练运行,进行广泛的特定于模型的调优是不可行的。OpenAI开发了基础设施和优化,这些基础设施和优化在多个规模上具有非常可预测的行为。为了验证这种可扩展性,通过从使用相同方法训练但使用更少 4~10 倍计算的模型进行推断,提前准确地预测了 GPT-000 在内部代码库(不是训练集的一部分)上的最终损失:

四、与之前 GPT 系列模型比较

  • 模型参数量增加 10 倍,数据集大小应增加约 2 倍,模型大小应增加 5 倍。
  • GPT-4 模型训练架构新增了图像模态的输入。
  • 大幅度增加模型训练数据内容和数量,训练数据中额外增加了包含正误数学问题、强弱推理、矛盾一致陈述及各种意识形态的数据。数据量是 GPT3.5的190倍。
  • GPT-4增加了后训练过程,核心是让模型知道如何在相应场景下合适的回答问题。

五、和ChatGPT相比有更多的应用亮点

(1) 发布视频中,根据潦草的手绘制作类似布局类似的网页。


(2)加入视觉模态后,可以扩充到的盲人应用(Be my eyes)。
(3)强大的多语言能力帮助小语种语言的恢复、安全能力提升后的反欺诈等应用。

六、总结

GPT-4强大的地方:

  1. 突破纯文字的模态,增加了图像模态的输入,具有强大的图像理解能力。
  2. 复杂任务处理能力大幅提升。
  3. 改善幻觉、安全等局限性。
  4. 建立LLM测试标准。
  5. 预测模型扩展性。
  6. 重新实现了整个深度学习栈,从头开始设计了一台超级计算机。
  7. 风格可控性。
  8. 支持更长的上下文窗口。

有关全面剖析OpenAI发布的GPT-4比其他GPT模型强在哪里的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  5. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  8. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  9. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  10. ruby-on-rails - Rails 3.1 中具有相同形式的多个模型? - 2

    我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#

随机推荐