[论文分享]Nature 2025 通过反向传播语言模型反馈优化生成式AI

摘要

最近,在人工智能(AI)领域的突破越来越多地依赖于由多个大语言模型(LLMs)与其他专用工具协同工作的系统。然而,目前这些系统主要由领域专家手工设计,并通过启发式方法进行调整,而不是自动优化,这在加速人工智能发展方面构成了重大挑战。
人工神经网络的发展曾面临类似的挑战,直到反向传播和自动微分的出现,使得优化变得自动化,从而彻底改变了该领域。类似地,本文引入了TextGrad:一种通用框架,它通过对LLM生成的反馈进行反向传播来优化AI系统。
TextGrad能够利用自然语言反馈对系统的任何部分(从提示词到输出结果,如分子结构或治疗方案)进行评价并提供改进建议,从而实现生成式AI系统在不同任务上的自动优化。
本文通过一系列研究展示了TextGrad的通用性和有效性,包括:解决博士级别的科学问题、优化放射治疗方案、设计具有特定属性的分子、编写代码以及优化智能体系统。
TextGrad为科学家和工程师开发出更具影响力的生成式AI系统提供了简便的工具。

动机

LLM正在改变突破性人工智能系统的构建方式。新一代AI应用程序越来越多地以复合系统的形式运行,协调多个复杂组件:从基于LLM的智能体到专用工具,如模拟器和搜索引擎。

例如,一个由LLM与符号求解器协同工作的系统可以解决奥林匹克级别的数学问题;而结合搜索引擎和代码解释器工具的LLM系统,在解决GitHub上的实际问题时,表现堪比人类顶尖程序员。

尽管取得了这些进展,许多突破性成果仍然依赖于由领域专家手工构建的系统。因此,开发自动化优化算法成为构建LLM复合系统和加速未来突破的关键挑战之一。

在过去15年里,AI的许多进步依赖于神经网络和可微优化。神经网络的各个组件(例如两个人工神经元)通过可微分函数(如矩阵乘法)进行通信。因此,通过反向传播传递数值梯度,从而调整模型的参数方向,一直是训练AI模型的自然方式。

然而,对于新一代生成式AI系统而言,可微优化难以直接适用,因为这些系统往往涉及自然语言交互、黑盒LLM或外部工具,这使得数值梯度的反向传播变得困难。

为了解决这一挑战,本文提出了TextGrad,以文本形式实现自动“微分”。在传统神经网络中,组件之间通过数值进行通信,而现代AI系统更多依赖于非结构化数据(如文本、代码和图像)进行交互。在TextGrad中,每个AI系统被转化为一个计算图,其中各组件通过复杂的(不一定可微分的)函数交换这些丰富的非结构化变量。

本文将“微分”作为一种隐喻,在这种方法中,LLM提供反馈(称为“文本梯度”)的方式是信息丰富且可解释的自然语言评价,描述如何修改每个变量以改进整体系统。

文本梯度可以通过任意函数传播,例如LLM的API调用、模拟器或外部数值求解器。值得注意的是,这种文本反馈不作用于底层神经网络的参数,因此可以与黑盒API兼容。

本文展示了TextGrad在不同领域中的强大能力,包括问答基准测试、放射治疗方案优化、分子生成。

img

以上任务均由同一框架处理,无需针对不同任务进行修改。LLM能够在这些领域内为变量提供丰富、清晰且表达力强的自然语言反馈,例如对分子的结构提出修改建议、为其他LLM生成新的提示词、对代码片段进行优化等。

本文框架基于这样一个前提:当前最先进的LLM能够对其优化系统的各个组件和子任务进行推理。实验结果表明,TextGrad能够自动改进生成式AI系统及其输出,展现出巨大的潜力。

通过TextGrad反向传播LLM的反馈

考虑以下系统:

其中 表示两个字符串的连接, 表示将x作为提示提供给语言模型以获得响应。这种结构经常用于语言模型用于评估的情况,例如在LLM-as-a-judge中。

在传统的自动微分中,我们使用链式法则计算梯度,以确定如何修改系统中的数值变量,从而根据目标函数改进系统。相比之下,TextGrad以文本形式生成反馈,以指导系统中非结构化变量的修改。它不计算数值梯度,而提供意见和具体修改建议,从而根据目标函数改进系统。

为了改进AI系统,本文设计了反向传播算法的类似方法(图 2a)。当前向函数是LLM调用时,使用 作为文本梯度运算符。具体地,此函数返回一个评论,例如“可以通过… 改进预测”,其中反馈描述了如何修改变量以改进整个系统相对于目标函数的改进,类似于数值梯度。在这种情况下,可修改的组件可以是提示、中间输出或最终预测。在下图(a)中,为了将反馈反向传播到提示词,作者首先通过评估收集针对预测变量的反馈;然后,基于这些反馈和对的调用收集针对提示词的反馈。更一般地,即使用对某个变量的所有后续变量所获得的反馈来执行该过程。

