怎样不修改模型参数来强化大语言模型 (LLM) 能力?

打印 上一主题 下一主题

主题 1944|帖子 1944|积分 5832

媒介

如果你对这篇文章感爱好,可以点击「【访客必读 - 指引页】一文席卷主页内所有高质量博客」,检察完整博客分类与对应链接。
大语言模型 (Large Language Model, LLM, e.g. ChatGPT) 的参数量少则几十亿,多则上千亿,对其的练习往往必要大量的算力、智力以及财力支持。基于此,许多低本钱提高 LLM 能力的方法也相应被提出,此中包括模型微调 (e.g., LoRA) 以及一些无须改变模型参数的方法。本文主要关注后者,对下述几种常见的方法举行大致介绍:

  • 提示语设计 (Prompt Engineering)
  • 上下文学习 (In-Context Learning)
  • 思维链 (Chain of Thought, CoT)

    • Self-Consistency with CoT / Self-Refine
    • Tree of Thought (ToT)

  • LLM 调用工具 (Tools)

    • WebGPT / Toolformer / ToolLLM
    • Retrieval-Augmented Generation (RAG)

  • 多模型合作

Prompt Engineering

Prompt(提示语)即给大语言模型的「指令」或「问题」,来引导模型输出合适的内容。
大语言模型与传统机器学习模型的最大区别在于,其具有一定意义上的 “通用能力”,即可以在不改变模型参数的前提下,完成各种各样的任务,例如文天职类 / 机器翻译 / 问答系统 / 文本摘要 / 感情分析等等。而在已往,差别的任务通常必要特定的模型来处理,例如机器翻译和感情分析,就无法只通过一个模型来处理。
由于语言模型的能力从 “专用” 转向了 “通用”,为了使模型更好地识别到对话中所必要完成的具体任务,Prompt Engineering(提示语设计)应运而生,即根据任务需求设计合适的提示语,以得到更精确且更高质量的答复。在使用大语言模型时,通过调解输入的 Prompt,可以极大地影响模型生成的内容,进而强化模型的能力。
提示词通常可以包含以下几个要素:

  • 指令:想要模型执行的特定任务;
  • 上下文:包含外部信息或额外的上下文信息,引导模型更好地响应;
  • 问题形貌:输入的具体问题;
  • 答复格式:指定输出的范例或格式。
通常来说,指令 / 问题形貌越清晰,上下文包含的有关信息越充分,模型越有大概输出高质量的答复。
此处举一个例子(1/2/3 行分别对应指令/问题/输出格式):

为差别的任务设计针对性的 Prompt,可以在不改变模型参数的情况下,强化模型答复的质量。关于 Prompt Engineering 的更多内容可以参考:提示工程指南、ChatGPT Prompt 整理。

In-Context Learning

In-Context Learning(上下文学习),指模型通过输入的上下文信息(通常是示例、对话历史、文本片断等)来推断任务或模式,并依次生成响应,而无需额外的模型练习。In-Context Learning 也可以视作是 Prompt Engineering 的一种情势,只管后者更侧重于设计特定任务的提示语。
大语言模型的 “通用能力” 不仅体现在其可以做许多差别的任务,还体现在其可以根据 Prompt 中给出的上下文信息,在不改变参数的情况下举行 “学习”。
例如下述这个任务(生成式 AI 导论 2024 - 第 3 讲):
  1. 新闻分成以下类别:这些类别的定义可能与一般的定义不同:
  2. - 政治:报道有关国家经济的消息,例如企业、投资、金融、股市。
  3. - 社会:报道社会上发生的事件,例如灾难、天气、犯罪、人情趣味。
  4. - 财经:报道国内的政治消息,例如政府部门、政策、选举、政策。
  5. - 生活消费:报道与生活相关的小事,例如购物、气象、交通、医疗保健。
  6. - 影视娱乐:报道有关娱乐圈的消息,例如艺人、节目、婚丧。
  7. - 体育:报道与体育运动相关的消息,例如比赛、职业运动、运动明星。
  8. - 国际:报道海外发生的事件,例如战争、大选、外交谈判、贸易。
  9. 我会给你一篇新闻,请告诉我该新闻属于哪一类,只给我类别就好。
