一、引言
深度学习(Deep Learning)是以多层神经网络为核心的机器学习方法,自 2012 年 AlexNet 在 ImageNet 挑战赛上以巨大优势击击败传统方法以来,深度学习席卷了计算机视觉、自然语言处理、语音识别等几乎所有人工智能领域。今天,GPT、BERT、Stable Diffusion、AlphaFold 等划时代系统,无一不建立在深度学习的基础之上。
深度学习之所以强大,在于它能够从原始数据(像素、词语、信号)中自动学习多层次的抽象特征表示,无需人工设计特征工程。然而,训练一个高性能的深层网络并非易事——梯度消失、过拟合、学习率调节等问题长期困扰着研究者,由此催生了一整套系统性的训练技巧。
理解深度学习,需要同时把握两个层面:架构设计(网络如何搭建)和训练方法(网络如何有效优化)。两者缺一不可。只知道搭积木式地堆叠网络层,而不理解每个训练技巧解决的是什么问题,往往会陷入”加了 Dropout 反而更差”或”换了 Adam 没有任何改善”的困境。
本文旨在系统梳理深度学习的核心原理与关键技术进展,为学习和研究深度学习提供参考。
二、深度学习基础概述
1. 什么是深度学习?
深度学习是机器学习的一个分支,以人工神经网络(Artificial Neural Network,ANN)为基本模型。”深度”指网络的层数多(通常超过 3 层),多层堆叠使网络能够逐层提取越来越抽象的特征。
一个神经网络的基本运算单元是神经元(Neuron):
\[a = f\left(\sum_i w_i x_i + b\right)\]其中 $x_i$ 是输入,$w_i$ 是权重,$b$ 是偏置,$f$ 是激活函数(Activation Function)。多个神经元堆叠成层(Layer),多层串联成深层网络,最终构成一个从输入到输出的复杂映射函数。
深度学习爆发的三大驱动因素
| 因素 | 内容 | 代表事件 |
|---|---|---|
| 算法突破 | ReLU 激活函数解决梯度消失;残差连接使百层网络可训练 | AlexNet 2012、ResNet 2015 |
| 数据爆炸 | 互联网产生海量标注数据;深度学习数据越多性能越好 | ImageNet 120 万张图像 |
| 算力革命 | GPU 并行计算将训练时间从数周压缩至数小时 | NVIDIA GPU + CUDA |
2. 机器学习三步骤框架
任何机器学习方法都可拆解为三个步骤,理解这一框架是后续所有训练技巧的基础:
- 步骤一——定义 Loss Function(损失函数):衡量模型输出与正确答案的差距,即”如何判断好坏”
- 步骤二——确定函数搜索空间(Model Architecture):选择网络结构,划定候选函数的范围,即”在哪里搜索”
- 步骤三——Optimization(优化):在搜索空间内找到使 Loss 最低的最优函数,即”如何高效搜索”
训练的最终目标是找到一个函数,它在训练集(Training Set)上 Loss 低,在验证集(Validation Set)上 Loss 同样低。前者称为 Optimization 问题,两者的差距称为 Generalization 问题。
3. 两大核心目标
深度学习训练技巧按其解决的问题,分为两类:
| 目标 | 表现症状 | 含义 | 典型方法 |
|---|---|---|---|
| Optimization | 训练 Loss 降不下去 | 优化过程出问题 | Adam、Skip Connection、Batch Norm |
| Generalization | 训练 Loss 低,验证 Loss 高 | 过拟合(Overfitting) | Dropout、Data Augmentation、正则化 |
判断原则:先看训练 Loss。若训练 Loss 本身降不下去,是 Optimization 问题,此时加 Dropout 或数据增强无效;若训练 Loss 够低但验证 Loss 高,才是 Generalization 问题。
4. 发展时间线
flowchart LR
subgraph G1990 ["1990s 奠基"]
A["LeNet 1998\nCNN 奠基"] --> B["反向传播\n普及"]
end
subgraph G2012 ["2012-2014 爆发"]
C["AlexNet 2012\nImageNet 突破"] --> D["Dropout 2014"]
D --> E["Adam 2014"]
end
subgraph G2015 ["2015-2017 深化"]
F["ResNet 2015\nSkip Connection"] --> G["BN 2015"]
G --> H["AdamW 2017"]
end
subgraph G2018 ["2018-2022 预训练"]
I["BERT/GPT 2018\n预训练范式"] --> J["Transformer\n主导"]
J --> K["LoRA 2021\n参数高效微调"]
end
subgraph G2022 ["2022 至今 大模型"]
L["Chinchilla\n2022 Scaling Laws"] --> M["ChatGPT 2022\nRLHF 对齐"]
M --> N["Flash Attn 2/3\n2023-2024"]
end
B --> C
E --> F
H --> I
K --> L
5. 主要缩写
- ANN: Artificial Neural Network(人工神经网络)
- MLP: Multi-Layer Perceptron(多层感知机)
- CNN: Convolutional Neural Network(卷积神经网络)
- RNN: Recurrent Neural Network(循环神经网络)
- LSTM: Long Short-Term Memory(长短期记忆网络)
- SGD: Stochastic Gradient Descent(随机梯度下降)
- BN: Batch Normalization(批归一化)
- LN: Layer Normalization(层归一化)
- LR: Learning Rate(学习率)
- PEFT: Parameter-Efficient Fine-Tuning(参数高效微调)
- SFT: Supervised Fine-Tuning(监督微调)
- RLHF: Reinforcement Learning from Human Feedback(人类反馈强化学习)
三、神经网络基础
1. 多层感知机
多层感知机(Multi-Layer Perceptron,MLP) 是最基础的神经网络形式,由输入层、若干隐藏层(Hidden Layer)和输出层构成,每层均为全连接(Fully Connected):
\[h^{(l)} = f\left(W^{(l)} h^{(l-1)} + b^{(l)}\right)\]全连接意味着第 $l$ 层的每个神经元与第 $l-1$ 层所有神经元相连,参数量为两层神经元数之积。当输入维度极大时(如 1000×1000 的彩色图像展开后有 300 万维),全连接的参数量将超过数十亿,不仅难以训练,还极易过拟合。CNN 等专用架构正是为了解决这一问题而提出的。
2. 激活函数
激活函数为神经网络引入非线性,使其能够拟合复杂函数。若没有非线性激活,多层网络与单层线性模型等价。
| 激活函数 | 公式 | 输出范围 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| Sigmoid | $\frac{1}{1+e^{-x}}$ | (0, 1) | 输出可解释为概率 | 梯度消失;非零中心 | 二分类输出层 |
| Tanh | $\tanh(x)$ | (-1, 1) | 零中心输出 | 梯度消失仍存在 | RNN 隐藏层(较早期) |
| ReLU | $\max(0, x)$ | [0, ∞) | 计算简单;有效缓解梯度消失 | Dead Neuron 问题 | CNN/MLP 隐藏层(当前最常用) |
| Leaky ReLU | $\max(0.01x, x)$ | (-∞, ∞) | 解决 Dead Neuron | 斜率需调参 | ReLU 的改进替代 |
| GELU | $x \cdot \Phi(x)$ | (-∞, ∞) | 光滑;性能优 | 计算稍复杂 | Transformer(BERT、GPT)标配 |
| SiLU/Swish | $x \cdot \sigma(x)$ | (-∞, ∞) | 自门控;效果与 GELU 类似 | — | LLaMA、Qwen 等大语言模型 |
ReLU(Rectified Linear Unit) 的成功在于:正值区梯度恒为 1,有效缓解了深层网络的梯度消失问题,使几十甚至上百层的网络可以稳定训练。
3. 反向传播算法
反向传播(Backpropagation) 是训练神经网络的核心算法,基于链式法则将 Loss 对每个参数的梯度从输出层逐层传递回输入层:
\[\frac{\partial \mathcal{L}}{\partial W^{(l)}} = \frac{\partial \mathcal{L}}{\partial h^{(l)}} \cdot \frac{\partial h^{(l)}}{\partial W^{(l)}}\]flowchart LR
Loss["Loss\n计算损失"] -->|"∂L/∂ŷ"| OutLayer["输出层\n计算梯度"]
OutLayer -->|"∂L/∂h²"| H2["隐藏层 2\n计算梯度"]
H2 -->|"∂L/∂h¹"| H1["隐藏层 1\n计算梯度"]
H1 -->|"∂L/∂W¹"| Update["参数更新\n梯度下降"]
style Loss fill:#ff9999
style Update fill:#99ff99
计算图(Computation Graph)自动记录前向计算路径,反向传播时沿路径反向传递梯度。PyTorch 的 autograd 机制即基于此原理,使用者只需定义前向计算,框架自动完成梯度计算。
四、经典网络架构
1. 卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN) 是处理网格状数据(图像、时序信号)的标准架构。CNN 对 MLP 做了两项关键约束:
Receptive Field(感受野):每个神经元只观察输入的局部区域(如 3×3 的 kernel),而非整张图像。图像中的局部模式(边缘、纹理)只需局部感知即可检测,无需全局视野。
Parameter Sharing(参数共享):不同位置的同类神经元共享同一组参数(filter/卷积核)。同一模式(如水平边缘)出现在图像任何位置,应由相同的检测器处理——这一约束引入了平移不变性(Translation Invariance)。
典型 CNN 由交替的卷积层(提取特征)和池化层(下采样)构成,最终接全连接层输出预测。以下是 CNN 奠基之作 LeNet-5(LeCun,1998)的结构:
CNN 架构演进对比
| 模型 | 年份 | 参数量 | ImageNet Top-1 | 关键创新 |
|---|---|---|---|---|
| LeNet-5 | 1998 | ~60K | — (MNIST) | CNN 奠基,卷积+池化结构 |
| AlexNet | 2012 | 60M | ~56.5% | GPU 训练、ReLU、Dropout |
| VGG-16 | 2014 | 138M | ~71.5% | 统一 3×3 卷积,网络更深 |
| GoogLeNet | 2014 | 6.8M | ~69.8% | Inception 模块,大幅减少参数 |
| ResNet-50 | 2015 | 25M | ~76.0% | 残差连接,使极深网络可训练 |
| ResNet-152 | 2015 | 60M | ~77.8% | 超越人类水平(Top-5 3.57%) |
| SENet | 2017 | 145M | ~82.7% | 通道注意力(Squeeze-Excitation) |
| EfficientNet-B0 | 2019 | 5.3M | 77.1% | 复合缩放(NAS 搜索最优比例) |
| EfficientNet-B7 | 2019 | 66M | 84.4% | 参数效率最佳 |
| ViT-B/16 | 2020 | 86M | ~81.8% | 纯 Transformer 用于图像 |
| ConvNeXt-XL | 2022 | 350M | ~87.8% | CNN 吸收 Transformer 设计理念 |
关键洞察:ResNet-50(25M 参数)性能超过 VGG-16(138M 参数),参数量仅 18%;EfficientNet-B0(5.3M)达到 VGG 同等精度,参数量仅 4%。更多参数 ≠ 更高性能,架构设计至关重要。
ResNet 残差块结构
2. 循环神经网络与 LSTM
循环神经网络(Recurrent Neural Network,RNN) 专为处理序列数据设计,通过隐藏状态 $h_t$ 在时间步间传递信息:
\[h_t = f(W_h h_{t-1} + W_x x_t + b)\]然而,标准 RNN 面临严重的长程依赖(Long-range Dependency) 问题:梯度在时间维度上反向传播时,随序列长度指数衰减(梯度消失)或爆炸,导致模型难以记忆距离较远的上下文。
LSTM(Long Short-Term Memory,Hochreiter & Schmidhuber,1997) 通过引入门控机制(Gating Mechanism) 解决这一问题:
LSTM 维护两个状态:隐藏状态 $h_t$(短期记忆)和细胞状态 $c_t$(长期记忆),细胞状态更新:
\[c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t\]| 组件 | 公式 | 作用 |
|---|---|---|
| 遗忘门 $f_t$ | $\sigma(W_f [h_{t-1}, x_t] + b_f)$ | 决定遗忘多少历史细胞状态 |
| 输入门 $i_t$ | $\sigma(W_i [h_{t-1}, x_t] + b_i)$ | 决定写入多少新信息 |
| 候选值 $\tilde{c}_t$ | $\tanh(W_c [h_{t-1}, x_t] + b_c)$ | 计算待写入的新信息 |
| 输出门 $o_t$ | $\sigma(W_o [h_{t-1}, x_t] + b_o)$ | 决定以多少细胞状态作为输出 |
代表性工作:GRU(2014,LSTM 的简化版)、Seq2Seq(2014)、Attention + LSTM(2015)
3. Transformer
Transformer(Vaswani et al.,2017)彻底改变了 NLP 乃至整个深度学习格局。它完全放弃了循环和卷积,仅通过自注意力机制(Self-Attention)直接建模序列中任意两个位置之间的全局依赖关系。
核心机制:缩放点积注意力
\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]- Query (Q):代表“我要找什么”(如当前词)。
- Key (K):代表“我有什么特征”(用于与 Q 匹配)。
- Value (V):代表“我要传递的信息”(匹配成功后的内容)。
- $\sqrt{d_k}$ 缩放:当维度很大时,点积结果可能极大,导致 softmax 进入梯度极小的区域。缩放可保持梯度稳定。
多头注意力(Multi-Head Attention)
将输入映射到 $h$ 个不同的子空间分别计算注意力,再将结果拼接: \(\text{MultiHead}(Q,K,V) = \text{Concat}(head_1, \ldots, head_h) W^O\) 直觉理解:不同的“头”可以同时关注不同的信息(如一个头关注语法关系,另一个头关注语义关联)。
关键组件
1. 位置编码(Positional Encoding)
为什么需要位置编码? Transformer 的核心——自注意力机制是置换不变的(Permutation Invariant)。在计算 $O = \sum \alpha_i V_i$ 时,由于加法满足交换律,模型无法分辨输入顺序。如果没有位置信息,句子“你打我”和“我打你”在模型看来是完全一样的。因此,必须将位置信息注入 Input Embedding 中。
绝对位置编码:Sinusoidal 设计 原始 Transformer 采用预定义的正余弦函数构造位置向量: \(PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)\) \(PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)\)
直观理解:多频指针(Clock Hands) 我们可以将每一对 $(\sin, \cos)$ 看作二维平面上的一个“指针”。
- 低维($i$ 小):频率高,指针旋转极快。类似时钟的“秒针”,几个 Token 就会转完一圈。
- 高维($i$ 大):频率低,指针旋转极慢。类似“时针”,可能需要上万个 Token 才转一圈。 Transformer 就像是在观察由几十个不同转速的指针构成的仪表盘,从而精确锁定当前 Token 在序列中的绝对位置。
数学特性:建模相对位置 作者选择正余弦函数的精妙之处在于,它允许模型通过线性变换表达相对位置。根据三角函数合角公式,存在一个仅与相对距离 $r$ 有关的变换矩阵 $M_r$,使得: \(PE_{pos+r} = M_r \cdot PE_{pos}\) 这意味着模型在计算 Attention 时,可以更容易地捕捉到两个词之间的距离信息,而不仅仅是绝对坐标。
RoPE位置编码:Rotary Position Embedding 设计
绝对位置编码把位置信息加在 Input Embedding 上,间接影响 Attention;ALiBi 则在 Attention Score 上强行减去距离偏差。RoPE 选择了另一条路:在 Q 与 K 做内积之前,直接把位置信息以旋转的方式编码进向量本身。
核心思想:用旋转代替加法
对向量的每两个维度($d_0, d_1$),RoPE 将其视为二维平面上的一个向量,然后根据 token 所在位置 $m$ 旋转对应角度:
\[\text{K}^{(m)} = R(m\theta) \cdot \text{K}, \quad \text{Q}^{(m)} = R(m\theta) \cdot \text{Q}\]其中旋转矩阵为标准二维旋转矩阵:
\[R(\alpha) = \begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix}\]对于 $d$ 维向量,将所有维度两两分组,共 $d/2$ 组,每组使用不同的基础角度 $\theta_i$:
\[\theta_i = 10000^{-2i/d}, \quad i = 0, 1, \ldots, \frac{d}{2}-1\]这个设计与 Sinusoidal PE 一脉相承——不同维度对应不同频率,低维度旋转快、高维度旋转慢,共同构成唯一的位置指纹。
RoPE 如何天然编码相对位置?
当 Q 在位置 $m$、K 在位置 $n$ 时,两者做内积:
\[\langle \text{Q}^{(m)}, \text{K}^{(n)} \rangle = \text{Q}^T \cdot R((m-n)\theta) \cdot \text{K}\]内积结果只依赖相对距离 $m-n$,而非绝对坐标。这正是 RoPE 最精妙之处——无需像 Relative PE 那样显式建模相对距离,旋转的几何性质自动保证了这一点。
平移不变性的几何证明
假设”猫”在位置 1,”鱼”在位置 3,算出 Attention 值 $A$。现在在前面插入 100 个无关 token,”猫”变到位置 101,”鱼”变到位置 103。二者相对距离不变(仍是 2),内积中的旋转角度 $(m-n)\theta$ 保持不变,所以 Attention 值仍等于 $A$。
几何上更直观:Q 旋转 $N\theta$,K 旋转 $N\theta$,二者同步旋转,内积(夹角的余弦)不变。
与工程加速的兼容性
RoPE 只修改了 Q 和 K 本身,Attention 的计算流程与原版完全相同,因此天然兼容所有 Attention 加速技术:
- Flash Attention:直接可用,无需修改算子;
- KV Cache:直接缓存已旋转的 $\text{K}^{(m)}$,读出即用,无需再次注入位置。
这也是 RoPE 最终胜出的关键工程原因之一——它不仅效果好,而且和整个工程生态完美兼容。
常见误解澄清:很多人以为 RoPE 像 ALiBi 一样保证”Q 与 K 距离越远,Attention 越小”。实际上 RoPE 并不保证这一点——旋转会产生周期性的振荡模式,Attention 随距离呈锯齿状波动。这反而是优势:RoPE 允许模型学习到”虽然距离远,但仍然高度相关”的 Attention 模式(例如长程依赖),而 ALiBi 则硬性压制了远距离的注意力。
位置编码的演进 | 方案 | 核心思想 | 特点 | 代表模型 | |:—|:—|:—|:—| | Absolute PE | 正余弦或可学习 Embedding | 简单,但外推性差(无法处理比训练更长的序列)| BERT、原始 Transformer | | Relative PE | 建模 $i$ 和 $j$ 的相对距离 | 关注距离而非绝对坐标 | T5 | | ALiBi | 在 Attention Score 上减去距离偏差 | 外推性极强,计算极其简单 | MPT、Bloom | | RoPE | 将 $Q, K$ 旋转特定角度(旋转位置嵌入)| 当前 SOTA,结合了绝对与相对的优点 | LLaMA、Qwen、Gemma |
2. 逐点前馈网络(Point-wise FFN) 在每个注意力层后,接一个全连接块(通常是 $d_{model} \to 4d_{model} \to d_{model}$),引入非线性变换: \(\text{FFN}(x) = \text{max}(0, xW_1 + b_1)W_2 + b_2\)
3. 残差连接与归一化(Add & Norm) 每个子层均采用残差连接,并配合层归一化(LayerNorm)。目前存在两种主流布局:
- Post-LN(原始版):先计算子层再加残差做 LN。性能好但深层难以训练。
- Pre-LN(现代大模型标配):先做 LN 再计算子层。训练更稳定,无需复杂的 Warmup 策略(如 GPT-2/3、LLaMA)。
Encoder 与 Decoder 的差异
Transformer 采用编码器-解码器架构,两者的核心区别在于掩码(Masking):
- Encoder:双向注意力,每个词都能看到序列中的所有词。
- Decoder:采用 Masked Self-Attention,确保生成第 $t$ 个词时只能看到前 $t-1$ 个词(防止信息泄露);同时包含 Cross-Attention,用于关注 Encoder 的输出。
RNN 与 Transformer 对比
| 维度 | RNN/LSTM | Transformer |
|---|---|---|
| 计算方式 | 顺序递推,无法并行 | 全并行计算,硬件利用率极高 |
| 长程依赖 | 随距离指数衰减,难以捕获超长文本 | 任意两位置距离恒为 1,无信息损耗 |
| 感官范围 | 局部上下文 | 全局上下文 |
| 归纳偏置 | 强(时序关联) | 弱(全连接性质),需要更多数据训练 |
| 显存复杂度 | $O(n \cdot d^2)$ | $O(n^2 \cdot d)$,长序列下显存压力大 |
代表性工作:BERT(2018,纯 Encoder)、GPT 系列(2018-至今,纯 Decoder)、T5(2019,Encoder-Decoder)、ViT(2020,将图像分块视为序列)。
五、训练优化技术
1. 梯度下降与 Optimizer
标准梯度下降的更新公式为:
\[\theta_{t+1} = \theta_t - \eta \cdot g_t\]其中 $\eta$ 为学习率,$g_t$ 为 Loss 对参数的梯度。这种方式所有参数共享同一学习率,而实际 loss surface 中不同方向梯度差异悬殊,固定学习率难以兼顾,由此催生了自适应优化器。
优化器演进
flowchart TD
SGD["SGD\n随机梯度下降\n1951"] -->|"加动量"| Momentum["Momentum SGD\n抑制震荡"]
SGD -->|"自适应 LR"| Adagrad["Adagrad 2011\n累积梯度平方"]
Adagrad -->|"指数移动平均"| RMSprop["RMSprop 2012\n适应非稳态"]
Momentum -->|"结合"| Adam["Adam 2014\nMomentum + RMSprop\n当前默认"]
Adam -->|"修正 L2"| AdamW["AdamW 2017\n大模型标配"]
AdamW -->|"二阶信息"| Sophia["Sophia 2023\n2× 更快"]
AdamW -->|"正交化"| Muon["Muon 2024\n35% 加速"]
AdamW -->|"Shampoo 等价"| SOAP["SOAP 2024\n40% 加速"]
主流优化器对比
| 优化器 | 年份 | 动量 | 自适应 LR | 核心特点 | 适用场景 |
|---|---|---|---|---|---|
| SGD | — | ✗ | ✗ | 简单、对 LR 敏感 | CV 精调(结合调度) |
| Momentum SGD | — | ✓ | ✗ | 抑制震荡,越过 saddle | CV 训练 |
| Adagrad | 2011 | ✗ | ✓ | 稀疏特征友好,LR 单调减 | NLP 稀疏场景 |
| RMSprop | 2012 | ✗ | ✓ | 指数移动平均,适应非稳态 | RNN 训练 |
| Adam | 2014 | ✓ | ✓ | Momentum + RMSprop | 绝大多数任务默认选择 |
| AdamW | 2017 | ✓ | ✓ | Adam + 正确 Weight Decay | 大语言模型预训练标配 |
| Sophia | 2023 | ✓ | ✓ | 二阶 Hessian 估计 | LLM 预训练(2× 加速) |
| Muon | 2024 | ✓ | ✗ | 梯度正交化 | 中小规模预训练 |
| SOAP | 2024 | ✓ | ✓ | Shampoo 等价 + AdamW | 大批量 LLM 训练(40% 加速) |
Adam 的核心公式(Kingma & Ba,2014):
\[m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t \quad \text{(一阶矩)}\] \[v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \quad \text{(二阶矩)}\] \[\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}\hat{m}_t\]标准超参数:$\beta_1=0.9$,$\beta_2=0.999$,$\epsilon=10^{-8}$。Adam 的 $m_t$ 负责方向(可越过 saddle point);$v_t$ 负责大小(自适应调整各参数学习率)。两者互补,共同解决了梯度下降的两大核心难题。
2. 学习率调度
固定学习率存在过大(震荡)和过小(过慢)的矛盾。大语言模型训练的标准方案:Warmup + Cosine Decay
xychart-beta
title "学习率调度曲线"
x-axis ["0", "Warmup结束", "训练中期", "训练末期"]
y-axis "学习率" 0 --> 1
line [0, 1, 0.5, 0.05]
| 阶段 | 描述 | 目的 |
|---|---|---|
| Warmup(预热) | 前若干步 LR 从 0 线性增大到目标值 | 让 Adam 的 $m_t$/$v_t$ 积累准确统计量,避免初期不稳定 |
| Cosine Decay(余弦衰减) | LR 按余弦曲线降至接近 0 | 让参数缓慢”着陆”,避免在最优点附近持续震荡 |
3. 参数初始化
不同的初始参数 $\theta_0$ 可能导致收敛到不同的局部最优解。
Kaiming 初始化(He et al.,2015,适用于 ReLU 激活):
\[W \sim \mathcal{N}\left(0, \sqrt{\frac{2}{n_{in}}}\right)\]该初始化保证每层激活值的方差在前向传播中保持稳定,防止深层网络训练初期激活值爆炸或消失。
预训练作为初始化(Pre-training):在大规模数据上先训练,再将参数迁移至目标任务。同时改善 Optimization(更好的起点)和 Generalization(学到通用特征)。
4. 归一化方法
归一化(Normalization) 强制限制网络每一层的输出在合理范围内,使 loss surface 更平坦,学习率更易调节。
归一化方法对比
| 方法 | 年份 | 归一化维度 | 依赖 Batch | 适用场景 | 代表模型 |
|---|---|---|---|---|---|
| Batch Norm (BN) | 2015 | 跨样本、同特征维度 | ✓ | CNN 图像分类 | ResNet、EfficientNet |
| Layer Norm (LN) | 2016 | 单样本、所有特征 | ✗ | Transformer、序列模型 | BERT、GPT 系列 |
| Group Norm | 2018 | 单样本、分组特征 | ✗ | 小 batch CV(目标检测) | Mask R-CNN |
| Instance Norm | 2017 | 单样本、单通道 | ✗ | 图像风格迁移 | StyleGAN |
| RMSNorm | 2019 | 单样本(仅方差) | ✗ | LLM 高效训练 | LLaMA、Qwen、GPT-4 |
Batch Normalization(BN,Ioffe & Szegedy,2015):
\[\hat{x} = \frac{x - \mu_{batch}}{\sqrt{\sigma_{batch}^2 + \epsilon}}, \quad y = \gamma\hat{x} + \beta\]Layer Normalization(LN,Ba et al.,2016):
\[\hat{x}_i = \frac{x_i - \mu_{layer}}{\sqrt{\sigma_{layer}^2 + \epsilon}}\]RMSNorm(2019):去掉均值归一化,只保留方差缩放,计算更高效,被 LLaMA、Qwen 等主流大模型采用。
5. 残差连接
深层网络(100+ 层)面临梯度消失与梯度爆炸的共存问题。Skip Connection / Residual Connection(He et al.,ResNet,2015):
\[\text{output} = F(x) + x\]即在原有变换 $F(x)$ 之上直接叠加输入 $x$(恒等映射)。即使 $F(x)$ 效果微弱,梯度依然可以通过恒等路径直接流回浅层,大幅缓解梯度消失,使 ResNet-152 等极深网络可以稳定训练。
Skip Connection 已成为现代深度学习中几乎所有架构(ResNet、Transformer、U-Net)的标配组件,改善的是 Optimization。
六、损失函数与正则化
1. 损失函数
损失函数(Loss Function)是机器学习三步骤框架的第一步,定义了”如何衡量模型好坏”。选择合适的损失函数对模型训练至关重要。
均方误差(MSE)
均方误差(Mean Squared Error,MSE) 适用于回归任务,衡量预测值与真实值的平方差均值:
\[\mathcal{L}_{MSE} = \frac{1}{N}\sum_{i=1}^N (y_i - \hat{y}_i)^2\]- 优点:处处可微,梯度计算简单;对较大误差惩罚更重(平方放大效应)
- 缺点:对异常值(outlier)极度敏感;当预测误差较大时梯度可能爆炸
平均绝对误差(MAE)
\[\mathcal{L}_{MAE} = \frac{1}{N}\sum_{i=1}^N |y_i - \hat{y}_i|\]- 优点:对异常值更鲁棒(线性惩罚而非平方)
- 缺点:在 $y_i = \hat{y}_i$ 处不可微(需用 Huber Loss 折中)
Huber Loss
\[\mathcal{L}_{Huber} = \begin{cases} \frac{1}{2}(y-\hat{y})^2 & |y-\hat{y}| \leq \delta \\ \delta|y-\hat{y}| - \frac{1}{2}\delta^2 & |y-\hat{y}| > \delta \end{cases}\]在误差小时用 MSE(平滑可微),在误差大时用 MAE(抗异常值),$\delta$ 控制切换阈值。常用于目标检测的回归分支。
交叉熵损失(Cross-Entropy)
交叉熵损失(Cross-Entropy Loss) 适用于分类任务,包括图像分类、语言模型(下一个 token 预测本质是多分类)。
第一步:将网络输出的 logits 经 Softmax 转换为概率分布:
\[p_i = \frac{e^{z_i}}{\sum_j e^{z_j}}\]第二步:计算与真实标签的交叉熵(取真实类别的对数概率,加负号):
\[\mathcal{L}_{CE} = -\sum_i \hat{p}_i \log p_i = -\log p_{y^*}\]其中 $y^*$ 为真实类别,$\hat{p}_i$ 为 one-hot 标签。
为什么不用准确率(Accuracy)作为 Loss? 准确率是阶跃函数,参数轻微变化时 Loss 几乎恒为零,梯度无法计算,Gradient Descent 无从进行。Cross-Entropy 处处可微,且值越小对应 Accuracy 越高。
数值稳定性:实际实现中将 Softmax 与 Cross-Entropy 合并(LogSoftmax + NLLLoss),避免 $e^{z_i}$ 数值溢出。
二元交叉熵(Binary Cross-Entropy,BCE)
二分类任务(输出层用 Sigmoid):
\[\mathcal{L}_{BCE} = -[y \log \hat{p} + (1-y)\log(1-\hat{p})]\]KL 散度
KL 散度(Kullback-Leibler Divergence) 衡量两个概率分布的差异,常用于知识蒸馏、变分自编码器(VAE):
\[\mathcal{L}_{KL}(P \| Q) = \sum_i P(i) \log \frac{P(i)}{Q(i)}\]损失函数选择速查
| 任务类型 | 推荐损失函数 | 说明 |
|---|---|---|
| 回归(无异常值) | MSE | 梯度平滑,收敛快 |
| 回归(有异常值) | Huber Loss | 兼顾平滑与鲁棒性 |
| 二分类 | Binary Cross-Entropy | 配合 Sigmoid 输出层 |
| 多分类 | Cross-Entropy | 配合 Softmax 输出层 |
| 语言模型 | Cross-Entropy | 下一 token 预测 = 多分类 |
| 分布匹配 | KL 散度 | VAE、知识蒸馏 |
| 目标检测(框回归) | Smooth L1 / IoU Loss | 对齐检测任务特性 |
2. Dropout
Dropout(Srivastava et al.,2014):训练时以概率 $p$ 随机将神经元输出置零,测试时关闭 Dropout、所有神经元激活并将输出乘以 $(1-p)$ 缩放。
直觉:迫使网络在部分神经元缺席的情况下仍能正确预测,防止神经元之间的过度共适性(Co-adaptation),相当于同时训练了大量不同结构的子网络并取集成效果。
使用时机:仅在观察到 Overfitting 后使用;训练 Loss 降不下去时,加 Dropout 只会更糟。
3. 数据增强
数据增强(Data Augmentation) 通过对训练样本施加保持语义的变换人为扩充数据量:
| 方法 | 领域 | 核心思想 | 年份 |
|---|---|---|---|
| 翻转/裁剪/颜色抖动 | 图像 | 经典手工增强,保持语义不变 | — |
| Mixup | 通用 | 两样本按比例混合,标签同步混合 | 2018 |
| CutMix | 图像 | 剪切粘贴区域,按面积比例混合标签 | 2019 |
| AutoAugment | 图像 | 强化学习搜索最优增强策略 | 2019 |
| RandAugment | 图像 | 随机采样增强,仅 2 个超参数,AutoAugment 的简化版 | 2020 |
| AugMix | 图像 | 多链增强混合 + Jensen-Shannon 一致性损失,提升分布鲁棒性 | 2020 |
| Time Stretch / Pitch Shift | 语音 | 变速变调,保持内容不变 | — |
| 同义词替换 / 回译 | 文本 | 语义等价改写 | — |
Mixup 公式:$\tilde{x} = \lambda x_i + (1-\lambda)x_j$,$\tilde{y} = \lambda y_i + (1-\lambda)y_j$
注意:数据增强的变换必须保持标签语义。若任务是判断鸟头朝向,则不能做左右翻转;若任务是说话人识别,则不能做语者转换。
使用时机:仅在 Overfitting 时有效;Training Loss 降不下去时,增加数据反而使优化更困难。
4. L2 正则化与 AdamW
L2 正则化(Weight Decay) 在 Loss 中加入参数的 L2 范数惩罚,使优化偏向参数绝对值更小的解(更”简单”的函数):
\[\mathcal{L}' = \mathcal{L}_{data} + \lambda \sum_i \theta_i^2\]AdamW(Loshchilov & Hutter,2017)修正了在 Adam 中加 L2 正则化的常见错误:传统方式将正则化梯度与普通梯度合并后统一经 Adam 缩放,导致正则化效果被自适应学习率”稀释”。AdamW 改为先对参数直接做 Weight Decay,再进行 Adam 更新:
θ = θ × (1 - λ) # Weight Decay 直接作用于参数
θ = θ - lr × Adam_update # Adam 正常更新
AdamW 是当前大语言模型训练的标准优化器,通常搭配梯度裁剪(Gradient Clipping)使用。
5. 半监督学习
半监督学习(Semi-supervised Learning) 利用无标注数据参与训练,在标注成本高时极具价值。
Entropy Minimization:要求模型对无标注样本的预测尽量确定(低熵),隐含”类别边界清晰”的假设。
一致性正则化(Consistency Regularization):对同一无标注样本施加不同扰动,要求输出一致,是目前自监督与半监督学习的主流框架(如 SimCLR、MoCo)。
现代大模型的预训练本质上是最大规模的半监督学习:在海量无标注文本上训练语言模型,再通过少量标注数据微调适配下游任务。
七、方法分类汇总
flowchart TD
A["神经网络训练技巧"] --> B["步骤三:改进 Optimization"]
A --> C["步骤二:改进网络架构"]
A --> D["步骤一:改进 Loss 与数据"]
B --> B1["Adam / AdamW\n自适应学习率+动量"]
B --> B2["LR Scheduling\nWarmup + Cosine Decay"]
B --> B3["Kaiming Init\n参数初始化"]
B --> B4["Pre-training\n同时改善 Opt+Gen"]
C --> C1["CNN\nReceptive Field + 参数共享\n改善 Generalization"]
C --> C2["Skip Connection\n缓解梯度消失爆炸\n改善 Optimization"]
C --> C3["BN / LN / RMSNorm\n主要改善 Optimization"]
D --> D1["Cross-Entropy\n使 Optimization 可行"]
D --> D2["Dropout\n改善 Generalization"]
D --> D3["Data Augmentation\n改善 Generalization"]
D --> D4["AdamW / Weight Decay\n改善 Generalization"]
各方法目标对照表:
| 方法 | 改进步骤 | 目标 | 备注 |
|---|---|---|---|
| Adagrad / RMSprop | 步骤三 | Optimization | 自适应学习率前身 |
| Adam | 步骤三 | Optimization | 当前默认优化器 |
| LR Scheduling | 步骤三 | Optimization | Warmup+Cosine 为大模型标配 |
| Kaiming Init | 步骤三 | Optimization | ReLU 网络的标准初始化 |
| Pre-training | 步骤三 | Opt + Gen | 两者同时改善,现代大模型核心 |
| CNN | 步骤二 | Generalization | 引入图像 Inductive Bias |
| Skip Connection | 步骤二 | Optimization | 使深层网络可训练 |
| Batch Norm | 步骤二 | Optimization(+Gen) | 依赖 batch 统计量 |
| Layer Norm | 步骤二 | Optimization(+Gen) | Transformer 标配 |
| Cross-Entropy | 步骤一 | 使 Opt 可行 | 分类/生成任务标准损失 |
| Dropout | 步骤三* | Generalization | 训练 Loss 会升高 |
| Data Augmentation | 步骤一 | Generalization | Overfitting 时才有效 |
| L2 Reg / AdamW | 步骤一/三 | Generalization | 偏好参数值更小的函数 |
| Semi-supervised | 步骤一 | Generalization | 利用无标注数据 |
八、常用实验基准
计算机视觉基准
MNIST
| 属性 | 内容 |
|---|---|
| 发布年份 | 1998 |
| 规模 | 70,000 张手写数字图像(28×28,灰度) |
| 类别数 | 10(数字 0-9) |
| SOTA 精度 | >99.8%(基本饱和) |
| 特点 | 最经典的入门基准,适合验证基础方法 |
CIFAR-10 / CIFAR-100
| 属性 | CIFAR-10 | CIFAR-100 |
|---|---|---|
| 发布年份 | 2009 | 2009 |
| 规模 | 60,000 张彩色图像(32×32) | 60,000 张彩色图像(32×32) |
| 类别数 | 10 | 100 |
| 适用 | 正则化、数据增强、网络架构验证 | 细粒度分类 |
Dropout、Batch Normalization、ResNet、Data Augmentation 的效果均在此基准上得到广泛验证。
ImageNet(ILSVRC)
| 属性 | 内容 |
|---|---|
| 发布年份 | 2010 |
| 规模 | 120 万张训练图像,5 万张验证图像 |
| 类别数 | 1,000 |
| 特点 | 深度学习工业级基准,CNN 发展史的主战场 |
ImageNet Top-1 精度演进(见第四节表格):AlexNet(56.5%)→ VGG(71.5%)→ ResNet(76.0%)→ EfficientNet(84.4%)→ 当前 SOTA ≈ 91%,12 年内提升约 35 个百分点。
自然语言处理基准
GLUE / SuperGLUE
| 基准 | 发布 | 任务数 | 用途 |
|---|---|---|---|
| GLUE | 2018 | 9 | 文本分类、推理、相似度等 NLU 任务综合评测 |
| SuperGLUE | 2019 | 8 | GLUE 饱和后的更难版,BERT 超越人类促成升级 |
BERT(2018)发布时在 GLUE 上大幅超越人类水平,直接推动了 SuperGLUE 的设立。
MMLU(Massive Multitask Language Understanding)
| 属性 | 内容 |
|---|---|
| 发布年份 | 2021 |
| 规模 | 57 个学科、约 16,000 道选择题 |
| 涵盖 | 数学、法律、医学、历史、计算机科学等 |
| 用途 | 评测 LLM 的知识广度与推理能力 |
| 人类水平 | 约 89.8%(专家) |
GPT-4(2023)在 MMLU 上达到 86.4%,Claude 3 Opus 达到 88.7%(2024),接近专家人类水平。
语言模型困惑度(Perplexity)
Penn Treebank(PTB)/ WikiText 是传统语言模型的标准基准,评测指标为困惑度(Perplexity,PPL)——越低越好,表示模型对下一个 token 的预测越确定。现已被 MMLU、HumanEval 等综合 Benchmark 取代。
九、最新进展
1. 混合精度训练
现代 GPU 支持 FP16/BF16 运算。混合精度训练以低精度完成前向传播和梯度计算(节省显存 50%、加速计算 2-3×),以 FP32 执行参数更新(保证数值稳定)。
| 格式 | 指数位 | 尾数位 | 优点 | 劣势 |
|---|---|---|---|---|
| FP32 | 8 | 23 | 最稳定 | 显存占用大 |
| FP16 | 5 | 10 | 快 | 数值范围小,易溢出 |
| BF16 | 8 | 7 | 数值范围同 FP32,稳定 | 精度略低于 FP16 |
BF16(Brain Float 16)因指数位更宽(8 位 vs FP16 的 5 位),数值范围更大,已成为大语言模型训练的首选低精度格式。
2. Gradient Clipping(梯度裁剪)
大模型训练中偶发的梯度爆炸(loss spike)会导致训练崩溃。梯度裁剪通过限制梯度 L2 范数的上界来防止这一问题:
\[g \leftarrow g \cdot \min\left(1, \frac{\tau}{\|g\|_2}\right)\]通常阈值 $\tau = 1.0$,是 AdamW 的标准搭档。
3. Flash Attention
标准注意力的瓶颈在于需要将 $N \times N$ 注意力矩阵写入 GPU HBM 显存,显存复杂度 $O(N^2)$,长序列时极其昂贵。
| 版本 | 年份 | 相对标准注意力加速 | 关键创新 |
|---|---|---|---|
| Flash Attention 1 | 2022 | 2–4× | IO-aware 分块计算,显存 $O(N)$ |
| Flash Attention 2 | 2023 | 4–9× | 改进并行化与 warp 分区,达 70% A100 FLOP/s |
| Flash Attention 3 | 2024 | 6–18×(vs FA1) | 针对 H100 Hopper 架构;异步流水线;FP8 支持,达 75% H100 FLOP/s(约 1.2 PFLOP/s) |
Flash Attention 在保持精确计算(非近似)的同时大幅降低显存和加速计算,已成为所有主流大模型的标配。
4. 深度学习与大语言模型
深度学习(尤其是 Transformer)是大语言模型(LLM)的技术基础。本文专注于通用深度学习原理;若对 LLM 的预训练细节(Scaling Laws、混合并行、Flash Attention、KV Cache、GQA 等)感兴趣,请参阅:
十、总结
本文系统梳理了深度学习的核心技术体系:
-
理论基础:机器学习三步骤框架和 Optimization vs Generalization 的两大核心目标,是理解所有训练技巧的坐标系。
-
网络架构:从 MLP 到 CNN(引入空间 Inductive Bias)、RNN/LSTM(处理序列长程依赖)再到 Transformer(自注意力机制,成为主流基础架构),每一次架构革新都针对前代的根本局限。
-
训练优化:优化器从 SGD 演进至 Adam→AdamW→Sophia/Muon/SOAP,配合 Warmup+Cosine Decay、梯度裁剪,构成当前标准训练流程;Skip Connection 和 Normalization 方法使极深网络可训练。
-
正则化:Dropout、数据增强(Mixup/CutMix/RandAugment)、Weight Decay 从不同角度抑制过拟合;Pre-training 则同时改善 Optimization 和 Generalization,是现代大模型成功的根本。
-
工程加速:混合精度(BF16)、Flash Attention、梯度裁剪等技术持续推进深度学习的工程实践边界。
核心结论:
深度学习的训练技巧不是越多越好,而是要对症下药——先诊断是 Optimization 问题还是 Generalization 问题,再选择对应的方法,是高效炼丹的基本功。