img

在数值梯度下降中,参数通过减法与损失函数的梯度相结合,例如。类比数值梯度优化方法,本文使用文本梯度下降(TGD),其中变量通过反馈进行更新。上图©展示了一种TGD的具体实现方法。这一步利用文本梯度来修改组件,以使系统在目标函数方面得到优化。

在自动微分中,目标函数通常是可微的函数,例如均方误差。而在 TextGrad 中,目标函数可以是复杂的、可能不可微或黑箱的函数,其定义域和值域可以是非结构化数据。这样的选择为该框架增加了重要的通用性和灵活性。例如,本文展示了目标函数可以通过提示语言模型、运行单元测试的代码解释器的输出,或分子模拟引擎的输出来获得。使用LLM的一个简单目标函数可能如下所示:

我们可以利用这个评估信号来优化代码片段,这得益于 LLM 自我批评和自我提升的潜力。

本文使用 TextGrad 来解决两大类任务。首先,在测试时优化中,作者将问题的解决方案(例如代码片段、问题答案或分子)直接视为优化变量。例如,在上述问答目标函数中,存在一个待改进的解,希望在测试时对其进行优化。该框架生成文本梯度并通过迭代改进该解变量。

其次,在提示优化中,目标是找到能够在多次查询任务中提高 LLM 性能的提示词。例如,作者可能希望为 LLM 设计一个系统提示词,以改进其在数学推理问题上的表现。与测试时优化不同,提示优化的目标是找到能够推广到新问题的通用提示词,而不是仅仅在测试时改进当前问题的变量。至关重要的是,这两类问题都可以在无需手工设计框架的情况下解决。本文在多种应用中展示了TextGrad的灵活性。首先,作者优化代码片段以解决LeetCode上的难题。其次,优化科学问题的解决方案。第三,优化提示词以引导LLM的推理。第四,优化前列腺癌患者的放射治疗方案。最后,优化涉及多个变量和更长链条的复合系统。此外,在补充说明 8.1 中,作者讨论了如何将 TextGrad 应用于化学结构优化,以最大化分子性质。在包含58个目标蛋白的数据集上,TextGrad在配体设计中表现出比其他分子优化方法更优的性能。

代码优化

在代码优化中,目标是修改代码以提高其正确性或运行时复杂性。通常有如下的计算图:

本文优化代码以在有限的、本地的单元测试监督下解决给定问题,并通过测试指令进行自我评估,要求对当前代码迭代进行批判性分析。图 1e 展示了一个示例问题:“给定一个大小为n的数组nums,其中包含从1n的不同整数,以及一个正整数k。请返回nums中中位数等于 k的非空子数组的数量。”。GPT-4o提出的第一版解决方案未能通过测试。TextGrad识别出该解法的一个边界情况,并提供改进建议。优化后的实现成功通过所有测试。

本文使用 LeetCode Hard 数据集对代码优化进行基准测试。LeetCode是一个在线平台,提供用于技术面试准备的编程练习题。该数据集包含对人类和语言模型而言都具有挑战性的高难度编程问题,其成功标准是通过所有测试用例的完成率。

在LeetCode Hard数据集中,GPT-4o在零样本设置下的完成率为26%,而Reflexion(目前自我优化SoTA方法)达到31%,使用TextGrad,完成率提升至36%。值得注意的是,Reflexion使用了上下文示例进行优化,而TextGrad 未使用任何示例。

解决方案优化

解决方案优化的目标是改进问题的解决方案:

在该优化过程中,被优化的参数是解决方案,而损失函数则通过对解决方案的评估获得。在每次迭代中,LLM会被提供问题、当前解以及测试时指令,要求对当前迭代进行批判性分析。尽管LLM可能无法在首次尝试时给出正确答案,但它可以通过迭代优化不断改进解答。

本文在问答数据集中探索了解决方案优化。所使用的数据集包括GPQA,这一最新基准数据集包含由物理、生物和化学领域的博士或博士候选人创建和标注的多项选择题。此外,还包括MMLU的两个具有挑战性的子集,该数据集专门用于衡量语言模型在本科水平问题上的表现。此外,还采用MathVista和ScienceQA数据集来测试科学领域的视觉问答能力。

使用TextGrad,本文提升了 GPT-4o在这些基准测试中的表现。具体而言,在MMLU的机器学习子集上,准确率从85.7%提高到 88.4%,在大学物理子集上从91.2%提高到95.1%;在GPQA数据集中,准确率从51.0%提高到55.0%。在多模态推理任务中,与 Reflexion相比,TextGrad在MathVista和ScienceQA-IMG上的性能分别提高了2.1%和2.2%。