复制代码
然后给出的具体消息如下:


  • “AI题材连续引领,芯片股今年以来股价暴涨近50%,周二(13日)收于721.28美元,市值到达1.78万亿美元,正式凌驾全球电商巨头亚马逊的市值1.75万亿美元,成为排名第4大的美国公司。”
这则消息实际上属于财经类,但由于我们上面颠倒了消息种别的定义,因此我们希望模型输出的是「政治」。颠末测试,ChatGPT-4o 输出的仍然是「财经」,但 ChatGPT-o1 的输出则为「政治」。

可以看到大语言模型根据输入的上下文实现了某种意义的 “学习”,雷同于先前预练习模型上实现的 “zero-shot learning” 与 “few-shot learning” 的结果:


  • zero-shot learning:模型可以大概在没有见过某些任务的情况下,实现正确的预测(例如上面的例子);
  • few-shot learning:模型可以大概在只有极少数标注样本的情况下,在新任务上做出正确的预测。

    • ps:不过此处有一些差别,以往预练习模型实现的少样本学习,通常必要微调模型参数,但 LLM 可以仅通过修改 Prompt 实现,不必要修改模型参数。

基于大语言模型体现出的 In-Context Learning 的性质,也有许多人实验用 LLM 做表格型任务,即将任务的少量标注样本通过 Prompt 的情势喂给模型,使模型可以大概基于这些样本实现对这个任务的正确预测。
例如下面这个简朴的例子(From ChatGPT):
  1. 任务:填写下表中缺失的值。
  2. 示例:
  3. | 产品名称 | 价格 | 销售数量 | 总销售额 |
  4. |---------|-----|---------|---------|
  5. | 苹果     | 1.2 | 50      | 60      |
  6. | 香蕉     | 0.8 | 30      | 24      |
  7. | 橙子     | 1.0 | 40      | 40      |
  8. | 葡萄     | 2.0 | 20      | 40      |
  9. 现在,使用相同的逻辑填写下表:
  10. | 产品名称 | 价格 | 销售数量 | 总销售额 |
  11. |---------|-----|---------|---------|
  12. | 苹果     | 1.6 | 30      | ?       |
  13. | 香蕉     | 1.8 | 50      | ?       |
  14. | 橙子     | 2.0 | 20      | ?       |
  15. | 葡萄     | 4.0 | 10      | ?       |
复制代码
ChatGPT 可以识别出「总销售额 = 价格 * 销售数量」的关系,并输出正确的结果:


Chain of Thought (CoT)

思维链 (CoT) 即让模型通过一系列中间步调来思索问题,而不是直接给出最终答案。通过将推理过程分解成可理解的步调,可以使模型避免常见的错误推断,并在复杂任务上提供更精准的答案。
如下图所示,通过引导模型给出答案的思索过程,模型在具体任务上取得了更好的结果 (NeurIPS22 - CoT):

基于 CoT 的工作,后续有许多进一步强化 CoT 结果的工作,接下来将对此中的一些主要内容举行介绍。
Self-Consistency with CoT

LLM 生成文本的方式是预测 next token,即 Decoder 不断根据已生成的内容,输出下一个字符。
Decoder 的实际功能是预测字符表中,每个字符作为下一个输出字符的概率,因此一种常见的输出计谋就是 Greedy decode,每次输出概率最高的那个字符。
Self-Consistent CoT 就是在 CoT 的基础上,对模型的输出计谋举行修改。具体操纵如下:


  • 首先构造引导模型按步调思索的 CoT prompt;
  • 随后将 Greedy decode 更换为按 next token 的概率采样选择下一个输出字符,来生成一组差别的答复;
  • 最后选取一致性最高的答案(出现次数最多的答案)作为最终的输出结果。
下图为具体工作流程 (ICLR23 - Self-Consistency with CoT):

Self-Refine

