第 4 章:DNN 架构

目标

为什么神经网络的架构选择会影响系统设计决策,从而决定计算可行性、硬件需求和部署约束?

神经网络架构体现了工程上的抉择,直接决定了系统性能与部署的可行性。每一次架构选择都会在系统栈中产生连锁反应:内存带宽需求、计算复杂度模式、并行化机会以及硬件加速兼容性。理解这些架构层面的影响,有助于工程师在模型能力与系统约束之间做出明智权衡,提前预判计算瓶颈,并选择合适的硬件平台。架构决策决定了机器学习系统能否在有限的计算资源下满足性能要求。这种理解对于构建可扩展、能在多样环境中高效部署的 AI 系统至关重要。

学习目标

  • 区分四大主流神经网络架构(MLP、CNN、RNN、Transformer)的计算特性与归纳偏置。
  • 分析架构设计如何决定计算复杂度、内存需求和并行化机会。
  • 评估架构模式对硬件利用率、内存带宽和部署约束的系统级影响。
  • 运用架构选择框架,将数据特性与合适的神经网络设计匹配到具体应用。
  • 通过复杂度分析,权衡不同架构方案的计算与内存取舍。
  • 探究基础计算原语(矩阵乘法、卷积、注意力)如何映射到硬件加速机会。
  • 批判常见的架构选择误区及其对系统性能和部署成功的影响。
  • 综合归纳偏置框架,解释为何不同架构在不同数据类型和问题领域中表现优异。

架构原则与工程权衡

将神经计算系统性地组织为高效架构,是现代机器学习系统最具影响力的进展之一。本章在 第 3 章:深度学习基础 所述神经计算数学基础之上,深入探讨支配操作(矩阵乘法、非线性激活、基于梯度的优化)如何通过架构设计被组织起来以解决复杂计算问题。这一架构视角搭建了数学理论与实际系统实现之间的桥梁,剖析了网络层级的设计选择如何决定系统整体的性能特征。

本章聚焦于机器学习系统设计中普遍存在的工程权衡。虽然数学理论(尤其是通用逼近定理)证明了神经网络具有极强的表达能力,但实际部署则要求通过合理的架构专门化来实现计算高效。这种张力体现在多个维度:理论上的通用性与计算可行性、表达完整性与内存效率、数学普适性与领域优化。通过架构创新解决这些张力,是机器学习系统进步的核心动力。

当通用数学框架在结构化数据上遇到实际部署挑战时,现代神经网络架构正是对这些具体计算难题的系统性回应。每种架构范式都蕴含着独特的归纳偏置(即对数据结构和关系的隐含假设),既能高效学习,又通过领域适配约束假设空间。这些架构创新,是将计算原语组织为在表达能力与计算效率之间取得最佳平衡的工程解法。

本章将系统性地梳理定义现代神经计算概念版图的四大架构家族。多层感知机(MLP)是通用逼近理论的典型实现,展示了密集连接如何实现通用模式识别,同时揭示了架构通用性带来的计算代价。卷积神经网络(CNN)引入了空间架构专门化范式,利用平移不变性和局部连接,在保持空间数据表达力的同时大幅提升效率。循环神经网络(RNN)将架构专门化扩展到时序领域,引入显式记忆机制,实现了前馈架构所不具备的序列处理能力。注意力机制与 Transformer 架构则代表了当前的进化前沿,用动态、内容依赖的计算取代了固定结构假设,在保持高效并行的同时实现了卓越能力。

这些架构模式的系统工程意义远超算法本身。每一次架构选择都会在实现栈的每一层产生独特的计算特征,决定内存访问模式、并行化策略、硬件利用特性,最终影响在资源约束下的系统可行性。理解这些架构影响,对于负责系统设计、资源分配和性能优化的工程师至关重要。

本章采用系统导向的分析框架,揭示架构抽象与具体实现需求之间的关系。对于每个架构家族,我们系统性地考察决定硬件资源需求的计算原语、实现高效算法的组织原则、影响系统可扩展性的内存层级影响,以及架构复杂度与计算开销之间的权衡。

这一分析方法在 第 3 章:深度学习基础 所述神经网络基础之上,进一步探讨前向传播、反向传播和基于梯度的优化如何通过架构专门化被组织起来以利用问题结构。理解这些架构范式之间的进化关系及其独特的计算特性,有助于从业者在复杂部署场景下做出有原则的架构选择、资源规划和系统优化决策。

多层感知机:密集模式处理

多层感知机(MLP)是 第 3 章:深度学习基础 中介绍的全连接架构,本节将其置于架构选择与系统权衡的视角下重新审视。MLP 体现了一种归纳偏置:假设数据中不存在先验结构,任何输入都可能影响任何输出。这种架构选择带来了最大灵活性,使所有输入关系都被视为等可能,因此 MLP 十分通用,但与专用架构相比计算开销更大。其理论能力由通用逼近定理(UAT)1 [Cybenko 1989;Hornik 1989](见 第 3 章:深度学习基础 脚注)确立。该定理指出,只要网络足够大且激活函数非线性,MLP 就能逼近任意紧致域上的连续函数。

多层感知机定义

多层感知机(MLP)全连接神经网络架构,每一层的每个神经元都与相邻层的所有神经元相连。MLP 体现了 无先验结构假设,将所有 输入 - 输出关系视为等可能。这种 密集连接模式 赋予了 极强的表达灵活性通用逼近能力,使其能学习任意函数。但这种通用性也带来了 高参数量计算密集,因此 MLP 更适用于 无结构数据(如表格数据),即特征间关系未知的场景。

在实际应用中,UAT 解释了为何 MLP 能胜任多样任务,同时也揭示了理论能力与实际实现之间的差距。定理保证了 某种 MLP 能逼近任意函数,但并未说明所需网络规模或权重如何确定。在现实中,虽然 MLP 理论上能解决任意模式识别问题,但实现这一能力可能需要极大的网络规模或计算量。这种理论能力使 MLP 成为表格数据、推荐系统及输入关系未知问题的首选,而这些实际局限又推动了专用架构的发展,以利用数据结构提升计算效率,详见 第 4 章:DNN 架构

以 MNIST 手写数字识别为例2,MLP 通过将 $28\times 28$ 像素图像转化为数字分类,展现了其计算方式。

模式处理需求

深度学习模型常常面临这样的问题:任何输入特征都可能影响任何输出,且这些关系没有内在约束。例如金融市场分析,任何经济指标都可能影响市场结果;自然语言处理中,一个词的含义可能依赖于句中任意其他词。这些场景需要一种能学习所有输入特征间任意关系的架构模式。

密集模式处理正是为此而生。首先,它允许不受限制的特征交互,每个输出都可依赖任意输入组合。其次,它支持特征重要性的学习,由系统自动判断哪些连接重要,而非预设关系。最后,它具备自适应表达能力,能根据数据动态调整内部表示。

以 MNIST 数字识别为例,虽然人类可能关注数字的某些部位(如“6”的环、“8”的交叉),但对分类起决定作用的像素组合并不确定。带衬线的“7”可能与“2”有相似像素分布,而手写体的多样性意味着判别特征可能出现在图像任意位置。这种对特征关系的不确定性,要求采用每个像素都可能影响分类决策的密集处理方式。

这种无约束连接的需求,直接催生了 MLP 的数学基础。

算法结构

MLP 通过全节点连接实现了不受限制的特征交互。具体表现为一系列全连接层,每层神经元与相邻层所有神经元相连,即 第 3 章:深度学习基础 中介绍的“密集”连接模式。

这一架构原则将密集连接模式转化为矩阵乘法操作3,为 MLP 的计算可行性奠定了数学基础。如图 1 所示,每一层通过如下基本操作实现输入变换:

$$ \mathbf{h}^{(l)} = f\big(\mathbf{W}^{(l)}\mathbf{h}^{(l-1)} + \mathbf{b}^{(l)}\big) $$

其中 $\mathbf{h}^{(l)}$ 表示第 $l$ 层输出(激活向量),$\mathbf{W}^{(l)}$ 为第 $l$ 层权重矩阵,$\mathbf{b}^{(l)}$ 为偏置向量,$f(\cdot)$ 为激活函数(如 ReLU,详见 第 3 章:深度学习基础 )。这种层级变换虽然概念简单,但其计算效率高度依赖于操作组织方式。

图 1: <strong>层级变换</strong>:多层感知机(MLP)通过顺序矩阵乘法和非线性激活实现密集连接,支持复杂特征交互和输入数据的层次化表达。每层将前一层输入向量变换为新的表示,作为下一层输入,具体见正文公式。来源:[Reagen 等 2017]
图 1: 层级变换:多层感知机(MLP)通过顺序矩阵乘法和非线性激活实现密集连接,支持复杂特征交互和输入数据的层次化表达。每层将前一层输入向量变换为新的表示,作为下一层输入,具体见正文公式。来源:[Reagen 等 2017]

这些操作的维度揭示了密集模式处理的计算规模:

  • 输入向量:$\mathbf{h}^{(0)} \in \mathbb{R}^{d_{\text{in}}}$(此处为行向量)代表所有输入特征
  • 权重矩阵:$\mathbf{W}^{(l)} \in \mathbb{R}^{d_{\text{out}} \times d_{\text{in}}}$ 捕捉所有输入 - 输出关系
  • 输出向量:$\mathbf{h}^{(l)} \in \mathbb{R}^{d_{\text{out}}}$ 产生变换后的表示

具体计算示例

假设用 3 个神经元的隐藏层处理 4 像素图像:

输入:$\mathbf{h}^{(0)} = [0.8, 0.2, 0.9, 0.1]$(4 个像素强度)

权重矩阵:$\mathbf{W}^{(1)} = \begin{bmatrix} 0.5 & -0.3 & 0.2 & 0.7 \ 0.1 & 0.8 & -0.4 & 0.3 \ -0.2 & 0.4 & 0.6 & -0.1 \end{bmatrix}$(3×4 矩阵)

计算: \begin{gather*} \mathbf{z}^{(1)} = \mathbf{h}^{(0)T}\mathbf{W}^{(1)} = \begin{bmatrix} 0.5×0.8 + (-0.3)×0.2 + 0.2×0.9 + 0.7×0.1 \ 0.1×0.8 + 0.8×0.2 + (-0.4)×0.9 + 0.3×0.1 \ (-0.2)×0.8 + 0.4×0.2 + 0.6×0.9 + (-0.1)×0.1 \end{bmatrix} \ = \begin{bmatrix} 0.65 \ -0.17 \ 0.47 \end{bmatrix} \end{gather*} ReLU 激活后:$\mathbf{h}^{(1)} = [0.65, 0, 0.47]$(负值归零)

每个隐藏神经元都用不同权重组合所有输入像素,体现了无约束特征交互。

MNIST 示例进一步说明了这些操作的实际规模:

  • 每个 784 维输入($28\times 28$ 像素)与隐藏层每个神经元全连接
  • 100 个神经元的隐藏层需 $784\times 100$ 权重矩阵
  • 每个权重代表一个输入像素与隐藏特征的可学习关系

这种算法结构满足了任意特征关系的需求,同时也带来了系统必须应对的特定计算模式。

架构特性

密集连接既带来了优势,也带来了权衡。它赋予了前述的通用逼近能力,但也引入了计算冗余。虽然理论上能用足够宽的网络逼近任意连续函数,但这种灵活性往往需要大量参数去学习相对简单的模式。密集连接确保每个输入特征都影响每个输出,表达力极强,但计算开销也最大。

因此,现代优化技术致力于在保留模型能力的同时降低计算需求。例如结构化剪枝可在几乎不损失精度的情况下去除 80-90% 的连接,量化则将参数精度从 32 位降至 8 位甚至更低。 第 10 章:模型优化 将详细介绍这些压缩策略,而本节奠定的架构基础决定了哪些优化方法最适合密集连接模式, 第 11 章:AI 加速 则探讨了硬件层面的实现。

计算映射

密集矩阵乘法的数学表达对应着系统必须处理的具体计算模式。这一映射过程,从数学抽象到计算现实,可通过代码清单 1 中的首个实现示例说明。

mlp_layer_matrix 函数直接反映了数学公式,采用高级矩阵操作(matmul)一行表达了核心计算,同时屏蔽了底层复杂性。这种实现风格是深度学习框架的典型特征,由优化库负责实际计算。

代码清单 1:该实现展示了神经网络如何通过矩阵操作在各层执行加权求和与激活函数,突出多层感知机的核心计算模式。

def mlp_layer_matrix(X, W, b):
    # X: 输入矩阵(batch_size × num_inputs)
    # W: 权重矩阵(num_inputs × num_outputs)
    # b: 偏置向量(num_outputs)
    H = activation(matmul(X, W) + b)
    # 一行数学表达
    return H

要理解该架构对系统的影响,必须“揭开”高层框架调用的底层。优雅的一行矩阵乘法 output = matmul(X, W),在硬件层面其实是多重嵌套循环,暴露了系统的真实计算需求。这种从逻辑模型到物理执行的转化,揭示了决定内存访问、并行化策略和硬件利用的关键模式。

第二个实现 mlp_layer_compute(见代码清单 2)则暴露了实际的计算模式:嵌套循环处理每个批次样本、每个输出神经元,累加所有输入的加权贡献。

代码清单 2:该实现逐步计算每个输出神经元,累加所有输入的加权贡献,详细揭示了神经网络单层处理数据的过程,强调了偏置和加权求和在输出生成中的作用。

def mlp_layer_compute(X, W, b):
    # 处理每个批次样本
    for batch in range(batch_size):
        # 计算每个输出神经元
        for out in range(num_outputs):
            # 以偏置初始化
            Z[batch, out] = b[out]
            # 累加加权输入
            for in_ in range(num_inputs):
                Z[batch, out] += X[batch, in_] * W[in_, out]

    H = activation(Z)
    return H

