深度学习基础与神经网络回顾
深度学习基础与神经网络回顾
深度学习作为当代人工智能领域的核心技术支柱,其发展历程凝聚了无数研究者数十年的智慧结晶。从20世纪50年代感知机的诞生,到21世纪初期深度信念网络的突破,再到如今Transformer架构引领的大语言模型时代,深度学习技术经历了从理论萌芽到工程实践、从单一任务到通用智能的跨越式发展。本章旨在为读者系统梳理深度学习的基础理论与核心概念,为后续深入理解大语言模型的架构设计与训练机制奠定坚实的知识基础。
神经网络的历史演进
从感知机到多层神经网络
理解深度学习的历史渊源,必须从人工智能领域的开创性工作——感知机(Perceptron)说起。1958年,美国心理学家弗兰克·罗森布拉特(Frank Rosenblatt)在康奈尔航空实验室提出了感知机模型,这是首个以数学形式模拟生物神经元工作原理的计算模型。感知机接受一组二进制输入,通过权重向量进行线性组合,再通过阶跃函数产生二进制输出,其数学形式可表示为:
$$y = \begin{cases} 1 & \text{if } \mathbf{w} \cdot \mathbf{x} + b > 0 \\ 0 & \text{otherwise} \end{cases}$$
其中,$\mathbf{w}$为权重向量,$\mathbf{x}$为输入向量,$b$为偏置项。罗森布拉特不仅提出了感知机的数学框架,还设计了相应的硬件实现——Mark I感知机,这是世界上首个尝试模拟人类学习过程的机器。尽管感知机在模式识别任务上展现出一定的能力,但其局限性很快被明斯基和帕佩特在1969年的经典著作《感知机》中系统性地揭示出来。
明斯基和帕佩特证明了一个重要结论:单层感知机无法解决非线性可分问题,最典型的例子便是异或(XOR)函数。异或函数的真值表表明,当两个输入相同时输出为0,不同时输出为1,这种模式在二维空间中呈现对角线分布,任何直线都无法将其正确分类。这一发现几乎宣判了感知机的“死刑”,导致人工智能研究在随后十余年间陷入低谷,研究者们对神经网络的热情急剧衰退。
然而,困顿之中蕴含着突破的契机。1986年,戴维·鲁梅尔哈特(David Rumelhart)、杰弗里·辛顿(Geoffrey Hinton)和罗纳德·威廉姆斯(Ronald Williams)在《自然》杂志上发表了具有里程碑意义的论文,系统性地提出了误差反向传播(Backpropagation)算法。这一算法的核心思想在于,通过链式法则将输出层的误差逐层向前传播,据此计算损失函数对各层参数的梯度,从而实现多层神经网络的有效训练。反向传播算法的提出从根本上解决了多层网络的学习问题,使得神经网络能够逼近任意复杂的非线性函数。
反向传播算法的数学推导如下:设神经网络的损失函数为$L$,网络参数为$\theta = \{\mathbf{W}^{(l)}, \mathbf{b}^{(l)}\}$。对于第$l$层的权重矩阵$\mathbf{W}^{(l)}$,其梯度可表示为:
$$\frac{\partial L}{\partial \mathbf{W}^{(l)}} = \frac{\partial L}{\partial \mathbf{a}^{(l)}} \cdot \frac{\partial \mathbf{a}^{(l)}}{\partial \mathbf{W}^{(l)}} = \boldsymbol{\delta}^{(l)} \cdot \mathbf{a}^{(l-1)T}$$
其中,$\boldsymbol{\delta}^{(l)} = \frac{\partial L}{\partial \mathbf{a}^{(l)}}$为第$l$层的误差项,$\mathbf{a}^{(l)} = f(\mathbf{z}^{(l)})$为第$l$层的激活值,$\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}$为第$l$层的净输入。反向传播算法通过递归计算各层的误差项,实现梯度的有效传播:
$$\boldsymbol{\delta}^{(l)} = (\mathbf{W}^{(l+1)T} \boldsymbol{\delta}^{(l+1)}) \odot f'(\mathbf{z}^{(l)})$$
其中,$\odot$表示逐元素乘法(Hadamard乘积),$f'(\cdot)$为激活函数的导数。
深度学习时代的来临
尽管反向传播算法解决了多层网络的学习问题,但深度神经网络(具有多个隐藏层的网络)的训练在实践中仍面临严峻挑战。2006年,杰弗里·辛顿提出了深度信念网络(Deep Belief Network),创新性地采用逐层预训练(Layer-wise Pretraining)的策略:首先逐层训练受限玻尔兹曼机(Restricted Boltzmann Machine),使每一层的参数初始化在较好的区域,再使用反向传播进行全局微调。这一方法有效缓解了深层网络训练中的梯度消失问题,开创了深度学习的新纪元。
2012年成为深度学习发展史上的关键转折点。在ImageNet图像分类挑战赛中,亚历克斯·克里泽夫斯基(Alex Krizhevsky)等人提出的AlexNet以压倒性优势获胜,将错误率从之前的25%左右降至16%,这在计算机视觉领域引发了轰动。AlexNet的成功得益于多个关键技术的综合应用:使用GPU加速计算、采用ReLU激活函数、引入Dropout正则化技术、以及使用数据增强策略。这一里程碑式的事件标志着深度学习正式登上人工智能的舞台中央。
此后,深度学习进入快速发展期。2014年,生成对抗网络(GAN)的提出为生成式模型开辟了新道路;2015年,ResNet通过残差连接解决了深层网络退化问题,成功训练了超过150层的卷积神经网络;2017年,Transformer架构的提出彻底改变了自然语言处理领域的范式,其自注意力机制成为后续大语言模型的核心组件。这些里程碑式的突破共同构建了现代深度学习的完整技术体系。
前馈神经网络的基本结构
网络拓扑与信息流动
前馈神经网络(Feedforward Neural Network)是最基础也是应用最广泛的神经网络架构。顾名思义,信息在这种网络中的流动是单向的:从输入层依次经过各隐藏层,最终到达输出层,不存在任何反馈连接或循环回路。这种前向传播的过程可用数学公式严格描述。
设网络具有$L$层,第$l$层的净输入为$\mathbf{z}^{(l)}$,激活值为$\mathbf{a}^{(l)}$,则前向传播可表示为:
$$\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}$$ $$\mathbf{a}^{(l)} = f^{(l)}(\mathbf{z}^{(l)})$$
其中,$\mathbf{W}^{(l)}$和$\mathbf{b}^{(l)}$分别为第$l$层的权重矩阵和偏置向量,$f^{(l)}$为第$l$层的激活函数。约定输入层为第0层,即$\mathbf{a}^{(0)} = \mathbf{x}$(输入向量)。对于输出层,通常根据任务性质选择合适的激活函数:回归任务使用线性激活,多分类任务使用softmax函数,二分类任务使用sigmoid函数。
网络的表达能力与其规模密切相关。万能逼近定理(Universal Approximation Theorem)指出,一个具有足够多隐藏层单元的单层前馈神经网络可以逼近任意连续函数到任意精度。然而,这一理论保证并不意味着我们应该总是使用单层宽网络。深度网络在表示某些特定类型的函数时具有指数级的效率优势。例如,对于用电路表示的布尔函数,深度网络可能需要指数级的宽度才能达到与对数深度网络相同的表达能力。
在实际应用中,网络架构的选择需要在表达能力、计算效率和可训练性之间寻求平衡。增加网络深度通常能够增强模型对复杂模式的建模能力,但也带来梯度消失、梯度爆炸等训练困难;增加网络宽度则可能提高模型的并行计算效率,但参数量和计算成本也会相应增加。
全连接层的数学本质
全连接层(Fully Connected Layer),又称密集层(Dense Layer),是前馈神经网络中最基本的结构组件。在全连接层中,当前层的每个神经元都与前一层的所有神经元相连接,这种“全连接”的拓扑结构使其具有极强的特征组合能力。
从线性代数的视角审视,全连接层的核心操作是矩阵乘法。设输入特征向量$\mathbf{a}^{(l-1)} \in \mathbb{R}^{n_{l-1}}$,输出特征向量$\mathbf{a}^{(l)} \in \mathbb{R}^{n_l}$,则全连接层的计算可写为:
$$\mathbf{a}^{(l)} = \sigma(\mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)})$$
其中,$\mathbf{W}^{(l)} \in \mathbb{R}^{n_l \times n_{l-1}}$为权重矩阵,$\mathbf{b}^{(l)} \in \mathbb{R}^{n_l}$为偏置向量,$\sigma$为激活函数。权重矩阵的每个元素$W^{(l)}_{ij}$表示第$l-1$层第$j$个神经元到第$l$层第$i$个神经元连接的重要性。
从特征学习的角度分析,全连接层本质上是在学习输入特征的非线性组合。假设网络某隐藏层的输出为$\mathbf{h} = \sigma(\mathbf{W} \mathbf{x} + \mathbf{b})$,输出向量的第$i$个元素可展开为:
$$h_i = \sigma\left(\sum_{j=1}^{n} W_{ij} x_j + b_i\right)$$
这表明每个输出神经元都会对所有输入特征进行加权求和,再加上偏置,最后通过非线性激活函数产生响应。这种机制使得网络能够自动学习输入特征之间的交互关系,而无需人工设计特征组合。
然而,全连接层的参数量随输入维度的增长呈平方级增长,这对于处理高维输入(如图像)而言计算成本极高。因此,在现代深度学习架构中,全连接层通常与更专业的结构组件(如卷积层、注意力层)配合使用,后者能够更高效地处理具有特定结构特征的输入数据。
激活函数的作用机制
激活函数(Activation Function)是赋予神经网络非线性表达能力的关键组件。如果网络中只包含线性变换(矩阵乘法与加法),那么无论网络有多少层、每层有多宽,其整体映射都将退化为输入的线性组合。激活函数的非线性引入打破了这种线性叠加,使得深度网络能够拟合任意复杂的非线性函数。
Sigmoid函数与Tanh函数
Sigmoid函数是神经网络发展早期最常使用的激活函数,其数学形式为:
$$\sigma(x) = \frac{1}{1 + e^{-x}}$$
Sigmoid函数将实数输入压缩至$(0, 1)$区间,这一特性使其天然适合用于二分类问题的输出层,将预测结果解释为概率值。然而,Sigmoid函数存在两个严重的缺陷:一是饱和区梯度接近于零,导致反向传播时出现严重的梯度消失问题;二是输出不以零为中心,这会使下一层的输入发生偏移,影响梯度下降的收敛速度。
Tanh函数(双曲正切函数)是Sigmoid函数的变体,其数学形式为:
$$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$$
Tanh函数将输入压缩至$(-1, 1)$区间,输出以零为中心,相比Sigmoid函数具有更快的收敛速度。尽管如此,Tanh函数在两端同样存在梯度消失问题,因此在现代深层网络中已较少作为隐藏层的激活函数使用。
ReLU函数及其变体
Rectified Linear Unit(ReLU,线性整流单元)由文森特·温泓(Vincen Vanhoucke)等人于2011年提出,迅速成为深度学习领域最广泛使用的激活函数。ReLU的数学形式极为简洁:
$$\text{ReLU}(x) = \max(0, x)$$
ReLU函数具有多个显著优点:计算效率极高,只需比较操作而无指数运算;在正区间梯度恒为1,有效缓解了梯度消失问题;引入了稀疏激活性,有助于特征的解耦和表示的学习。Krizhevsky等人于2012年在AlexNet中大规模使用ReLU,标志着其在深度学习中的全面应用。
然而,ReLU也存在固有的缺陷——"dying ReLU"问题。当神经元的输入持续为负时,ReLU的输出始终为零,导致该神经元及其梯度在后续迭代中永久失效。为解决这一问题,研究者提出了多种ReLU变体:
Leaky ReLU允许负区间存在一个很小的斜率$\alpha$(通常设为0.01):
$$\text{LeakyReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{otherwise} \end{cases}$$
Parametric ReLU(PReLU)将负区间的斜率$\alpha$作为可学习的参数,使网络能够自动调整激活函数的形状。
Exponential Linear Unit(ELU)在负区间使用指数函数:
$$\text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{otherwise} \end{cases}$$
ELU在负区间具有软饱和特性,有助于将激活均值推向零,同时保持对噪声的鲁棒性。
Scaled Exponential Linear Unit(SELU)是针对自归一化神经网络设计的特殊变体,其数学形式为:
$$\text{SELU}(x) = \lambda \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{otherwise} \end{cases}$$
其中$\lambda \approx 1.0507$,$\alpha \approx 1.6733$。在满足特定条件下(使用LeCun初始化,且网络各层按顺序堆叠),SELU能够自动将每层的输出方差维持在合理范围内,实现稳定的信息传递。
Swish与GELU
近年来,更复杂的激活函数相继被提出。Swish函数由Ramachandran等人于2017年提出:
$$\text{Swish}(x) = x \cdot \sigma(\beta x)$$
其中$\beta$为可学习的标量参数。Swish函数在深层网络中表现优于ReLU,尤其在40层以上的网络中优势更为明显。
Gaussian Error Linear Unit(GELU)是GPT、BERT等Transformer模型采用的新型激活函数:
$$\text{GELU}(x) = x \cdot \Phi(x)$$
其中$\Phi(x)$为标准正态分布的累积分布函数。GELU可以近似为:
$$\text{GELU}(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right)$$
GELU将输入与随机正则化的期望相结合,表现出更强的连续性和平滑性,在自然语言处理任务中取得了优异的效果。
卷积神经网络
卷积操作的本质
卷积神经网络(Convolutional Neural Network,CNN)是深度学习在计算机视觉领域的核心架构,其设计灵感来源于生物视觉系统的层次化感受野结构。卷积操作是CNN的核心组件,它通过局部连接和权重共享机制大幅降低了网络参数量的同时,赋予网络对平移、缩放和旋转的不变性。
在一维情况下,离散卷积的操作可定义为:
$$(f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n - m]$$
在深度学习中,卷积操作通常指互相关(Cross-correlation)运算,即省略了核函数的翻转步骤。对于二维输入张量$\mathbf{X} \in \mathbb{R}^{H \times W \times C_{in}}$和卷积核$\mathbf{K} \in \mathbb{R}^{K_h \times K_w \times C_{in} \times C_{out}}$,输出张量$\mathbf{Y} \in \mathbb{R}^{H' \times W' \times C_{out}}$的计算为:
$$Y_{i,j,k} = \sum_{u=0}^{K_h-1} \sum_{v=0}^{K_w-1} \sum_{c=0}^{C_{in}-1} K_{u,v,c,k} \cdot X_{i+u, j+v, c}$$
其中,$K_h$和$K_w$为卷积核的空间尺寸,$C_{in}$和$C_{out}$分别为输入和输出通道数。
卷积操作具有两个关键特性:局部连接(Local Connectivity)限制了神经元仅与输入的局部区域相连接,这个局部区域被称为感受野(Receptive Field)。这种设计假设图像中距离较远的像素之间的相关性较弱,局部特征组合形成全局表示。权重共享(Weight Sharing)则要求同一特征图的所有位置使用相同的卷积核权重,这大幅减少了参数量,同时使网络具有平移不变性——图像中的目标无论出现在什么位置,都会被同样的特征检测器识别。
卷积层的结构与配置
在现代深度学习框架中,卷积层通常包含多个可配置参数,工程师需要根据具体任务进行合理选择。
卷积核尺寸(Kernel Size)决定了感受野的大小。最常用的尺寸是$3 \times 3$,这是能够捕捉中心像素及其八邻域的最小奇数尺寸。使用多个小尺寸卷积核的叠加可以达到与大尺寸卷积核相同的感受野,同时参数量更少、非线性更多。例如,两个$3 \times 3$卷积层的感受野与一个$5 \times 5$卷积层相同,但参数量从$25C_{in}C_{out}$降至$18C_{in}C_{out}$,且多了一层激活函数带来的非线性。
步幅(Stride)控制卷积核在输入上滑动的步长。步幅为$s$意味着卷积核每隔$s$个像素移动一次。步幅大于1可以有效降低特征图的空间分辨率,实现下采样功能。例如,步幅为2的$3 \times 3$卷积可以使特征图尺寸减半。然而,步幅大于1会损失信息,可能影响精细特征的提取。
填充(Padding)在输入张量的边缘添加零值或其他值的