跳转至

基础知识3

前馈神经网络(Feedforward Neural Network, FNN)是深度学习领域中最基础且最重要的网络架构之一。与含有反馈连接的循环神经网络不同,前馈神经网络中的信息严格沿单一方向——从输入层经隐藏层到输出层——逐层传播,不存在环路结构。本章将从神经元的基本模型出发,系统阐述前馈神经网络的结构设计、理论基础、训练方法及其面临的优化挑战。

1 神经元

人工神经元(Artificial Neuron)是神经网络的基本计算单元,其设计灵感源于生物神经系统中的神经元模型。1943年,McCulloch与Pitts首次提出了形式化的神经元数学模型(M-P模型),奠定了人工神经网络研究的理论基础。

一个典型的人工神经元接收 \(n\) 个输入信号 \(x_1, x_2, \ldots, x_n\),对其进行加权求和并加上偏置后,通过一个非线性激活函数 \(f(\cdot)\) 产生输出:

\[ y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) = f(\mathbf{w}^\top \mathbf{x} + b) \]

其中 \(\mathbf{w} = [w_1, w_2, \ldots, w_n]^\top\) 为权重向量,\(b\) 为偏置项,\(f(\cdot)\) 为激活函数。激活函数的选择对网络的表达能力和训练效率具有决定性影响。净输入(net input)通常记为 \(z = \mathbf{w}^\top \mathbf{x} + b\)

激活函数需要满足以下理想性质:连续且几乎处处可微,以便于基于梯度的优化;输出值域有界或近似有界,以保证数值稳定性;单调递增或近似单调,以确保损失函数的凸性不被破坏;近似恒等变换(即 \(f(0) \approx 0\)),使得网络在初始化阶段能够有效传播信息。

1.1 Sigmoid型函数

Sigmoid型函数是一类具有S形曲线特征的函数族,其中最具代表性的两个函数为Logistic函数和Tanh函数。

Logistic函数

Logistic函数将实数域映射到 \((0, 1)\) 区间,其定义为:

\[ \sigma(z) = \frac{1}{1 + e^{-z}} \]