该实现逐步计算每个输出神经元,累加所有输入的加权贡献,详细揭示了神经网络单层处理数据的过程,强调了偏置和加权求和在输出生成中的作用。

以 MNIST 为例,每个输出神经元需 784 次乘加操作,至少 1,568 次内存访问(784 输入,784 权重)。实际实现通常通过 BLAS4 或 cuBLAS 优化,但这些模式决定了系统设计的关键。加速这些矩阵操作的硬件架构(如 GPU 张量核心5 和专用 AI 加速器)将在 第 11 章:AI 加速 详述。

系统影响

神经网络架构在系统层面表现出三大核心特性:内存需求、计算需求和数据流动。该分析框架有助于系统性地理解算法模式如何影响系统设计决策,揭示共性与架构特有优化。我们将在各架构家族分析中反复应用这一框架。这些系统层面的考量,直接建立在 第 3 章:深度学习基础 所述神经网络计算模式、内存系统和系统扩展性基础之上。

内存需求

密集模式处理的内存需求主要来自权重、输入和中间结果的存储与访问。以 MNIST 为例,784 维输入层与 100 神经元的隐藏层全连接需 78,400 个权重参数。每次前向传播都要访问所有权重、输入和中间结果。全连接模式意味着访问没有局部性,每个输出都需要所有输入及其对应权重。

这种内存访问模式可通过数据组织和重用优化。现代处理器通过缓存层级实现数据重用,GPU 则采用高带宽内存架构以高效访问大规模参数矩阵。深度学习框架通过高性能矩阵操作(如前述分析)屏蔽了这些底层优化。

计算需求

核心计算是嵌套循环中的乘加操作。每个输出值需与输入数目等量的乘加。以 MNIST 为例,每个输出神经元需 784 次乘加,100 个神经元共需 78,400 次乘加。虽然单次操作简单,但其数量和组织方式对处理资源提出了特定要求。

这种计算结构使现代硬件能采用特定优化策略。密集矩阵乘法可在多个处理单元间并行,每个单元负责不同神经元。硬件加速器通过专用矩阵乘法单元提升效率,软件框架则自动将操作转化为优化的 BLAS 调用。CPU 和 GPU 均可通过合理分块提升缓存局部性,具体方式依赖各自架构优势。

数据流动

MLP 的全连接模式带来了大量数据流动需求。每次乘加操作需三类数据:输入值、权重值和累加和。以 MNIST 为例,计算单个输出值需搬运 784 个输入和 784 个权重。每个输出神经元都要重复这一过程,导致内存与计算单元间的数据传输压力极大。

可预测的数据流动模式使得数据分级和传输优化成为可能。不同架构采用不同机制应对:CPU 依赖预取和多级缓存,GPU 则采用高带宽内存和大规模线程隐藏延迟。软件框架通过内存管理减少冗余传输、提升数据重用。

MLP 计算需求分析揭示了一个关键洞见:密集连接虽有通用逼近能力,但当数据本身具备结构时会造成极大低效。这种架构假设与数据特性的不匹配,推动了能利用结构化模式提升计算效率的专用方法发展。

卷积神经网络:空间模式处理

MLP 的计算强度和参数需求在处理结构化数据时暴露出低效。正如 第 4 章:DNN 架构 所述的计算复杂度分析,这一低效推动了能利用数据结构的架构模式发展。

卷积神经网络(CNN)正是为此而生,体现了特定归纳偏置:假设空间局部性和平移不变性,即相邻像素相关,模式可出现在任意位置。这一架构假设带来了两大创新:参数共享使同一特征检测器可应用于不同空间位置,将参数量从百万级降至千级并提升泛化能力;局部连接则限制连接于空间邻域,反映了空间邻近性与特征相关性的洞见。

卷积神经网络定义

卷积神经网络(CNN)专为利用数据空间结构设计的神经网络架构,通过 局部连接参数共享 实现。CNN 体现了两大归纳偏置:空间局部性(邻近元素相关)和 平移不变性(模式可出现在任意位置)。通过 可学习的卷积核 在空间维度滑动,CNN 相比全连接架构实现了 参数量级缩减,并能构建从低级到高级的 层次化特征表示。这使 CNN 在 计算机视觉图像处理 等空间结构数据领域表现卓越。

这些架构创新体现了深度学习设计中的权衡:牺牲 MLP 的理论通用性,换取数据具备已知结构时的实际效率提升。MLP 将每个输入元素独立处理,CNN 则利用空间关系实现计算节省和视觉任务性能提升。

模式处理需求

空间模式处理适用于数据点间关系依赖于相对位置或邻近性的场景。例如处理自然图像时,像素与其邻居的关系对检测边缘、纹理和形状至关重要。这些局部模式再层层组合,形成更复杂的特征:边缘组成形状,形状组成物体,物体组成场景。

这种层次化空间模式处理广泛存在于各领域。计算机视觉中,局部像素模式形成边缘和纹理,进而组合为可识别物体。语音处理中,临近时间片的模式用于识别音素和单词。传感器网络分析物理邻近传感器的相关性以理解环境模式。医学影像依赖识别指示生物结构的组织模式。

以图像处理为例,若要检测猫,需识别空间模式:三角形耳朵、圆形脸部、毛发纹理。关键在于这些模式无论出现在图像何处都具有相同意义。猫无论在左上角还是右下角都是猫。这表明空间模式处理需具备两大能力:检测局部模式和无视位置识别模式6。图 2 展示了 CNN 通过层次特征提取实现了这一点,简单模式在浅层被检测,复杂模式在深层组合。

图 2: <strong>空间特征提取</strong>:卷积神经网络通过在输入上应用可学习滤波器,实现对图像中任意位置模式的识别,支持稳健的目标识别。滤波器检测局部特征,反复滑动实现平移不变性。
图 2: 空间特征提取:卷积神经网络通过在输入上应用可学习滤波器,实现对图像中任意位置模式的识别,支持稳健的目标识别。滤波器检测局部特征,反复滑动实现平移不变性。

这引出了卷积神经网络(CNN)架构,由 Yann LeCun7 等人于 1989 年首创。CNN 通过参数共享8、局部连接和平移不变性9等创新实现上述目标。

算法结构

CNN 的核心操作可用如下数学表达:

$$ \mathbf{H}^{(l)}{i,j,k} = f\left(\sum{di}\sum_{dj}\sum_{c} \mathbf{W}^{(l)}{di,dj,c,k}\mathbf{H}^{(l-1)}{i+di,j+dj,c} + \mathbf{b}^{(l)}_k\right) $$

该公式描述了 CNN 如何处理空间数据。$\mathbf{H}^{(l)}{i,j,k}$ 是第 $l$ 层空间位置 $(i,j)$、通道 $k$ 的输出。三重求和遍历滤波器空间尺寸 $(di,dj)$ 和输入通道 $c$。$\mathbf{W}^{(l)}{di,dj,c,k}$ 为滤波器权重,捕捉局部空间模式。与 MLP 的全连接不同,CNN 只连接空间邻域。

进一步解释,$(i,j)$ 为空间位置,$k$ 为输出通道,$c$ 为输入通道,$(di,dj)$ 为局部感受野10。与 MLP 的密集矩阵乘法不同,该操作:

  • 只处理局部邻域(通常 $3\times 3$ 或 $5\times 5$)
  • 在空间位置间复用同一权重
  • 保持输出的空间结构

以 MNIST 手写数字分类为例,$28\times 28$ 灰度图像,每层卷积应用一组(如 $3\times 3$)滤波器滑动计算局部加权和。若用 32 个滤波器并填充保持尺寸,输出为 $28\times 28\times 32$,每个空间位置包含 32 个不同的局部特征。这与 MLP 先展平成 784 维向量再处理的方式形成鲜明对比。

这种算法结构直接满足了空间模式处理需求,形成了影响系统设计的独特计算模式。与 MLP 不同,卷积网络保留了空间局部性,利用了前述层次特征提取原理。这些特性驱动了 AI 加速器的架构优化,如数据重用、分块和并行滤波器计算等对性能至关重要。

数学背景

群论为理解数据对称性和变换提供了数学基础。平移等变性意味着输入平移,输出特征图也相应平移——这是 CNN 能无视位置识别模式的关键。群论为 CNN 有效性提供了理论基础11。平移等变性源于卷积对平移群的等变性:若 $T_v$ 表示平移向量 $v$,卷积层 $f$ 满足 $f(T_v x) = T_v f(x)$。这一等变性使 CNN 能学习在空间位置间泛化的特征。

卷积的选择反映了架构设计中的归纳偏置12。通过限制连接于局部邻域并在空间位置间共享参数,CNN 编码了视觉数据结构的先验知识:重要特征具有局部性和平移不变性。这一架构约束缩小了网络需搜索的假设空间13,使其比全连接网络能更高效地从有限数据中学习。

CNN 自然实现了分层表示学习。浅层用小感受野检测边缘、纹理等低级特征,深层则组合这些特征为更复杂模式,感受野随之增大。这种层次化组织类似视觉皮层结构,使 CNN 能以组合方式表达复杂对象。数学上,堆叠卷积层形成树状依赖结构,深层神经元可“看到”指数级输入像素区域,实现高效的层次模式表达。

架构特性

参数共享通过在空间位置间复用滤波器,大幅降低了复杂度。它体现了有用特征(如边缘、纹理)可出现在图像任意位置的假设,使同一特征检测器在所有空间位置都有效。

CNN 的架构效率还可通过专用技术进一步优化。深度可分离卷积将标准卷积分解为深度卷积和逐点卷积,移动端部署可将计算量降低 8-9 倍。通道剪枝可按重要性指标去除整个特征图,FLOPs 可降 40-50%,精度损失小于 1%。这些优化策略建立在空间局部性原理之上, 第 10 章:模型优化 将探讨硬件实现, 第 11 章:AI 加速 详述现代处理器如何利用卷积的数据重用模式。

如图 3 所示,卷积操作通过滑动小滤波器窗口生成特征图14,捕捉局部结构并保持平移不变性。推荐 CNN Explainer 交互式项目,直观演示卷积网络构建过程。

图 3: 卷积操作通过滑动滤波器窗口对输入数据进行局部特征提取,实现对任意位置模式的识别。
图 3: 卷积操作通过滑动滤波器窗口对输入数据进行局部特征提取,实现对任意位置模式的识别。

计算映射

卷积操作产生了与 MLP 密集矩阵乘法不同的计算模式。从数学操作到实现细节的转化,揭示了独特的计算特性。

首个实现 conv_layer_spatial(见代码清单 3)采用高级卷积操作简洁表达计算。这是深度学习框架的典型做法,由优化库处理底层复杂性。

代码清单 3:该分层方法通过卷积操作结合核和偏置后激活,实现输入数据的特征提取。

def conv_layer_spatial(input, kernel, bias):
    output = convolution(input, kernel) + bias
    return activation(output)

逻辑模型与物理执行之间的桥梁对理解 CNN 系统需求至关重要。高层卷积操作看似简单滑窗,硬件却需协调复杂数据流动并利用空间局部性提升效率。

第二个实现 conv_layer_compute(见代码清单 4)揭示了实际计算模式:多重嵌套循环处理每个空间位置,对输入局部区域应用同一滤波器权重。七重嵌套循环暴露了卷积计算结构的本质及其优化机会。

代码清单 4:嵌套循环:卷积层通过多重嵌套循环处理批量图像、空间维度、输出通道、核窗口和输入特征,揭示了卷积操作的详细计算结构。

def conv_layer_compute(input, kernel, bias):
    # 循环 1:处理每张批量图像
    for image in range(batch_size):

        # 循环 2&3:遍历图像空间
        for y in range(height):
            for x in range(width):
    
                # 循环 4:计算每个输出特征
                for out_channel in range(num_output_channels):
                    result = bias[out_channel]
    
                    # 循环 5&6:遍历核窗口
                    for ky in range(kernel_height):
                        for kx in range(kernel_width):
    
                            # 循环 7:处理每个输入特征
                            for in_channel in range(
                                num_input_channels
                            ):
                                # 从窗口位置取输入值
                                in_y = y + ky
                                in_x = x + kx
                                # 执行乘加操作
                                result += (
                                    input[
                                        image, in_y, in_x, in_channel
                                    ]
                                    * kernel[
                                        ky,
                                        kx,
                                        in_channel,
                                        out_channel,
                                    ]
                                )
    
                    # 存储该输出位置结果
                    output[image, y, x, out_channel] = result

七重嵌套循环揭示了计算的不同层面:

  • 外层循环(1-3)管理位置:哪张图像、图像中哪个位置
  • 中间循环(4)处理输出特征:计算不同的学习模式
  • 内层循环(5-7)执行实际卷积:滑动核窗口

以 MNIST 示例,$3\times 3$ 滤波器、32 个输出通道,每个输出位置每输入通道仅需 9 次乘加,而 MLP 层需 784 次。该操作需在每个空间位置($28\times 28$)和每个输出通道(32)重复。

虽然每个输出操作更少,但空间结构带来了不同的内存访问和计算模式,系统设计需应对这些新挑战和优化机会。

系统影响

卷积神经网络(CNN)在系统层面展现出与 MLP 密集连接截然不同的特征,涵盖内存、计算和数据流动三大分析维度。

内存需求

卷积层的内存需求主要集中在两个方面:滤波器权重和特征图。与 MLP 需要存储完整连接矩阵不同,CNN 只需存储小型、可复用的滤波器。例如,典型的 CNN 处理 224×224 的 ImageNet 图像时,若卷积层有 64 个 $3\times 3$ 滤波器,仅需存储 576 个权重参数($3\times 3\times 64$),远少于等效全连接层所需的数百万参数。系统还需为所有空间位置存储特征图,这带来了不同的内存压力。224×224 的输入配合 64 个输出通道,需要存储 320 万个激活值(224×224×64)。

