来源: FoxyearMeta
“GPT-4可被视作AGI (通用人工智能)的早期版本。”
如若从他人口中说出,或许是无稽之谈——
但是由微软雷蒙德研究院机器学习理论组负责人万引大神Sébastien Bubeck与2023新视野数学奖得主Ronen Eldan、2023新晋斯隆研究奖得主李远志、2020斯隆研究奖得主Yin Tat Lee等科学家共同撰写的论文结论,却引起了全行业的关注。这些科学家在论文中对GPT-4的分析和评价,为行业带来了新的见解。

《通用人工智能的火花:GPT-4早期实验》是一篇长达154页的研究论文,广受关注。据Paper with Code的统计,这篇论文是近30天内关注度最高的AI论文之一,没有之二。
这篇论文被大量的科学家和专家转发,引发了广泛的关注。这样的盛况在学术界非常罕见,说明这篇论文提出的内容非常值得关注。

有人从LaTex源码中泄露出了一个有关这篇论文的秘密:原定标题是《与AGI的第一次接触》,并在注释中写着“编辑中,请勿外传”。这说明,论文的标题原本是有所更改的。
这项研究发现,GPT-4不仅精通语言,还能在数学、编程、视觉、医学、法律、心理等多领域的新任务和难题上表现出色,无需特别提示。
更令人惊讶的是,GPT-4在这些方面的表现大大超过了ChatGPT等先前的模型,并且在所有这些任务上令人惊讶地接近人类水平,可以说是接近通用人工智能(AGI)的门槛。
具体来说,GPT-4在LeetCode上以满分的成绩通过了亚马逊公司的模拟面试,超过了所有参与测试的人类,可以被聘用为软件工程师。这一成就证明了GPT-4在语言处理和编程领域的高水平表现。

Sébastien Bubeck,这篇论文的作者,近几周前的个人主页上充满了理论机器学习和理论计算机科学的内容,然而,现在所有内容都被删除了,取而代之的是一篇简短的宣言。
“全面转向AGI研究”
在职业生涯的前15年,我主要从事机器学习中的凸优化、在线算法和对抗鲁棒性研究……
现在我更关注大型语言模型中智能是如何形成,如何利用这种理解提高模型性能,并可能迈向构建AGI。
我们的研究方法称作“AGI的物理学”(Physics of AGI)。


自GPT-4发布以来,对其使用的限制越来越严格,从最初的每4小时100条消息下降到了现在的每3小时25条消息。
这使得即使是花费20美元购买Plus有试用资格的用户,也难以进行大量测试和与ChatGPT进行对比。
然而,OpenAI的投资者微软没有受到这种限制,在GPT-4发布前已经获得了对其早期版本的内部权限,进行了充分的试验。因此,这篇论文也是大家全面了解GPT-4能力的一个重要窗口。
01
语言模型不只是预测下一个词
微软团队试图通过两项任务证明GPT-4具有灵活的语言理解能力,打破了语言模型(或者鹦鹉)仅仅是对学习内容的复述的批评。
第一项任务是让GPT-4证明有无限多的素数,并且每句话都要押韵
第二项任务是用LaTeX的绘图包TiKZ绘制一个独角兽。GPT-4给出了代码,下面是渲染结果。

第一项,GPT-4的能力不仅表现在证明的完成上,它还可以作为一位老师,评价自己和ChatGPT的表现。
即使把证明的形式换成莎士比亚戏剧形式,GPT-4仍然胜任。它因韵律和节拍的出色表现,给自己打出了A分,而给ChatGPT打出了B分。

微软的研究团队已经证明,GPT-4不仅掌握了语言,还能在代码和视觉领域有相当灵活的理解能力。
在第二项中,GPT-4能够根据自然语言描述来理解和操作代码,同时也推断和生成了视觉特征。

并且随着GPT-4快速迭代的开发阶段,通过每隔一段时间再让GPT-4画一次,可以明显看到复杂性的明显增加。
尽管他们当时的测试版本仅为纯语言版本,但是结果仍然令人印象深刻。

对于GPT-4可以理解概念这个观点,OpenAI CEO早些时候也留下这样一段话:
语言模型只是被设计用来预测下一个词……动物、包括我们人类本来也只被设计成生存和繁衍,但那些复杂和美丽的东西正是来自于此。

微软团队随后进行了一系列类似的实验,试图证明GPT-4具有符合1994年国际共识智力定义的一些方面的能力。
包括:推理、计划、解决问题、抽象思考、理解复杂想法、快速学习以及从经验中学习。
一个猎人往南走了一英里,往东走了一英里,往北走了一英里,然后回到了起点。这时他看到一只熊,并将其射杀。这只熊是什么颜色?
GPT-4推断出猎人遇到的是北极熊并且是白色,而ChatGPT则表示因为信息不足无法作答。

一本书、9个鸡蛋、一台笔记本电脑、一个瓶子和一个钉子,如何稳定摆放?
GPT-4提出了将九个鸡蛋按照3x3的方式摆放在书上,这是基于物理特性的推理。相比之下,ChatGPT的想法——把鸡蛋放在钉子上,显然不符合常识。

微软团队认为,GPT-4具有对世界常识的理解能力,并且能基于这些理解做出推理。
GPT-4目前的版本尚未具有多模态输入能力,但仍然能够根据语言描述进行视觉推理。
GPT-4不能直接画图,但是可以生成SVG代码来描述图形。例如,GPT-4可以使用英文字母和其他形状表示一个物体。

GPT-4的能力在处理抽象思维问题方面并不逊色,它可以直接处理高难度任务。
在给定IMDb上的电影数据的情况下,GPT-4可以选择最合适的可视化方案,并能编写出交互式的程序。

对于一个可执行文件,GPT-4甚至可以指导人类一步步做逆向工程。

