深度学习完整指南¶
前置要求:了解基础机器学习概念,具备基本线性代数和微积分直觉 最后更新:2026-07-20
1. 深度学习是什么:不只是神经网络的堆叠¶
1.1 一个贯穿全篇的比喻¶
想象你第一次看到一幅抽象画。你不会一眼就理解整幅作品,而是从细节开始:先注意到画布上有几条线条,几块颜色;然后意识到这些线条和颜色构成了某种形状;再往后,这些形状让你联想到某种情绪或意象;最终,结合上下文和艺术家的风格,你形成了对整幅画的综合理解。
深度学习网络理解一张图片的方式,和这个过程惊人地相似——从原始像素出发,逐层构建越来越抽象的表示,最终在最高层形成对整个输入的语义级理解。这种逐层抽象的能力,才是深度学习区别于传统机器学习的核心,而不仅仅是"用了更多层的神经网络"。
1.2 深度学习解决的根本问题¶
传统机器学习的工作流程通常是这样的:领域专家花大量时间设计特征(特征工程),把原始数据转化成模型能够处理的表示,然后机器学习算法在这些手工特征上进行学习。这里有一个根本性的瓶颈——特征设计依赖人类的知识和经验,天花板很明显,而且费时费力。
深度学习的突破在于端到端学习:你把原始数据(像素、声音波形、文本字符)直接喂给网络,网络自己学习如何提取有用的表示,不需要人工设计中间特征。这个过程中,网络的浅层学到的是简单的低级特征,深层通过组合浅层特征学到复杂的高级表示。整个特征体系不是人设计的,而是从数据中涌现出来的。
这种能力让深度学习在图像识别、语音识别、自然语言处理等领域取得了革命性的进展,达到甚至超越了人类在特定任务上的表现。但这并不是万能的——它需要大量数据,大量算力,而且学到的东西往往难以解释。理解深度学习的能力边界,和理解它能做什么一样重要。
1.3 深度学习蓬勃发展的三个推动力¶
深度学习的思想其实并不新——神经网络的基本理论在几十年前就已经存在。之所以在 2010 年代之后才真正爆发,是三个因素叠加的结果。
第一是数据规模的爆炸。互联网的普及带来了前所未有的数据积累——数十亿张标注图片、海量文本语料、无数小时的语音录音。深度学习是数据饥渴型的方法,数据越多效果越好,而以前就是因为没有这么多数据,大模型训练根本无从谈起。
第二是算力的跨越式增长。GPU(图形处理器)原本是为电子游戏的实时渲染设计的,但人们发现它执行矩阵乘法的速度是 CPU 的数百倍,而矩阵乘法恰好是神经网络训练的核心运算。用 GPU 加速训练,让原本需要几个月的实验缩短到几天甚至几小时。
第三是算法层面的系列突破:ReLU 激活函数解决了梯度消失问题,Dropout 提供了有效的正则化手段,批归一化让训练更加稳定,残差连接让网络真正深起来,注意力机制让序列建模焕然一新……这些算法进步环环相扣,共同构成了今天深度学习工程的基石。
2. 张量:深度学习的基本数据单位¶
在开始讨论网络结构之前,需要先理解深度学习中数据的表示方式。在深度学习框架(PyTorch、TensorFlow)中,所有数据都以张量(Tensor) 的形式存在。
张量是多维数组的泛化概念,可以通过维度来理解。一个标量(单个数字)是 0 维张量;一个向量(一排数字)是 1 维张量;一个矩阵(行列排列的数字方阵)是 2 维张量;而一批彩色图片则是 4 维张量——第一维是图片数量(批量大小),第二维是图片高度,第三维是图片宽度,第四维是颜色通道(RGB 对应 3 个通道)。
张量的"形状(Shape)"描述了每个维度的大小。一个形状为 (32, 3, 224, 224) 的张量,表示 32 张 224×224 分辨率的 RGB 图像构成的一批数据。深度学习中所有操作——卷积、矩阵乘法、归一化——本质上都是在变换张量的形状和数值。熟练地在脑海中追踪张量形状的变化,是理解任何深度学习架构的基本功。
为什么要批量处理而不是一张一张地处理?因为 GPU 的强大之处在于可以并行执行大量相同的运算。把 32 张图片打包成一个批量,GPU 可以同时对这 32 张图进行所有中间计算,效率远高于逐张处理。批量大小(Batch Size)的选择影响训练速度、内存占用和优化的稳定性,是深度学习训练中的一个重要超参数。
3. 神经网络的计算本质:矩阵乘法与非线性变换¶
抛开所有复杂的术语,一个全连接神经网络在数学上做的事情,其实是反复执行两个简单操作的交替:矩阵乘法(加权求和),然后激活函数(非线性变换)。
当一个输入向量通过一个全连接层时,发生的事情是:输入向量与这一层的权重矩阵相乘,再加上一个偏置向量,得到一个新的向量。这个运算的含义是:新向量的每一个元素,都是输入的所有元素的加权线性组合。然后激活函数逐元素地对这个向量做非线性变换,把它传给下一层。
从信息论的角度理解,每一层都在对输入做一种坐标变换——把输入向量从一个表示空间,线性变换到另一个空间,然后用激活函数做一次非线性折叠,形成新的形状。多层叠加,就像多次折叠和揉搓一块面团,原本在低维空间中线性不可分的数据,在被多层变换后可能变得可以分开。
这个视角揭示了一个深刻的事实:深度学习在做的,是学习一个从输入数据到目标输出的复杂非线性函数,而这个函数由数百万个权重参数控制,这些参数通过梯度下降从数据中确定。神经网络的"学习",本质上就是在寻找一组最优的参数,使得这个函数在训练数据上的误差最小。
4. 激活函数:为什么非线性至关重要¶
激活函数是神经网络中最容易被轻描淡写的组件,但它实际上是让神经网络强大的关键所在。
如果去掉激活函数,不管网络有多少层,所有的矩阵乘法叠加在一起,最终仍然只是一个线性变换。线性变换能做的事情非常有限——它无法学习 XOR(异或)这样简单的非线性关系,更别提图像识别或语言理解这类极度复杂的映射了。激活函数在每一层引入非线性,让多层网络的表达能力随深度指数级增长。
早期神经网络最常用的激活函数是 Sigmoid,它把任意实数压缩到 0 和 1 之间,输出可以直觉上理解为"激活概率"。但 Sigmoid 有一个致命缺陷:当输入很大或很小时,函数曲线变得非常平坦,梯度几乎为零——这就是梯度消失问题。在深层网络中,梯度在反向传播时需要经过多层的 Sigmoid,每经过一层就被压缩一次,到达浅层时梯度已经小到几乎为零,浅层参数几乎无法更新,网络学习陷入停滞。这就是为什么在 ReLU 出现之前,训练十层以上的网络几乎是不可能的任务。
ReLU(Rectified Linear Unit,线性整流函数) 的出现改变了这一切。它的定义极其简单:正数原样输出,负数一律输出零。这个看似简单的操作有几个深远的优点:在正数区间梯度恒为 1,不会衰减,彻底解决了梯度消失问题;计算极其高效,只需要比较一次大小;而且稀疏激活(一半的神经元输出为零)在某种程度上起到了正则化效果。
ReLU 的主要缺陷是"死亡神经元"问题:如果一个神经元的输入始终为负,它就永远输出零,梯度也永远为零,这个神经元就"死掉"了,再也无法被训练。Leaky ReLU 通过在负数区间给一个小斜率(而不是直接截断为零)来缓解这个问题。GeLU(Gaussian Error Linear Unit) 是近年来在 Transformer 中广泛使用的激活函数,它有一个平滑的曲线,在负数区间也保留了一些梯度,实践中表现出色。SiLU(Swish) 是另一个现代变体,在很多视觉模型中取代了 ReLU。
输出层的激活函数与隐藏层不同,它取决于任务类型。二分类的输出层用 Sigmoid,把输出压缩到 0-1 之间表示概率;多分类用 Softmax,把输出向量转化为各类别的概率分布,所有类别的概率之和为 1;回归任务通常不用激活函数,输出原始实数值。
5. 损失函数:定义"什么叫做犯了错"¶
损失函数(Loss Function),有时也叫目标函数或代价函数,是整个深度学习训练体系的核心锚点。它把模型的预测结果与真实标签的差距,量化为一个可以被优化的数值。没有损失函数,梯度下降就失去了方向——它不知道什么是"更好",也不知道往哪个方向改进。
选择合适的损失函数,实质上是在回答"什么样的错误代价更大"这个问题。对于回归任务,最常用的是均方误差(MSE)——预测值与真实值之差的平方取平均。平方这个操作让大误差受到更严厉的惩罚:差 10 的惩罚是差 1 的 100 倍,而不是 10 倍。这在很多场景下是合理的,但如果数据中有严重的异常值(outlier),均方误差会被异常值主导,此时平均绝对误差(MAE) 更加鲁棒,因为它对误差是线性惩罚而非平方惩罚。
对于分类任务,最主流的是交叉熵损失(Cross-Entropy Loss)。理解交叉熵需要一点信息论背景:它衡量的是模型预测的概率分布与真实分布之间的距离。如果模型对正确类别给出了很高的概率,损失就很低;如果给出了很低的概率,损失就很高,而且随着概率接近零,损失趋向无穷大——这给了模型一个强烈的信号:对正确答案充满信心是关键。
损失函数的设计是一门艺术。有时候业务目标并不能直接转化为可微分的损失函数(比如你真正想优化的是 F1 分数或 AUC,但这两者不可微),这时需要设计代理损失函数来近似优化。还有时候需要组合多个损失函数,比如图像生成模型可能同时用像素级重建损失和感知损失(用另一个网络提取特征后的距离),两者加权相加,引导模型同时关注像素细节和语义相似性。
6. 反向传播:梯度是如何流动的¶
反向传播是深度学习训练的算法基础,理解它的工作原理,能让你更好地诊断训练问题、理解各种设计选择的动机。
6.1 正向传播建立计算图¶
训练的每一步都从正向传播(Forward Pass) 开始:输入数据从输入层流向输出层,经过一系列矩阵乘法和激活函数,产生预测结果,然后损失函数计算出一个标量损失值。在这个过程中,深度学习框架会记录所有的中间计算结果和操作,形成一张计算图(Computation Graph)。
计算图是一个有向无环图,节点是计算操作(加法、乘法、激活函数等),边是数据流。这张图完整记录了损失值是如何由最初的输入和参数一步步计算出来的。反向传播就在这张图上进行。
6.2 链式法则让梯度逆流¶
反向传播(Backward Pass) 本质上是链式法则(Chain Rule) 在计算图上的应用。链式法则说的是:一个复合函数的导数,等于各层函数导数的乘积。对于神经网络,损失值是输入数据经过多层计算的复合函数,要计算损失对某个早期参数的梯度,就把从损失到那个参数之间所经过的所有操作的局部梯度乘起来。
反向传播从损失值出发(对自身的梯度为 1),沿计算图的反方向,逐个节点计算局部梯度,并把梯度向前传播。因为计算图已经在正向传播时记录好了,所以每个节点知道自己的输入是什么,能够计算出输入对输出的局部导数。把所有局部导数用链式法则串联起来,就得到了损失对每个参数的梯度。
这个过程在框架中被称为自动微分(Automatic Differentiation),由框架自动完成,不需要手写梯度公式。但理解它的工作原理,能帮你明白为什么某些操作会导致梯度消失(比如在深层网络中串联多个小于 1 的梯度,乘积趋向于零),为什么有些设计(如残差连接)能帮助梯度流动,为什么检查梯度范数是诊断训练问题的有效手段。
6.3 梯度消失与梯度爆炸¶
梯度在层层传播时,面临两种相反的危险。如果每层的梯度都偏小(比如小于 1),多层乘积就会指数级趋向于零,靠近输入层的参数几乎得不到有效的梯度信号,这就是梯度消失。相反,如果梯度偏大,多层乘积就会指数级增大,参数更新步骤过大,训练发散,这就是梯度爆炸。
深度学习发展历史上有大量针对这两个问题的应对措施。ReLU 激活函数是应对梯度消失的基础手段;残差连接提供了梯度的"高速公路",让梯度可以跳过若干层直接传播到更浅层;批归一化通过稳定每层的数值范围来缓解梯度消失和爆炸;梯度裁剪(Gradient Clipping)则是应对梯度爆炸的工程手段,当梯度的范数超过设定的阈值时,把梯度缩放回阈值范围内。
7. 优化器:如何更聪明地走下坡路¶
梯度下降是优化的基本思想,但"沿梯度反方向更新参数"只是最朴素的版本,实践中有一系列更聪明的优化策略。
7.1 随机梯度下降与动量¶
最基本的随机梯度下降(SGD)每次用一小批数据(Mini-batch)的梯度来更新参数。但纯粹的 SGD 在寻优路径上经常表现得摇摆不定:在平坦方向它走得太慢,在陡峭方向它又震荡太剧烈。
动量(Momentum) 的引入解决了这个问题。它的灵感来自物理中的惯性:一个小球在地形上滚动,不会因为局部的颠簸就立刻改变方向,而是保持一定的运动趋势。带动量的 SGD 积累了历史梯度的指数加权移动平均,如果连续几步梯度方向一致,步伐就会越来越大;如果梯度方向经常变化(震荡),历史梯度相互抵消,更新就会趋于平稳。
7.2 自适应学习率:Adam 及其家族¶
动量 SGD 的学习率对所有参数是统一的,但不同参数的更新频率和重要性差异很大——有些特征(比如罕见词汇对应的词向量)被更新的机会很少,用统一学习率更新时得到的调整远远不够。
AdaGrad 是第一个提出自适应学习率的优化器:对于历史上被频繁更新的参数,学习率自动降低;对于更新较少的参数,学习率保持较高。但 AdaGrad 的问题是学习率单调递减,训练到后期几乎降到零,模型停止学习。RMSProp 通过只考虑近期的梯度历史(指数加权平均),解决了学习率过早消亡的问题。
Adam(Adaptive Moment Estimation) 综合了动量和 RMSProp 的思想:它同时维护一阶矩(梯度的指数加权平均,类似动量)和二阶矩(梯度平方的指数加权平均,类似 RMSProp),两者共同决定每个参数的实际更新量。Adam 的初始偏差校正让训练初期就能有合理的估计。实践中 Adam 在大多数任务上都能开箱即用地表现良好,是当今深度学习的默认优化器。
AdamW 是 Adam 的改进版,把权重衰减(L2 正则化)从梯度更新中分离出来单独处理,在理论上更严格,在实践中尤其在大语言模型训练上表现更好,已经成为 Transformer 类模型的事实标准优化器。
8. 卷积神经网络:空间感知的视觉模型¶
卷积神经网络(CNN)的设计哲学建立在两个对图像的洞察之上:局部性(图像中相邻像素之间的关联远比远处像素之间的关联更强)和平移不变性(一只猫无论出现在图片的哪个位置,都应该被识别为猫)。全连接网络完全忽略这两点,卷积操作则是为它们量身打造的解决方案。
卷积层用一个小尺寸的权重矩阵(卷积核)在输入图像上逐位滑动,每到一个位置,就计算该位置覆盖区域与卷积核权重的逐元素乘积之和,输出一个值。同一个卷积核在整张图像上共享相同的权重,这保证了相同特征无论出现在哪个位置都能被检测到。每个卷积层通常有多个卷积核,每个核负责检测一种特定的局部模式,输出多张特征图。
一个典型的 CNN 是卷积层和池化层交替堆叠的结构。随着网络加深,特征图的空间尺寸不断缩小,而通道数(特征图数量)不断增加——这是一个信息不断被压缩、抽象和重组的过程。浅层学到的是局部的低级模式(边缘检测器、颜色过滤器),深层学到的是复杂的高级语义("这是一个车轮"、"这是一张人脸")。
2012 年的 AlexNet 是 CNN 走向主流的里程碑,它在 ImageNet 图像识别大赛上以大幅领先的成绩证明了深度卷积网络的价值。此后,VGG 用非常规则的小卷积核深化了网络;Inception 用多尺度并行卷积捕捉不同大小的特征;ResNet 引入残差连接,让网络可以训练到超过 100 甚至 1000 层;EfficientNet 用神经结构搜索找到了深度、宽度和输入分辨率的最优平衡点。
残差连接(Residual Connection) 值得单独解释,因为它是整个现代深度学习中最重要的结构创新之一。ResNet 的关键发现是:与其让每一层直接学习目标映射,不如让每一层学习残差——目标映射与输入之间的差。具体实现上,在每个模块中加一条跳跃连接,把输入直接加到模块的输出上。这样做的效果是双重的:一方面,如果某一层什么都不需要做,它只需要把权重学成零,输出就等于输入(恒等映射),这比学习完整映射容易得多;另一方面,梯度在反向传播时可以通过这条直通路径直接流向浅层,绕过若干层,彻底解决了深层网络的梯度消失问题。
9. 循环神经网络:带记忆的序列模型¶
文本、语音、时间序列数据有一个根本性的特征:顺序依赖。"我想吃苹果"和"苹果想吃我"的词汇完全相同,但意思截然相反——语义依赖于词的排列顺序,而且当前词的含义往往要结合之前若干词的语境才能正确理解。CNN 和全连接网络处理固定长度的输入,而且不考虑元素的顺序,天然不适合这类问题。
循环神经网络(RNN) 的设计正是针对序列数据的顺序依赖性。它的关键创新是引入了隐状态(Hidden State)——一个在每个时间步更新并传递的向量,携带着到目前为止处理过的所有输入的信息摘要。处理每个新输入时,RNN 不只看当前输入,还看来自上一步的隐状态,把两者的信息融合后产生新的隐状态和输出。理论上,这个机制能让网络记住任意长度的历史。
但实际上,标准 RNN 存在严重的梯度消失问题——信息在时间维度上传递时,就像梯度在层间传递时一样会不断衰减。距离很远的历史信息对当前隐状态的影响会变得极其微弱,网络实际上只能"记住"最近的若干步,长距离依赖几乎学不到。
LSTM(Long Short-Term Memory,长短期记忆网络) 通过精心设计的门控机制解决了这个问题。LSTM 在隐状态之外,还引入了一条单独的细胞状态(Cell State),作为长期记忆的载体。三个门控结构决定信息的流动:遗忘门决定细胞状态中哪些信息应该被遗忘(对应删除过时的语境);输入门决定当前输入中哪些新信息应该被写入细胞状态(对应更新记忆);输出门决定基于当前细胞状态应该输出什么。这三个门都由可学习的权重控制,网络自己学会如何取舍——什么时候应该记住新信息,什么时候应该忘掉旧信息。
GRU(Gated Recurrent Unit) 是 LSTM 的简化版本,把三个门合并成两个,参数量更少,计算更快,在很多任务上表现和 LSTM 相当。
RNN 家族在 Transformer 出现之前,是自然语言处理的绝对主力。但 RNN 有一个根本性的工程缺陷:无法并行训练。因为第 t 步的计算依赖第 t-1 步的隐状态,所以序列只能按顺序一步一步处理,无法像 CNN 那样在空间维度上并行计算。这在长序列上严重拖慢了训练速度,也成为 Transformer 取而代之的一个重要推动力。
10. 注意力机制:让模型知道该看哪里¶
注意力机制(Attention Mechanism)的核心思想来自对人类认知过程的观察。当你阅读"那只懒狗躺在暖和的阳光下,它打了个哈欠"这个句子时,要理解"它"指的是什么,你的注意力会自然地被引导到前面的"那只懒狗"——你不是平均地关注句子中的每个词,而是在关键时刻把注意力集中到最相关的部分。
10.1 从编码器-解码器到注意力¶
注意力机制最初出现在机器翻译的编码器-解码器架构中。这个架构用一个 RNN 把源语言句子编码成一个固定长度的向量,再用另一个 RNN 从这个向量解码出目标语言句子。问题在于,无论输入句子多长,都必须被压缩进一个固定大小的瓶颈向量,大量信息在压缩过程中丢失。对于长句子,翻译质量显著下降。
注意力机制的解法是:解码时的每一步,不是从单一的压缩向量中读取信息,而是根据当前解码状态,动态地计算对编码器所有位置的关注权重,然后用这些权重对编码器的所有隐状态做加权平均,得到当前步的上下文向量。生成第 t 个目标词时,模型可以"回望"源句子中与 t 最相关的位置,提取针对性的上下文信息。
这个机制让模型的表达能力大幅提升,同时也提供了一定的可解释性——你可以把注意力权重可视化,直观地看到"翻译某个词时,模型关注了源句的哪些部分"。
10.2 自注意力:序列内部的相互关注¶
注意力机制还有一种更重要的变体——自注意力(Self-Attention),它让序列中的每个元素对序列中所有其他元素计算注意力,从而捕捉序列内部的长距离依赖。
自注意力的计算方式可以从"查询-键-值(Query-Key-Value)"的框架来理解。对于序列中的每个位置,生成三个向量:查询向量(Q,表示"我想找什么")、键向量(K,表示"我有什么")和值向量(V,表示"如果被选中,我贡献什么")。注意力分数是查询与所有键的相似度,经过 Softmax 归一化后得到注意力权重,用这些权重对所有值做加权求和,得到当前位置的新表示。
这个过程使得序列中的每个位置都能直接从其他任意位置汇聚信息,无论距离多远,延迟只有一步,彻底消除了 RNN 中长距离信息必须通过多步传递才能到达的路径问题。
11. Transformer:重新定义序列建模¶
2017 年,谷歌的研究人员发表了题为《Attention Is All You Need》的论文,提出了 Transformer 架构,彻底改变了深度学习的格局。Transformer 的激进之处在于它的名字本身:只用注意力机制,完全丢弃了 RNN 的循环结构。
11.1 Transformer 的核心组件¶
Transformer 的基本单元是多头自注意力(Multi-Head Self-Attention)加上前馈网络(Feed-Forward Network)的组合,再辅以层归一化和残差连接。
多头注意力是对单头自注意力的扩展:与其只做一次注意力计算,不如同时做多次(比如 8 次或 16 次),每次用不同的投影矩阵把 Q、K、V 投影到不同的子空间,在各自的子空间中做注意力,然后把结果拼接起来。多头机制让模型能够同时关注序列的不同方面——有些头关注句法关系,有些头关注语义相关性,有些头关注长距离依赖,这些不同维度的信息被整合成丰富的表示。
由于自注意力完全忽略了序列的位置顺序(对一个集合做注意力而不是序列),Transformer 需要额外引入位置编码(Positional Encoding) 把位置信息注入到词表示中。原始论文用正弦和余弦函数的组合来编码绝对位置,后来的改进版本引入了可学习的相对位置编码,让模型更好地理解词与词之间的相对距离关系。
11.2 编码器与解码器的角色¶
原始 Transformer 为机器翻译设计,分为编码器(Encoder)和解码器(Decoder)两部分。编码器负责理解输入序列,由多个相同结构的层堆叠而成,每层包含自注意力和前馈网络。解码器负责生成输出序列,比编码器多了一个交叉注意力(Cross-Attention)模块,它的查询来自解码器本身,键和值来自编码器的输出,让解码器能够"看"到完整的输入表示。
后续的模型对这个结构进行了不同方向的演化。BERT 只使用编码器,通过双向注意力充分理解输入上下文,适合理解类任务(分类、问答)。GPT 系列只使用解码器,采用单向(因果)注意力,只能看到当前位置之前的内容,适合生成类任务。T5、BART 等保留了完整的编码器-解码器结构,适合需要同时理解输入和生成输出的任务(翻译、摘要)。
11.3 为什么 Transformer 如此成功¶
Transformer 的成功不只是在精度上超越了 RNN,更重要的是它极其适合大规模并行计算。因为序列中各位置的注意力计算相互独立,整个编码过程可以在 GPU 上完全并行执行,不需要像 RNN 那样按时间步串行计算。这让 Transformer 能够高效地利用现代 GPU 集群,在海量数据上训练数十亿乃至数千亿参数的模型,释放了大规模预训练的潜力。
12. 生成模型:从理解数据到创造数据¶
前面讨论的模型(分类器、回归模型)都是判别模型——给定输入,输出标签或数值。生成模型则是另一个范式:它们试图理解数据本身的分布,并能从这个分布中采样生成新数据。
12.1 生成对抗网络¶
生成对抗网络(GAN) 是 Ian Goodfellow 在 2014 年提出的革命性思想。GAN 由两个神经网络组成,它们相互博弈:生成器(Generator) 从随机噪声中生成假数据,目标是骗过判别器;判别器(Discriminator) 区分真实数据和生成数据,目标是不被骗过。两者不断对抗,生成器越来越善于生成逼真的数据,判别器越来越善于辨别真假,最终生成器能够生成肉眼难以分辨真假的高质量样本。
GAN 在图像生成领域取得了令人惊叹的成果,但训练极度不稳定——生成器和判别器之间的平衡很脆弱,稍有不慎就会出现模式崩溃(生成器只会生成少数几种样本)或训练震荡。数年来研究者发明了大量改进技巧才逐渐让 GAN 的训练变得可控。
12.2 变分自编码器¶
变分自编码器(VAE) 提供了另一种生成范式。它把数据编码到一个连续的隐空间中,而不是编码到固定的向量——编码结果是隐空间中一个区域的参数(均值和方差),生成时从这个区域采样,再通过解码器还原为数据。
VAE 的训练目标是两部分的平衡:重建误差(解码后应该能还原原始输入)和 KL 散度(隐空间分布应该接近标准正态分布,保证隐空间结构良好,方便采样)。VAE 的生成质量通常不如 GAN 清晰,但隐空间更平滑,可以做插值(在两个样本的隐向量之间线性插值,生成过渡样本),可解释性更好。
12.3 扩散模型¶
扩散模型(Diffusion Model) 是近年来图像生成领域的新王者,Stable Diffusion、DALL-E 2、Midjourney 等都基于这个框架。
扩散模型的核心思想是逆转一个加噪过程。正向过程逐步向数据添加高斯噪声,经过若干步(通常是几百到上千步)把原始清晰图像变成完全的随机噪声。反向过程训练一个神经网络,学习逐步从噪声中去掉噪声,一步步还原出清晰图像。生成时,从随机噪声出发,用训练好的去噪网络反复迭代,最终"雕刻"出一张高质量的图像。
扩散模型的训练目标比 GAN 稳定得多——只需要训练去噪网络,没有两个网络博弈的不稳定问题。结合条件生成技术(比如用文本提示来引导生成),扩散模型展现出令人震惊的创造力和细节质量。
13. 批归一化与层归一化:稳定训练的关键¶
在深层网络的训练中,有一个被称为内部协变量偏移(Internal Covariate Shift) 的问题:随着网络参数的更新,每一层的输入分布在不断变化,这迫使每一层不断适应新的输入分布,让训练变得难以稳定。归一化技术正是针对这个问题的解决方案。
批归一化(Batch Normalization,BN) 的做法是在每个训练批次中,对每个特征维度单独做归一化:计算这个批次在这个维度上的均值和方差,然后把数值标准化到均值为 0、方差为 1,再用可学习的缩放系数和偏移量恢复表达能力。批归一化把每层的输入分布稳定在一个相对固定的范围内,让后续层不需要不断适应分布的剧烈变化,训练因此更稳定、可以使用更大的学习率、收敛更快。
但批归一化有一个根本性的局限:它依赖批次内的统计量,批次越小,统计估计越不准确。对于文本模型,一个批次内的序列长度往往参差不齐,批归一化的应用十分尴尬。层归一化(Layer Normalization,LN) 解决了这个问题:它在单个样本内对所有特征维度归一化,完全不依赖批次大小,每个样本独立处理。层归一化在 Transformer 中已经成为标准配置,而批归一化则在 CNN 视觉模型中仍然占据主导地位。
14. 正则化技术:防止过拟合的武器库¶
深度学习模型的参数量动辄数百万,极其容易过拟合——把训练数据的每一个细节,包括噪声,都"记住",但泛化到新数据时表现很差。正则化是一系列强迫模型学到更通用规律、而不是死记硬背训练数据的技术集合。
Dropout 是深度学习中最独特的正则化方法。训练时,随机把神经网络中一定比例(通常 20%-50%)的神经元输出设为零,每个批次随机选择不同的子集"关掉"。这个操作迫使网络不能依赖任何特定神经元或特定的神经元组合,必须学习更分散、更鲁棒的特征表示。推理时,所有神经元都参与计算,但输出乘以(1 - dropout率)来补偿训练时的随机关闭效应。另一种理解方式是,Dropout 等价于训练了指数级数量的共享权重的子网络,推理时是对所有子网络的集成。
权重衰减(Weight Decay) 是 L2 正则化在深度学习中的叫法。在损失函数中加入所有权重平方和的惩罚项,鼓励权重值保持较小。权重越大,参数对输入变化的响应就越剧烈,更容易过拟合;较小的权重让模型更"平滑",对训练数据中细微噪声不那么敏感。
数据增强(Data Augmentation) 从数据层面对抗过拟合。在图像任务中,对训练图像做随机翻转、旋转、裁剪、颜色抖动、遮挡等变换,人工增加样本多样性。关键在于增强操作应该保持标签不变——翻转一只猫的图片,它还是猫;但对于文本分类,随意打乱词序就会改变语义,增强的设计需要考虑任务的对称性。MixUp、CutMix 等更先进的增强方法则直接混合两张图片的像素或区域,并用对应的混合标签来训练,进一步提高了模型的鲁棒性。
早停(Early Stopping) 是最直观的过拟合防范手段:在训练过程中定期在验证集上评估模型,当验证损失不再下降甚至开始上升时,及时停止训练,保存验证集上表现最好的权重。这样模型不会在训练集上继续"钻研"到过拟合的程度。
15. 学习率调度:训练节奏的艺术¶
学习率是深度学习训练中最敏感、影响最大的超参数之一。训练全程使用固定学习率通常不是最优选择——理想的训练节奏是:开始时步子大些,快速接近较优区域;然后步子逐渐变小,在好的区域精细调整而不是来回震荡。学习率调度(Learning Rate Schedule)正是对这个节奏的管理。
余弦退火(Cosine Annealing) 是最常用的调度策略之一。它让学习率按照余弦函数的形状从初始值平滑地下降到接近零,再重新上升(带重启)或直接结束。余弦下降的曲线比线性衰减更"温和",在后期学习率较小时收敛更精细。
预热(Warmup) 在 Transformer 训练中几乎是标配。训练最开始的若干步,学习率从一个很小的值线性增加到目标值,然后再开始按计划衰减。为什么需要预热?训练初期,网络权重随机初始化,梯度估计不准确,如果一开始就用大学习率,大步更新可能引起不稳定甚至发散。预热让模型先用小步伐"热身",等梯度估计趋于稳定后再提速,训练因此更稳健。
循环学习率(Cyclic Learning Rate) 让学习率在一个低值和高值之间周期性地波动,而不是单调衰减。研究发现,偶尔提高学习率可以帮助模型跳出局部最优,探索更广泛的参数空间,然后在较低学习率时收敛到更好的解。超收敛(Super-Convergence) 现象正是在循环学习率的某些配置下被发现的——使用比传统方法大得多的学习率,训练时间缩短了一个数量级,而最终精度不降反升。
16. 迁移学习与预训练模型:站在巨人的肩膀上¶
从零训练一个深度学习模型,不仅需要大量标注数据,还需要大量时间和算力——训练一个中型 Transformer 语言模型可能需要数百个 GPU 运转数周。对于绝大多数实际项目来说,这是不现实的。迁移学习(Transfer Learning) 提供了一个务实且有效的替代方案:使用在大规模数据上预训练好的模型作为起点,在自己的任务上微调。
迁移学习的有效性建立在一个深刻的洞察上:不同任务之间共享大量通用的底层知识。在 ImageNet 上训练的图像分类模型,学到的浅层特征(边缘检测器、纹理探测器)对几乎所有视觉任务都有用。在大量文本上训练的语言模型,学到的语法规则、语义关联和世界知识对绝大多数 NLP 任务都有价值。
微调的方式有几个层次。特征提取是最轻量的方式:把预训练模型当作固定的特征提取器,冻结所有预训练权重,只训练最后添加的几层针对新任务的网络。适合数据量极少的情况,防止在小数据集上破坏预训练学到的通用表示。全模型微调则解冻所有权重,用较小的学习率在新任务的数据上继续训练整个模型,让预训练权重慢慢适应新任务的分布。数据量较充足时,全模型微调通常效果更好。
LoRA(Low-Rank Adaptation) 是近年来针对大语言模型的高效微调方法。它的直觉是:大模型微调时,权重矩阵的变化本质上是低秩的——只需要在原始权重旁边添加一对秩很小的矩阵来表示这个变化,训练时只更新这对小矩阵,原始权重冻结不动。这样参数量可以减少到原来的百分之一甚至更少,内存和计算需求大幅降低,但微调效果与全量微调相近。LoRA 让在消费级 GPU 上微调数十亿参数的大模型成为可能。
17. 大语言模型的工作原理¶
大语言模型(Large Language Model,LLM)是当前最受关注的深度学习应用,理解它的工作原理有助于正确看待它的能力和局限。
17.1 语言建模:预测下一个词¶
大语言模型的核心训练任务看起来极其简单:给定一段文本,预测下一个词(或更精确地说,下一个 token)。在海量文本数据上反复训练这个任务,模型被迫学习语法规则、语义关联、事实知识、推理模式……因为所有这些都会影响"下一个词是什么"的概率分布。
这个看似简单的任务之所以能催生如此丰富的能力,是因为它本质上要求模型对人类语言和知识建立深刻的内在表示。要可靠地预测"水的沸点是___"后面的词,模型需要储存物理常识;要正确续写一个逻辑推理题,模型需要理解推理规则;要用合适的语气续写一篇文章,模型需要理解文体风格。
17.2 Tokenization:文本的数字化¶
在文本输入模型之前,需要把文字转化为数字序列,这个过程叫做 Tokenization。现代 LLM 通常不是以单词为单位,而是以子词(Subword) 为单位。一个常见词可能就是一个 token,而一个罕见词可能被拆分成几个子词 token。BPE(字节对编码)、WordPiece、SentencePiece 是常见的子词分词算法。
中文的分词面临特殊挑战。中文没有自然的词语边界(英文用空格分隔),而且字和词的粒度都是有意义的。大部分支持中文的 LLM 采用字符级或子词级的分词方式,有些针对中文做了专门的分词器设计。分词方案直接影响模型的效率和对语言的理解粒度,是 LLM 工程中不可忽视的细节。
17.3 从预训练到对话:RLHF 的作用¶
经过预训练的语言模型本质上是一个"续写机器"——给定任何文本,它会生成统计上合理的延续。但这个原始的预训练模型并不擅长按照人类的期望完成任务,它可能生成有害内容,可能回避问题而不是直接回答,也可能用令人费解的方式输出信息。
把预训练模型变成有用的对话助手,需要经过进一步的对齐训练(Alignment),其中最重要的技术是 RLHF(基于人类反馈的强化学习)。RLHF 的流程大致分三步:首先,让模型生成多个回应,由人类标注员对这些回应进行排序,训练一个奖励模型来预测人类偏好;然后,用强化学习算法(如 PPO)优化语言模型,让它在奖励模型的指导下,学会生成人类更喜欢的输出;同时加入 KL 散度约束,防止语言模型偏离预训练太远而退化。
直接偏好优化(DPO) 是 RLHF 的简化替代方案,绕过了显式训练奖励模型的步骤,直接用人类偏好数据优化语言模型,训练更稳定,工程实现更简单,近年来在开源社区广泛采用。
18. 深度学习的局限与未来方向¶
18.1 当前的根本性局限¶
深度学习取得了令人瞩目的成就,但也有几个根本性的局限,正直视这些局限才能避免对技术的过度迷信。
数据饥渴是最显著的局限。深度学习需要大量高质量的标注数据,在数据稀缺的领域(罕见疾病的医学影像、低资源语言的文本、特殊工业场景)表现大幅下降。人类只需要看几个例子就能学会一个新概念,而深度学习通常需要数千甚至数百万个样本——这种样本效率的差距至今没有根本性的解决方案。
可解释性(Interpretability) 是另一个长期挑战。一个深层神经网络的决策过程对人类来说几乎是不透明的——你知道输出是什么,但很难说清楚为什么是这个输出。在医疗诊断、信贷审批、法律判决等需要解释理由的场景,这是重大障碍。现有的可解释性工具(SHAP、LIME、注意力可视化)提供了部分视角,但远未达到真正理解模型决策逻辑的程度。
分布外泛化(Out-of-Distribution Generalization) 也是深度模型的软肋。模型在训练分布以外的数据上往往表现急剧下降——一个在晴天街道图像上训练得很好的自动驾驶模型,遇到大雾或大雨就可能失效;一个在学术英语上表现优异的问答模型,遇到非正式口语或方言就可能答非所问。真实世界的分布是动态变化的,如何让模型在分布偏移下保持鲁棒,至今是一个开放问题。
18.2 几个活跃的研究方向¶
研究社区正在从多个角度探索超越当前深度学习的路径。
少样本学习与元学习试图让模型从极少量样本中快速学习新任务,模拟人类的高效学习能力。大语言模型展现出的"上下文学习(In-Context Learning)"能力——在 prompt 中给几个示例,模型就能推断出规律并应用到新的问题上——被认为是一种隐式的元学习,但其工作机制尚未被完全理解。
神经网络与符号推理的结合(神经符号系统) 试图把深度学习的感知能力与符号逻辑推理的精确性结合起来。纯神经网络在需要精确推理的任务上容易出错(著名的"LLM 数学计算错误"问题),而符号系统又不擅长从原始数据中提取语义。两者的结合是通往更强推理能力的一条路。
多模态学习正在把视觉、语言、语音、视频等不同模态统一到同一个框架下,让模型能够跨模态理解和生成——看图生文、听音辨物、文本生成视频。GPT-4V、Gemini、LLaVA 等多模态大模型代表了这个方向目前的最前沿。
世界模型(World Model) 是更具野心的方向:训练一个能在脑海中模拟世界运作方式的模型,像人类一样通过想象来规划和推理,而不是只能从历史数据中提取统计规律。Yann LeCun 等人认为,世界模型是通往真正智能的必经之路,当前的 LLM 在这方面仍然相差甚远。
深度学习还在高速演进之中,任何断言"到顶了"或"无所不能"都是轻率的。理解它的原理、把握它的边界,才能在这个快速变化的领域里做出有价值的判断和贡献。
19. 核心公式速查¶
19.1 神经网络层与激活函数¶
全连接层的基本计算为:
常见激活函数包括:
多分类输出通常使用 Softmax:
19.2 交叉熵、链式法则与参数更新¶
多分类交叉熵为:
反向传播依赖链式法则。若 \(y=f(g(x))\),则:
最基础的梯度下降更新是:
其中 \(\eta\) 为学习率。工程上应同时监控损失、梯度范数、学习率和验证指标,不能仅凭训练损失判断收敛。
19.3 卷积与注意力¶
二维卷积可写为:
卷积核共享参数,因此能高效提取局部空间模式。缩放点积注意力为:
除以 \(\sqrt{d_k}\) 是为了避免维度增大时点积幅度过大,导致 Softmax 饱和、梯度变小。
19.4 归一化¶
对特征 \(x\) 做标准化的一般形式为:
BatchNorm 的统计量来自批次维度,LayerNorm 通常在单个样本的特征维度计算,因此 Transformer 更常使用 LayerNorm。
20. 延伸阅读¶
系统课程¶
- fast.ai 实用深度学习:以自顶向下方式学习,先跑通代码感受效果,再逐步深入原理,完全免费,强调工程实战
- 吴恩达 Deep Learning Specialization:系统讲解神经网络、CNN、RNN 到 Transformer 的理论体系,适合想要打牢理论基础的学习者
- MIT 6.S191: Introduction to Deep Learning:MIT 的深度学习入门课,课程材料和视频每年更新,紧跟最新进展
- 斯坦福 CS231n: Convolutional Neural Networks for Visual Recognition:计算机视觉与深度学习经典课程,笔记质量极高,对 CNN 的讲解深入透彻
深度好文与可视化资源¶
- Distill.pub:专注于深度学习概念的交互式可视化文章,把复杂原理讲解得极其直观,强烈推荐阅读注意力机制、特征可视化等专题文章
- Andrej Karpathy 的博客:深度学习领域最好的科普性技术博客之一,Karpathy 有把复杂概念讲得深入浅出的天赋
- The Illustrated Transformer:Jay Alammar 用大量可视化图解说明 Transformer 内部工作机制,是理解 Transformer 架构最好的图文资料之一
书籍推荐¶
- 《动手学深度学习》(李沐等):完全免费的在线书,中文版质量很高,理论与代码并行,几乎涵盖了现代深度学习的所有主要主题
- 《深度学习》(Goodfellow、Bengio、Courville):深度学习领域的圣经级教材,理论推导严谨完整,英文免费在线阅读,适合想深入数学细节的读者
- 《神经网络与深度学习》(邱锡鹏):国内学者写的中文教材,数学推导清晰,适合系统学习理论基础
论文与前沿追踪¶
- Papers With Code:把最新 ML/DL 论文与开源代码对应,可以按任务和数据集查看当前最优模型,追踪前沿研究
- Arxiv(cs.LG / cs.CV / cs.CL):深度学习领域论文的主要发布平台,按子领域浏览最新预印本
本文档持续维护更新。如有错误或建议,欢迎提交 Issue 或 PR。