这些内存访问模式为优化带来了机会,比如权重复用和特征图管理。处理器通过缓存滤波器权重以便在不同位置复用,同时流式处理特征图数据。框架则通过专用内存布局实现空间优化,提升滤波器复用和特征图访问的空间局部性。CPU 和 GPU 的实现方式各异:CPU 利用缓存层级常驻高频滤波器,GPU 则采用专为图像空间访问模式设计的内存架构。专用处理器的详细架构设计原则详见 第 11 章:AI 加速

计算需求

CNN 的核心计算是将小型滤波器反复应用于空间各位置。每个输出值都需在滤波器区域内执行局部乘加操作。以 ImageNet 为例,$3\times 3$ 滤波器、64 个输出通道,计算单个空间位置需 576 次乘加($3\times 3\times 64$),而整个 224×224 空间共需 50,176 个位置重复该操作。虽然单次计算量小于 MLP 层,但空间重复导致总计算量依然巨大。

这种计算模式带来了与 MLP 不同的优化机会。卷积操作的规律性和重复性使硬件能高效并行。现代处理器各有优化方式:CPU 利用 SIMD 指令15同时处理多个滤波器位置,GPU 则在空间位置和通道间并行。进一步降低计算需求的模型优化技术(如专用卷积优化和稀疏模式)详见 第 10 章:模型优化

数据流动

卷积的滑窗模式带来了独特的数据流动特征。与 MLP 每个权重每次前向传播只用一次不同,CNN 的滤波器权重会在空间滑动时被多次复用。例如处理 ImageNet 时,每个 $3\times 3$ 滤波器权重会被复用 50,176 次(即 224×224 个空间位置)。这对系统提出了新挑战:需要在计算单元中流式传递输入特征,同时保持滤波器权重稳定。

可预测的空间访问模式使得数据流动优化成为可能。不同架构采用专用机制应对:CPU 将常用滤波器权重保留在缓存中,流式处理输入特征;GPU 则采用优化空间局部性的内存架构,并提供硬件级滑窗操作支持。深度学习框架通过组织计算,最大化滤波器权重复用,最小化特征图冗余访问。

循环神经网络:序列模式处理

卷积神经网络通过利用空间局部性提升了效率,但当模式依赖于时间顺序而非空间邻近时,其架构假设就失效了。CNN 善于通过共享特征检测器识别“是什么”,却无法捕捉“何时”发生及其跨时间的关系。这一局限在自然语言处理(词义依赖上下文)和时间序列分析(未来依赖历史)等领域尤为突出。

序列数据的挑战在于,模式可能跨越任意时间距离,固定大小的卷积核难以胜任。空间卷积假设邻近像素相关,而时间关系则不同,重要联系可能跨越数百甚至上千步,与邻近性无关。传统前馈架构(包括 CNN)独立处理每个输入,无法维持长距离的时序上下文。

循环神经网络(RNN)正是为了解决这一架构局限而提出的,其归纳偏置是:假设序列依赖,即信息顺序重要,过去影响现在。这一假设引入了“记忆”作为计算模型的一部分。RNN 不再孤立处理输入,而是维护一个内部状态,将前一时刻的信息传递到当前,使输出能结合历史上下文。这种架构带来了新的权衡:CNN 牺牲理论通用性换取空间效率,RNN 则引入了难以并行的计算依赖,以换取时序处理能力。

循环神经网络定义

循环神经网络(RNN)按时间顺序处理数据并在各时刻维护内部记忆状态的序列神经网络架构。RNN 体现了 时间归纳偏置,假设 顺序重要过去影响现在。通过 递归连接 将隐藏状态反馈到网络,RNN 能 处理变长序列建模长距离依赖。但这种顺序处理带来了 计算依赖,难以并行,并在训练时易受 梯度消失或爆炸 问题影响。RNN 擅长 自然语言处理时间序列分析 等时序结构任务。

覆盖说明

本节聚焦 RNN 的核心贡献——序列处理能力及其对现代注意力机制的启发。RNN 引入了记忆状态、时序依赖和顺序计算等关键概念,但当前实际应用更倾向于基于注意力的架构。我们重点讲解原理,不展开各类变体实现,后续章节将详细介绍已在生产系统中取代 RNN 的注意力机制和 Transformer(详见 第 4 章:DNN 架构 ,并说明其与循环架构的关系。

模式处理需求

序列模式处理适用于当前输入的解释依赖于先前信息的场景。自然语言处理中,词义往往高度依赖前文;语音识别中,音素解释依赖于周围声音;金融预测则需理解历史数据模式。

序列处理的难点在于如何随时间维护和更新相关上下文。人类理解文本不会每遇到新词就重头开始,而是随着新信息不断演化对上下文的理解。时间序列数据也常常存在不同时间尺度的依赖,从短期到长期趋势。这要求架构既能随时间维护状态,又能根据新输入动态更新。

这些需求转化为具体的架构要求:系统需维护内部状态以捕捉时序上下文,能根据新输入更新状态,并学会哪些历史信息对当前预测最重要。与 MLP、CNN 处理定长输入不同,序列处理需支持变长序列且保持高效。这些需求最终催生了循环神经网络(RNN)架构。

算法结构

RNN 通过递归连接实现序列处理,与 MLP、CNN 最大的不同在于其内部状态的维护。RNN 不仅仅是输入到输出的映射,而是在每个时间步更新内部状态,实现信息随时间的传递。最早由 Elman(1990)提出,证明了 RNN 能识别时序数据结构。基础 RNN 容易遭遇梯度消失问题16,难以学习长期依赖。

基础 RNN 的核心操作可用如下数学表达: $$ \mathbf{h}t = f(\mathbf{W}{hh}\mathbf{h}{t-1} + \mathbf{W}{xh}\mathbf{x}_t + \mathbf{b}_h) $$ 其中 $\mathbf{h}t$ 为 t 时刻的隐藏状态,$\mathbf{x}t$ 为 t 时刻输入,$\mathbf{W}{hh}$ 为递归权重,$\mathbf{W}{xh}$ 为输入权重,详见图 4 中的展开结构。

以词序列处理为例,每个词可用 100 维向量($\mathbf{x}_t$)表示,隐藏状态为 128 维($\mathbf{h}_t$)。每个时间步,网络将当前输入与前一状态结合,更新对序列的理解,实现跨时间步的记忆机制。

这种递归结构通过连接维护内部状态,将信息随时间传递。RNN 不是独立处理所有输入,而是通过当前输入和前一隐藏状态的迭代更新,适合语言建模、语音识别、时间序列预测等任务。

RNN 实现了递归算法,每步的函数调用依赖于上一步的结果。类似递归函数通过调用栈维护状态,RNN 则通过隐藏向量维护状态。数学公式 $\mathbf{h}t = f(\mathbf{h}{t-1}, \mathbf{x}_t)$ 与递归函数 f(n) = g(f(n-1), input(n)) 完全对应。这也解释了 RNN 能处理任意长度序列:如同递归算法处理任意长列表,RNN 通过递归计算处理变长序列。

效率与优化

序列处理虽带来计算瓶颈,但在内存使用上极为高效。RNN 隐藏状态的内存开销与序列长度无关,适合处理超长序列。Transformer 需 O(n²) 内存(n 为序列长度),而 RNN 始终为常数,能在普通硬件上处理上千步序列。

对隐藏到隐藏连接的结构化剪枝可实现 10 倍加速且不损失序列建模能力。隐藏权重矩阵 $W_{hh}$ 通常主导大隐藏状态下的参数量,但幅值剪枝显示 70-80% 的连接对时序依赖贡献极小。块结构剪枝既保证计算效率,又能大幅压缩模型。

序列操作会累积量化误差,因此需精心设计量化点和梯度缩放以保证低精度训练的稳定性。与前馈网络量化误差局部化不同,RNN 的误差会随时间传播,INT8 量化更具挑战。需采用逐步量化和隐藏状态精度控制,才能保证量化 RNN 部署的准确性。

图 4: <strong>循环神经网络展开</strong>:RNN 通过维护隐藏状态,将前一时刻信息传递到当前,实现对序列数据的处理。展开结构清晰展现了递归权重建模的时序依赖,使网络能学习变长序列中的模式。
图 4: 循环神经网络展开:RNN 通过维护隐藏状态,将前一时刻信息传递到当前,实现对序列数据的处理。展开结构清晰展现了递归权重建模的时序依赖,使网络能学习变长序列中的模式。

计算映射

RNN 的序列处理带来了与 MLP、CNN 完全不同的计算模式,丰富了 第 4 章:DNN 架构 中讨论的架构多样性。其实现方式将时序依赖转化为具体的计算需求。

如代码清单 5 所示,rnn_layer_step 函数用深度学习框架常见的高级矩阵操作实现单步计算,输入为当前输入 x_t 和前一隐藏状态 h_prev,以及两组权重矩阵:递归权重 W_hh 和输入权重 W_xh。通过矩阵乘法(matmul),将前一状态与当前输入融合,生成下一个隐藏状态。

代码清单 5:RNN 层单步:神经网络通过变换融合当前输入和历史状态,实现序列数据处理。

def rnn_layer_step(x_t, h_prev, W_hh, W_xh, b):
    # x_t: 当前时间步输入(batch_size × input_dim)
    # h_prev: 前一隐藏状态(batch_size × hidden_dim)
    # W_hh: 递归权重(hidden_dim × hidden_dim)
    # W_xh: 输入权重(input_dim × hidden_dim)
    h_t = activation(matmul(h_prev, W_hh) + matmul(x_t, W_xh) + b)
    return h_t

理解 RNN 的系统影响,需要考察数学抽象如何转化为硬件执行模式。简单的递归关系 h_t = tanh(W_hh h_{t-1} + W_xh x_t + b) 背后隐藏着独特的计算结构:时序依赖阻碍并行,内存访问模式与前馈网络不同,状态管理影响系统设计。

详细实现(见代码清单 6)揭示了数学抽象背后的计算现实。嵌套循环结构暴露了序列处理在系统优化中的局限与机会。

代码清单 6:RNN 层单步:神经网络通过变换融合当前输入和历史状态,实现序列数据处理。

def rnn_layer_compute(x_t, h_prev, W_hh, W_xh, b):
    # 初始化下一个隐藏状态
    h_t = np.zeros_like(h_prev)

    # 循环 1:处理每个批次序列
    for batch in range(batch_size):
        # 循环 2:递归贡献(h_prev × W_hh)
        for i in range(hidden_dim):
            for j in range(hidden_dim):
                h_t[batch, i] += h_prev[batch, j] * W_hh[j, i]
    
        # 循环 3:输入贡献(x_t × W_xh)
        for i in range(hidden_dim):
            for j in range(input_dim):
                h_t[batch, i] += x_t[batch, j] * W_xh[j, i]
    
        # 循环 4:加偏置并激活
        for i in range(hidden_dim):
            h_t[batch, i] = activation(h_t[batch, i] + b[i])
    
    return h_t

递归层计算:每个时间步通过融合历史状态和当前输入,递归计算隐藏状态。

以输入维度 100、隐藏状态 128 为例,每步需两次矩阵乘法:递归连接 $128\times 128$,输入投影 $100\times 128$。每步可在批次内并行,但时间步间必须顺序处理,形成独特的计算模式。

系统影响

延续 MLP 的分析框架,RNN 在内存、计算和数据流动上展现出与密集和空间处理架构截然不同的模式。

内存需求

RNN 需存储两组权重(输入到隐藏、隐藏到隐藏)及隐藏状态。以输入 100 维、隐藏 128 维为例,输入投影需 12,800 个权重($100\times 128$),递归连接需 16,384 个权重($128\times 128$)。与 CNN 在空间位置复用权重不同,RNN 在时间步间复用权重。系统还需维护隐藏状态,这是内存使用和访问模式的关键。

这些内存访问模式与 MLP、CNN 完全不同。处理器通过缓存权重矩阵、流式处理时序元素优化序列模式。框架通过批处理序列、管理时步间隐藏状态进一步优化。CPU 和 GPU 策略各异:CPU 利用缓存层级复用权重,GPU 则采用专为序列操作设计的内存架构。序列处理的专用硬件优化(如内存分组、流水线架构)详见 第 11 章:AI 加速

计算需求

RNN 的核心计算是每个时间步反复应用权重矩阵。每步需两次矩阵乘法:输入权重和递归权重。以本例为例,单步需 12,800 次乘加(输入投影)和 16,384 次乘加(递归连接)。

与 MLP、CNN 最大不同在于:批次内可并行,时间步间因依赖关系无法并行。每步必须等前一步隐藏状态计算完毕才能开始。这种算法的顺序性与现代硬件的并行化需求形成张力。

处理器通过专用方法应对顺序约束。CPU 在时间步内流水线操作,保持时序顺序;GPU 通过批处理多个序列提升吞吐量。软件框架进一步通过序列打包、多步展开等技术提升并行利用率,同时尊重递归架构的顺序约束。

数据流动

RNN 的序列处理带来了与 MLP、CNN 完全不同的数据流动模式。MLP 每次前向传播权重只用一次,CNN 在空间位置复用权重,RNN 则在时间步间复用权重,同时需精细管理隐藏状态的数据流。

以 128 维隐藏状态为例,每步需加载前一隐藏状态(128 个值)、两组权重(共 29,184 个权重),并存储新隐藏状态(128 个值)。该模式在序列每个元素上重复。与 CNN 可基于空间模式预测和预取数据不同,RNN 的数据流动完全由时序依赖驱动。

不同架构通过专用机制应对序列数据流动:CPU 缓存权重、流式处理序列元素并管理隐藏状态更新,GPU 则优化状态信息的存储和多序列并行处理。深度学习框架通过管理时步间数据传输和批处理进一步优化。

RNN 虽为序列处理奠定了基础,但其架构约束带来了瓶颈:时序依赖阻碍时间步并行,固定容量的隐藏状态限制长序列信息表达,且当重要关系跨越远距离时,时序邻近假设失效。这些局限推动了注意力机制的发展,后者通过动态、内容依赖的连接消除了顺序处理约束。下节将详细分析注意力机制如何解决 RNN 的每一项局限,同时带来新的计算挑战。正因如此,注意力机制成为现代 ML 系统的主流,并彻底重塑了序列模式处理的范式。

注意力机制:动态模式处理

RNN 成功引入了记忆以处理序列依赖,但其固定的顺序处理带来了局限。RNN 必须按时间顺序处理信息,难以捕捉远距离元素间的关系,也无法在序列位置间并行计算。更关键的是,RNN 假设时间邻近性等同于重要性——即相邻词或时间步更相关。但现实中这一假设常常失效。

例如句子“猫坐在窗边俯瞰花园,正在睡觉。”中,“猫”和“睡觉”之间隔着多个词,但它们才是主谓核心。RNN 必须顺序处理所有中间元素,且其有限容量的隐藏状态可能丢失这一关键联系。这一局限暴露了需要一种能基于内容动态识别和加权关系的架构。

注意力机制正是为解决这一架构约束而生 [Bahdanau 2014],通过引入基于输入内容自适应的动态连接模式。注意力机制不再按固定顺序和关系处理元素,而是计算所有元素对之间的相关性,并据此加权交互。这标志着从结构约束到数据驱动处理模式的转变。

注意力机制定义

注意力机制动态神经网络组件,通过计算序列中所有元素对的 内容相关性,使网络能 有选择地关注与任务相关的信息,无论其在序列中的位置如何。通过 查询 - 键 - 值交互,注意力机制计算 相关性分数,据此加权各元素对其他元素的影响。这种 数据驱动计算 使网络能捕捉 任意长距离依赖,突破卷积和递归架构的距离限制,成为现代序列处理的基础。

最初注意力机制作为递归架构的组件出现,但 Transformer 架构证明仅靠注意力即可完全取代顺序处理,开创了全新架构范式。

Transformer 定义

Transformer完全基于注意力机制构建的神经网络架构,摒弃了递归和卷积层,采用 纯注意力处理。Transformer 用 多头自注意力 捕捉关系,并通过 位置编码 保持序列顺序信息。这一架构在 语言建模机器翻译 等领域实现了 最先进性能,并因能高效捕捉长距离依赖、支持大规模并行训练和推理,成为大模型的主流架构。

模式处理需求

动态模式处理适用于元素间关系由内容而非结构决定的场景。语言翻译即是典型例子:“the bank by the river”中“bank”需关注“river”,而“the bank approved the loan”则与“approved”“loan”相关。RNN 顺序处理、CNN 固定空间模式都无法动态判断哪些关系重要,需一种能自适应确定关系的架构。

这一需求在多领域普遍存在:蛋白质结构预测中,氨基酸间的相互作用取决于化学属性和空间结构;图分析中,节点关系由图结构和节点特征决定;文档分析中,不同部分的联系取决于语义内容而非物理邻近。

综合来看,动态处理要求架构具备三大能力:计算所有元素对的关系、根据内容加权这些关系,并用这些权重有选择地融合信息。与以往固定连接模式不同,动态处理要求计算图能随输入自适应调整。这些能力正是注意力机制的基础,也是 Transformer 架构的核心。图 5 展示了注意力机制实现的信息流动。

图 5: <strong>注意力权重</strong>:Transformer 的注意力机制动态评估子词间关系,对序列中更相关的连接赋予更高权重,使模型能聚焦关键信息。可视化的权重揭示了模型在处理语言时如何关注输入的不同部分。
图 5: 注意力权重:Transformer 的注意力机制动态评估子词间关系,对序列中更相关的连接赋予更高权重,使模型能聚焦关键信息。可视化的权重揭示了模型在处理语言时如何关注输入的不同部分。

基础注意力机制

注意力机制实现了从固定架构连接到基于内容的动态交互的转变。本节将探讨注意力的数学基础,分析查询 - 键 - 值操作如何实现灵活的模式处理,并剖析其计算需求、内存访问和系统影响。

算法结构

注意力机制通过计算元素间的加权连接,实现了动态模式处理 [Bahdanau 2014]。其核心操作可用如下数学表达:

$$ \text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax} \left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V} $$