该函数具有如下重要性质:

  • 输出范围\((0, 1)\),可自然地解释为概率值
  • 对称性\(\sigma(-z) = 1 - \sigma(z)\)
  • 导数\(\sigma'(z) = \sigma(z)(1 - \sigma(z))\),具有优雅的自表达形式
  • 饱和性:当 \(|z|\) 较大时,\(\sigma'(z) \to 0\),即梯度趋近于零

Logistic函数在早期神经网络中被广泛使用,尤其适用于二分类问题的输出层。然而,由于其输出非零中心(non-zero-centered),会导致后续层权重更新方向受限,降低优化效率。此外,在深层网络中,饱和区的梯度消失问题严重制约了网络的训练深度。

Tanh函数

Tanh(双曲正切)函数将实数域映射到 \((-1, 1)\) 区间:

\[ \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} = 2\sigma(2z) - 1 \]

Tanh函数本质上是Logistic函数的线性变换,但其零中心化特性使得训练效率优于Logistic函数。其导数为 \(\tanh'(z) = 1 - \tanh^2(z)\),在 \(z=0\) 处取得最大值1。与Logistic函数类似,Tanh函数在输入绝对值较大时同样存在梯度饱和问题。

Hard-Sigmoid与Hard-Tanh

为降低Sigmoid型函数的计算开销,研究者提出了分段线性近似版本。Hard-Sigmoid定义为:

\[ \text{hard-}\sigma(z) = \max(0, \min(1, 0.25z + 0.5)) \]

Hard-Tanh定义为:

\[ \text{hard-}\tanh(z) = \max(-1, \min(1, z)) \]

这些近似函数在保留非线性特征的同时显著降低了计算成本,尤其适用于移动端和嵌入式设备上的推理加速。

1.2 ReLU函数

修正线性单元(Rectified Linear Unit, ReLU)由Nair和Hinton(2010)引入深度学习领域,现已成为最广泛使用的激活函数:

\[ \text{ReLU}(z) = \max(0, z) = \begin{cases} z, & z > 0 \\ 0, & z \leq 0 \end{cases} \]

ReLU的优势在于:正区间梯度恒为1,有效缓解了深层网络中的梯度消失问题;计算效率极高,仅涉及阈值比较操作;具有天然的稀疏激活特性——对于随机初始化的网络,约50%的神经元输出为零,这种稀疏性被认为有助于提取更具判别性的特征表示。

然而,ReLU存在"神经元死亡"(Dying ReLU)问题:当某个神经元的净输入在训练过程中始终为负,其梯度将永久为零,该神经元将不再参与学习。这一问题在学习率设置过大时尤为显著。

为解决上述问题,研究者提出了多种ReLU变体:

Leaky ReLU(Maas et al., 2013)在负区间引入一个小的正斜率 \(\gamma\)(通常取0.01):

\[ \text{LeakyReLU}(z) = \begin{cases} z, & z > 0 \\ \gamma z, & z \leq 0 \end{cases} \]

Parametric ReLU (PReLU)(He et al., 2015)将负区间斜率 \(\gamma\) 设为可学习参数,通过反向传播自动调整。实验表明,PReLU在ImageNet分类任务上相较于ReLU可带来显著的性能提升。

Exponential Linear Unit (ELU)(Clevert et al., 2015)在负区间采用指数函数:

\[ \text{ELU}(z) = \begin{cases} z, & z > 0 \\ \gamma(e^z - 1), & z \leq 0 \end{cases} \]

ELU在负区间具有软饱和特性,其输出均值接近零,有助于加速收敛。超参数 \(\gamma \geq 0\) 控制负区间饱和值,通常设为1。

1.3 Swish函数

Swish函数由Ramachandran等人(2017)通过自动化搜索(automated search)技术发现,其定义为:

\[ \text{Swish}(z) = z \cdot \sigma(\beta z) \]

其中 \(\sigma(\cdot)\) 为Logistic函数,\(\beta\) 为可学习参数或固定超参数。当 \(\beta = 1\) 时,该函数通常被称为SiLU(Sigmoid Linear Unit)。

Swish函数具有以下特征:非单调性——在负区间存在一个"缓冲区",小的负输入仍可产生非零输出;平滑可微,处处具有良好定义的梯度;当 \(\beta \to 0\) 时,Swish趋近于线性函数 \(z/2\);当 \(\beta \to \infty\) 时,Swish趋近于ReLU。

在CIFAR、ImageNet等基准测试中,Swish在多数任务上略优于ReLU,已被广泛应用于EfficientNet、GPT等现代架构中。

1.4 GELU函数

高斯误差线性单元(Gaussian Error Linear Unit, GELU)由Hendrycks和Gimpel(2016)提出:

\[ \text{GELU}(z) = z \cdot P(Z \leq z) = z \cdot \Phi(z) \]

其中 \(\Phi(z)\) 为标准正态分布的累积分布函数。GELU可以理解为一种随机正则化的确定性近似:以与输入值大小相关的概率对输入进行置零操作。其近似计算公式为:

\[ \text{GELU}(z) \approx 0.5z\left(1 + \tanh\left[\sqrt{2/\pi}(z + 0.044715z^3)\right]\right) \]

GELU在NLP领域尤为流行,已成为BERT、GPT系列、Vision Transformer等Transformer架构的标准激活函数。与ReLU相比,GELU在零点附近更加平滑,有助于优化过程中的梯度流动。

1.5 Maxout单元

Maxout单元(Goodfellow et al., 2013)采用了一种完全不同的设计理念——不对净输入施加固定的非线性变换,而是对多组线性变换的输出取最大值:

\[ \text{Maxout}(\mathbf{x}) = \max_{k \in [1, K]} \left(\mathbf{w}_k^\top \mathbf{x} + b_k\right) \]

其中 \(K\) 为分组数。Maxout单元具有强大的函数逼近能力——任意凸函数都可以由足够数量的线性片段的逐点最大值来近似。ReLU和Leaky ReLU都可视为Maxout的特例(\(K=2\) 且一组权重为零或固定斜率)。

Maxout的主要缺点在于参数量为普通神经元的 \(K\) 倍,显著增加了模型的存储和计算开销。

2 网络结构

神经网络的网络结构(architecture)定义了神经元之间的连接拓扑关系,是决定网络计算能力和适用场景的关键因素。

2.1 前馈网络

前馈网络(Feedforward Network)是最经典的网络架构,其神经元按层组织,信息从输入层出发,逐层经过一个或多个隐藏层,最终到达输出层。同层神经元之间无连接,跨层信息仅沿前向方向传播。

一个 \(L\) 层前馈网络的第 \(l\) 层输出可表示为:

\[ \mathbf{h}^{(l)} = f_l\left(\mathbf{W}^{(l)} \mathbf{h}^{(l-1)} + \mathbf{b}^{(l)}\right), \quad l = 1, 2, \ldots, L \]

其中 \(\mathbf{h}^{(0)} = \mathbf{x}\) 为网络输入,\(\mathbf{W}^{(l)}\)\(\mathbf{b}^{(l)}\) 分别为第 \(l\) 层的权重矩阵和偏置向量,\(f_l(\cdot)\) 为该层的激活函数。

全连接前馈网络(也称多层感知机, MLP)中,相邻层之间的每个神经元都两两相连。MLP是函数逼近的基本工具,在理论上具有通用逼近能力。

2.2 记忆网络

记忆网络(Memory Network)在前馈网络的基础上引入了外部记忆模块,通过注意力机制实现对记忆的读写操作。其核心思想是将知识存储与推理计算分离:网络不仅可以利用当前输入进行计算,还可以通过查询外部记忆库获取相关信息。

Weston等人(2015)提出的记忆网络包含四个核心组件:输入特征映射(Input feature map, I)、泛化模块(Generalization, G)、输出特征映射(Output feature map, O)和响应模块(Response, R)。端到端记忆网络(End-to-End Memory Networks)通过软注意力机制实现了完全可微的记忆访问,支持端到端训练。

虽然记忆网络在严格意义上并非纯粹的前馈结构(其记忆访问可涉及多跳推理),但其单次推理路径仍是前馈式的,因此通常归入前馈网络的讨论范畴。

2.3 图网络

图神经网络(Graph Neural Network, GNN)将神经网络的计算范式推广到任意图结构数据上。与处理规则网格数据(如图像、序列)的CNN和RNN不同,GNN可以直接对分子结构、社交网络、知识图谱等非欧几里得数据进行建模。

消息传递神经网络(Message Passing Neural Network, MPNN)是GNN的统一框架,其核心操作为:

\[ \mathbf{h}_v^{(l+1)} = U\left(\mathbf{h}_v^{(l)}, \bigoplus_{u \in \mathcal{N}(v)} M\left(\mathbf{h}_v^{(l)}, \mathbf{h}_u^{(l)}, \mathbf{e}_{vu}\right)\right) \]

其中 \(\mathcal{N}(v)\) 是节点 \(v\) 的邻居集合,\(M(\cdot)\) 为消息函数,\(\bigoplus\) 为聚合操作(如求和、均值或最大值),\(U(\cdot)\) 为更新函数。经典的GNN变体包括图卷积网络(GCN, Kipf & Welling, 2017)、图注意力网络(GAT, Veličković et al., 2018)和GraphSAGE(Hamilton et al., 2017)等。

3 前馈神经网络

前馈神经网络作为深度学习的基石模型,其理论性质和实际应用值得深入讨论。本节将从理论保证(通用近似定理)、机器学习视角下的应用范式和参数学习方法三个方面展开。

3.1 通用近似定理

通用近似定理(Universal Approximation Theorem)是前馈神经网络最重要的理论基础。

定理(Cybenko, 1989; Hornik et al., 1989):设 \(f(\cdot)\) 为任意连续的Sigmoid型激活函数。对于定义在紧致集 \(K \subset \mathbb{R}^n\) 上的任意连续函数 \(g: K \to \mathbb{R}\) 以及任意 \(\epsilon > 0\),存在一个单隐藏层前馈网络:

\[ F(\mathbf{x}) = \sum_{j=1}^{N} \alpha_j f\left(\mathbf{w}_j^\top \mathbf{x} + b_j\right) \]

使得 \(\sup_{\mathbf{x} \in K} |F(\mathbf{x}) - g(\mathbf{x})| < \epsilon\)

该定理后来被推广到ReLU等更广泛的激活函数类(Leshno et al., 1993)。其深刻含义在于:只要隐藏层神经元数量足够多,单隐藏层前馈网络就可以以任意精度逼近任意连续函数。

然而,通用近似定理是一个存在性结果,它并未回答以下关键问题:所需隐藏单元的数量可能随输入维度呈指数增长(维度灾难);定理不保证通过梯度下降等方法能够找到合适的参数;在实践中,深层窄网络往往比浅层宽网络具有更高的参数效率——这正是深度学习优于浅层模型的核心论据之一。

3.2 应用到机器学习

在机器学习框架下,前馈神经网络可被视为一个参数化的函数族 \(\{f(\mathbf{x}; \boldsymbol{\theta}) : \boldsymbol{\theta} \in \Theta\}\),其中 \(\boldsymbol{\theta}\) 包含所有层的权重和偏置。学习过程就是在给定训练数据 \(\mathcal{D} = \{(\mathbf{x}_i, y_i)\}_{i=1}^N\) 的条件下,寻找最优参数 \(\boldsymbol{\theta}^*\) 以最小化经验风险:

\[ \boldsymbol{\theta}^* = \arg\min_{\boldsymbol{\theta}} \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}\left(f(\mathbf{x}_i; \boldsymbol{\theta}), y_i\right) + \lambda \Omega(\boldsymbol{\theta}) \]

其中 \(\mathcal{L}(\cdot, \cdot)\) 为损失函数,\(\Omega(\boldsymbol{\theta})\) 为正则化项,\(\lambda\) 为正则化系数。

常用的损失函数包括:用于回归任务的均方误差(MSE)\(\mathcal{L} = \frac{1}{2}\|y - \hat{y}\|^2\);用于二分类任务的交叉熵损失 \(\mathcal{L} = -[y\log\hat{y} + (1-y)\log(1-\hat{y})]\);用于多分类任务的Softmax交叉熵损失 \(\mathcal{L} = -\sum_{c=1}^{C} y_c \log \hat{y}_c\)

正则化技术对于防止过拟合至关重要,常见方法包括:\(L_2\) 正则化(权重衰减)、\(L_1\) 正则化(诱导稀疏性)、Dropout(Srivastava et al., 2014)、Batch Normalization(Ioffe & Szegedy, 2015)以及早停法(Early Stopping)。

3.3 参数学习

前馈神经网络的参数学习通常采用基于梯度的优化方法。由于损失函数关于网络参数通常是高度非凸的,求解全局最优解在计算上是不可行的(NP-hard),因此实践中主要依赖随机梯度下降(SGD)及其变体来寻找性能良好的局部最优解。

参数更新的基本规则为:

\[ \boldsymbol{\theta}^{(t+1)} = \boldsymbol{\theta}^{(t)} - \eta \nabla_{\boldsymbol{\theta}} \mathcal{L}(\boldsymbol{\theta}^{(t)}) \]

其中 \(\eta > 0\) 为学习率。小批量随机梯度下降(Mini-batch SGD)在每次迭代中使用一个数据子集来估计梯度,在计算效率与梯度估计方差之间取得平衡。

现代深度学习中广泛使用的自适应学习率优化器包括:AdaGrad(Duchi et al., 2011)为每个参数维护独立的学习率;RMSProp(Hinton, 2012)引入指数移动平均来平滑历史梯度;Adam(Kingma & Ba, 2015)结合了动量和自适应学习率,已成为事实上的默认优化器。权重初始化策略(如Xavier初始化和He初始化)对训练收敛速度和最终性能也具有重要影响。

4 反向传播算法

反向传播算法(Backpropagation, BP)是训练多层神经网络的核心算法,由Rumelhart、Hinton和Williams于1986年推广应用。其本质是链式法则(Chain Rule)在计算图上的系统化应用,用于高效计算损失函数关于每一层参数的梯度。

前向传播阶段:给定输入 \(\mathbf{x}\),逐层计算各隐藏层的净输入和激活值:

\[ \mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{h}^{(l-1)} + \mathbf{b}^{(l)}, \quad \mathbf{h}^{(l)} = f_l(\mathbf{z}^{(l)}) \]

反向传播阶段:从输出层开始,逐层计算误差信号(梯度)。定义第 \(l\) 层的误差项为 \(\boldsymbol{\delta}^{(l)} = \frac{\partial \mathcal{L}}{\partial \mathbf{z}^{(l)}}\),则有:

输出层(\(l = L\)):

\[ \boldsymbol{\delta}^{(L)} = \frac{\partial \mathcal{L}}{\partial \mathbf{h}^{(L)}} \odot f_L'(\mathbf{z}^{(L)}) \]

隐藏层(\(l = L-1, \ldots, 1\)):

\[ \boldsymbol{\delta}^{(l)} = \left(\mathbf{W}^{(l+1)}\right)^\top \boldsymbol{\delta}^{(l+1)} \odot f_l'(\mathbf{z}^{(l)}) \]

其中 \(\odot\) 表示逐元素乘积(Hadamard积)。

参数梯度

\[ \frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(l)}} = \boldsymbol{\delta}^{(l)} \left(\mathbf{h}^{(l-1)}\right)^\top, \quad \frac{\partial \mathcal{L}}{\partial \mathbf{b}^{(l)}} = \boldsymbol{\delta}^{(l)} \]

反向传播算法的计算复杂度与前向传播相当,均为 \(O(\sum_l n_l \cdot n_{l-1})\),其中 \(n_l\) 为第 \(l\) 层的神经元数量。这种高效性使得训练拥有数百万甚至数十亿参数的深度网络成为可能。

5 自动梯度计算

在实际深度学习框架(如PyTorch、TensorFlow)中,梯度计算由自动微分(Automatic Differentiation, AD)系统自动完成,使得研究者只需定义前向计算过程即可自动获得梯度。

5.1 数值微分

数值微分(Numerical Differentiation)基于导数的极限定义,通过有限差分来近似梯度:

前向差分

\[ \frac{\partial f}{\partial x_i} \approx \frac{f(\mathbf{x} + \epsilon \mathbf{e}_i) - f(\mathbf{x})}{\epsilon} \]

中心差分(精度更高):

\[ \frac{\partial f}{\partial x_i} \approx \frac{f(\mathbf{x} + \epsilon \mathbf{e}_i) - f(\mathbf{x} - \epsilon \mathbf{e}_i)}{2\epsilon} \]

其中 \(\mathbf{e}_i\) 为第 \(i\) 个标准基向量,\(\epsilon\) 为微小扰动量(通常取 \(10^{-5}\)\(10^{-7}\))。

数值微分实现简单,但存在两个根本性缺陷:截断误差(\(\epsilon\) 的选择涉及精度与数值稳定性的权衡)和计算开销——\(n\) 维参数空间需要 \(O(n)\) 次前向计算,对于包含数百万参数的深度网络而言完全不可行。尽管如此,数值微分在梯度检查(gradient checking)中仍发挥着不可替代的验证作用。

5.2 符号微分

符号微分(Symbolic Differentiation)通过对数学表达式直接应用求导规则来获得解析形式的梯度表达式。例如,对于 \(f(x) = x^2 \sin(x)\),符号微分将产生 \(f'(x) = 2x\sin(x) + x^2\cos(x)\)

符号微分可以给出精确的梯度表达式,不存在近似误差。然而,它面临"表达式膨胀"(expression swell)问题——复合函数经过多次求导后,表达式的规模可能呈指数级增长,导致巨大的存储和计算开销。此外,符号微分难以处理包含条件分支和循环的程序结构,限制了其在通用深度学习框架中的适用性。

5.3 自动微分

自动微分(Automatic Differentiation, AD)兼具数值精度和计算效率,是现代深度学习框架的核心技术。其基本思想是:将复杂的函数计算分解为有限个基本操作(加减乘除、初等函数等)的组合,然后通过链式法则逐步计算梯度。

前向模式(Forward Mode AD):沿前向计算方向同步传播导数。对于函数 \(f: \mathbb{R}^n \to \mathbb{R}^m\),一次前向扫描可以计算关于某一个输入变量的所有偏导数。当 \(n \ll m\) 时效率最高。

反向模式(Reverse Mode AD):首先执行前向计算并记录计算图(计算轨迹),然后沿反向方向传播伴随变量(adjoint)。一次反向扫描即可获得输出关于所有输入的梯度。当 \(n \gg m\) 时效率最高——这正是神经网络训练的典型场景(大量参数、标量损失函数)。

反向模式自动微分在本质上等价于反向传播算法,但提供了更一般化的框架。PyTorch采用动态计算图(define-by-run)实现自动微分,在每次前向计算时动态构建计算图;TensorFlow 2.x通过tf.GradientTape提供即时执行(eager execution)模式的自动微分支持。

6 优化问题

深度神经网络的训练本质上是一个高维非凸优化问题,在实践中面临诸多挑战。

6.1 非凸优化问题

与凸优化不同,神经网络的损失曲面(loss surface)充斥着局部极小值、鞍点和平坦区域。对于一个具有 \(d\) 维参数的网络,Hessian矩阵 \(\mathbf{H} = \nabla^2 \mathcal{L}\) 的特征值分布决定了临界点的性质。

鞍点问题:Dauphin等人(2014)的研究表明,高维空间中的鞍点数量远超局部极小值。在 \(d\) 维空间的随机临界点上,Hessian矩阵每个特征值为正或负的概率各约50%,因此所有特征值同号(即为局部极值)的概率约为 \(2^{-d}\),极度稀少。这意味着SGD在高维空间中更可能遇到鞍点而非局部极小值。

损失曲面的结构:近年来的理论与实证研究揭示了若干重要发现。过参数化网络(参数数量远超训练样本数)的局部极小值往往也是全局极小值或接近全局最优(Choromanska et al., 2015)。不同局部极小值之间可能通过低损失路径相连(模式连通性, Garipov et al., 2018)。损失曲面存在大量近似平坦的区域,这些区域对应的模型可能具有更好的泛化能力。

6.2 梯度消失问题

梯度消失问题(Vanishing Gradient Problem)是训练深层神经网络的核心瓶颈之一,由Hochreiter(1991)和Bengio等人(1994)系统分析。

考虑一个 \(L\) 层网络,输出层损失关于第 \(l\) 层参数的梯度涉及以下链式乘积:

\[ \frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(l)}} \propto \prod_{k=l}^{L-1} \text{diag}\left(f'(\mathbf{z}^{(k)})\right) \mathbf{W}^{(k+1)} \]

当激活函数的导数绝对值 \(|f'(z)| < 1\)(如Sigmoid函数在饱和区)或权重矩阵的谱范数 \(\|\mathbf{W}^{(k)}\| < 1\) 时,上述乘积随层数增加将指数衰减至零,导致浅层参数几乎得不到有效更新。反之,若梯度指数增长则产生梯度爆炸问题。

缓解梯度消失的主要策略包括:

  • 激活函数设计:使用ReLU及其变体替代Sigmoid,在正区间维持恒等梯度流
  • 残差连接(He et al., 2016):通过 \(\mathbf{h}^{(l)} = f(\mathbf{z}^{(l)}) + \mathbf{h}^{(l-1)}\) 引入恒等映射捷径,使梯度可以直接跨层回传
  • 权重初始化:Xavier初始化保持各层方差一致;He初始化专为ReLU网络设计
  • 归一化技术:Batch Normalization、Layer Normalization等通过规范化中间层的分布来稳定梯度
  • 梯度裁剪(Gradient Clipping):当梯度范数超过阈值时进行缩放,防止梯度爆炸