引言:从生物启发到智能革命
1943年,Warren McCulloch和Walter Pitts提出了第一个神经元数学模型。他们用一个简单的数学公式模拟了生物神经元的工作方式:接收输入、加权求和、激活输出。这个看似简单的想法,却孕育了后来改变世界的人工智能技术。
1958年,Frank Rosenblatt发明了感知机(Perceptron),这是第一个可以学习的神经网络。但1969年,Minsky和Papert在《Perceptrons》一书中证明了单层感知机无法解决异或(XOR)问题,这个致命缺陷导致了神经网络研究的第一次寒冬。
1986年,David Rumelhart、Geoffrey Hinton和Ronald Williams重新发现了反向传播算法,解决了多层网络的训练问题。神经网络迎来了短暂的春天。
但在90年代到2000年代初,支持向量机(SVM)等传统机器学习算法统治了学术界。神经网络因为数据量不足、计算能力有限、缺乏有效的训练技巧,再次陷入沉寂。
2012年,ImageNet竞赛上,Hinton的学生Alex Krizhevsky使用深度卷积神经网络AlexNet,以压倒性优势击败了传统方法,分类错误率从26%降低到15.3%。这一年,深度学习时代正式开启。
从此,深度学习以惊人的速度发展:2014年的VGG、GoogLeNet,2015年的ResNet解决深度退化问题,2017年的Transformer彻底改变自然语言处理,2022年的ChatGPT让全世界见识到大模型的力量。
本文将从数学原理出发,系统讲解深度学习的核心算法:从基础神经网络到卷积神经网络(CNN),从循环神经网络(RNN)到Transformer,最后探讨未来发展趋势。
第一章:神经网络的数学基础
1.1 单神经元:感知机的数学模型
1.1.1 前向传播
感知机是最基础的神经网络单元,模拟生物神经元的工作原理。给定输入向量 $x \in \mathbb{R}^d$,权重向量 $w \in \mathbb{R}^d$,偏置 $b \in \mathbb{R}$:
$$z = w^Tx + b = \sum_{i=1}^d w_i x_i + b$$
激活函数 $\sigma(z)$ 决定神经元的输出:
$$a = \sigma(z)$$
1.1.2 常用激活函数
Sigmoid函数: $$\sigma(z) = \frac{1}{1 + e^{-z}}$$
导数: $$\sigma’(z) = \sigma(z)(1 - \sigma(z))$$
性质:
- 输出范围:$(0, 1)$
- S型曲线,可微
- 缺点:梯度消失($| \sigma’(z) | \leq 0.25$),输出不以零为中心
Tanh函数: $$\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$
导数: $$\tanh’(z) = 1 - \tanh^2(z)$$
性质:
- 输出范围:$(-1, 1)$
- 以零为中心,比Sigmoid收敛更快
ReLU(Rectified Linear Unit): $$\text{ReLU}(z) = \max(0, z)$$
导数: $$\text{ReLU}’(z) = \begin{cases} 1 & z > 0 \ 0 & z \leq 0 \end{cases}$$
性质:
- 计算简单(不涉及指数运算)
- 缓解梯度消失问题
- 缺点:神经元"死亡"($z \leq 0$ 时梯度为0)
Leaky ReLU: $$\text{LeakyReLU}(z) = \max(\alpha z, z), \quad \alpha < 1$$
解决神经元死亡问题($\alpha$ 是小正数,如0.01)
Swish: $$\text{Swish}(z) = z \cdot \sigma(z) = \frac{z}{1 + e^{-z}}$$
在许多任务中表现优于ReLU
1.2 多层前馈神经网络
1.2.1 网络结构
多层神经网络由输入层、隐藏层、输出层组成。设网络有 $L$ 层,第 $l$ 层有 $n^{[l]}$ 个神经元。
记号:
- $W^{[l]} \in \mathbb{R}^{n^{[l]} \times n^{[l-1]}}$:第 $l$ 层的权重矩阵
- $b^{[l]} \in \mathbb{R}^{n^{[l]}}$:第 $l$ 层的偏置向量
- $Z^{[l]} \in \mathbb{R}^{n^{[l]}}$:第 $l$ 层的线性变换结果
- $A^{[l]} \in \mathbb{R}^{n^{[l]}}$:第 $l$ 层的激活输出
1.2.2 前向传播
第1层(输入层到第1个隐藏层): $$Z^{[1]} = W^{[1]}X + b^{[1]}$$ $$A^{[1]} = \sigma^{[1]}(Z^{[1]})$$
第 $l$ 层($l = 2, \ldots, L$): $$Z^{[l]} = W^{[l]}A^{[l-1]} + b^{[l]}$$ $$A^{[l]} = \sigma^{[l]}(Z^{[l]})$$
其中 $X = A^{[0]}$ 是输入,$\hat{Y} = A^{[L]}$ 是网络输出。
1.2.3 向量化实现
给定 $m$ 个样本的训练集 $X \in \mathbb{R}^{d \times m}$,前向传播可以矩阵化:
$$Z^{[1]} = W^{[1]}X + b^{[1]}$$ $$A^{[1]} = \sigma^{[1]}(Z^{[1]})$$ $$\vdots$$ $$Z^{[L]} = W^{[L]}A^{[L-1]} + b^{[L]}$$ $$\hat{Y} = A^{[L]} = \sigma^{[L]}(Z^{[L]})$$
这种实现利用矩阵运算,可以利用GPU加速。
1.3 损失函数
1.3.1 回归任务
均方误差(MSE): $$\mathcal{L} = \frac{1}{2m}\sum_{i=1}^m (y^{(i)} - \hat{y}^{(i)})^2$$
平均绝对误差(MAE): $$\mathcal{L} = \frac{1}{m}\sum_{i=1}^m |y^{(i)} - \hat{y}^{(i)}|$$
1.3.2 分类任务
交叉熵损失(多分类): 设 $y \in {0, 1}^K$ 是one-hot编码,$\hat{y} = \text{softmax}(z)$ 是预测概率:
$$\mathcal{L} = -\frac{1}{m}\sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} \log \hat{y}_k^{(i)}$$
Softmax函数: $$\text{softmax}(z)k = \frac{e^{z_k}}{\sum{j=1}^K e^{z_j}}$$
性质:
- 输出是概率分布($\sum_k \hat{y}_k = 1$,$\hat{y}_k > 0$)
- 对数空间计算数值稳定
交叉熵损失(二分类): $$\mathcal{L} = -\frac{1}{m}\sum_{i=1}^m [y^{(i)} \log \hat{y}^{(i)} + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)})]$$
1.4 反向传播算法
反向传播是深度学习的核心算法,用于高效计算梯度。
1.4.1 链式法则
损失函数对参数的梯度可以通过链式法则计算:
$$\frac{\partial \mathcal{L}}{\partial W^{[l]}} = \frac{\partial \mathcal{L}}{\partial Z^{[l]}} \frac{\partial Z^{[l]}}{\partial W^{[l]}}$$
$$\frac{\partial \mathcal{L}}{\partial b^{[l]}} = \frac{\partial \mathcal{L}}{\partial Z^{[l]}} \frac{\partial Z^{[l]}}{\partial b^{[l]}}$$
1.4.2 反向传播推导
定义误差项(error term): $$dZ^{[l]} = \frac{\partial \mathcal{L}}{\partial Z^{[l]}}$$
输出层: $$dZ^{[L]} = A^{[L]} - Y$$
(这是使用交叉熵损失和Softmax激活的简化结果)
隐藏层(从后向前传播): $$dA^{[l]} = (W^{[l+1]})^T dZ^{[l+1]}$$ $$dZ^{[l]} = dA^{[l]} \odot \sigma^{[l]’}(Z^{[l]})$$
其中 $\odot$ 是逐元素乘积(Hadamard product)。
梯度计算: $$dW^{[l]} = \frac{1}{m} dZ^{[l]} (A^{[l-1]})^T$$ $$db^{[l]} = \frac{1}{m} \sum_{i=1}^m dZ^{[l]}_{:, i}$$
1.4.3 算法复杂度
前向传播:$O(\sum_{l=1}^L n^{[l]} n^{[l-1]})$
反向传播:$O(\sum_{l=1}^L n^{[l]} n^{[l-1]})$
两者复杂度相同!这是反向传播算法的高效之处。
1.5 梯度下降与优化算法
1.5.1 批量梯度下降(Batch GD)
每次迭代使用所有样本:
$$W^{[l]} := W^{[l]} - \alpha \frac{\partial \mathcal{L}}{\partial W^{[l]}}$$
缺点:数据量大时速度慢
1.5.2 随机梯度下降(SGD)
每次迭代使用一个样本:
$$W^{[l]} := W^{[l]} - \alpha \frac{\partial \mathcal{L}^{(i)}}{\partial W^{[l]}}$$
优点:速度快,但梯度方差大
1.5.3 小批量梯度下降(Mini-batch GD)
每次迭代使用一批样本(常用64、128、256):
$$W^{[l]} := W^{[l]} - \alpha \frac{1}{m_t} \sum_{i \in \mathcal{B}_t} \frac{\partial \mathcal{L}^{(i)}}{\partial W^{[l]}}$$
结合了BGD和SGD的优点
1.5.4 动量法(Momentum)
引入速度项,加速收敛:
$$v_{dW^{[l]}} := \beta_1 v_{dW^{[l]}} + (1 - \beta_1) \frac{\partial \mathcal{L}}{\partial W^{[l]}}$$ $$W^{[l]} := W^{[l]} - \alpha v_{dW^{[l]}}$$
$\beta_1 \approx 0.9$,控制历史梯度的衰减率
1.5.5 Adam优化器
结合动量法和RMSprop,自适应学习率:
计算动量: $$m_{dW^{[l]}} := \beta_1 m_{dW^{[l]}} + (1 - \beta_1) \frac{\partial \mathcal{L}}{\partial W^{[l]}}$$ $$v_{dW^{[l]}} := \beta_2 v_{dW^{[l]}} + (1 - \beta_2) \left(\frac{\partial \mathcal{L}}{\partial W^{[l]}}\right)^2$$
偏差修正: $$\hat{m}{dW^{[l]}} = \frac{m{dW^{[l]}}}{1 - \beta_1^t}$$ $$\hat{v}{dW^{[l]}} = \frac{v{dW^{[l]}}}{1 - \beta_2^t}$$
参数更新: $$W^{[l]} := W^{[l]} - \alpha \frac{\hat{m}{dW^{[l]}}}{\sqrt{\hat{v}{dW^{[l]}}} + \epsilon}$$
超参数:$\beta_1 = 0.9$, $\beta_2 = 0.999$, $\epsilon = 10^{-8}$
1.6 正则化技术
1.6.1 L2正则化(权重衰减)
$$\mathcal{L}{\text{reg}} = \mathcal{L} + \frac{\lambda}{2m} \sum{l=1}^L |W^{[l]}|_F^2$$
梯度更新: $$dW^{[l]}_{\text{reg}} = dW^{[l]} + \frac{\lambda}{m} W^{[l]}$$
权重被"拉向"零
1.6.2 Dropout
训练时以概率 $p$ 随机丢弃神经元:
$$\tilde{a}^{[l]} = a^{[l]} \odot r^{[l]}, \quad r^{[l]}_i \sim \text{Bernoulli}(1-p)$$
$$\hat{a}^{[l]} = \frac{\tilde{a}^{[l]}}{1-p}$$(缩放保持期望)
测试时使用所有神经元,权重乘以 $(1-p)$
作用:防止过拟合,相当于训练了多个子网络的集成
1.6.3 批量归一化(Batch Normalization)
标准化每层的激活值:
训练时: $$\mu^{[l]} = \frac{1}{m} \sum_{i=1}^m Z^{[l]}{:, i}$$ $$\sigma^2^{[l]} = \frac{1}{m} \sum{i=1}^m (Z^{[l]}{:, i} - \mu^{[l]})^2$$ $$\hat{Z}^{[l]} = \frac{Z^{[l]} - \mu^{[l]}}{\sqrt{\sigma^2^{[l]} + \epsilon}}$$ $$Z{\text{BN}}^{[l]} = \gamma^{[l]} \odot \hat{Z}^{[l]} + \beta^{[l]}$$
可学习参数:$\gamma^{[l]}$(缩放)、$\beta^{[l]}$(平移)
测试时:使用移动平均的均值和方差
作用:
- 加速训练
- 允许使用更大学习率
- 减少对初始化的敏感度
1.6.4 早停法(Early Stopping)
在验证集上监控性能,性能不再提升时停止训练
第二章:卷积神经网络(CNN)
2.1 卷积操作
2.1.1 2D卷积
给定输入特征图 $X \in \mathbb{R}^{H \times W \times C}$,卷积核 $K \in \mathbb{R}^{k_h \times k_w \times C}$:
$$Z_{i,j} = \sum_{c=1}^C \sum_{u=0}^{k_h-1} \sum_{v=0}^{k_w-1} X_{i+u, j+v, c} \cdot K_{u,v,c} + b$$
其中 $b \in \mathbb{R}$ 是偏置。
2.1.2 步长(Stride)
步长 $s$ 控制卷积核滑动的步长,输出尺寸:
$$H’ = \left\lfloor \frac{H - k_h}{s} \right\rfloor + 1$$ $$W’ = \left\lfloor \frac{W - k_w}{s} \right\rfloor + 1$$
2.1.3 填充(Padding)
填充 $p$ 在输入周围补零,输出尺寸:
$$H’ = \left\lfloor \frac{H + 2p - k_h}{s} \right\rfloor + 1$$ $$W’ = \left\lfloor \frac{W + 2p - k_w}{s} \right\rfloor + 1$$
Valid padding(不填充):$p = 0$ Same padding(保持尺寸):$p = \lfloor \frac{k-1}{2} \rfloor$
2.1.4 通道
多个卷积核产生多个输出通道:
输入 $X \in \mathbb{R}^{H \times W \times C_{in}}$,卷积核组 $K \in \mathbb{R}^{k_h \times k_w \times C_{in} \times C_{out}}$
输出 $Z \in \mathbb{R}^{H’ \times W’ \times C_{out}}$
2.1.5 卷积 vs 全连接
卷积层是稀疏连接的权重共享:
- 参数数量:$k_h \times k_w \times C_{in} \times C_{out}$(与输入尺寸无关)
- 平移不变性:相同模式在不同位置识别
全连接层:
- 参数数量:$H \times W \times C_{in} \times n_{out}$(与输入尺寸成正比)
2.2 池化层
2.2.1 最大池化(Max Pooling)
$$Z_{i,j} = \max_{0 \leq u < k_h, 0 \leq v < k_w} X_{i \cdot s + u, j \cdot s + v}$$
作用:
- 降采样,减少计算量
- 平移不变性
- 防止过拟合
2.2.2 平均池化(Average Pooling)
$$Z_{i,j} = \frac{1}{k_h k_w} \sum_{u=0}^{k_h-1} \sum_{v=0}^{k_w-1} X_{i \cdot s + u, j \cdot s + v}$$
2.2.3 全局平均池化(Global Average Pooling)
对每个通道取平均,输出 $1 \times 1 \times C$:
$$Z_c = \frac{1}{HW} \sum_{i=1}^H \sum_{j=1}^W X_{i,j,c}$$
常用于替代全连接层,减少参数
2.3 经典CNN架构
2.3.1 LeNet-5(1998)
Yann LeCun设计的手写数字识别网络(MNIST)
结构:
- 卷积层(6个5×5卷积核,步长1,padding0)→ 激活(tanh)
- 平均池化(2×2,步长2)
- 卷积层(16个5×5卷积核)→ 激活
- 平均池化(2×2,步长2)
- 卷积层(120个5×5卷积核)→ 激活
- 全连接层(84个神经元)
- 输出层(10个神经元,softmax)
参数量:约6万个
2.3.2 AlexNet(2012)
深度学习革命的起点,ImageNet冠军
结构:
- 卷积层(96个11×11卷积核,步长4)→ ReLU → 最大池化(3×3,步长2)→ 局部响应归一化(LRN)
- 卷积层(256个5×5卷积核,padding2)→ ReLU → 最大池化 → LRN
- 卷积层(384个3×3卷积核,padding1)→ ReLU
- 卷积层(384个3×3卷积核,padding1)→ ReLU
- 卷积层(256个3×3卷积核,padding1)→ ReLU → 最大池化
- 全连接层(4096个神经元)→ Dropout(0.5)
- 全连接层(4096个神经元)→ Dropout(0.5)
- 输出层(1000个神经元,softmax)
参数量:约6000万个
创新点:
- 使用ReLU激活(加速训练)
- Dropout防止过拟合
- 数据增强(平移、翻转、颜色变化)
- GPU加速训练(两块GTX 580)
2.3.3 VGG(2014)
“简单但有效"的设计理念
核心思想:使用小卷积核(3×3)堆叠代替大卷积核
两个3×3卷积的感受野相当于一个5×5卷积: $$3 \times 3 \to 3 \times 3 \to \text{感受野} = 5 \times 5$$
优点:
- 参数更少:$2 \times 3^2 = 18 < 5^2 = 25$
- 更多非线性层(每个3×3后都有ReLU)
- 深度可以更深
VGG-16结构:
- Conv3-64(2个3×3卷积,64通道)→ MaxPool
- Conv3-128(2个3×3卷积,128通道)→ MaxPool
- Conv3-256(3个3×3卷积,256通道)→ MaxPool
- Conv3-512(3个3×3卷积,512通道)→ MaxPool
- Conv3-512(3个3×3卷积,512通道)→ MaxPool
- FC-4096 → FC-4096 → FC-1000
参数量:约1.38亿个
2.3.4 GoogLeNet(Inception v1)(2014)
引入Inception模块,多尺度特征提取
Inception模块: 并行多个不同大小的卷积核(1×1, 3×3, 5×5),并拼接结果
问题:计算量大
优化:使用1×1卷积降维(bottleneck)
- 在3×3和5×5卷积前加1×1卷积减少通道数
- 在池化后加1×1卷积减少通道数
GoogLeNet结构:
- 9个Inception模块堆叠
- 使用全局平均池化替代全连接层
- 辅助分类器(中间层)加速训练
参数量:约600万个(远少于AlexNet)
2.3.5 ResNet(2015)
解决深度网络的退化问题(degradation)
残差连接: $$y = F(x, {W}) + x$$
其中 $F(x, {W})$ 是残差函数(至少2层)
为什么有效?
传统网络学习 $H(x)$,ResNet学习残差 $F(x) = H(x) - x$
- 如果最优是恒等映射 $H(x) = x$,则只需让 $F(x) = 0$(更容易)
- 梯度可以通过恒等连接直接传播,缓解梯度消失
ResNet-50结构:
- 使用bottleneck设计:1×1降维 → 3×3卷积 → 1×1升维
- 4个stage,通道数逐步增加(64, 128, 256, 512)
- 每个stage有多个残差块(3, 4, 6, 3)
参数量:约2560万个
深度表现:
- ResNet-18, 34:基本残差块
- ResNet-50, 101, 152:bottleneck残差块
- ResNet-152在ImageNet上达到3.57%的top-5错误率(低于人类5.1%)
2.3.6 DenseNet(2017)
密集连接网络,每一层都与前面的所有层连接
密集块(Dense Block): $$x_l = H_l([x_0, x_1, \ldots, x_{l-1}])$$
其中 $[x_0, x_1, \ldots, x_{l-1}]$ 是前面所有层输出的拼接
优点:
- 特征复用,参数更少
- 梯度流动更顺畅
- 缓解梯度消失
过渡层(Transition Layer): 在密集块之间,进行降维和降采样
- 1×1卷积降维
- 2×2平均池化
DenseNet-121结构:
- 4个密集块(增长率 $k = 32$)
- 每个块有 6, 12, 24, 16 层
- 参数量:约800万个
2.4 CNN的应用
2.4.1 图像分类
任务:给定图像,预测类别标签
数据集:
- ImageNet(1000类,140万张图像)
- CIFAR-10/100(10/100类,6万张小图像)
- MNIST(10类手写数字)
2.4.2 目标检测
任务:定位图像中的物体并分类
算法:
- R-CNN系列(R-CNN, Fast R-CNN, Faster R-CNN):两阶段检测
- YOLO(You Only Look Once):单阶段检测
- SSD(Single Shot MultiBox Detector):多尺度单阶段检测
2.4.3 语义分割
任务:为图像中的每个像素分类
算法:
- FCN(Fully Convolutional Network):将全连接层替换为卷积层
- U-Net:编码器-解码器结构,跳跃连接
- DeepLab:空洞卷积扩大感受野
2.4.4 人脸识别
任务:验证或识别人脸
算法:
- FaceNet:使用triplet loss学习人脸嵌入
- ArcFace:添加角度间隔margin
- CosFace:余弦间隔
第三章:循环神经网络(RNN)
3.1 RNN基础
3.1.1 序列建模问题
传统神经网络处理固定尺寸输入,无法处理变长序列。
RNN(Recurrent Neural Network)通过隐藏状态传递历史信息。
3.1.2 RNN前向传播
给定序列 $x = (x_1, x_2, \ldots, x_T)$
初始化:$h_0 = \mathbf{0}$
对于 $t = 1, 2, \ldots, T$: $$h_t = \sigma_h(W_h h_{t-1} + W_x x_t + b_h)$$ $$\hat{y}_t = \sigma_y(W_y h_t + b_y)$$
其中:
- $W_h \in \mathbb{R}^{n_h \times n_h}$:隐藏状态到隐藏状态的权重
- $W_x \in \mathbb{R}^{n_h \times n_x}$:输入到隐藏状态的权重
- $W_y \in \mathbb{R}^{n_y \times n_h}$:隐藏状态到输出的权重
- $n_h$:隐藏状态维度
- $\sigma_h, \sigma_y$:激活函数
3.1.3 时间展开(Unrolling)
RNN在时间步上展开,等价于深度网络:
- 同样的参数 $W_h, W_x, W_y$ 在不同时间步共享
- 深度 = 序列长度 $T$
3.1.4 梯度消失与梯度爆炸
反向传播时(BPTT),梯度通过时间反向传播:
$$\frac{\partial \mathcal{L}}{\partial h_t} = \prod_{k=t}^{T} \frac{\partial h_{k+1}}{\partial h_k} \cdot \frac{\partial \mathcal{L}}{\partial \hat{y}_{k+1}}$$
其中 $\frac{\partial h_{k+1}}{\partial h_k} = \text{diag}(\sigma_h’(z_k)) W_h$
梯度消失:如果 $|\text{diag}(\sigma_h’(z_k)) W_h| < 1$,长程依赖无法学习
梯度爆炸:如果 $|\text{diag}(\sigma_h’(z_k)) W_h| > 1$,梯度指数增长,训练不稳定
解决方法:
- 梯度裁剪(Gradient Clipping):$|g| \leftarrow \min(|g|, \theta)$
- 使用LSTM/GRU门控结构
3.2 LSTM(Long Short-Term Memory)
3.2.1 核心思想
LSTM通过门控机制(gating)控制信息的流动,选择性记忆和遗忘。
3.2.2 LSTM单元
给定输入 $x_t$ 和前一隐藏状态 $h_{t-1}$、细胞状态 $c_{t-1}$
遗忘门(Forget Gate):决定丢弃什么信息 $$f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)$$
输入门(Input Gate):决定存储什么新信息 $$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)$$
细胞状态更新: $$c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t$$
输出门(Output Gate):决定输出什么 $$o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)$$ $$h_t = o_t \odot \tanh(c_t)$$
其中 $\odot$ 是逐元素乘积。
3.2.3 为什么LSTM有效?
- 细胞状态 $c_t$ 作为"高速公路”:梯度可以直接传播,缓解梯度消失
- 门控机制:动态控制信息流
- 遗忘门 $f_t \to 0$:遗忘长期信息
- 遗忘门 $f_t \to 1$:保持长期信息
- 输入门 $i_t \to 0$:忽略当前输入
- 输入门 $i_t \to 1$:记录当前输入
3.3 GRU(Gated Recurrent Unit)
3.3.1 简化的LSTM
GRU是LSTM的简化版本,参数更少。
3.3.2 GRU单元
$$z_t = \sigma(W_z [h_{t-1}, x_t] + b_z)$$(更新门) $$r_t = \sigma(W_r [h_{t-1}, x_t] + b_r)$$(重置门) $$\tilde{h}t = \tanh(W_h [r_t \odot h{t-1}, x_t] + b_h)$$ $$h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t$$
更新门 $z_t$:控制前一隐藏状态的保留程度
- $z_t \to 0$:保留 $h_{t-1}$
- $z_t \to 1$:更新为 $\tilde{h}_t$
重置门 $r_t$:控制前一隐藏状态在候选新状态中的参与度
- $r_t \to 0$:忽略 $h_{t-1}$,类似"重置"
- $r_t \to 1$:考虑 $h_{t-1}$
3.4 双向RNN(BiRNN)
有些任务需要同时考虑过去和未来信息。
双向RNN:
- 前向RNN:$ \overrightarrow{h}t = RNN{\text{forward}}(x_t, \overrightarrow{h}_{t-1}) $
- 后向RNN:$ \overleftarrow{h}t = RNN{\text{backward}}(x_t, \overleftarrow{h}_{t+1}) $
- 组合:$h_t = [\overrightarrow{h}_t; \overleftarrow{h}_t]$
应用:机器翻译、命名实体识别、语音识别
3.5 RNN的应用
3.5.1 语言模型
任务:给定前面的词,预测下一个词
$$P(w_t | w_{<t}) = \text{softmax}(W_y h_t + b_y)$$
应用:
- 文本生成
- 拼写纠正
- 语音识别(语言模型用于约束)
3.5.2 机器翻译
序列到序列(Seq2Seq)模型:
编码器-解码器结构:
- 编码器:将源序列编码为固定向量
- 解码器:从编码向量生成目标序列
问题:固定长度的编码向量是信息瓶颈
改进:注意力机制(Attention)
3.5.3 语音识别
声学模型:将声学特征序列映射到音素或字符序列
应用:Siri、Google语音识别、智能音箱
3.5.4 问答系统
任务:给定问题和段落,抽取答案
方法:
- 将问题和段落编码为向量
- 计算相关性
- 抽取答案片段
第四章:注意力机制与Transformer
4.1 注意力机制
4.1.1 动机
Seq2Seq模型使用固定长度的编码向量,信息瓶颈。
注意力机制允许解码器在每一步动态关注源序列的不同部分。
4.1.2 Bahdanau注意力(加性注意力)
上下文向量: $$c_i = \sum_{j=1}^{T_x} \alpha_{ij} h_j$$
其中 $\alpha_{ij}$ 是注意力权重: $$\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{T_x} \exp(e_{ik})}$$
注意力分数: $$e_{ij} = v_a^T \tanh(W_a h_j + U_a s_{i-1})$$
$h_j$:编码器隐藏状态,$s_{i-1}$:解码器前一状态
4.1.3 Luong注意力(乘性注意力)
全局注意力: $$c_i = \sum_{j} \alpha_{ij} h_j$$
注意力分数: $$e_{ij} = s_{i-1}^T W_a h_j$$
局部注意力:只在窗口内计算注意力,减少计算量
4.2 自注意力机制
4.2.1 核心思想
自注意力允许序列中的每个位置关注其他所有位置。
4.2.2 缩放点积注意力
给定查询 $Q$、键 $K$、值 $V$:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
其中:
- $Q \in \mathbb{R}^{n \times d_k}$
- $K \in \mathbb{R}^{m \times d_k}$
- $V \in \mathbb{R}^{m \times d_v}$
缩放因子 $\frac{1}{\sqrt{d_k}}$:防止点积过大导致softmax梯度消失
直观理解:
- $Q$:我想找什么
- $K$:我有什么
- 注意力权重 = $Q$ 和 $K$ 的相似度(点积)
- 输出 = 加权的 $V$
4.3 Transformer架构
4.3.1 整体架构
Transformer完全基于注意力机制,摒弃了RNN的循环结构。
编码器-解码器结构:
- 编码器:$N$ 个相同的层堆叠(通常 $N=6$)
- 解码器:$N$ 个相同的层堆叠(通常 $N=6$)
4.3.2 编码器层
每层包含两个子层:
- 多头自注意力
- 前馈神经网络(Feed-Forward Network)
每个子层后跟残差连接和层归一化: $$\text{LayerNorm}(x + \text{Sublayer}(x))$$
前馈神经网络: $$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$$
维度:$d_{\text{model}} \to d_{\text{ff}} \to d_{\text{model}}$ 通常 $d_{\text{ff}} = 4d_{\text{model}}$
4.3.3 多头注意力(Multi-Head Attention)
问题:单头注意力难以捕捉多种关系
多头注意力: $$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O$$
其中: $$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$
$W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$
$W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}$
通常 $h = 8$ 个头,$d_k = d_v = d_{\text{model}} / h$
直观理解:多个头关注不同的方面(语法、语义、指代等)
4.3.4 解码器层
每层包含三个子层:
带掩码的多头自注意力:
- 只能关注已生成的部分(不能看未来)
- 掩码:将未来位置的注意力分数设为 $-\infty$
编码器-解码器注意力(Cross-Attention):
- 查询来自解码器
- 键和值来自编码器输出
- 允许解码器关注源序列的不同部分
前馈神经网络
4.3.5 位置编码
问题:自注意力没有时序信息
位置编码:给每个位置添加固定或可学习的编码
正弦余弦位置编码: $$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$ $$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
性质:
- 每个维度对应不同的频率
- 允许模型学习相对位置($PE_{pos+k}$ 可以表示为 $PE_{pos}$ 的线性函数)
4.3.6 输入嵌入
词嵌入:将词索引映射到 $d_{\text{model}}$ 维向量
$$x = \text{Embedding}(\text{token_id}) \cdot \sqrt{d_{\text{model}}}$$
缩放 $\sqrt{d_{\text{model}}}$ 是为了与位置编码保持一致
最终输入:$X = \text{Embedding} + \text{PositionalEncoding}$
4.4 Transformer变体
4.4.1 BERT(Bidirectional Encoder Representations from Transformers)
架构:仅Transformer编码器
预训练任务:
掩码语言模型(MLM):随机掩盖15%的token,预测它们
- 80%替换为[MASK]
- 10%替换为随机词
- 10%保持不变
下一句预测(NSP):给定句子对,预测第二个句子是否是第一个句子的下一句
应用:
- GLUE基准测试(句子对分类、相似度、推理等)
- 文本分类、命名实体识别、问答
4.4.2 GPT(Generative Pre-trained Transformer)
架构:仅Transformer解码器(带掩码的自注意力)
预训练任务:标准语言模型(预测下一个词)
微调:在下游任务上继续训练(带标签数据)
GPT-3(2020):
- 1750亿参数
- 零样本/少样本学习能力强
- 展示了大模型的强大能力
4.4.3 T5(Text-to-Text Transfer Transformer)
统一框架:所有NLP任务都转换为文本到文本问题
示例:
- 翻译:
translate English to German: That is good.→Das ist gut. - 摘要:
summarize: ...→ 摘要文本 - 分类:
cola sentence: ...→acceptable/unacceptable
4.4.4 Vision Transformer(ViT)
思想:将Transformer应用于图像
方法:
- 将图像分割为 $16 \times 16$ 的patches
- 将每个patch展平并线性映射为向量
- 添加可学习的[CLS] token
- 添加位置编码
- 输入Transformer编码器
- [CLS] token的输出作为图像表示
优势:
- 全局感受野(CNN是局部的)
- 大规模预训练后表现优异
4.4.5 ChatGPT(InstructGPT/GPT-3.5)
三阶段训练:
预训练:大规模语言模型预训练(自监督)
有监督微调(SFT):
- 人类编写高质量的问答对
- 微调模型使其遵循指令
人类反馈强化学习(RLHF):
- 奖励模型(RM):训练模型预测人类对回答的偏好(排序)
- 强化学习(PPO):优化策略(回答生成)以最大化奖励
成功因素:
- 大规模(数十亿参数)
- 高质量人类数据(指令、对话)
- 对齐人类意图
4.5 注意力机制的应用
4.5.1 自然语言处理
- 机器翻译
- 文本摘要
- 问答系统
- 情感分析
- 命名实体识别
4.5.2 计算机视觉
- 目标检测(DETR)
- 图像分类
- 视频理解
4.5.3 多模态
- CLIP(图文对比学习)
- DALL·E(文本生成图像)
- 视频描述生成
第五章:深度学习的应用场景
5.1 计算机视觉
5.1.1 图像分类
应用:
- ImageNet挑战赛(1000类)
- 医学影像诊断(肺结节检测、视网膜病变识别)
- 电商商品分类
5.1.2 目标检测
应用:
- 自动驾驶(车辆、行人、交通标志检测)
- 安防监控(异常行为检测)
- 工业质检(缺陷检测)
5.1.3 语义分割
应用:
- 自动驾驶(道路、车道线分割)
- 医学影像(器官、肿瘤分割)
- 遥感图像(土地覆盖分类)
5.1.4 人脸识别
应用:
- 手机解锁(Face ID)
- 支付验证
- 安防监控
5.2 自然语言处理
5.2.1 文本生成
应用:
- 机器翻译
- 文本摘要
- 创意写作
5.2.2 问答系统
应用:
- 搜索引擎
- 智能客服
- 知识图谱问答
5.2.3 情感分析
应用:
- 社交媒体舆情分析
- 产品评论分析
- 客户满意度调查
5.2.4 命名实体识别
应用:
- 信息抽取(人名、地名、机构名)
- 知识图谱构建
- 文档结构化
5.3 语音处理
5.3.1 语音识别(ASR)
应用:
- 语音助手(Siri、小爱同学)
- 会议记录
- 实时字幕
技术:
- 声学模型:端到端架构(LAS、CTC、RNN-Transducer)
- 语言模型:Transformer
5.3.2 语音合成(TTS)
应用:
- 导航语音
- 有声书
- 语音助手
技术:
- Tacotron(Seq2Seq + 注意力)
- WaveNet(自回归波形生成)
- VITS(变分推断)
5.3.3 说话人识别
应用:
- 声纹认证
- 多说话人分离
5.4 推荐系统
5.4.1 协同过滤 + 深度学习
DeepFM:结合因子分解机和深度学习
DIN(Deep Interest Network):自适应关注历史兴趣
5.4.2 序列推荐
应用:
- 电商推荐(根据点击历史推荐)
- 视频推荐(根据观看历史推荐)
技术:Transformer、BERT4Rec
5.5 游戏
5.5.1 AlphaGo(2016)
技术:
- 策略网络(Policy Network):预测下一步棋
- 价值网络(Value Network):评估局面胜率
- 蒙特卡洛树搜索(MCTS)
5.5.2 AlphaStar(星际争霸II)
技术:
- 多智能体强化学习
- 历史自对弈
- 延迟(Latency)处理
5.6 生物信息学
5.6.1 蛋白质结构预测(AlphaFold2)
技术:
- 注意力机制
- 残差网络
- 端到端学习
成就:预测精度接近实验方法(CASP14竞赛冠军)
5.6.2 基因序列分析
应用:
- 基因表达预测
- 突变影响预测
第六章:深度学习的挑战与未来
6.1 当前挑战
6.1.1 数据饥渴
深度学习需要大量标注数据,但标注成本高。
解决方法:
- 自监督学习(从无标注数据学习)
- 半监督学习
- 数据增强
- 合成数据
6.1.2 计算资源需求
大模型训练成本极高(GPT-3训练成本约460万美元)。
解决方法:
- 模型压缩(蒸馏、量化、剪枝)
- 高效架构(MobileNet、EfficientNet)
- 分布式训练
6.1.3 可解释性
深度学习是黑箱,难以解释决策过程。
解决方法:
- 注意力可视化
- LIME、SHAP(局部解释)
- 归因方法(Integrated Gradients)
- 可解释架构(ProtoPNet)
6.1.4 泛化能力
在训练分布上表现好,但分布外(OOD)泛化差。
解决方法:
- 数据多样性
- 域自适应
- 元学习
- 因果推断
6.1.5 安全性
对抗攻击(Adversarial Attack):微小扰动导致模型误判。
示例:给熊猫图片添加不可见的噪声,模型识别为长臂猿
解决方法:
- 对抗训练
- 鲁棒优化
- 检测对抗样本
6.1.6 公平性与偏见
模型可能学习并放大数据中的偏见(种族、性别等)。
解决方法:
- 公平性约束优化
- 数据去偏见
- 模型审计
6.2 未来发展趋势
6.2.1 大模型(Foundation Models)
趋势:预训练大模型在多个任务上微调
代表性工作:
- GPT系列、BERT系列(语言)
- CLIP、DALL·E(视觉)
- Flamingo、BLIP(多模态)
挑战:
- 部署成本高
- 幻觉问题(Hallucination)
- 对齐人类价值观
6.2.2 多模态学习
目标:融合文本、图像、视频、音频等多模态信息
应用:
- 图文检索(CLIP)
- 视频理解
- 视觉问答(VQA)
- 图文生成(DALL·E、Stable Diffusion)
6.2.3 自监督学习
思想:从无标注数据中学习表示,无需人工标签
方法:
- 对比学习(SimCLR、MoCo)
- 掩码建模(MAE、BERT-style)
- 自回归建模(GPT-style)
优势:
- 利用大规模无标注数据
- 学习通用表示,下游任务微调效果好
6.2.4 小样本与零样本学习
目标:用极少样本甚至无样本学习新任务
方法:
- 元学习(Learning to Learn)
- 原型网络(Prototypical Networks)
- 度量学习
- 大模型的零样本/少样本能力
6.2.5 神经符号AI
目标:结合深度学习的感知能力和符号AI的推理能力
方法:
- 神经网络 + 知识图谱
- 程序生成/执行
- 逻辑约束学习
6.2.6 神经形态计算
目标:模拟生物神经元的计算方式,功耗更低
技术:
- 脉冲神经网络(SNN)
- 神经形态芯片(Intel Loihi、IBM TrueNorth)
6.2.7 生成式AI
趋势:从判别式模型转向生成式模型
应用:
- 文本生成(GPT、ChatGPT)
- 图像生成(Stable Diffusion、Midjourney)
- 视频生成(Sora、Runway)
- 音乐生成(Suno、MusicLM)
挑战:
- 生成质量与多样性权衡
- 伦理与版权问题
- 深度伪造(Deepfake)
6.2.8 具身智能
目标:AI与物理世界交互(机器人、自动驾驶)
方法:
- 强化学习
- 模拟到真实迁移(Sim2Real)
- 世界模型(World Model)
6.2.9 AI for Science
目标:用AI加速科学发现
应用:
- AlphaFold(蛋白质结构预测)
- 材料设计
- 天气预报
- 数学研究(Lean、Coq + AI)
6.2.10 可信赖AI(Trustworthy AI)
目标:AI安全、可靠、可控
方向:
- 可解释性(XAI)
- 鲁棒性(对抗攻击防御)
- 公平性(消除偏见)
- 隐私保护(联邦学习、差分隐私)
- 对齐(Alignment):确保AI目标与人类价值观一致
6.3 结语
深度学习在过去十年取得了惊人的成就,从AlexNet到GPT-4,从图像分类到通用对话AI。但我们也必须清醒地认识到当前的局限性:数据饥渴、计算昂贵、黑箱决策、安全问题。
未来的发展方向不是简单地堆叠参数,而是:
- 更高效的学习:自监督、小样本、终身学习
- 更广泛的应用:多模态、具身、科学发现
- 更可靠的技术:可解释、鲁棒、对齐
正如深度学习的先驱Hinton所说:“The question of whether computers can think is no more interesting than the question of whether submarines can swim."(计算机能否思考的问题,就像潜水艇能否游泳的问题一样无趣。)
重要的不是模仿人脑,而是构建真正有用的智能系统。深度学习正在朝着这个方向前进。
参考文献
- LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444.
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
- Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet classification with deep convolutional neural networks. NeurIPS.
- Simonyan, K., & Zisserman, A. (2014). Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556.
- He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. CVPR.
- Szegedy, C., et al. (2015). Going deeper with convolutions. CVPR.
- Vaswani, A., et al. (2017). Attention is all you need. NeurIPS.
- Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL.
- Brown, T., et al. (2020). Language models are few-shot learners. NeurIPS.
- Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural Computation, 9(8), 1735-1780.
- Jumper, J., et al. (2021). Highly accurate protein structure prediction with AlphaFold. Nature, 596(7873), 583-589.
- OpenAI. (2023). GPT-4 Technical Report. arXiv preprint arXiv:2303.08774.