此外,也可以在 CoT 的每一个步调中,让语言模型对生成的答案举行自我纠错,进一步地提升答案的准确性。此处先介绍模型自我纠错的方式,其与 CoT 的结合放在下一小节的 Tree of Thought 中举行介绍。
模型自我纠错的具体操纵如下:


  • 首先将问题                                         x                                  x                     x 输入给模型,得到模型的输出                                                    y                               0                                            \mathbf{y}_0                     y0​;
  • 然后让模型判断                                                    y                               0                                            \mathbf{y}_0                     y0​ 作为                                         x                                  x                     x 问题的答复是否合适,得到模型的反馈                                                    fb                               0                                            \text{fb}_0                     fb0​;
  • 再将                                         x                            ,                                       y                               0                                      ,                                       fb                               0                                            x,\mathbf{y}_0,\text{fb}_0                     x,y0​,fb0​ 都输入给模型,得到模型改进后的答复                                                    y                               1                                            \mathbf{y}_1                     y1​;
  • 整个过程可以不断迭代,直至触发停止条件。
下述为一个具体例子 (NeurIPS23 - Self-Refine):

团体的算法如下所示(只必要提供生成答复                                              p                            gen                                       p_{\text{gen}}                  pgen​、提供反馈                                              p                            fb                                       p_{\text{fb}}                  pfb​、改进答复                                              p                            refine                                       p_{\text{refine}}                  prefine​ 的 Prompt,再不断迭代即可):

Tree of Thought (ToT)

上述方法的特点分别为:(1) 按步调举行思索;(2) 多次生成答复并选取一致性最高的答案;(3) 让模型查抄自己的答案。将这三个特点举行融合,可以得到 Tree of Thought 方法,其与先前方法的区别可参考下述流程图 (NeurIPS23 - ToT):

Tree of Thought 的具体操纵如下:


  • 首先采用了 CoT 的方式,模型是一步一步思索的(即答复生成过程是一层一层往下);
  • 其次采用了 CoT-SC 的方式,每一步会生成多个候选答复(即每一个 Thought 下面有多个子节点);
  • 最后采用了雷同 Self-Refine 的方式,对每一步的 Thought 举行评估,如果评估的结果不好,则不再继续深入,雷同于搜索剪枝的操纵(即标红的 Thought 没有继续往下搜)。
下述为一个 24 点(判断给出的四个数字是否可以通过加减乘除得到 24)的具体例子,此中标红的 Thought State 节点即评估结果不好被剪枝:


LLM + Tools

LLM 还可以通过调用一些外部工具(APIs),在不修改模型参数的同时提高模型性能。常见的外部工具有:搜索引擎、代码编译器、文生图 AI 等等。
WebGPT

WebGPT 是 OpenAI 在 21 年提出的一种 GPT 调用搜索引擎的方式,其调用工具的方法为预测 next command,雷同于预测 next token 的头脑。
具体来说,模型首先会判断是否要借助搜索引擎,如果借助则会执行 Search <query> 的命令,得到最初的搜索结果,随后根据之前获取的结果判断应该执行下述哪一个 command:

例如大概会触发 Clicked on link (点击某个链接)、Quote (收藏某段内容)、Back (返回前一个页面) 等操纵,如果最终触发了 End: Answer,则会根据之前收藏的所有页面内容,生成最终的答复。
由于 Command 是重新定义的,因此模型在 GPT-3 的基础上,根据人类标注的调用搜索引擎的数据 + 强化学习再次举行了练习,具体细节可参考原论文。
Toolformer

随后 23 年提出的 Toolformer 在 WebGPT 上更进一步,不仅可以调用搜索引擎,还可以调用计算器、翻译器等各类工具。下述为 Toolformer 调用的工具 (APIs) 示例:

其头脑依然是雷同于 next token 预测,即如果输出了调用某些工具的触发词,则会调用相应的工具,并根据工具输出的结果继续生成后续文字。例如当模型生成 [QA(“Which country is Pittsburgh in?”)] 这样的内容时,会自动调用 QA 这个工具,得到 United States 这个输出后,将其嵌入到本来的生成内容中。
在模型练习过程中,Toolformer 利用了其他 LLM,例如 GPT-3 来生成练习数据。下述为论文中给出的用其他 LLM 来生成调用 QA 这个工具的练习数据的 Prompt:

为了进一步提高这种方式生成的数据质量,Toolformer 会对这些数据举行验证,即判断根据上述生成数据的内容,「调用 API 的输出」对比「不调用 API 的输出」,前者是否更靠近正确答案。如果调用 API 后的结果更准确,则保留这条数据。
ToolLLM

