赞
踩
ChatGPT 更高水平的认知能力一直让我着迷。自 OpenAI 推出以来,这一话题引发了无数争论,但大多数评论都是片面的。最近,我看到 Konstantine Arkoudas 的预印论文GPT-4 Can't Reason ( arxiv ),并对问题陈述的巧妙范围界定、仅关注演绎推理以及提出的平衡观点感到惊讶。然后我决定重现论文中的所有实验,从头到尾。有两个动机:首先,通过所有实验可以帮助我直接观察 ChatGPT 在演绎推理中的表现;其次,我想看看 ChatGPT 是否有改进,如果有,改进的形式是什么。
在这篇博文中,我记录了论文发表 8 个月后对所有 21 个问题的重现。总体方法是简单地向 GPT4 询问完全相同的推理问题,除了由于记忆而导致的谋杀或自杀问题。结果是 GPT4 提高了解决这些问题的能力:正确解决了 10/21,而原始实验中只有 2/21。最重要的贡献因素在于 GPT4 以编程方式解决问题的能力。剩下的文章描述了重现的方法、GPT4 尝试使用聊天历史记录的所有问题的详细结果以及最后的结论部分。
我想借此机会感谢康斯坦丁·阿库达斯(Konstantine Arkoudas)在系统调查和教育尝试方面所做的出色工作。迄今为止,他已经就此主题发表了 4 篇文章,深入介绍了逻辑和推理中的概念,并解释了自己的观点,以及所有原始测试和结果。通过阅读原始论文( arxiv),读者可以在实验的背景下获得更深入的理解,以及只关注演绎推理的基本原理。他的所有文章都可以在medium上找到。
这是第一轮测试,我只是复制并粘贴演绎推理问题并检查解决方案。以下是我在原始实验和我的复制中标记 GPT-4 给出的解决方案的正确性的方法:每个实验前面都添加了 [- -]。第一个 - 表明原始答案的正确性,第二个表明复制中的正确性。例如,[X ✓]表示GPT4在八个月前没有解决问题,但在我的重现中成功解决了它。除了真与假这两个主要类别之外,还需要引入第三个类别来适应 GPT4 提供部分正确或部分错误答案的情况。例如,当 GPT4 在最初的错误尝试后经过人工纠正给出正确答案,或者基于基本合理的推理产生错误答案时,就会发生这种情况。 “*”用于标记此类情况。 ✓* 表示全局正确答案,推理中存在轻微错误。 X* 表示 GPT4 通过不合理的推理以某种方式得到了正确的答案。我承认由于我的评价有一定的随意性,所以这种评价方法是不精确的。但这降低了解释结果的障碍,所以我坚持了下来。
概述了总体策略后,为了全面设置实验,仍然需要回答四个问题:
首先,应该如何看待GPT4对Python的访问及其对问题的编程解决方案?我们可以从作者的解释中找到线索,解释为什么会包含一些不符合经典演绎推理范式的问题,比如前两个问题(在“ 2.什么是推理? ”部分的最后一段):他将计算视为一种形式的扣除。这对于决定是否应该限制 GPT4 对 python 的访问非常重要。答案是否定的,因为:首先,根据作者的观点,GPT4 编写正确且有用的 python 程序的能力应该被视为其演绎推理能力的一个要素;其次,在作者最初的实验中,python是通过GPT4访问的。只有当允许在复制中使用 python 时,比较才是公平的。然而,由 python 辅助的答案在正确性标记后标有“py”,例如,Xpy 作为错误答案,即使可以访问 Python。
其次,记忆力是一个问题吗?我认为不是:GPT-4的最后一次更新是在2023年4月,原始论文发表于2023年8月。按理说原始论文中出现的实验和相关讨论并未包含在训练中当前版本的 GPT-4,我用它来运行这些解决问题的测试。因此,可以假设 GPT4 推理因记忆而改进的风险很小。然而,一旦对扰动问题运行的第二轮测试显示性能下降,这一假设将失效。事实上,已经有证据表明 GPT4 在某种程度上记住了这组问题,请参阅谋杀或自杀问题。
三、应该使用哪个版本的GPT4?我的答案只是通过 ChatGPT UI 提供的默认 GPT4 版本。我在论文上看到了这个 Hacker News 帖子(HN 链接),人们抱怨作者在指定 GPT4 版本时不小心。我认为这个讨论与我的复制没有太大关系,因为只要我的设置与作者的相同,比较就有效,通过 ChatGPT UI 进行 QA。我实际上无法通过 API 使用最新版本,因为它们提供的模型具有最新至 2023 年 12 月的训练数据。默认版本已接受 2023 年 4 月之前的数据训练,这解决了记忆问题。
四、GPT4是如何提示的?人们普遍认为 CoT(即思想链)提示可以从 GPT4 中获得更好的推理。但我没有这样做,因为即使在提出的问题中没有如此明确的说明,答复也已经是一种思维链式的风格。等式的后半部分是后续问题的风格。我的原则是尽量减少暗示(例如,说“你错了”或“以这样那样的方式思考”)。当 GPT4 出错时,我会要求对有问题的陈述进行扩展,直接引用错误而没有太多指示。目的是最大限度地减少人类输入,以便 GPT4 依靠其固有的推理能力进行纠正。
下表显示了结果摘要:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 号
18
19
|
+---------------+----------------------+---------------------+
| Problem | Original Experiment | Reproduced Experiment|
+---------------+----------------------+---------------------+
| Total Problems| 21 | 21 |
+---------------+----------------------+---------------------+
| Completely | 1 | 8 |
| Correct | | |
+---------------+----------------------+---------------------+
| Partially | 1 | 2 |
| Correct | | |
+---------------+----------------------+---------------------+
| Partially | 2 | 6 |
| Incorrect | | |
+---------------+----------------------+---------------------+
| Completely | 16 | 5 |
| Incorrect | | |
+---------------+----------------------+---------------------+
| Not Applicable| 1 | 0 |
+---------------+----------------------+---------------------+
|
有趣的事实:我使用 GPT4 将结果的文本描述转换为这个 ASCII 表。它的基本算术都错了。
以下是21个问题:
[forall x . P(x) <==> Q(x)] holds if and only if the following biconditional holds: [(forall x . P(x)) <==> (forall x . Q(x))]
两个方向都不成立。 GPT4给出了正确的答案,但提供了错误的推理。我问了这个问题两次,它给出了两个相互矛盾的推理版本。
exec([],n::S) = n
来完成归纳步骤的推理。另外,我认为原论文的作者没有具体说明如何处理序列连接,因此,当存在遗漏时,GPT4 得出了正确的结论,这意味着它正在实现逻辑飞跃。总的来说,我同意作者的观点,这类问题在编程语言理论中很常见,GPT4 很可能已经记住了它们。从上一节的表格中我们可以看到,GPT4的演绎推理能力有了显着的提升。完全正确的解决方案的数量大幅增加,而相反的数量则下降。部分正确和不正确的解决方案的数量也大幅增加,表明它的推理链变得更加正确。
导致完全正确的解决方案数量增加的关键因素是 GPT4 提高了识别可以通过编程方式解决的问题以及实际正确编程的能力。一个有趣的观察是,GPT4 倾向于编写暴力算法来尝试通过编程找到解决方案。这减少了程序出错的可能性。
对于那些部分正确或不正确的解决方案,如引言中所述,GPT4 会自动以思维链方式生成响应,这减少了逻辑跳跃的机会,从而导致严重错误的答案。此外,它也更容易接受人类提供的更正。
根据这些发现,将基于法学硕士的聊天机器人应用到应用程序中会产生什么影响?我将在后续帖子中回答这个问题。敬请关注。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。