这是缩放点积注意力。$\mathbf{Q}$(查询)与 $\mathbf{K}$(键)矩阵相乘得相似度分数,除以 $\sqrt{d_k}$(键维度)保证数值稳定,再用 softmax17 归一化得到注意力权重,最后加权 $\mathbf{V}$(值)输出。这样每个位置都能根据内容相似度从所有相关位置获取信息。

在该公式中,$\mathbf{Q}$(查询)、$\mathbf{K}$(键)、$\mathbf{V}$(值)18 均为输入的可学习投影。对于长度为 $N$、维度为 $d$ 的序列,该操作生成 $N\times N$ 的注意力矩阵,决定每个位置如何关注其他所有位置。

注意力操作分为三步:首先为每个位置计算查询、键、值投影;然后通过查询 - 键交互生成 $N\times N$ 注意力矩阵(见图 6);最后用注意力权重加权值向量,输出结果。

图 6: <strong>查询 - 键 - 值交互</strong>:Transformer 注意力机制通过计算查询、键、值间的关系,动态加权输入序列元素,使模型聚焦于相关信息。这些投影生成的注意力矩阵决定了每个值向量对最终输出的贡献,有效捕捉序列内的上下文依赖。
图 6: 查询 - 键 - 值交互:Transformer 注意力机制通过计算查询、键、值间的关系,动态加权输入序列元素,使模型聚焦于相关信息。这些投影生成的注意力矩阵决定了每个值向量对最终输出的贡献,有效捕捉序列内的上下文依赖。

关键在于,与以往架构的固定权重矩阵不同(见图 7),注意力权重是针对每个输入动态计算的,使模型能根据内容自适应处理。

图 7: <strong>动态注意力权重</strong>:Transformer 模型根据查询、键、值向量间的关系动态计算注意力权重,使模型在每一步处理时都能聚焦输入序列的相关部分。这与固定权重架构形成对比,实现了对变长输入和复杂依赖的自适应模式处理。
图 7: 动态注意力权重:Transformer 模型根据查询、键、值向量间的关系动态计算注意力权重,使模型在每一步处理时都能聚焦输入序列的相关部分。这与固定权重架构形成对比,实现了对变长输入和复杂依赖的自适应模式处理。

计算映射

注意力机制带来了与以往架构截然不同的计算模式。代码清单 7 展示了动态连接如何转化为具体计算需求。

Listing 7: Attention Mechanism: Transformer models compute attention through query-key-value interactions, enabling dynamic focus across input sequences for improved language understanding.

def attention_layer_matrix(Q, K, V):
    # Q, K, V: (batch_size × seq_len × d_model)
    scores = matmul(Q, K.transpose(-2, -1)) / sqrt(
        d_k
    )  # 计算注意力分数
    weights = softmax(scores)  # 归一化分数
    output = matmul(weights, V)  # 加权值
    return output


# 核心计算模式
def attention_layer_compute(Q, K, V):
    # 初始化输出
    scores = np.zeros((batch_size, seq_len, seq_len))
    outputs = np.zeros_like(V)

    # 循环 1:处理每个批次序列
    for b in range(batch_size):
        # 循环 2:每个查询位置计算注意力
        for i in range(seq_len):
            # 循环 3:与每个键位置比较
            for j in range(seq_len):
                # 计算注意力分数
                for d in range(d_model):
                    scores[b, i, j] += Q[b, i, d] * K[b, j, d]
                scores[b, i, j] /= sqrt(d_k)
    
        # 对分数应用 softmax
        for i in range(seq_len):
            scores[b, i] = softmax(scores[b, i])
    
        # 循环 4:用注意力权重加权值
        for i in range(seq_len):
            for j in range(seq_len):
                for d in range(d_model):
                    outputs[b, i, d] += scores[b, i, j] * V[b, j, d]
    
    return outputs

注意力机制:Transformer 通过查询 - 键 - 值交互计算注意力,实现输入序列间的动态聚焦,提升语言理解能力。

attention_layer_compute 的嵌套循环揭示了注意力的真实计算特征。第一层循环独立处理每个批次序列,第二、三层循环计算所有位置对的注意力分数,形成二次方的计算模式,使注意力既强大又计算密集。第四层循环用权重加权所有值,完成动态连接。

系统影响

注意力机制在系统层面展现出与以往架构完全不同的动态连接需求。

内存需求

注意力机制需存储注意力权重、查询 - 键 - 值投影和中间特征表示。对于长度为 $N$、维度为 $d$ 的序列,每层需为每个批次存储 $N\times N$ 的注意力权重矩阵、三组 $d\times d$ 的投影矩阵,以及 $N\times d$ 的输入输出特征图。每次输入都需动态生成注意力权重,导致中间权重成为内存使用的重要因素。

计算需求

注意力机制的计算需求主要分两步:生成注意力权重并应用于值。每层需执行大量乘加操作。查询 - 键交互本身就需 $N\times N\times d$ 次乘加,加权值时同样如此。还需额外计算投影矩阵和 softmax。与以往架构不同,注意力的计算量随序列长度呈二次增长,且每次输入都需全新计算。

数据流动

数据流动在注意力机制中呈现独特挑战。每次操作需为每个位置投影并搬运查询、键、值向量,存取完整注意力权重矩阵,并在加权阶段协调值向量流动。这种数据流动模式使中间权重成为系统带宽的主要瓶颈。与 CNN 的可预测访问或 RNN 的顺序访问不同,注意力操作需频繁搬运动态计算的权重,跨越内存层级。

这些独特的内存、计算和数据流动特性对系统设计和优化提出了新要求,也为 Transformer 等更高级架构的发展奠定了基础。

Transformer:纯注意力架构

注意力机制虽引入了动态模式处理,但最初只是现有架构(尤其是序列到序列任务中的 RNN)的补充。这种混合方式仍受限于递归架构的根本瓶颈:顺序处理阻碍高效并行,长序列处理困难。突破性进展在于认识到仅靠注意力机制即可完全取代卷积和递归处理。

Transformer 架构由“Attention is All You Need”论文19(Vaswani 2017)提出,体现了革命性的归纳偏置:不假设任何先验结构,而让模型基于内容动态学习所有元素对的关系。这一假设是 第 4 章:DNN 架构 所述架构进化的终点,彻底摒弃结构约束,转向纯内容驱动的处理。Transformer 以自注意力为核心计算模式,放弃了 CNN 的参数高效和 RNN 的顺序一致性,换取了最大灵活性和并行性。

这标志着架构进化的终极阶段:MLP 全连接,CNN 局部连接,RNN 顺序连接,Transformer 则基于内容动态连接。每一步都用能力换取约束,Transformer 以 第 4 章:DNN 架构 中分析的计算代价,换来了最大表达力。

算法结构

Transformer 的核心创新在于自注意力层。自注意力机制中,查询、键、值均来自同一输入序列,这与早期注意力机制(如解码器查询编码器)不同。自注意力使模型在编码每个位置时能衡量序列内其他位置的重要性。例如处理“The animal didn’t cross the street because it was too wide.”时,自注意力能将“it”与“street”关联,捕捉传统顺序模型难以建模的长距离依赖。

自注意力机制的数学表达与基础注意力类似: $$ \text{SelfAttention}(\mathbf{X}) = \text{softmax} \left(\frac{\mathbf{XW_Q}(\mathbf{XW_K})^T}{\sqrt{d_k}}\right)\mathbf{XW_V} $$

其中 $\mathbf{X}$ 为输入序列,$\mathbf{W_Q}$、$\mathbf{W_K}$、$\mathbf{W_V}$ 为查询、键、值的可学习权重矩阵。该公式突出自注意力所有分量均源自同一输入,实现了基于内容的动态处理。

在此基础上,Transformer 引入多头注意力,将自注意力机制并行化。每个“头”用独立的查询/键/值投影,能关注输入的不同方面,使模型能同时捕捉多种关系,提升表达能力。

多头注意力的数学表达为: $$ \text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\mathbf{W}^O $$ 每个头的计算为: $$ \text{head}_i = \text{Attention}(\mathbf{Q}\mathbf{W}_i^Q, \mathbf{K}\mathbf{W}_i^K, \mathbf{V}\mathbf{W}_i^V) $$

自注意力和多头注意力中的缩放因子 $\sqrt{d_k}$ 至关重要。它防止点积过大导致 softmax 梯度极小,保证训练稳定。对于 $d_k$ 维的查询和键,其点积方差为 $d_k$,除以 $\sqrt{d_k}$ 后方差归一,便于优化20

从概念上看,注意力机制可视为一种内容寻址存储系统。类似哈希表通过键检索值,注意力通过查询与所有键的相似度检索加权值。点积相似度 Q·K 类似哈希函数,softmax 归一化实现概率检索。这解释了注意力为何适合灵活信息检索任务——它是数据库查找的可微近似。

从信息论角度,注意力机制实现了不确定性下的信息最优聚合。注意力权重代表了当前处理步骤对输入各部分相关性的“不确定性”,softmax 实现了最大熵原则:在所有可能的注意力分布中,softmax 选择了在相似度约束下熵最大的分布 [Cover 2006]。

效率与优化

注意力机制存在高度冗余,许多头部学习到的模式非常相似。通过头部剪枝和低秩注意力分解,可在精细实现下将计算量减少 50-80%。对大型 Transformer 模型的分析发现,大多数注意力头只覆盖少数几种常见模式(位置、句法、语义),这表明显式的架构专门化有可能取代部分冗余的学习。

注意力操作对量化极为敏感,主要受 softmax 操作和注意力分数的二次数量影响。Q、K、V 投影需分别采用独立量化方案,并对 softmax 操作进行精细处理以保证量化稳定性。后训练 INT8 量化通常损失 2-3% 的精度,而 INT4 量化则需更复杂的量化感知训练方法。