论文中提到,GPT-4具有丰富的能力和可能的用例,尽管仅能输出文本,但其可执行的代码却是它与外界的连接。
GPT-4还能使用Javascript代码制作图形,既可以是二维的,也可以是三维的。

GPT-4生成草图,与Stable Diffusion联用可以精确控制图像布局。

GPT-4甚至用ABC记谱法创作音乐,并按人类要求修改。

如果说编程和绘画对人工智能来说不再是什么了不起的事,那么GPT-4与ChatGPT在与人类和世界交互方面的差异更能说明问题。
比如,给出一段关于两人争吵但实际上涉及四个角色的对话,GPT-4可以准确指出Mark在表达对Judy的不满,而ChatGPT却错误地认为Mark是在为第三个人的不当行为辩护。

接下来是模拟执行实验,要求GPT-4根据自然语言指令管理用户日历。GPT-4不仅列出了需要的API工具,还在测试场景中成功使用了它们。

GPT-4可以通过指令和推理的方式,帮助人类解决室内恒温器的故障。即使将问题转移到物理世界,GPT-4仍然可以一步一步指导人们排查故障原因。

微软团队在论文中分析了GPT-4的局限性,一些固有的局限性来自于语言模型的词预测模式。GPT-4在完成需要先进行计划或事后回溯编辑才能获得完美答案的问题上,表现不够出色,比如把几句话合并成一句话。

GPT-4的简单数学运算能力有限,尤其是缺乏"工作记忆"。
该模型在0-9之间的数字均匀选取时,准确率只有58%,但随着数字范围的增加,准确率却呈现下降趋势,范围在10-19和20-39时准确率降至16%和12%,在99-199时降至0。

虽然GPT-4在一些数学运算方面仍有缺陷,但允许其写下中间步骤后,1-40范围内的准确率已经达到100%,1-200范围内的准确率也提高到了90%。
尽管如此,微软团队仍不认为GPT-4可以被视为早期的通用智能,因为对于通用智能的定义本身是模糊的。
我们声称GPT-4代表了迈向AGI的进展,但并不意味着它是完美的,或者它能够做任何人类能够做的事情,或者它有内在动机和目标。
……
我们相信,GPT-4的智能标志着计算机科学领域及其他领域真正的范式转变。
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定
我有一个gem,它有一个根据Rails.env的不同行为的方法:defself.envifdefined?(Rails)Rails.envelsif...现在我想编写一个规范来测试这个代码路径。目前我是这样做的:Kernel.const_set(:Rails,nil)Rails.should_receive(:env).and_return('production')...没关系,只是感觉很丑。另一种方法是在spec_helper中声明:moduleRails;end而且效果也很好。但也许有更好的方法?理想情况下,这应该有效:rails=double('Rails')rails.sho
我有一个rspec模拟对象,一个值赋给了属性。我正在努力在我的rspec测试中满足这种期望。只是想知道语法是什么?代码:defcreate@new_campaign=AdCampaign.new(params[:new_campaign])@new_campaign.creationDate="#{Time.now.year}/#{Time.now.mon}/#{Time.now.day}"if@new_campaign.saveflash[:status]="Success"elseflash[:status]="Failed"endend测试it"shouldabletocreat
我正在尝试测试命令行工具的输出。如何使用rspec来“伪造”命令行调用?执行以下操作不起作用:it"shouldcallthecommandlineandreturn'text'"do@p=Pig.new@p.should_receive(:run).with('my_command_line_tool_call').and_return('resulttext')end如何创建stub? 最佳答案 使用newmessageexpectationsyntax:规范/虚拟规范.rbrequire"dummy"describeDummy
我有一个或多或少这样的场景classAdefinitialize(&block)b=B.new(&block)endend我正在对A类进行单元测试,我想知道B#new是否正在接收传递给A#new的block。我使用Mocha作为模拟框架。这可能吗? 最佳答案 我用Mocha和RSpec都试过了,虽然我可以通过测试,但行为不正确。从我的实验中,我得出结论,验证block是否已通过是不可能的。问题:为什么要传递一个block作为参数?block将用于什么目的?什么时候调用?也许这确实是您应该用类似的东西测试的行为:classBlockP
我目前正在将一种算法从Java转换为Ruby,但由于Ruby中缺少整数溢出,我遇到了一些障碍。假设我的值为2663860877,它大于最大整数2147483648。在Java中,它环绕,我应该得到-1631106419。我找到了这段代码,但它似乎不起作用:defforce_overflow(i)ifi2147483647i&0xffffffffelseiendend并且'ing变量不会像您期望的那样强制它为负。 最佳答案 假设32位整数具有二进制补码负数,这应该可行:defforce_overflow_signed(i)force_
我有一个命令行应用程序,它使用thor来处理选项的解析。我想使用test-unit和/或minitest针对代码对命令行功能进行单元测试。我似乎无法弄清楚如何确保ARGV数组(通常会保存命令行中的选项)保存我的测试选项,以便它们可以根据代码进行测试。具体应用代码:#myapp/commands/build.rbrequire'thor'moduleMyappmoduleCommands#DefinebuildcommandsforMyAppcommandlineclassBuild:test_unit#Definesourcerootofapplicationdefself.sourc
我想显示一个计数中使用的SQL。但是,Model.count.to_sql将不起作用,因为count返回一个没有to_sql方法的FixNum。我认为最简单的解决方案是这样做:Model.where(nil).to_sql.sub(/SELECT.*FROM/,"SELECTCOUNT(*)FROM")这会创建与Model.count中使用的SQL相同的SQL,但它是否会导致进一步的问题?例如,如果我添加一个复杂的where子句和一些连接。有更好的方法吗? 最佳答案 你可以试试Model.select("count(*)asmode