更进一步地,ToolLLM 从 RapidAPI Hub 中网络了 16464 个实际天下的 RESTul APIs,并使用 ChatGPT 为这些 APIs 构建了指令微调的数据集。基于这些数据集举行微调,ToolLLM 实现了对这些 APIs 的管理与调用。RapidAPI 的层级结构,以及为这些 APIs 构建数据集的示例如下所示:

ToolLLM 团体分为 Data Construction、Train 以及 Inference 三部门,如下所示:

首先是数据集的构建:先从 RapidAPI 中搜集大量 APIs,再使用 ChatGPT 为这些 API 构建指令微调的数据集。随后雷同于 Toolformer 的想法,再使用 ChatGPT 选取一些高质量的指令,即采用一种雷同深度搜索树的方式(即下图中的 DFSDT,与 Tree of Thought 的想法雷同),搜索 API 的调用路径,保留能乐成找到路径的指令,如下图所示:

随后基于这些指令,可以通过监督学习 (Supervised Fine-tuning, SFT) 在 LLaMA 的基础上得到 ToolLLaMA;再基于 API 的文档,练习一个 API Retriever,用于后续判断指令与哪些 API 比较相关。
最后在模型推理时,先根据用户给出的指令,利用 API Retriever 获取相关的 APIs,然后再通过上述 DFSDT 的方式,查搜并评估差别的 API 调用路径,直至输出最终的答案。
Retrieval-Augmented Generation (RAG)

RAG 的核心头脑为「检索技能 + LLM 提示语」,即根据用户的 Query 从垂域数据库中搜索出相关的内容,并使用合适的 Prompt 将这些相关内容与用户原始 Query 合并在一起,使得 LLM 答复地更加准确。
为了快速从垂域数据库中获取相关的内容,必要提前做好以下两步:

  • 利用已有的一些 Embedding 模型(例如 ChatGPT-Embedding、Sentence Transformers 等)将知识库的文档转成向量情势;
  • 利用当前向量数据库的一些技能(例如 Faiss、NMSLIB),构建这些向量情势的向量索引,以支持后续根据用户的 Query 快速查询相关内容。
一个开端的 RAG 框架如下所示,更多 RAG 相关内容以及进阶方法,可以参考:知乎 - 大模型 RAG、LLM - RAG 研究


多模型合作

多个模型一起合作,也是一种强化大语言模型能力的方式,雷同于集成学习 (Ensemble Learning) 的想法。
FrugalGPT:让合适的模型做合适的事情

FrugalGPT 主要关注于怎样降低 LLM 推理时的开销,此中提出了 LLM cascade 的方法,其核心头脑为:(1) 简朴的问题交给弱一些的模型(开销更小),困难的问题再交给强的模型;(2) 差别模型的能力大概可以互补。
下述图片表现了差别 LLM 在差别 Benchmark 上的体现,体现了模型能力之间的互补。图中的每一个格子表现对应行 LLM 答错但对应列 LLM 答对的比例,例如图 (a) 的第四行第三列表现:有 4% 的数据,GPT-4 答复错误但 GPT-3 答复正确。

LLM cascade 的具体做法是练习一个评分器 Scorer,其可以对一组输入和一组答案举行打分。随后将 LLM 根据开销串成级联的情势,如果开销较小的 LLM 得到的答案评分已经凌驾该 LLM 的预设阈值,则可以不再 query 开销更大的 LLM,团体流程雷同如下情势:

