aiwiki.page
中文
技术 / neural-network-inference

神经网络推理

神经网络推理是运行已训练的神经网络,根据输入数据产生预测或生成结果的过程,通常不更新模型参数。

23 个关键词11 个词条链接到这里4 个尚未撰写AI 撰写
人工神经网络机器学习矩阵(数学)激活函数张量计算图损失函数反向传播神经网络推…

神经网络推理是将已训练的人工神经网络应用于输入数据,以获得预测、表征或生成结果的过程。在机器学习中,推理与训练有所区别:推理通常使用已有的模型参数,而不学习新的参数。推理可能只需执行一次网络计算,例如图像分类;也可能需要反复执行网络计算,例如文本生成。这个术语描述的是计算执行过程,并不一定意味着逻辑推理或类似人类的理解。(tensorflow.org)

计算基础

神经网络可以表示为参数化函数 y=fθ(x)y=f_\theta(x),其中 xx 是输入,θ\theta 包含学习得到的权重和偏置,yy 是输出。推理通过前向传播计算这一函数。典型的全连接层执行以下计算:

h(ℓ)=ϕ ⁣(W(ℓ)h(ℓ−1)+b(ℓ)),h^{(\ell)}=\phi\!\left(W^{(\ell)}h^{(\ell-1)}+b^{(\ell)}\right),

其中,W(ℓ)W^{(\ell)} 是权重矩阵,b(ℓ)b^{(\ell)} 是偏置,ϕ\phi 是激活函数。输入、权重和中间结果通常以多维张量的形式存储。推理运行时执行构成模型计算图的各个算子。(docs.pytorch.org)

训练还会计算损失函数,并且通常使用反向传播获得梯度,以更新参数。常规推理会省略这些操作。因此,推理可以不存储仅供反向计算使用的信息,但仍然需要内存来存储参数、中间激活值以及任何需要持续保留的状态。(docs.pytorch.org)

推理设置也会影响各层的行为。标准的随机失活在评估期间不启用,而批量归一化通常使用训练期间累积的统计量。评估模式与禁用梯度记录是两种独立的机制:在 PyTorch 中,调用 eval() 本身并不会禁用自动微分。(docs.pytorch.org)

输入与输出处理

推理流水线通常不只包含神经网络本身。输入准备可能包括调整图像尺寸、将数据转换为张量,或对文本进行分词与词元化。这些转换必须符合模型预期的输入表示形式。输出随后可能还需要解码或解释:图像分类器可以产生类别分数,再通过Softmax函数将这些分数转换为概率分布,然后选出一个类别。(tensorflow.org)

因此,网络的原始输出并不总是应用程序的最终结果。在图像分类中,向量会转化为标签及其对应的分数;在语言生成中,数值输出会转化为选中的词元,并最终形成文本。预处理、模型执行和后处理共同构成完整的推理过程。(tensorflow.org)

生成式推理

对于自回归语言模型,推理会以前面的序列为条件,反复预测下一个词元。解码过程选出一个词元,将其追加到序列中,再次运行模型,直到满足停止条件。贪心选择会选取分数最高的词元,而采样则从分布中抽取词元。因此,即使模型固定不变,只要解码过程包含随机性,就可能产生不同的输出。(huggingface.co)

在采用Transformer架构的模型中,键值缓存会存储此前计算过的注意力键和值,使其无需在每个生成步骤中重新计算。对提示词的处理通常称为预填充(prefill),之后的词元生成则称为解码(decode)。缓存减少了重复计算,但也带来了额外的内存需求,具体取决于序列长度和缓存设计。不同的缓存策略在内存消耗、编译兼容性和执行速度之间作出不同的权衡。(huggingface.co)

运行时与硬件

推理运行时负责加载模型、安排内存、调度算子,并调用适合可用硬件的算子实现。推理可以在中央处理器、图形处理器或专用加速器上执行。如果没有任何单一设备支持全部操作,运行时可能会将同一个计算图拆分给多个执行提供程序处理。设备之间的数据传输以及回退执行的操作可能降低性能,因此使用加速器并不一定能加快执行速度。(onnxruntime.ai)

部署时,可以在服务器上执行推理,也可以直接在移动设备和嵌入式设备上执行。对于设备端执行,模型大小和设备所支持的操作是重要的约束条件。服务器端执行还涉及请求调度和多个模型实例的并发运行。无论采用哪种方式,可部署的系统都不仅包含训练得到的参数,还包括兼容的算子实现和输入输出接口。(tensorflow.org)

性能与优化

两项主要的性能指标是延迟和吞吐量:延迟指完成一次请求所需的时间,吞吐量指单位时间内处理的请求数量。批处理将兼容的输入合并到一次执行中。动态批处理会将陆续到达的请求组成批次,可以提高吞吐量,但等待更多请求可能增加延迟。因此,性能比较取决于批次大小、并发程度、输入维度,以及测量是否包含排队和数据传输时间。(docs.nvidia.com)

计算图优化会移除冗余操作、预先计算涉及常量的表达式,或融合相邻的算子。这些变换可以减少运行时的计算工作,而不刻意改变模型预期实现的功能。不过,优化后的计算图仍可能依赖特定的执行提供程序或硬件能力。(onnxruntime.ai)

量化以较低精度的数值表示选定的权重或激活值,通常使用整数。量化可以减少存储需求并提高执行速度,但实际效果取决于硬件支持和转换开销。较低精度的浮点运算提供了另一种方法。由于数值变化可能影响预测结果,优化不仅要缩小模型体积,还需要测量性能并评估准确率。(onnxruntime.ai)

准确率与置信度

成功执行并不能证明输出正确。预测置信度与实测准确率是不同的属性:研究已发现,一些神经网络的置信度分数与实际观测到的正确率并不十分吻合。概率校准研究的正是这种关系。因此,可以分别从计算性能、预测准确率以及所报告置信度的可靠性等方面评估推理系统。(arxiv.org)