序列长度的二次扩展带来了效率瓶颈。稀疏注意力模式(如局部窗口、跨步模式或可学习稀疏性)可将复杂度从 O(n²) 降至 O(n log n) 或 O(n),同时保持大部分建模能力。线性注意力近似则以部分表达力换取线性扩展,使得在有限硬件上处理更长序列成为可能。

信息论视角解释了注意力为何能高效实现选择性处理。该机制自动平衡两大目标:聚焦最相关信息(最小化熵)与保持足够广度避免遗漏重要细节(最大化熵)。注意力模式正是这两者的最优权衡,解释了 Transformer 能高效处理长序列和复杂依赖的原因。

自注意力在输入序列上学习动态激活模式。与 CNN 固定滤波器或 RNN 固定递归模式不同,注意力机制能根据内容学习哪些元素应共同激活,形成自适应连接,每个输入都能改变网络的有效拓扑。最新研究表明,训练好的模型中的注意力头常常专门检测特定的语言或语义模式,说明该机制能自然发现数据中的可解释结构规律。

Transformer 架构将自注意力机制与前馈层、层归一化和残差连接等结构结合(见图 6),使其能并行处理输入序列,无需顺序计算即可捕捉复杂依赖。因此,Transformer 在自然语言处理、计算机视觉等领域展现了极高的有效性,推动了深度学习架构的跨领域变革。

图 8: <strong>注意力头</strong>:神经网络通过查询 - 键 - 值交互计算注意力,实现子词间的动态聚焦,提升句子理解能力。
图 8: 注意力头:神经网络通过查询 - 键 - 值交互计算注意力,实现子词间的动态聚焦,提升句子理解能力。

计算映射

Transformer 的自注意力机制在基础注意力之上,带来了独特的计算模式。理解这些模式需考察 Transformer 中自注意力的典型实现(见代码清单 8):

代码清单 8:自注意力机制:Transformer 通过查询 - 键 - 值交互计算注意力,实现输入序列间的动态聚焦,提升语言理解能力。

def self_attention_layer(X, W_Q, W_K, W_V, d_k):
    # X: 输入张量(batch_size × seq_len × d_model)
    # W_Q, W_K, W_V: 权重矩阵(d_model × d_k)

    Q = matmul(X, W_Q)
    K = matmul(X, W_K)
    V = matmul(X, W_V)
    
    scores = matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)
    attention_weights = softmax(scores, dim=-1)
    output = matmul(attention_weights, V)
    
    return output


def multi_head_attention(X, W_Q, W_K, W_V, W_O, num_heads, d_k):
    outputs = []
    for i in range(num_heads):
        head_output = self_attention_layer(
            X, W_Q[i], W_K[i], W_V[i], d_k
        )
        outputs.append(head_output)

    concat_output = torch.cat(outputs, dim=-1)
    final_output = matmul(concat_output, W_O)
    
    return final_output

自注意力机制:Transformer 通过查询 - 键 - 值交互计算注意力,实现输入序列间的动态聚焦,提升语言理解能力。

该实现揭示了基础注意力机制的关键计算特性,而 Transformer 的自注意力是其特定应用。首先,自注意力支持序列所有位置的并行处理,体现在 Q、K、V 的矩阵乘法可同时计算所有位置。与递归架构顺序处理输入不同,这种并行性使其在现代并行硬件上计算更高效。

其次,注意力分数计算会生成一个大小为(seq_len × seq_len)的矩阵,导致序列长度的二次复杂度。长序列处理时,这种二次关系成为主要计算瓶颈,推动了高效注意力机制的研究。

第三,多头注意力机制本质上是并行运行多个自注意力,每个头有独立的投影参数。虽然计算量随头数线性增长,但能捕捉输入中的多种关系,增强模型表达力。

第四,自注意力的核心计算由大规模矩阵乘法主导。对于长度为 $N$、嵌入维度为 $d$ 的序列,主要操作涉及 $(N\times d)$、$(d\times d)$ 和 $(N\times N)$ 的矩阵。这些密集矩阵操作适合 GPU 等专用硬件加速,但也显著增加了模型的整体计算成本。

最后,自注意力会生成大量中间内存结果。注意力权重矩阵($N\times N$)和每个头的中间结果,对长序列尤其占用内存,这对内存受限设备部署提出挑战,需在实现中精细管理内存。

这些计算模式使 Transformer 的自注意力在架构上独具一格。并行计算特性使其适合现代并行硬件,但序列长度的二次复杂度限制了长序列处理能力。因此,优化技术(如稀疏注意力、低秩近似)成为研究热点,每种优化都需在效率与表达力间权衡,实际应用中需谨慎选择。

对四大架构家族的分析揭示了各自特性及其进化关系。与其孤立看待这些架构,不如深入理解它们之间的联系及共同基础。

架构构件积木

分析 MLP、CNN、RNN、Transformer 四大架构家族及其系统影响后,可以发现深度学习架构本质上是由基础构件积木组合而成。正如复杂的乐高结构由基础积木搭建,现代神经网络是在几十年研究中不断组合和迭代核心计算模式。每次架构创新都引入新积木,同时发现已有积木的新用法。

这些积木及其进化过程揭示了现代架构设计的本质。简单感知机演化为多层网络 [Rumelhart 1986],随后又衍生出空间和序列处理的专用模式。每次进步都保留了前代的有用元素,同时引入新的计算原语。Transformer 等当代架构正是对这些积木的精心组合。

这一进化既展现了神经网络的发展,也体现了核心计算模式的发现与完善,这些模式至今仍然重要。基于 第 4 章:DNN 架构 的架构进化,每种新架构都带来了独特的计算需求和系统挑战。

表 1 总结了这一进化,突出每个深度学习时代的关键原语和系统关注点。该表展示了深度学习架构设计的主要转变及系统层面的变化,从早期 CPU 优化的密集矩阵运算,到利用 GPU 加速的卷积、需要复杂内存层级的序列操作,再到当前依赖灵活加速器和高带宽内存的注意力机制时代。

时代主导架构关键原语系统关注点
早期神经网络MLP密集矩阵运算CPU 优化
CNN 革命CNN卷积GPU 加速
序列建模RNN序列操作内存层级
注意力时代Transformer注意力、动态计算灵活加速器、高带宽内存
表 1: 深度学习进化:神经网络架构从简单全连接层发展到复杂模型,利用专用硬件并解决序列数据依赖。该表将架构时代与关键计算原语及系统优化映射,揭示了并行性和内存带宽需求不断提升的历史趋势。

分析这些积木可以看到原语不断进化和组合,造就了越来越强大的神经网络架构。

从感知机到多层网络的进化

第 4 章:DNN 架构 中我们分析了 MLP 的密集模式处理,这里重点说明它如何奠定了深度学习的基础积木。感知机到 MLP 的进化带来了层叠堆叠、非线性变换和前馈计算模式等关键概念。

在输入与输出之间引入隐藏层,成为特征变换的模板,几乎所有现代架构都采用。即使在 Transformer 等复杂网络中,也能看到 MLP 风格的前馈层用于特征处理。通过多层非线性变换数据,已成为超越具体架构类型的范式。

最重要的是,MLP 的发展确立了反向传播算法21,至今仍是神经网络优化的基石。这一关键贡献使深度架构成为可能,并影响了后续架构如何设计以保持梯度流动。

这些积木——层叠特征变换、非线性激活、基于梯度的学习——为后续专用架构奠定了基础。后续创新往往是对这些基础组件的新结构化,而非完全替代。

从密集到空间处理的进化

CNN 的发展是架构创新的典范,特别是将 MLP 的密集连接专门化为空间模式。保留层级处理的核心思想,CNN 引入了影响所有后续架构的积木。

首要创新是参数共享。与 MLP 每个连接独立权重不同,CNN 展示了参数可在输入不同部分复用。这不仅提升了效率,还引入了架构结构可编码数据先验的强大思想。

更具影响力的是 ResNet22 引入的跳跃连接。最初为训练极深 CNN 设计,跳跃连接已成为几乎所有现代架构的积木。它展示了网络中直接路径可帮助梯度流动和信息传播,这一思想现已成为 Transformer 的核心。

CNN 还引入了批归一化(BatchNorm),通过归一化中间特征稳定优化。特征归一化理念起源于 CNN,后演化为层归一化,现已成为现代架构的关键组成。

这些创新如参数共享、跳跃连接、归一化,已超越空间处理领域,成为深度学习工具箱的基础积木。

序列处理的进化

CNN 专门化了 MLP 的空间模式,序列模型则让神经网络适应时序依赖。RNN 引入了状态维护与更新的概念,影响了网络如何处理序列信息。

LSTM23 和 GRU24 的发展为神经网络带来了复杂的门控机制。这些门控本身就是小型 MLP,展示了前馈计算可用于控制信息流动。这种用神经网络调节神经网络的信息流动,成为架构设计的常见模式。

序列模型最重要的贡献是自适应计算路径。与 MLP、CNN 固定模式不同,RNN 展示了网络可通过权重复用适应变长输入。这一洞见——架构模式可适应输入结构——为更灵活的架构奠定了基础。

序列模型还通过编码器 - 解码器架构推广了注意力机制。最初用于提升机器翻译,注意力机制展示了网络可动态聚焦于相关信息,这一积木后来成为 Transformer 的核心。

现代架构:综合与统一

现代架构,尤其是 Transformer,是对这些基础积木的高度综合。它们不是引入全新模式,而是通过战略性组合和优化现有组件创新。Transformer 架构正是典范:其核心是 MLP 风格的前馈网络在注意力层间处理特征。注意力机制本身继承了序列模型思想,同时摒弃递归连接,采用受 CNN 启发的位置编码。架构广泛使用跳跃连接(见图 7),源自 ResNet,层归一化则由 CNN 批归一化演化而来,稳定了优化。

图 9: <strong>残差连接</strong>:跳跃连接将层输入与输出相加,使梯度能直接流过网络,缓解深层架构中的梯度消失问题。这样可训练更深的网络,ResNet 和现代 Transformer 均采用该机制提升优化和性能。
图 9: 残差连接:跳跃连接将层输入与输出相加,使梯度能直接流过网络,缓解深层架构中的梯度消失问题。这样可训练更深的网络,ResNet 和现代 Transformer 均采用该机制提升优化和性能。

这些积木的组合带来了超越单一组件的涌现能力。自注意力机制虽源自早期注意力,但实现了全新的动态模式处理。组件的排列——注意力后接前馈层,配合跳跃连接和归一化——已成为新架构的模板。

近期视觉和语言模型创新也遵循积木重组的模式。视觉 Transformer25 将 Transformer 架构应用于图像,保留其核心组件。大语言模型在扩展这些模式的同时引入了分组查询注意力、滑窗注意力等优化,但仍依赖于架构进化中确立的核心积木。这些现代创新体现了 第 9 章:高效 AI 中的高效扩展原则,其实际实现和优化详见 第 10 章:模型优化

下表对不同神经网络架构的原语利用进行了比较,显示现代架构如何综合并创新于前人方法:

原语类型MLPCNNRNNTransformer
计算矩阵乘法卷积(矩阵乘法)矩阵乘法 + 状态更新矩阵乘法 + 注意力
内存访问顺序跨步顺序 + 随机随机(注意力)
数据流动广播滑窗顺序广播 + 收集
表 2: 原语利用比较:神经网络架构在核心计算和内存访问模式上各异,影响硬件需求和效率。Transformer 独特地将矩阵乘法与注意力机制结合,形成与 RNN 顺序或 CNN 跨步不同的随机内存访问和数据流动模式。

如表 2 所示,Transformer 既继承了前人架构的核心矩阵乘法操作,又通过注意力机制引入了更复杂的内存访问模式。其数据流动既有 MLP 的广播,也有更动态架构的收集操作。

Transformer 的原语综合,说明现代架构是在 第 4 章:DNN 架构 确立的积木基础上创新,而非完全发明新计算范式。这一进化过程指导了未来架构的发展,也帮助系统设计者构建高效支持这些架构的系统。

系统级构件积木

分析不同深度学习架构,可将其系统需求归纳为支撑硬件和软件实现的原语。这些原语是不可再分的基本操作,正如复杂分子由原子构成,复杂神经网络由这些操作搭建。

核心计算原语

三大操作构成所有深度学习计算的基础:矩阵乘法、滑窗操作和动态计算。这些操作之所以是原语,是因为再分解就会丧失其本质计算属性和效率特征。

矩阵乘法是特征变换的基本形式。输入矩阵与权重矩阵相乘,计算加权组合,是神经网络的核心操作。例如 MNIST 网络中,784 维输入向量与 $784\times 100$ 权重矩阵相乘。该模式无处不在:MLP 层直接用,CNN 将卷积重塑为矩阵乘法(如将 $3\times 3$ 卷积转为矩阵操作,见图 8),Transformer 在注意力机制中大量使用。

计算构件积木

现代神经网络通过三种计算模式实现架构目标,这些模式解释了不同架构如何达成计算目标,也说明了为何某些硬件优化有效。

稀疏计算模式的详细分析,包括结构化与非结构化稀疏、硬件感知优化策略和算法 - 硬件协同设计原则,详见 第 10 章:模型优化 第 11 章:AI 加速

图 10: <strong>卷积转矩阵乘法</strong>:通过 im2col 技术将卷积层重塑为矩阵乘法,可用优化的 BLAS 库高效计算,并支持标准硬件上的并行处理。这一变换对加速 CNN 至关重要,是多平台卷积实现的基础。
图 10: 卷积转矩阵乘法:通过 im2col 技术将卷积层重塑为矩阵乘法,可用优化的 BLAS 库高效计算,并支持标准硬件上的并行处理。这一变换对加速 CNN 至关重要,是多平台卷积实现的基础。