LLM 的级联顺序以及对应的评分阈值,通过求解下述优化式得到(采用混合整数规划求解):
                                                                                                          max                                           ⁡                                                                     L                                           ,                                           τ                                                                                                                                     E                                                       [                                           r                                                           (                                              a                                              ,                                                               f                                                                   L                                                    z                                                                               (                                              q                                              )                                              )                                                          ]                                                                                                                             s.t.                                                                                                           E                                                       [                                                           ∑                                                               i                                                 =                                                 1                                                              z                                                                                           c                                                 ~                                                                                                 L                                                    i                                                                  ,                                                 2                                                                                          ∥                                                               f                                                                   L                                                    i                                                                               (                                              q                                              )                                              ∥                                                          +                                                                            c                                                 ~                                                                                                 L                                                    i                                                                  ,                                                 1                                                                          ∥                                           q                                           ∥                                           +                                                                            c                                                 ~                                                                                                 L                                                    i                                                                  ,                                                 0                                                                          ]                                                      ≤                                        b                                        ,                                                                                                                                                                                                            z                                        =                                        arg                                        ⁡                                                                       min                                              ⁡                                                          i                                                      g                                                       (                                           q                                           ,                                                           f                                                               L                                                 i                                                                          (                                           q                                           )                                           )                                                      ≥                                                       τ                                           i                                                      .                                                                                \begin{aligned} \max _{\boldsymbol{L}, \boldsymbol{\tau}} & \mathbb{E} {\left[r\left(a, f_{L_z}(q)\right)\right] } \\ \text { s.t. } & \mathbb{E}\left[ \sum_{i=1}^z \tilde{c}_{L_i, 2}\left\|f_{L_i}(q)\right\|+\tilde{c}_{L_i, 1}\|q\|+\tilde{c}_{L_i, 0}\right] \leq b, \\ & \quad z=\arg \min _i g\left(q, f_{L_i}(q)\right) \geq \boldsymbol{\tau}_i. \end{aligned}                     L,τmax​ s.t. ​E[r(a,fLz​​(q))]E[i=1∑z​c~Li​,2​∥fLi​​(q)∥+c~Li​,1​∥q∥+c~Li​,0​]≤b,z=argimin​g(q,fLi​​(q))≥τi​.​
上述式子中,下标                                    z                              z                  z 表现最终选择的 LLM,因此最大化                                    E                                   [                            r                                       (                               a                               ,                                           f                                               L                                     z                                                      (                               q                               )                               )                                      ]                                       \mathbb{E} {\left[r\left(a, f_{L_z}(q)\right)\right] }                  E[r(a,fLz​​(q))] 即最大化最终选择的 LLM 在问题                                    q                              q                  q 上的输出与真实答案                                    a                              a                  a 的相似度。别的,第二个约束展示了                                    z                              z                  z 是怎样选取的,即使得评分器                                    g                              g                  g 输出评分凌驾 LLM 阈值                                              τ                            i                                       \boldsymbol{\tau}_i                  τi​ 的第一个 LLM。第一个约束则表现团体的开销不能凌驾 Budget                                    b                              b                  b,此中                                              c                            ~                                       \tilde{c}                  c~ 分别对应 LLM 输出 token 开销、输入 token 开销以及固定开销。
论文最后展示了上述三个数据集上 FrugalGPT 对比 Best individual LLM 的体现:

模型合作:让模型彼此讨论

也可以让模型之间互相讨论,即将 LLM A 的答复输入给 LLM B,让其参考后再举行输出。
例如采用下述的 Prompt(From arXiv 2023),让模型之间互相讨论:

如果 Prompt 里暗示模型之前其他模型的意见仅作为参考,则必要更长的讨论轮次才能最终达成一致。例如上述图片中 Debate Length 为 Long 的 Prompt。
以下为一些实行结果,可以看到互相讨论可以大概加强模型的能力:


参考资料



  • Prompt Engineering Guide
  • Hung-yi Lee: 生成式 AI 导论 2024 - 课程网站
  • Hung-yi Lee: 生成式 AI 导论 2024 - 第 3 讲至第 5 讲
  • Hung-yi Lee: 可以大概使用工具的 AI - New Bing, WebGPT, Toolformer
  • Hung-yi Lee:生成式 AI 2023 - FrugalGPT(上)、(下)
  • 知乎:大模型 RAG(检索加强生成)含高级方法
  • NeurIPS 2022 - Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
  • ICLR 2023 - Self-Consistency Improves Chain of Thought Reasoning in Language Models
  • NeurIPS 2023 - Self-Refine: Iterative Refinement with Self-Feedback
  • NeurIPS 2023 - Tree of Thoughts: Deliberate Problem Solving with Large Language Models
  • arXiv 2021 - WebGPT: Browser-assisted question-answering with human feedback
  • NeurIPS 2023 - Toolformer: Language Models Can Teach Themselves to Use Tools
  • arXiv 2023 - FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance
  • arXiv 2023 - Improving Factuality and Reasoning in Language Models through Multiagent Debate
  • ICLR 2024 - ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表