推理提示词优化

LLM在推理任务中表现出色,但其性能往往对引导其行为的提示词敏感。使用合适的提示词,可以显著提升其推理能力。

提示优化的目标是找到能够引导LLM行为的提示词,使其在特定任务上表现良好:

在这种情况下,存在一个问题及其答案,和一个基于真实答案对输出质量进行评估的指标。例如,在问答任务中,评估指标可以是答案的准确率。

在提示优化中,本文使用少量训练示例来优化提示词,目标是最大化LLM在指定任务上的表现。

在实验中,本文的目标是利用更强大的模型(如GPT-4o)生成的反馈来提升较弱但成本更低的模型(例如GPT-3.5-turbo)的性能。这一任务在实际应用中非常有用,因为只需一次提示词优化后,优化后的提示词即可配合低成本模型使用,从而降低推理成本。

值得注意的是,提示词可以分解为指令和上下文示例,并使用相同的策略通过文本梯度对其进行联合优化。例如,本文使用了训练数据集中的输入-输出样本初始化上下文示例,并通过TGD对其进行优化。

本文在两个标准推理任务和小学数学问题求解数据集GSM8k上进行测试。在这三个数据集上,TextGrad都提升了零样本提示词的性能,并超越了OPRO,且在单词排序和GSM8k任务上与目前最先进的提示优化框架DSPy表现相当,同时在物体计数任务上比DSPy提高了7.0%。

放疗计划优化

治疗规划本质上是一个双循环的多目标优化问题,内循环旨在优化肿瘤(计划靶区,PTV)的辐射剂量传递,同时保护健康器官受风险器官(OARs),并根据重要性权重进行调整。外循环则优化这些重要性权重,以在治疗效果和保护之间做出权衡。主要的挑战在于将临床目标转化为加权的目标函数。目前,计划员依赖于费时的试错方法来调整重要性权重,这使得整个过程既费时又昂贵。

本文应用 TextGrad 来执行外部循环优化。在测试时,使用 GPT-4o 对表示为字符串的权重进行优化,通过LLM评估治疗计划和临床目标:

新重要性权重通过TGD获得。为了进一步提升LLM理解重要性权重与内循环优化器生成的治疗计划之间关系的能力,本文提供了一组配对的计划及其对应的重要性权重作为TGD的上下文示例。

为了评估治疗计划,本文采用了几种常用的评估指标。考虑到目标/器官体积的平均剂量,以及,即目标器官体积中 q% 部分所接收到的最小剂量。

首先,本文展示了TextGrad生成的文本梯度为该问题提供了有意义的反馈。如下图(a)所示,当PTV外部出现剂量溢出时,TGD建议增加PTV的重要性权重。这一调整使得PTV的剂量分布更加均匀且集中。然而,这可能会导致其他器官的保护不足,因为它们的相对权重被降低。因此,在下一步中,反馈建议略微增加这些器官的权重,从而提供更好的保护如下图(b), ©所示。

本文将TextGrad优化的计划与用于治疗五名前列腺癌患者的临床批准计划进行了比较。虽然存在自动规划系统,但它们尚未成为标准实践,且不能作为可靠的真实数据来源。因此,手动设计并经过临床批准的计划仍是“黄金标准”。在下图(d)中,本文评估了 TextGrad在实现PTV区域临床目标方面的能力。TextGrad优于临床计划,获得了更高的平均剂量,且恰好与规定剂量相匹配。

下图(e)中,本文关注健康器官的保护。TextGrad优化的计划为这些健康器官提供了更低的平均剂量,表明其比人工优化的计划提供了更好的器官保护。总之,这些结果作为TextGrad潜力的示范性展示,而不是对临床效果的最终结论。

img

优化复合AI系统

最后,本文探讨了TextGrad在优化涉及多个变量和更长推理链的复合AI系统中的能力。

首先,本文研究了Chameleon系统的优化。Chameleon是一个复杂的自主智能体系统,由多个LLM模块和工具组成。该系统集成了视觉感知、知识检索等能力,能够解决广泛的任务。然而,Chameleon的原始规划与执行流程是静态的,缺乏反馈机制,这可能导致在任务执行过程中错误不断累积。

为了解决这一问题,本文使用TextGrad优化Chameleon提供的解题步骤。优化过程首先通过所有模块进行标准的前向推理。随后,从第一个模块开始,逐步对每个模块的输出进行迭代优化,直至最后一个模块。在每个模块中,优化过程使用损失函数对最终响应进行评估,通过 TextGrad 计算文本梯度,并将这些梯度反向传播到模块输出以进行更新。通过引入该反馈循环,本文克服了 Chameleon系统静态执行的局限性。