im2col26(image to column)技术由 Intel 1990 年代提出,通过将重叠的图像块展开为矩阵列(见图 10),每个卷积窗口变为矩阵的一列,滤波器核排列为行。这样卷积操作可转为标准 GEMM(通用矩阵乘法)。该变换以内存消耗(重叠窗口数据重复)换取计算效率,使 CNN 能利用 BLAS 优化,在 CPU 上提速 5-10 倍。现代系统中,这些矩阵乘法映射到专用硬件和软件实现。硬件加速器提供专用张量核心,可并行执行数千次乘加;NVIDIA A100 张量核心在混合精度(TF32)下可达 312 TFLOPS,FP32 下 156 TFLOPS。PyTorch、TensorFlow 等框架自动将高层操作映射到优化矩阵库(NVIDIA cuBLAS 、Intel MKL ),充分利用硬件能力。

滑窗操作通过对数据块重复应用同一操作,计算局部关系。CNN 处理 MNIST 图像时,$3\times 3$ 卷积核在 $28\times 28$ 输入上滑动,步长为 1 时需计算 $26\times 26$ 个窗口。现代硬件加速器通过专用内存访问和数据缓冲优化数据重用。例如 Google TPU 用 $128\times 128$ 的脉动阵列27,数据有序流经处理单元,每个输入值可在多次计算中复用,无需反复访问内存。

动态计算,即操作本身依赖于输入数据,随着注意力机制的出现而突出,但本质上是实现自适应处理的能力。在 Transformer 注意力中,每个查询需动态计算与所有键的权重;长度为 512 的序列需实时计算 512 种权重模式。与固定模式不同,动态计算需运行时决策,带来实现挑战:硬件需支持灵活数据路由(现代 GPU 用动态调度),软件框架需高效处理数据依赖的执行路径(PyTorch 动态计算图、TensorFlow 动态控制流)。

这些原语在现代架构中以复杂方式组合。例如 Transformer 层处理 512 token 序列时,特征投影用矩阵乘法($512\times 512$,张量核心实现),长序列注意力可用滑窗优化(专用内存访问),注意力权重需动态计算($512\times 512$ 个权重)。这些原语的交互决定了系统设计需求,从内存层级到计算调度。

上述积木解释了为何硬件有张量核心(为矩阵乘法)、为何软件框架按批次组织计算(为批量优化)。从计算原语到内存访问和数据流动,理解这些操作如何影响内存系统和数据传输机制至关重要。原语的实现和组合直接影响数据的存储、访问和流动方式。

内存访问原语

深度学习模型的效率高度依赖于内存访问和管理。内存访问常是现代 ML 系统的主要瓶颈,即使矩阵乘法单元每周期可执行数千次操作,若数据未及时到位也会空闲。例如从 DRAM 访问数据需数百周期,而片上计算仅需几周期。

三种内存访问模式主导深度学习架构:顺序访问、跨步访问和随机访问。每种模式对内存系统有不同要求,也带来不同优化机会。

顺序访问最简单也最高效。MLP 批量处理 MNIST 图像时,需顺序访问 $784\times 100$ 权重矩阵和输入向量。该模式与现代内存系统高度匹配,DRAM 可用突发模式顺序读取(现代 GPU 可达 400 GB/s),硬件预取器能高效预测和获取数据。软件框架通过数据连续布局和缓存行对齐优化顺序访问。

跨步访问在 CNN 中尤为突出,每个输出位置需按固定间隔访问输入窗口。例如处理 MNIST 图像的 $3\times 3$ 卷积,每个输出需访问 9 个输入,步长与输入宽度一致。虽然效率低于顺序访问,硬件可通过模式感知缓存和专用控制器优化。软件框架常通过数据布局重组将跨步模式转为顺序访问,如深度学习框架中的 im2col 转换。

随机访问对系统效率挑战最大。Transformer 处理 512 token 序列时,每次注意力操作都可能访问任意位置,形成不可预测的内存访问。随机访问易导致缓存未命中(每次访问可能延迟 100+ 周期),内存延迟不可控。系统通过大容量缓存(现代 GPU 有数 MB L2 缓存)和复杂预取策略应对,软件框架则用注意力模式剪枝减少随机访问。

这些内存访问模式决定了各架构的整体内存需求。表 3 比较了 MLP、CNN、RNN、Transformer 的内存复杂度。

架构输入依赖参数存储激活存储扩展行为
MLP线性$O(N \times W)$$O(B \times W)$可预测
CNN常数$O(K \times C)$$O(B \times H_{\text{img}} \times W_{\text{img}})$高效
RNN线性$O(h^2)$$O(B \times T \times h)$有挑战
Transformer二次$O(N \times d)$$O(B \times N^2)$问题突出
表 3: 内存访问复杂度:不同神经网络架构展现出不同的内存访问模式和存储需求,影响系统性能和可扩展性。参数存储随输入依赖和模型规模扩展,激活存储是运行时主要开销,序列模型(RNN)在序列长度大于隐藏状态时参数效率更高($n > h$)。

其中:

  • $N$:输入或序列长度
  • $W$:层宽
  • $B$:批量大小
  • $K$:卷积核大小
  • $C$:通道数
  • $H_{\text{img}}$:输入特征图高度(CNN)
  • $W_{\text{img}}$:输入特征图宽度(CNN)
  • $h$:隐藏状态大小(RNN)
  • $T$:序列长度
  • $d$:模型维度

表 3 揭示了不同架构下内存需求的扩展规律。例如 Transformer 激活存储的二次扩展,说明其在大规模任务下需极大内存和高效管理。相比之下,CNN 因参数共享和局部处理,内存扩展更友好。这些内存访问模式与后续表 4 中的计算扩展行为互补,完整展现了各架构的资源需求。内存复杂度分析指导了系统设计决策,如内存层级配置和优化策略开发。

数据重用机会在这些模式下尤为重要。CNN 中每个输入像素参与多个卷积窗口($3\times 3$ 滤波器时通常 9 次),高效数据重用对性能至关重要。现代 GPU 提供多级缓存(L1、L2、共享内存)以捕捉重用,软件技术如循环分块确保数据一旦加载即留在缓存。

工作集大小,即计算所需同时在内存中的数据量,在不同架构间差异巨大。MLP 层处理 MNIST 图像时仅需几百 KB(权重加激活),而 Transformer 处理长序列时仅注意力模式就需数 MB。这些差异直接影响硬件设计,如计算单元与片上内存的平衡,以及软件优化如激活检查点或注意力近似。

理解这些内存访问模式对架构演化至关重要。例如从 CNN 到 Transformer 的转变,推动了更大片上内存和更复杂缓存策略的发展,以应对更大工作集和更动态访问。未来架构仍将受内存访问特性影响,与计算需求同等重要。

数据流动原语

计算和内存访问模式决定了操作发生的位置,数据流动原语则决定了信息在系统中的流动方式。数据流动常常比计算本身消耗更多时间和能量,尤其是从片外内存搬运数据,能耗是浮点运算的 100-1000 倍。

深度学习架构中常见四种数据流动模式:广播、分散、收集和归约。图 9 展示了这些模式及其关系。广播操作将同一数据同时发送到多个目的地。矩阵乘法批量为 32 时,每个权重需广播到不同输入并行处理。现代硬件通过专用互连支持广播,NVIDIA GPU 提供硬件多播(600 GB/s),TPU 用专用广播总线。软件框架通过重组计算(如矩阵分块)优化广播数据重用。

图 11: <strong>集体通信模式</strong>:深度学习训练和推理常需处理单元间数据交换,图示四种核心模式(广播、分散、收集、归约),决定了分布式系统内数据流动及整体性能。理解这些模式有助于优化数据流动,因通信成本常常主导现代机器学习任务的计算。
图 11: 集体通信模式:深度学习训练和推理常需处理单元间数据交换,图示四种核心模式(广播、分散、收集、归约),决定了分布式系统内数据流动及整体性能。理解这些模式有助于优化数据流动,因通信成本常常主导现代机器学习任务的计算。

分散操作将不同元素分配到不同目的地。矩阵乘法并行化时,每个 GPU 核心分配一部分计算。并行化提升性能但也带来内存冲突和负载不均,效率可降 50% 以上。硬件提供灵活互连(如 NVIDIA NVLink 双向带宽 600 GB/s),软件框架用复杂任务分配算法保持高利用率。

收集操作从多个来源聚合数据。Transformer 注意力处理 512 长度序列时,每个查询需从 512 个键值对收集信息。这种不规则访问模式挑战极大,随机收集比顺序访问慢 10 倍。硬件通过高带宽互连和大缓存支持,软件框架用注意力模式剪枝减少收集开销。

归约操作通过求和等方式将多个值合并为单一结果。Transformer 计算注意力分数或 MLP 层输出时,归约效率至关重要。硬件实现树状归减网络(延迟从 $O(n)$ 降至 $O(\log n)$),软件框架用优化并行归约算法,接近理论峰值性能。

这些模式常常组合使用。例如 Transformer 注意力操作,序列长度 512、批量 32 时涉及:

  • 广播查询向量($512\times 64$ 元素)
  • 收集相关键值($512\times 512\times 64$ 元素)
  • 归约注意力分数(每序列 $512\times 512$ 元素)

从 CNN 到 Transformer 的演化加重了收集和归约操作的依赖,推动了更灵活互连和更大片上内存的硬件创新。随着模型规模增长(部分已超 1000 亿参数28),高效数据流动变得愈发关键,催生了近内存计算和复杂数据流优化。

系统设计影响

上述计算、内存访问和数据流动原语共同决定了深度学习系统的设计需求。它们对硬件设计、常见瓶颈和权衡的影响,是开发高效 ML 系统的关键。

原语对系统设计最显著的影响之一是推动专用硬件发展。深度学习中矩阵乘法和卷积的普遍性,催生了张量处理单元(TPU)29 和 GPU 张量核心,专为高效执行这些操作设计。

内存系统也因深度学习原语需求而深刻变革。需高效支持顺序和随机访问,推动了复杂内存层级的发展。高带宽内存(HBM)30 已成为 AI 加速器标配,满足注意力机制等操作的海量数据流动。片上内存层级日益复杂,多级缓存和 scratchpad31 支持不同网络层的多样工作集。

数据流动原语尤其影响互连和片上网络设计。为支持高效广播、收集和归约,AI 芯片开发了更灵活、更高带宽的互连。部分芯片已配备专用片上网络,加速神经网络常见的数据流动模式。

表 4 总结了这些原语的系统影响:

原语硬件影响软件优化关键挑战
矩阵乘法张量核心批处理、GEMM 库并行化、精度
滑窗专用数据通路数据布局优化步长处理
动态计算灵活路由动态计算图执行负载均衡
顺序访问DRAM 突发模式连续分配访问延迟
随机访问大缓存内存感知调度缓存未命中
广播专用互连操作融合带宽
收集/分散高带宽内存任务分配负载均衡
表 4: 原语 - 硬件协同设计:高效机器学习系统需算法原语与底层硬件紧密结合。该表将常见原语映射到具体硬件加速和软件优化,突出实现中的关键挑战。专用硬件如张量核心和数据通路应对矩阵乘法和滑窗等计算需求,软件技术如批处理和动态计算图进一步提升性能。

尽管取得了诸多进步,深度学习模型仍面临多项瓶颈。内存带宽常是主要限制,尤其是大工作集或频繁随机访问的模型。数据流动(尤其片外内存与计算单元间)能耗极高。大规模模型分布式训练时,通信开销也会成为扩展瓶颈。

架构能耗分析

能耗模式因神经网络架构而异,影响数据中心部署和边缘计算。每种架构模式都有独特的能耗特性,指导部署和优化策略。

MLP 的密集矩阵运算算术强度32(每次数据搬运的计算量)极高,但绝对能耗也大。每次乘加约耗能 4.6pJ,而 DRAM 搬运 32 位数据需 640pJ。典型 MLP 推理时,70-80% 能耗用于数据搬运,优化内存带宽对能效至关重要。

卷积操作通过数据重用降低能耗,但效率随实现方式变化。基于 im2col 的卷积实现以内存换取简化,常使内存和能耗翻倍。直接卷积实现能效提升 3-5 倍,尤其在大核尺寸下。

RNN 的序列处理通过时间数据重用提升能效。隐藏状态的常数内存占用使缓存策略更激进,长序列 DRAM 访问能耗可降 80-90%。但顺序依赖限制并行,硬件利用率低,单次操作能耗更高。

Transformer 的注意力机制因二次扩展和复杂数据流动,每次操作能耗最高。自注意力每 FLOP 能耗是标准矩阵乘法的 2-3 倍,因内存访问不规则且需存储注意力矩阵。能耗随序列长度二次增长,长序列处理能耗极高,需架构优化。

系统设计者需在支持不同原语时权衡各自特性。例如,优化 MLP/CNN 的密集矩阵运算可能牺牲注意力机制所需的灵活性。支持 Transformer 的大工作集可能影响能效。

权衡需结合目标任务和部署场景。理解每种原语特性,指导硬件和软件优化,让设计者能据此做出系统架构和资源分配决策。

架构模式、计算原语和系统影响的分析,为解决实际挑战奠定了基础:工程师如何系统性地为具体问题选择合适架构?神经网络架构多样,各自优化不同数据模式和计算约束,需结构化方法选择架构。该过程不仅要考虑算法性能,还要兼顾 第 2 章:机器学习系统 中的部署约束和 第 13 章:机器学习运维 中的运维效率。

架构选择框架

从密集 MLP 到动态 Transformer 的架构探索,展示了每种设计都蕴含了对数据结构和计算模式的特定假设。MLP 假设任意特征关系,CNN 利用空间局部性,RNN 捕捉时序依赖,Transformer 建模复杂关系。实际问题中,工程师如何系统性地为具体场景选择合适架构?

