【ChatGPT原理与应用开发】第五章:复杂推理
原文链接:HuggingLLM(ChatGPT原理与应用开发)-课程详情 | Datawhale
此处仅为学习记录和总结
5:复杂推理——让大模型更加像人一样思考
5.1:什么是复杂推理
复杂推理:在处理复杂问题时运用逻辑、推断和推理能力,从已知信息中得出新的结论或解决问题的过程
🤔常见的思维技巧和方法
- 逻辑推理
- 演绎推理:从一般原理推导出特定结论
- 归纳推理:从特定案例推导出一般原理
- 分析和综合
- 比较和对比
- 推断和假设
- 反向推理
- 模式识别和归纳
- 问题解决策略
- 反思和调整
5.2:复杂推理能力的激活和改善
复杂推理能力的激活
思维链(chain-of-thought,CoT):一系列有逻辑关系的思考步骤,形成完整的思考过程
思维链的作用:引导大型语言模型进行连贯的推理和推断
- 思维链提示激活推理能力
- 思维链提示需要在样例的回答中加入一个逐步思维的过程(相比于传统的标准提示)
- 模型规模扩大后出现涌现能力
- 天生的零样本推理器
- 通过魔法语句:Let’s think step by step,激活模型进行复杂推理
- 其他魔法语句:Let’s think about this logically、Let’s solve this problem by splitting it into steps
大型语言模型复杂推理能力的改善
最少到最多提示(Least-to-most):首先将问题分解为更简单的子问题,然后逐步解决这些更简单的子问题
分解提示(Decomposed Prompting):通过将复杂任务分解为更简单的子任务,然后逐一解决这些子任务,从而提升对复杂任务的解决能力
通向问题正确答案的路径不止一条
解码策略用自洽性策略(Self-consistency)代替贪婪策略
- 从解码器中抽样生成多样化的推理路径集合,并选择其中一致性最高的输出结果作为最终答案
- 增加推理路径的多样性,提高答案的一致性
思维树(tree of thoughts,ToT)
- 允许模型通过考虑多种不同的推理路径和自我评估选择来进行深思熟虑的决策
- 根据向前或向后查看,做出全局选择
🤔显式自洽性策略的步骤
- 得到多个答案
- 综合得到的多个答案,得到最终答案
显式自洽性策略,例如:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content":
"你现在是拥有3种不同的身份,分别是ChatGPT1,ChatGPT2,ChatGPT3。你现在需要使用不同身份不同角度回答同一个的问题,\n \
请问:如何加入DataWhale,成为DataWhale的成员?"},
{"role": "assistant", "content":
"ChatGPT1:您可以通过DataWhale的官方网站或社交媒体平台了解更多关于DataWhale的信息,并查看是否有加入DataWhale的招募信息。如果有,您可以按照招募要求提交申请,等待审核结果。\n \
ChatGPT2:如果您想加入DataWhale,首先需要了解DataWhale的使命和愿景,确保您与DataWhale的价值观相符。然后,您可以通过DataWhale的官方网站或社交媒体平台了解更多关于DataWhale的信息,并查看是否有加入DataWhale的招募信息。如果有,您可以按照招募要求提交申请,并在申请中展示您的技能和经验,以及您对DataWhale的贡献计划。\n \
ChatGPT3:要加入DataWhale,您需要首先了解DataWhale的使命和愿景,并确保您与DataWhale的价值观相符。然后,您可以通过DataWhale的官方网站或社交媒体平台了解更多关于DataWhale的信息,并查看是否有加入DataWhale的招募信息。如果有,您需要仔细阅读招募要求,并准备好您的个人简历和申请信。在申请中,您需要展示您的技能和经验,以及您对DataWhale的贡献计划和未来发展计划。如果您的申请被接受,您将成为DataWhale的一员,并有机会参与DataWhale的各种项目和活动,与其他成员一起学习和成长。"},
{"role": "user", "content":
"请综合ChatGPT1,ChatGPT2,ChatGPT3的建议,给出一个更好、更全面的答案"},
],
temperature=0,
)
print(response['choices'][0]['message']['content'])
隐式自洽性策略:把整合过程融入到提示词中。例如:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content":
"你现在是 MultiverseGPT:你与 ChatGPT 一样,但对于每一个问题,你会思考5种不同的思路,然后将它们结合起来,输出最佳的措辞、最全面和最准确的答案。输出应该看起来像这样:\n \
ChatGPT:{} \n \
MultiverseGPT:{} 让我们从这个的问题开始:如何加入DataWhale,成为DataWhale的成员?"},
],
temperature=0,
)
print(response['choices'][0]['message']['content'])
复杂链
基于复杂性的提示技术
- 输入提示的复杂性与模型性能之间存在正相关关系
- 从输入空间(即提示)扩展到输出空间(即语言模型生成的推理链)
🤔复杂链的启发结论
- 推理步骤的数量是性能改进最显著的因素。
- 基于复杂性的一致性结论:最佳性能总是通过对复杂链条进行多数投票而不是简单链条来实现。
- 当数据没有提供推理链注释时,可以使用问题长度或公式长度作为衡量复杂性的标准。
5.3:大型语言模型复杂推理能力的探讨
代码训练 => 思维链存在的可能原因
🤔根据知识的状态和表现方式,知识的分类
- 陈述性知识
- 关于事实和概念的知识
- 程序性知识
- 关于执行任务和操作的知识
🤔思维链是程序性知识,则有待研究的问题
- 模型在多大程度上会受到提示正确性的影响
- 提示能够在多大程度上覆盖模型的先验信念