一个有用的思维模型

训练会设定模型学到的数值参数。推理会固定这些参数并使用它们。

可以把模型看作一个已保存的计算过程,而不是一个存放现成答案的数据库。在推理期间,系统将数值提供给计算过程的输入端,运行该计算过程,并从输出端获得数值。结果来自将相同的已学习关系应用于当前这个特定输入。

这一点很重要,因为模型通常不会检索训练期间存储好的完整答案,而是针对它接收到的输入计算结果。

推理的工作方式

具体的计算取决于所使用的AI 模型,但基本流程是一致的:

  1. 将输入转换为模型所需的形式。图像可能会被调整大小,文本可能会被拆分成数值片段,表格行可能会经过归一化。这些准备工作通常被归入“推理流程”,尽管它们发生在模型本身之外。
  2. 模型运行其学到的计算过程。数据从模型的输入端经过各个层流向输出端。这种计算方向称为前向传递
  3. 模型生成数值输出。分类器可能会为多个标签生成分数。预测模型可能会生成一个数值或一个范围。语言模型会为可能的下一个 token 生成分数;token 是模型能够处理的文本片段。
  4. 软件会解释该输出或从中进行选择。它可能会应用阈值、选择得分最高的标签、采样一个 token,或对结果进行格式化。这一步属于周围的推理流程,但不一定属于模型本身。
  5. 服务系统返回或存储结果。服务是指加载模型、接收任务、安排任务并交付输出的基础设施。推理是服务系统所执行的模型使用过程。

狭义上的推理是第 2 步以及该步骤生成的模型输出。在实践中,工程师也会用这个词指代从已准备好的输入到可用结果的完整路径。当细节很重要时,应确认所指的是哪条边界。

raw input
    |
    v
input preparation
    |
    v
fixed trained model  ---->  numeric model output
                                  |
                                  v
                         selection or policy
                                  |
                                  v
                           usable result

在这条路径的任何环节,模型通常都不会更新其已学习的参数。记录一次交互以供未来训练使用,并不等同于在这次推理期间学习。

一个完整示例

假设一个垃圾邮件分类器收到一封电子邮件。邮件经过模型所需的准备后,一次前向传递会生成:

spam:     0.82
not spam: 0.18

这些分数就是推理输出。它们表示模型对可用标签的相对支持程度;并不能证明这封邮件就是垃圾邮件。

现在假设邮件服务有一条规则:当垃圾邮件分数至少为0.70时,将邮件移入垃圾邮件文件夹。由于0.82超过了这一阈值,服务会移动这封邮件。

这一差别很容易验证。如果服务将阈值提高到0.90,同一个模型仍然可以生成相同的0.82分数,但邮件会留在收件箱中。推理没有改变,改变的是应用策略。

许多系统中都存在这种分离。风险模型生成一个分数,银行决定达到什么分数时触发审核。医疗模型在图像中标记一个区域,临床医生对其进行解读。推荐模型为项目排序,产品则决定展示多少个项目。

为什么文本生成需要重复推理

对于分类器,一次前向传递就可以生成完整的模型输出。而自回归语言模型的工作方式不同。

给定一个提示词后,模型首先会为可能的下一个内容生成分数。然后,解码规则会选择一个 token。所选 token 会被追加到文本中,模型再根据这个更长的序列重新运行。这个循环会持续进行,直到模型选择结束标记,或达到其他停止条件。

prompt
  -> forward pass
  -> next-token scores
  -> select one token
  -> append it
  -> repeat
  -> stop

解码规则很重要。在条件稳定时,选择得分最高的 token 可以使过程具有确定性。从多个候选项中采样,则可能让同一个提示词产生不同的文本。在这两种情况下,模型都可以保持不变;差异来自软件如何从输出分数中进行选择。Hugging Face 的生成文档将这些内容作为独立的生成选项提供。

因此,“推理就是一次前向传递”是一个有用的简化说法,而不是普适定义。一次传递可能生成一次预测、一组分数,或生成较长结果的一个步骤。

为什么推理很重要

推理是训练好的模型与实际输入相遇的地方。它的行为会影响 AI 功能是否有用、经济、响应迅速且可靠。

模型只是这一结果的一部分。输入准备必须符合模型的预期。输出选择必须适合任务。运行时必须利用可用硬件执行计算。服务层必须处理请求模式。

这些选择会带来以下权衡:

  • 响应时间:交互式工作需要快速得到结果。
  • 吞吐量:批处理任务和繁忙的服务关注系统在一段时间内能完成多少工作。
  • 成本和能耗:每次推理都会消耗计算资源,而重复生成会在每个步骤消耗资源。
  • 输出质量:一些节省速度的改动,例如使用较低精度的数值,需要经过验证,因为它们可能改变输出。
  • 隐私和连接性:推理可以在数据中心或本地设备上运行。运行位置会改变哪些数据必须通过网络传输。

不存在唯一最佳的推理配置。合适的平衡取决于模型、工作负载、硬件和应用需求。Google 的生产环境 ML 指南说明了一个基本选择:提前批量计算输出,还是按需计算输出。

常见误解

“推理意味着模型正在从我这里学习”

通常不是。正常推理使用固定的已学习参数。产品可能会保存你的交互,并在之后将其用于单独的训练过程,但这不是推理的自动组成部分。

有些系统会有意将使用时计算与适应过程或外部记忆结合起来。在这种情况下,系统应说明什么内容会改变以及何时改变。单独使用推理一词,并不意味着学习。

“推理与预测是同一回事”

这两个词经常互换使用,但一个有用的区分是:推理是过程,而预测是输出。输出是更宽泛的词,因为生成模型会生成文本、图像或音频,而人们不一定将这些称为预测。

“推理总是实时发生”

推理可以在线或离线进行。在线推理会在请求到达时运行。离线推理或批量推理会同时处理大量输入,并将结果存储起来供之后使用。

“相同的输入必然产生相同的输出”

不一定。有些模型和选择规则具有确定性,另一些则会从可能的输出中进行采样。运行时细节也可能引入微小的数值差异。可重复性是整个配置的属性,而不是推理一词本身的属性。

“推理模式意味着模型已经准备好生成正确的预测”

框架术语可能比一般概念更狭窄。例如,PyTorch 的inference_mode会禁用梯度计算所需的记录功能,但不会自动将模型的每一层都切换到评估行为。框架开关是一种实现工具,而不是 AI 推理的定义。

“推理就是整个 AI 产品”

推理只是其中一个组件。应用还可能检索数据、应用安全规则、调用工具、存储状态并呈现界面。尽管这些步骤不属于模型的推理计算,但它们会显著影响结果。

推理在 AI 系统中的位置

训练和推理承担不同的任务。训练会反复将模型输出与目标进行比较,并更新模型。推理则使用由此得到的固定模型来处理输入。

部署系统还会增加另一层:

training -> saved model -> deployment and serving -> inference -> application action
                                                        |
                                                        v
                                              logs for later review

日志最终可能会为另一次训练提供数据。这会在系统层面形成反馈循环,但每次普通推理仍然使用模型的某个已保存版本。

接下来阅读什么

阅读什么是 AI 中的训练?,了解创建或更新推理所使用的已学习模型的过程。使用训练与推理了解二者的直接区别,然后继续阅读什么是推理延迟?了解如何衡量部署速度。