架构多样性让实践者无所适从,各种架构都宣称在不同场景下优越。成功的架构选择需理解原理而非盲从潮流:将数据特性与架构优势匹配,评估计算约束与系统能力,平衡精度需求与部署现实。

系统性架构选择方法,正是基于前文分析的计算模式和系统影响。理解不同架构如何处理信息及其资源需求,工程师才能做出既符合问题需求又切合实际约束的决策。该框架融合了高效 AI 设计原则(见 第 9 章:高效 AI )与 ML 运维中的实际部署考量(见 第 13 章:机器学习运维 )。

数据到架构映射

系统性架构选择的第一步,是理解不同数据类型如何与架构优势匹配。每种神经网络架构都是为特定数据模式而生:MLP 处理表格数据的任意关系,CNN 利用图像的空间局部性,RNN 捕捉序列的时序依赖,Transformer 建模任意元素间的复杂关系。

这种匹配并非偶然,而是计算权衡的结果。架构与数据特性匹配可利用结构提升效率,反之则需违背设计假设,导致性能低下或资源消耗过大。

下表系统性地将数据特性与合适架构进行匹配:

架构数据类型关键特性典型应用
MLP表格/结构化• 无空间/时序 • 任意关系 • 密集连接• 金融建模 • 医学测量 • 推荐系统
CNN空间/网格型• 局部模式 • 平移等变性 • 参数共享• 图像识别 • 2D 传感器数据 • 信号处理
RNN序列/时序• 时序依赖 • 变长 • 跨时间记忆• 时间序列预测 • 简单语言任务 • 语音识别
Transformer复杂关系型• 长距离依赖 • 注意力机制 • 动态关系• 语言理解 • 机器翻译 • 复杂推理任务
表 5: 架构选择框架:根据计算需求和模式类型,系统性地将数据特性与神经网络架构匹配。

数据特性指导初步架构选择,计算约束则决定最终可行性。理解各架构的扩展行为,有助于资源规划和部署决策。

计算复杂度考量

架构选择必须考虑决定部署可行性的计算与内存权衡。每种架构都有独特的扩展行为,随着问题规模增长会出现不同瓶颈。理解这些模式有助于资源规划,避免部署时因架构不匹配而付出高昂代价。

每种架构的计算特性反映了其设计哲学。MLP 等密集架构通过全连接提升表达力,CNN 等结构化架构通过参数共享和局部性提升效率,RNN 等序列架构以并行性换取内存效率,Transformer 等注意力架构则以内存换取计算灵活性。为完整起见,表 3 也从计算扩展和内存访问两方面分析这些架构,揭示不同优化机会和系统设计考量。

下表总结了各架构的关键计算特性:

架构参数量前向计算内存并行化
MLP每层 $O(d_{\text{in}}\times d_{\text{out}})$每层 $O(d_{\text{in}}\times d_{\text{out}})$$O(d^2)$ 权重
$O(d\times b)$ 激活
极佳 — 矩阵并行
CNN每层 $O(k^2\times c_{\text{in}}\times c_{\text{out}})$$O(H\times W\times k^2\times c_{\text{in}}\times c_{\text{out}})$$O(H\times W\times c)$ 特征图
$O(k^2\times c^2)$ 权重
良好 — 空间独立
RNN总计 $O(h^2 + h\times d)$$O(T\times h^2)$(T 个时步)$O(h)$ 隐藏状态(常数)较差 — 顺序依赖
Transformer$O(d^2)$ 投影(多头)
$O(d^2\times h)$
每层 $O(n^2\times d + n\times d^2)$$O(n^2)$ 注意力
$O(n\times d)$ 激活
极佳(位置)— 受内存限制
表 6: 计算复杂度比较:四大主流神经网络架构的扩展行为与资源需求。变量:$d$ = 维度,$h$ = 隐藏状态,$k$ = 卷积核,$c$ = 通道,$H,W$ = 空间尺寸,$T$ = 时步,$n$ = 序列长度,$b$ = 批量。

可扩展性与生产部署考量

生产部署带来算法性能之外的约束,包括延迟、内存、能耗和容错需求。每种架构在实际部署中都有独特特性,决定了可行性。

MLP、CNN 可通过数据并行实现多设备扩展,批量大小合理时可近线性加速。RNN 因顺序依赖需流水线并行等专用技术。Transformer 在序列位置间并行性极佳,但注意力的二次内存扩展限制了批量和利用率。

MLP 延迟与层宽成正比,适合严格 SLA 的实时应用。CNN 延迟随实现和硬件变化,优化后可达亚毫秒级推理。RNN 延迟受序列长度影响,难用于交互式应用。Transformer 批处理吞吐高,但单次推理因注意力开销延迟较大。

内存需求在生产环境差异显著。MLP 内存固定,便于容量规划。CNN 特征图内存随输入分辨率变化,需动态管理。RNN 隐藏状态内存常数,但超长序列需无界内存。Transformer 内存随序列长度二次增长,生产中常成硬性限制。

容错与恢复特性也各异。MLP、CNN 计算无状态,易于检查点和恢复。RNN 需维护时序状态,分布式训练和故障恢复更复杂。Transformer 计算无状态但内存需求大,检查点体积成为大模型实际问题。

硬件映射效率在不同架构间差异很大。现代 MLP 在专用张量单元上可达峰值性能的 80-90%。CNN 视层配置和内存层级设计,效率 60-75%。RNN 因顺序和不规则内存访问,通常仅达 30-50%。Transformer 大批量时效率 70-85%,小批量时因注意力开销显著下降。

硬件映射与优化策略

不同架构需不同优化策略以高效映射到硬件。理解这些模式有助于系统性性能调优和硬件选择。

MLP 的密集矩阵操作天然适合张量处理单元和 GPU 张量核心。优化包括矩阵分块适配缓存层级、混合精度提升吞吐、操作融合减少内存流量。最佳分块尺寸依赖缓存层级,L1 通常 64x64,L2 256x256,张量核心在 Volta 架构下以 16x16 块达峰值。

CNN 需专用卷积算法和数据布局优化,与密集矩阵操作差异显著。im2col 转换将卷积转为矩阵乘法但内存翻倍。Winograd 算法将 3x3 卷积算术复杂度降至 2.25 倍,但数值稳定性需权衡。直接卷积用定制内核实现最佳内存效率,但需架构特定调优。

RNN 因时序依赖需不同优化。循环展开减少控制开销但增加内存。状态向量化支持多序列 SIMD 操作。波前并行利用时步独立性实现双向处理。

Transformer 因二次复杂度需专用注意力优化。FlashAttention 算法通过在线 softmax 和梯度重计算将内存降至 O(n)。稀疏注意力模式(局部、跨步、随机)在保持建模能力同时降低复杂度。多查询注意力在头间共享键值投影,内存带宽降 30-50%。

多层感知机是最直接的计算模式,成本由矩阵乘法主导。密集连接使 MLP 能建模任意关系,但参数量随层宽二次增长。每个神经元与前一层所有神经元相连,参数量巨大。计算由矩阵 - 向量乘积主导,现代硬件高度优化。矩阵操作天然并行,GPU 架构可独立计算每个输出神经元。针对密集层参数量的优化技术(如剪枝、低秩近似)详见 第 10 章:模型优化

卷积神经网络通过参数共享和空间局部性提升计算效率,但成本随空间尺寸和通道深度扩展。卷积操作的计算强度高度依赖核大小和特征图分辨率。空间位置参数共享大幅降低内存,相比等效 MLP,计算成本随分辨率线性、核大小二次增长。特征图内存主导使用,高分辨率输入时尤为突出。空间独立性支持空间位置和通道并行处理,但内存带宽常成限制。

循环神经网络以内存效率换取并行性。顺序性带来计算瓶颈,但能以常数内存处理变长序列。隐藏到隐藏连接($h^2$ 项)主导大隐藏状态下参数量。顺序依赖阻碍时间步并行,RNN 天然比前馈慢。隐藏状态常数内存使 RNN 能效高,适合长序列,但计算速度受限。

Transformer 通过注意力机制实现最大灵活性,但付出高昂内存代价。序列长度二次扩展限制了可处理序列长度。参数量随模型维度扩展,与序列长度无关。长序列时注意力计算的 $n^2$ 项主导,短序列时前馈层的 $n \times d^2$ 项主导。注意力矩阵是主要内存瓶颈,每个头需存储所有位置对的相似度,长序列时内存极高。并行性在序列位置和头间极佳,但二次内存常迫使批量减小,限制并行。

这些复杂度模式定义了各架构的最优应用领域。MLP 在参数效率不敏感时表现优异,CNN 适合中等分辨率空间数据,RNN 适合内存受限的超长序列,Transformer 在复杂关系任务中以高计算成本换取卓越性能。

架构比较总结

系统性分析揭示了各架构家族的独特计算特征,决定了其在不同部署场景下的适用性。下表对关键系统指标进行量化比较,帮助工程师在模型能力与计算约束间做出权衡。

指标MLPCNNRNNTransformer
参数量O(N×M)O(K²×C×D)O(H²)O(N×d²)
FLOPs/样本O(N×M)O(K²×H×W×C)O(T×H²)O(N²×d)
内存O(B×M)O(B×H×W×C)O(B×T×H)O(B×N²)
(激活)
并行性低(顺序)
主要瓶颈内存带宽内存带宽顺序依赖内存(N²)
表 7: 架构量化比较:四大主流神经网络架构的计算复杂度分析。参数量随网络维度扩展(N=神经元,M=输入,K=卷积核,C=通道,D=深度,H=隐藏状态,T=时步,d=模型维度)。内存需求反映训练时激活存储峰值。并行性表示并行计算适应性。主要瓶颈为典型部署下的性能限制因素。

该量化框架通过显式揭示扩展行为,系统性指导架构选择,决定计算可行性。MLP、CNN 并行性高,但模型规模扩展时受内存带宽限制。RNN 内存常数但牺牲并行性。Transformer 表达力最强,但内存二次扩展限制序列长度。理解这些权衡对架构与部署约束的匹配至关重要。

决策框架

高效架构选择需在数据特性、计算资源、性能需求和部署约束间权衡。数据模式提供初步指导,复杂度分析确定可行性,最终选择常需多轮权衡和系统性评估。

图 12: <strong>架构选择决策框架</strong>:基于数据特性和部署约束的神经网络架构选择系统流程图。流程从数据类型识别(文本/序列/图像/表格)选定初步架构(Transformers/RNNs/CNNs/MLPs),再迭代评估内存预算、计算成本、推理速度、精度目标和硬件兼容性。
图 12: 架构选择决策框架:基于数据特性和部署约束的神经网络架构选择系统流程图。流程从数据类型识别(文本/序列/图像/表格)选定初步架构(Transformers/RNNs/CNNs/MLPs),再迭代评估内存预算、计算成本、推理速度、精度目标和硬件兼容性。

图 12 提供了结构化的架构选择流程,确保全面考虑所有因素,避免因新颖或复杂而盲目选择。流程图指导系统性架构选择,先将数据特性与架构优势匹配,再验证实际约束。流程本质上是迭代的——资源或性能不足时需回溯调整。

该框架分四步:一是数据分析,数据模式是最强信号。空间数据自然对应 CNN,序列数据对应 RNN。二是逐步约束验证,每次约束检查(内存、计算预算、推理速度)都是筛选,未通过需缩减架构或换方案。三是精度目标未达时的迭代权衡,需增加模型容量并回到约束验证。四是预期多轮迭代,实际项目常需多次循环,最终实现数据适配、计算可行和部署需求的最佳平衡。

系统性方法避免因新颖或复杂而盲目选择,确保架构既符合问题需求又适应系统能力。

统一框架:归纳偏置

从 MLP 到 Transformer 的架构多样性,实则共享统一理论框架:每种架构都蕴含特定归纳偏置,约束假设空间,引导学习找到适合不同数据类型和问题结构的解。

不同架构形成递减归纳偏置的层级。CNN 通过局部连接、参数共享和平移等变性体现最强归纳偏置,极大缩小参数空间但仅适用于具局部结构的空间数据。RNN 通过顺序处理和时序权重体现中等归纳偏置,隐藏状态机制假设过去影响现在,适合时序数据。

MLP 除层级处理外几乎无架构偏置,密集连接可建模任意关系,但需更多数据学习其他架构显式编码的结构。Transformer 通过学习注意力模式实现自适应归纳偏置,能根据数据动态调整归纳偏置,兼具灵活性和结构发现能力。

