DSPy 很牛,它不同于 RAG 的思路(建立本地知识库,给提示语更专业的背景知识),DSPy 做了两件事情,第一是它将大模型的执行分解成为一个流程,也可以称之为“程序”,然后引入优化器,可以微调、自我反馈流程中的每个步骤。
最终的目的是每个步骤在隔离状态下都运行良好,再合成运行也一样良好。
在这个过程中的自我反馈,也就是大模型给每个步骤的微调打分,也叫做:文本梯度。
TextGrad 更牛,它将这种梯度类比扩展到自动微分。
如果对自动微分有点忘,没关系,前文有说过:PyTorch 中 AutoGrad:
前向传播中,神经网络通过对输入数据的处理来预测,通过计算损失函数,判断预测与目标值差异;自动求导系统会记录所有操作,包括输入、输出、权重数据等参数;
前向传播之后,开始反向传播,自动求导计算损失函数对于上面参数的梯度,采用微积分链式法则(传统的自动微分中通过链式法则计算梯度),自动求导每个张量损失的偏导;
这样一番前向、后向遍历之后,更新梯度、优化算法,从而提高模型的预测能力。
自动微分意味着可以自动计算复杂函数的导数!
噢!那 TextGrad 想必也是一样的?!确实如此。
一句话定义:TextGrad 是一个文本梯度的自动微分引擎。
TextGrad 是如何工作的?
一图胜千言:
在这里,当前向函数是 LLM 调用时,使用 ∇LLM 作为梯度算子,函数返回自然语言反馈,比如:
“这个预测可以通过……改进”,反馈描述如何修改变量以改进下游目标,就类似于优化中的梯度。
使用评估收集对预测变量的反馈。然后,根据这个反馈和 (Prompt LLM −−→ Prediction) 调用;
在 TextGrad 中,目标可以是复杂且可能不可微分的函数,函数的域可以是非结构化数据。
梯度的反向传播是深度学习的驱动力,对于黑箱 AI 系统的复合系统,可以构建类似的基于文本反馈的反向传播,形成 TextGrad 基础。
后续文章再深入这个反向传播的具体流程~