本文在ScienceQA-IMG数据集上评估了这种方法。ScienceQA-IMG需要协调视觉感知和知识检索等多种工具。下图展示了TextGrad在优化Chameleon系统方面的有效性。通过识别推理链中的错误,并通过文本梯度的迭代反向传播来改进模块输出(如下图a、b所示),TextGrad在执行两次优化迭代时将基线性能提高了5.7%,在执行三次迭代时提升了7.7%(e)。这些结果表明,TextGrad能够显著增强Chameleon等复合系统的性能。

其次,本文使用TextGrad来提升多模态模型的空间推理能力。在视觉问答任务中,模型需要根据图像回答与图像内容相关的问题。为引导模型作答,本文提供了指令性提示词,例如:“Answer the question based on the image, let’s think step by step”。另一个语言模型则使用损失函数提示词对解答进行评估。

在此任务中,本文使用TextGrad对两类提示词(用于答案生成的指令性提示词和用于评估的损失提示词)以及生成的答案本身进行联合优化。

本实验在HQH,一个包含1600对视觉问答样本的空间推理数据集上进行评估。由下图(f)可知,使用TextGrad对答案和提示词进行联合优化,模型性能相比于使用GPT-4o与思维链提示词组合提高了9%,并优于Reflexion。

img

讨论

TextGrad 基于以下三个原则构建:(1) 该框架具有通用性和高性能,不针对特定应用领域进行手工设计;(2) 其使用方式简单,类似于PyTorch的抽象设计,从而实现知识迁移;(3) 它是完全开源的。

通过TextGrad,本文在代码优化和博士级问答任务中取得了最先进的结果,并优化了提示词,也在分子优化和治疗方案优化方面提供了概念验证结果。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### ECharts 图例文字颜色渐变的实现 ECharts 并不直接支持图例文字的颜色渐变功能。然而,可以通过一些间接的方法来模拟这种效果。一种常见的做法是在渲染图表之前动态修改图例的文字样式。 为了实现图例文字的颜色渐变效果,可以考虑以下方案: #### 方法一:通过 SVG 渐变填充 如果希望更灵活地控制文本的颜色变化,可以在 HTML 中创建一个带有渐变背景的 `<svg>` 元素,并将其作为图例外部容器的一部分。这样就可以利用 CSS 或者 JavaScript 来操作这个 SVG 的属性,从而达到近似的效果[^1]。 ```html <!-- 创建SVG用于绘制渐变 --> <svg id="legend-gradient" width="0" height="0"> <defs> <linearGradient id="textGrad" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:#ff7f50;stop-opacity:1"/> <stop offset="100%" style="stop-color:#fff;stop-opacity:1"/> </linearGradient> </defs> </svg> <div id="main"></div> <!-- ECharts 容器 --> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> ``` 接着,在初始化 ECharts 实例时调整 `legend` 配置项中的 `formatter` 函数,使它返回带有所需样式的字符串表示形式: ```javascript var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option; option = { legend: { formatter: function (name) { return '<span style="background:url(#textGrad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;">' + name + '</span>'; } }, series: [ { name: 'Series A', type: 'line' }, // 更多系列... ] }; myChart.setOption(option); ``` 这种方法依赖于浏览器对 `-webkit-background-clip` 和 `-webkit-text-fill-color` 属性的支持情况,因此可能不是所有环境下都能完美工作。 #### 方法二:使用 Canvas API 绘制渐变文本 另一种方式是借助 Canvas API 手动绘制具有渐变色彩的文本到画布上,再将该图像转换成 base64 编码的数据 URL 形式插入到页面中作为图例标签的内容。这种方式更加复杂但也提供了更大的灵活性[^2]。 ```javascript function createGradientText(text, gradientStops){ var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'); const fontSize = 16; ctx.font = `${fontSize}px Arial`; let textWidth = ctx.measureText(text).width, grad = ctx.createLinearGradient(0, 0, textWidth, 0); Object.keys(gradientStops).forEach(key => { grad.addColorStop(Number(key), gradientStops[key]); }); ctx.fillStyle = grad; ctx.fillText(text, 0, fontSize * .8); return canvas.toDataURL(); } // 使用此函数生成渐变文本并应用至图例 const legendItems = ['Item One', 'Item Two']; let customLegendDataUrl = []; for(let i=0;i<legendItems.length;i++){ customLegendDataUrl.push(createGradientText( legendItems[i], {'0':'red','0.5':'yellow','1':'green'} )); } ``` 之后可进一步处理这些数据URLs以适应具体的项目需求.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值