所有成功架构都实现了分层表示学习,但机制各异。CNN 通过感受野扩展构建空间层次(详见 第 4 章:DNN 架构 ,RNN 通过隐藏状态演化构建时序层次,Transformer 通过多头注意力构建内容依赖层次。

这种层次化组织体现了一个原则:复杂模式可通过简单组件组合高效表达。深度学习的成功正源于发现了梯度优化能在合适架构归纳偏置下有效学习这些组合结构。

表示学习的理论洞见直接影响系统工程。层次表示需高效组合低级特征为高级抽象,驱动系统设计决策:

  • 并行策略需尊重层次计算的依赖结构
  • 硬件加速器需高效支持实现特征组合的矩阵操作
  • 软件框架需提供高效层次计算抽象,适配多样架构
  • 内存层级需与表示层次对齐,最小化数据流动成本

理解架构的归纳偏置,有助于解释其优势和系统需求,为架构选择和系统优化提供原则基础。

常见误区与陷阱

神经网络架构是为不同数据类型和问题领域设计的专用计算结构,这导致了架构选择和部署中的常见误区。架构模式丰富——从密集网络到 Transformer——常让工程师因新颖或复杂而盲目选择,而非基于任务需求和计算约束。

误区: 更复杂的架构一定优于简单架构。

这一误解让团队盲目采用 transformer 基于模型或 elaborate architectures,而未理解其需求。虽然复杂架构如 transformers 在需要长距离依赖的任务中表现出色,但它们需要显著更多的计算资源和内存。对于许多问题,特别是那些数据有限或结构清晰的问题,简单架构如 MLP 或 CNN 可以以更低的计算开销实现相似的精度。架构选择应与问题复杂性相匹配,而不是默认选择最先进的选项。

陷阱: 模型选择时忽略架构的计算影响。

许多实践者仅凭论文精度指标选架构,未考虑计算需求。CNN 的空间局部性假设虽能提升图像任务精度,但需专用内存访问模式。RNN 的顺序依赖导致串行瓶颈,限制并行化机会。忽视这些因素,模型部署时常因无法满足延迟或超出内存而失败。

误区: 架构性能与硬件无关。

认为所有架构在不同硬件平台上表现一致。实际上,不同架构利用硬件特性各异:CNN 受益于张量核心,MLP 依赖高带宽内存,RNN 需高效顺序处理。GPU 上表现优异的模型在移动或嵌入式设备上可能性能低下。理解硬件与架构的匹配对部署策略至关重要。

陷阱: 混合架构模式而不理解其交互影响。

将不同架构组件(如在 CNN 加注意力层、RNN 用跳跃连接)混合,可能带来意外的计算瓶颈。每种模式有独特内存访问和计算特性,盲目组合可能抵消单一组件的性能优势或引发内存带宽冲突。成功的混合架构需系统分析各模式在系统层面的交互。

陷阱: 架构设计未考虑全流程硬件 - 软件协同。

许多架构决策只优化高端 GPU 性能,未考虑从开发到部署的完整系统生命周期。为大规模集群设计的架构在边缘部署时可能因内存、计算单元或并行能力不足而不适用。为推理延迟优化的架构可能牺牲开发效率,导致开发周期延长、计算成本增加。高效架构选择需分析整个系统栈,包括计算基础设施、模型编译与优化工具、目标硬件和运维约束。CNN 的深度与宽度、Transformer 的头部配置、激活函数选择等都会影响内存带宽利用、缓存效率和数值精度,需整体权衡。

总结

神经网络架构是为不同数据类型和问题设计的专用计算结构。多层感知机处理表格数据通过密集连接,卷积网络利用空间局部性处理图像,循环网络处理序列信息。每种架构都蕴含了对数据结构和计算模式的特定假设。现代 transformer 架构通过注意力机制统一了这些理念,实现了基于相关性动态路由信息,而非固定连接模式。

尽管架构多样,底层计算原语在不同设计中反复出现。矩阵乘法是密集层、卷积和注意力机制的计算核心。内存访问模式在不同架构间差异显著,有的需滑窗局部处理,有的需全局信息聚合。注意力机制中的动态计算模式带来数据依赖的执行流,挑战传统优化方法。

核心要点

  • 不同架构蕴含特定数据结构假设:MLP 适合表格,CNN 适合空间关系,RNN 适合序列,Transformer 适合灵活注意力
  • 共享计算原语包括矩阵操作、滑窗和动态路由,是多样架构的基础
  • 内存访问和数据流动需求在不同架构间差异巨大,直接影响系统性能和优化策略
  • 理解算法意图与系统实现的映射,有助于高效性能优化和硬件选择

本章确立的架构基础——计算模式、内存访问特性和数据流动原语——直接指导了后续章节的专用硬件设计和优化策略。理解 CNN 的空间局部性,推动了针对卷积优化的脉动阵列(见 第 11 章:AI 加速 );认识 Transformer 的二次内存扩展,激发了 FlashAttention 和稀疏注意力等优化(见 第 10 章:模型优化 )。从架构理解到硬件设计再到算法优化,体现了 ML 系统工程的系统化方法。

随着架构日益动态和复杂,算法创新与系统优化的协同变得愈发关键,决定了实际部署中的性能提升。生产环境中部署和维护这些复杂架构的运维挑战详见 第 13 章:机器学习运维 ,架构选择带来的能效等可持续 AI 发展问题详见 第 18 章:可持续 AI


  1. 通用逼近定理:Cybenko(1989)和 Hornik(1989)分别独立证明,神经网络理论上可以学习任意函数。这一发现让神经网络在 1980 年代“AI 寒冬”后重获关注,并为现代深度学习奠定了数学基础。 ↩︎

  2. MNIST 数据集:由 Yann LeCun、Corinna Cortes 和 Chris Burges 于 1998 年基于 NIST 手写数字数据库创建,包含 6 万张训练图片,被誉为机器学习领域的“果蝇”。尽管多种模型已实现 99.77% 的人类级准确率,MNIST 仍因其简洁性成为教学和架构实验的经典数据集。 ↩︎

  3. GEMM(通用矩阵乘法):神经网络的核心操作,占据密集网络 80-95% 的计算时间。GEMM 执行 C = αAB + βC,几十年来不断优化。现代如 cuBLAS 能在优化良好的 GPU 上实现 80-95% 理论峰值性能,GEMM 优化对 ML 系统至关重要。 ↩︎

  4. BLAS(基础线性代数子程序):1970 年代开发的矢量和矩阵运算标准,成为科学计算的基石。现代如 Intel MKL、OpenBLAS 能在优化良好的任务上实现 80-95% 理论峰值性能,是神经网络高效运行的基础。 ↩︎

  5. 张量核心:现代 GPU 内专用的矩阵乘法单元,每时钟周期可对 4×4 矩阵执行混合精度运算。NVIDIA V100 张量核心可达 125 TFLOPS,而标准核心仅 15 TFLOPS,提升 8 倍,极大推动了大模型训练的可行性。 ↩︎

  6. ImageNet 革命:AlexNet 在 2012 年 ImageNet 挑战赛上的突破(top-5 错误率从 25.8% 降至 15.3%)引发深度学习复兴。ImageNet 的 1400 万标注图片和 2 万类别为训练深层 CNN 提供了规模,证明了“大数据 + 大算力 + 大模型”可实现超越人类的性能。 ↩︎

  7. Yann LeCun 与 CNN:LeCun 1989 年的 LeNet 架构受 Hubel 和 Wiesel 猫视觉皮层“简单细胞 - 复杂细胞”发现启发 [Hubel 1962]。LeNet-5 1998 年在 MNIST 上达 99.2% 准确率(实际为子集),并被银行用于大规模支票识别,是神经网络最早的大规模商业应用之一。 ↩︎

  8. 参数共享:CNN 在空间位置间复用同一滤波器权重,大幅减少参数量。处理 224×224 图像的 CNN,3×3 滤波器每通道仅 9 个参数,而等价 MLP 每神经元需 50,176 个参数,单神经元参数量缩减约 5,575 倍,使视觉任务成为可能。 ↩︎

  9. 平移不变性:CNN 能无视空间位置检测特征。猫耳无论在左上还是右下都能被识别。这一特性源于卷积的滑窗设计,对计算机视觉至关重要。 ↩︎

  10. 感受野:影响某输出神经元的输入区域。CNN 中,感受野随深度增长。即使每层用 3×3 滤波器,3 层后感受野可达 7×7。合理设计感受野对任务至关重要。 ↩︎

  11. 神经网络中的群论:描述 CNN 如何保持空间关系的数学框架。平移等变性意味着输入图像平移,输出特征图也平移,是计算机视觉成功的基础。 ↩︎

  12. 归纳偏置:模型架构对数据结构的先验假设。CNN 假设空间局部性和平移不变性,大幅缩小可学习函数空间。约束反而提升了泛化能力,是架构设计的核心原则。 ↩︎

  13. 假设空间:模型在给定架构和参数下可表达的所有函数集合。MLP 在图像任务上假设空间更大,但 CNN 的受限空间包含了更优解,说明架构约束往往提升而非限制性能。近期工作已将这些原理扩展到旋转、反射等对称群,发展出群等变 CNN [Cohen 2016]。 ↩︎

  14. 特征图:卷积滤波器作用于输入后得到的输出,表示不同空间位置检测到的特征。64 个滤波器层产生 64 个特征图,分别突出边缘、纹理、形状等不同模式。深层特征图更抽象(检测对象、面部),浅层则检测边缘、颜色等。 ↩︎

  15. SIMD(单指令多数据):CPU 指令可同时对多个数据元素执行相同操作。现代 x86 处理器支持 AVX-512,每条指令可完成 16 个单精度运算,相比标量代码提速 16 倍。SIMD 对于边缘部署的神经网络推理尤为重要。深度学习框架还通过专用卷积算法进一步优化,使计算更贴合硬件能力。 ↩︎

  16. 梯度消失问题:反向传播时,梯度在 RNN 层间呈指数级缩小。当递归权重小于 1 时,梯度每步都被缩小,5-10 步后几乎消失,导致无法学习长期依赖。LSTM 和注意力机制正是为解决这一问题而生。 ↩︎

  17. Softmax 函数:将实数向量转为概率分布,所有值之和为 1。定义为 $\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$,能放大输入间差异(大值概率更高),保证注意力权重有效。 ↩︎

  18. 查询 - 键 - 值注意力:灵感来自信息检索系统,查询用于检索键,返回值。在神经注意力中,查询和键计算相似度(如搜索引擎匹配查询与文档),值则包含实际信息,实现了灵活的内容检索。 ↩︎

  19. “Attention is All You Need”:2017 年 Google 研究员提出的论文,彻底摒弃递归,仅用注意力机制实现最先进性能。标题本身成为口号,5 年内基于 Transformer 的模型(GPT、BERT、ViT 等)在语言、视觉等领域取得突破 [Radford 2018;Devlin 2018;Dosovitskiy 2021]。该论文是深度学习历史性转折点,证明了 RNN/LSTM 的顺序处理已非必需,注意力机制可通过并行计算捕捉短/长距离依赖。基础注意力机制实现了基于内容的信息加权,Transformer 则将注意力应用于单一序列,使每个元素能关注包括自身在内的所有元素。 ↩︎

  20. 注意力缩放:若无 $\sqrt{d_k}$ 缩放,点积过大导致 softmax 饱和,梯度趋近于零,学习受阻。该数学洞见保证了大规模 Transformer 的稳定优化。 ↩︎

  21. 反向传播算法:链式法则自 17 世纪已知,但 Rumelhart、Hinton 和 Williams(1986)首次高效应用于多层网络训练。这一“误差传播学习”算法让深度网络成为现实,至今几乎未变,足见其重要性。 ↩︎

  22. ResNet 革命:ResNet(2016)解决了“退化问题”,即更深网络反而性能更差。关键洞见:加入恒等捷径($\mathcal{F}(\mathbf{x}) + \mathbf{x}$)让网络学习残差映射而非全变换,使 1000 层网络训练成为可能,并赢得 2015 年 ImageNet。 ↩︎

  23. LSTM 起源:Sepp Hochreiter 和 Jürgen Schmidhuber 于 1997 年发明 LSTM,解决了困扰 RNN 的“梯度消失问题”。门控机制灵感来自生物神经元选择性保留信息的能力,是序列建模的突破,推动了现代语言模型发展。 ↩︎

  24. 门控循环单元(GRU):Cho 等(2014)提出的 LSTM 简化版,仅有 2 个门,参数量减少约 25%,性能相近。GRU 因计算高效、训练更易而流行,说明架构简化有时反而提升性能。 ↩︎

  25. 视觉 Transformer(ViT):Google 2021 年突破性工作证明纯 Transformer 可在 ImageNet 上媲美 CNN,将图像块视为“词”。ViT 将 $224\times 224$ 图像分为 $16\times 16$ 块(196 个“token”),证明只要数据足够,注意力机制可替代卷积归纳偏置。 ↩︎

  26. im2col(Image to Column):Intel 1990 年代开发的数据布局变换,将卷积操作转为矩阵乘法,通过展开图像块为矩阵列。该方法以内存消耗换取计算效率,使 CNN 能利用 GEMM 优化,在 CPU 上提速 5-10 倍。 ↩︎

  27. 脉动阵列(Systolic Array):由处理单元组成的网络,数据有节奏地流经邻居,类似“心跳”式计算。1978 年 H.T. Kung 和 Charles Leiserson 发明,脉动阵列通过计算与数据流重叠实现高吞吐——Google TPU 每时钟周期可执行 65,536 次乘加。 ↩︎

  28. 参数扩展:从 AlexNet 的 6200 万参数(2012)到 GPT-3 的 1750 亿参数(2020),8 年内增长 3000 倍。GPT-4 等现代模型参数量或超万亿,训练时需专用分布式计算基础设施,能耗达兆瓦级。 ↩︎

  29. 张量处理单元(TPU):Google 为支持每日数十亿次搜索中的神经网络而开发。2015 年首次秘密部署,TPU 在推理时性能/功耗比 GPU 高 15-30 倍。TPU 的 $128\times 128$ 脉动阵列每周期可执行 65,536 次乘加,彻底革新了 AI 硬件设计。专用单元可并行执行大量乘加,极大加速神经网络核心计算。 ↩︎

  30. 高带宽内存(HBM):堆叠 DRAM 技术,带宽达 1+ TB/s,传统 GDDR6 仅 500 GB/s,由 AMD 和 Hynix 开发。HBM 支持现代 AI 工作负载的海量数据流动——GPT-3 每次前向需搬运 1.75 TB 参数。 ↩︎

  31. Scratchpad 内存:程序员控制的片上内存,访问快且可预测,无需缓存管理。与缓存不同,scratchpad 需显式数据搬运,但能精确分配内存——对神经网络加速器尤为关键,访问模式已知且需确定性性能。 ↩︎

  32. 算术强度:浮点运算与内存访问的比值,单位 FLOPS/字节。高算术强度(>10 FLOPS/字节)利于硬件利用,低强度(<1 FLOPS/字节)则受限于内存。注意力机制通常算术强度低,故能效较差。 ↩︎

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:设计原则

章节概览

评论区