神经网络基础
从感知机到深度神经网络,掌握现代AI的数学基础与核心技术
5.1感知机与多层感知机(MLP)
感知机:神经网络的起点
感知机(Perceptron)由Frank Rosenblatt于1958年提出,是最简单的人工神经网络模型。它模拟生物神经元的运作机制,接收多个输入信号,经过加权求和后通过激活函数输出结果。
$$y = f(\sum_{i=1}^{n} w_i x_i + b) = f(\mathbf{w}^T\mathbf{x} + b)$$
其中:$x_i$ 为输入,$w_i$ 为权重,$b$ 为偏置,$f$ 为激活函数
感知机结构图示
输入层 输出
┌───┐
x₁ │ │──w₁──┐
└───┘ \
┌───┐ \
x₂ │ │──w₂────○──→ Σ(wᵢxᵢ)+b ──→ f ──→ y
└───┘ /
┌───┐ /
x₃ │ │──w₃───┘
└───┘
图5-1:感知机结构示意图。多个输入通过权重连接,经求和与激活函数产生输出。
多层感知机(MLP)
多层感知机(Multi-Layer Perceptron)通过堆叠多个神经元层,引入非线性激活函数,可以学习复杂的非线性映射关系。
MLP网络结构
输入层 隐藏层1 隐藏层2 输出层
┌───┐
x₁ │ │──────┐ ┌───┐
└───┘ │ │ │──────┐ ┌───┐
┌───┐ └──→│ h₁│ │ │ │
x₂ │ │──────┐ ├───┤ └──→│ h₄│ ┌───┐
└───┘ │ │ h₂│────────→│ │────→│ y │
┌───┐ └──→├───┤ ┌──→│ h₅│ └───┘
x₃ │ │──────┐ │ h₃│ │ └───┘
└───┘ └──→└───┘ │
┌───┐ │ ┌───┐
x₄ │ │─────────────────────└──→│ h₆│
└───┘ └───┘
图5-2:MLP网络结构。信息从输入层逐层向前传播,经过隐藏层提取特征,最终输出预测结果。
前向传播(Forward Propagation)
前向传播是神经网络进行预测的过程,数据从输入层流向输出层,逐层计算每层的输出值。
- 输入层:接收原始数据 $\mathbf{x}$
- 线性变换:$\mathbf{z}^{[l]} = \mathbf{W}^{[l]}\mathbf{a}^{[l-1]} + \mathbf{b}^{[l]}$
- 激活函数:$\mathbf{a}^{[l]} = f(\mathbf{z}^{[l]})$
- 逐层传递:重复步骤2-3直到输出层
- 输出结果:得到预测值 $\hat{\mathbf{y}}$
5.2激活函数
激活函数为神经网络引入非线性,使其能够学习复杂的模式。选择合适的激活函数对模型性能至关重要。
Sigmoid函数
$\sigma(x) = \frac{1}{1 + e^{-x}}$
f(x)
1 │ ╭────
│ ╭──╯
0.5├────────────╭──╯
│ ╭──╯
0 │────╭───╯
└────┴────┴────┴────→ x
-4 0 4
图5-3:Sigmoid函数图像。S型曲线将输入映射到(0,1)区间,适合概率输出。
| 优点 | 缺点 | 适用场景 |
|---|---|---|
| 输出在(0,1),可解释为概率 | 梯度消失问题 | 二分类输出层 |
| 平滑可导 | 输出非零均值 | 浅层网络 |
| 计算简单 | 指数运算较慢 | 非隐藏层首选 |
ReLU函数
$\text{ReLU}(x) = \max(0, x)$
f(x)
│
4 │ ╱
3 │ ╱
2 │ ╱
1 │ ╱
0 ├──────┼──────────→ x
│ 0
-1 │______│
图5-4:ReLU函数图像。负数部分为0,正数部分线性增长,计算高效。
| 优点 | 缺点 | 适用场景 |
|---|---|---|
| 计算简单,无指数运算 | 可能导致神经元"死亡" | 隐藏层默认选择 |
| 缓解梯度消失 | 负数区域梯度为0 | 深层CNN、MLP |
| 收敛速度快 | 输出非零均值 | 大多数深度网络 |
Tanh函数
$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$
f(x)
1 │ ╭────
│ ╭──╯
0 ├────────────╭───┼───╭────────→ x
│ ╭──╯ └──╮
-1 │────╭───╯ ╰────
└────┴────┴────┴────
-4 0 4
图5-5:Tanh函数图像。输出范围(-1,1),零中心化,优于Sigmoid。
Softmax函数
$\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{K} e^{x_j}}$
输入值 Softmax输出
┌───┐ ┌───┐
z₁ │ 3 │────────────→│0.7│ (最大,概率最高)
├───┤ ├───┤
z₂ │ 1 │────────────→│0.2│
├───┤ ├───┤
z₃ │ 0 │────────────→│0.1│
└───┘ └───┘
总和 = 4 总和 = 1.0
图5-6:Softmax将任意实数向量转换为概率分布,输出之和为1。
| 特性 | 说明 |
|---|---|
| 输出范围 | (0, 1),所有输出之和为1 |
| 主要用途 | 多分类问题的输出层 |
| 特点 | 放大差异,最大值获得最高概率 |
激活函数选择指南
- 隐藏层:优先使用ReLU或其变体(Leaky ReLU、ELU)
- 输出层-二分类:使用Sigmoid
- 输出层-多分类:使用Softmax
- 输出层-回归:不使用激活函数或使用线性激活
- RNN:考虑使用Tanh
5.3反向传播算法
反向传播(Backpropagation)是训练神经网络的核心算法,它利用链式法则高效计算损失函数对各参数的梯度。
梯度下降
梯度下降是一种优化算法,通过沿着损失函数梯度的反方向更新参数,逐步最小化损失函数。
损失函数 J(w)
│╲
│ ╲
│ ╲
│ ╲
│ ● ╲
│ │ ╲
│ │ ● ╲
│ │ │ ╲
│ ↓ │ ╲
│ ● ↓ ● ╲
│ ● ╲
└────────────────────→ w
梯度下降方向
图5-7:梯度下降示意图。参数沿着损失函数梯度反方向更新,逐步逼近最优解。
$\mathbf{w} := \mathbf{w} - \alpha \nabla J(\mathbf{w})$
其中 $\alpha$ 为学习率,$\nabla J(\mathbf{w})$ 为损失函数对参数的梯度
链式法则
链式法则是反向传播的理论基础。对于复合函数 $y = f(g(x))$,其导数为:
$\frac{\partial y}{\partial x} = \frac{\partial y}{\partial g} \cdot \frac{\partial g}{\partial x}$
反向传播计算图
前向传播 反向传播
x ──→ ┌───┐ δy = ∂L/∂y
│ × │──→ z ──→ ┌───┐ ↓
w ──→ └───┘ │ f │──→ y δz = δy · f'(z)
└───┘ ↓
δw = δz · x
δx = δz · w
计算流程:
1. 前向:计算所有节点的输出值
2. 反向:从输出层开始,逐层计算梯度
3. 更新:用梯度更新所有参数
图5-8:反向传播计算图。误差从输出层向后传播,每层计算局部梯度并累积。
反向传播完整流程
- 前向传播
- 输入样本经过网络计算预测值 $\hat{y}$
- 计算损失函数 $L(y, \hat{y})$
- 保存各层中间结果
- 计算输出层梯度
- $\delta^{[L]} = \nabla_{\hat{y}}L \odot f'(\mathbf{z}^{[L]})$
- 反向传播误差($l = L-1, ..., 1$)
- $\delta^{[l]} = (\mathbf{W}^{[l+1]})^T \delta^{[l+1]} \odot f'(\mathbf{z}^{[l]})$
- 计算参数梯度
- $\nabla_{\mathbf{W}^{[l]}}L = \delta^{[l]}(\mathbf{a}^{[l-1]})^T$
- $\nabla_{\mathbf{b}^{[l]}}L = \delta^{[l]}$
- 更新参数
- $\mathbf{W}^{[l]} := \mathbf{W}^{[l]} - \alpha \nabla_{\mathbf{W}^{[l]}}L$
- $\mathbf{b}^{[l]} := \mathbf{b}^{[l]} - \alpha \nabla_{\mathbf{b}^{[l]}}L$
- 梯度消失:深层网络中梯度逐层衰减,前层参数难以更新。解决方案:使用ReLU、残差连接、批归一化。
- 梯度爆炸:梯度逐层放大,参数更新过大。解决方案:梯度裁剪、权重正则化、较小的学习率。
5.4优化器
优化器决定了如何使用计算出的梯度来更新网络参数。不同的优化器在收敛速度、内存消耗和最终性能上有所差异。
SGD(随机梯度下降)
$\mathbf{w} := \mathbf{w} - \alpha \nabla J(\mathbf{w}; x^{(i)}, y^{(i)})$
损失
曲面 ╲ ╱
╲ ╱
╲ ╱
╲ ╱
●←── SGD可能震荡
╱ ╲
╱ ╲
╱ ╲
图5-9:SGD在损失曲面上的更新轨迹。学习率过大时可能在最优解附近震荡。
| 优点 | 缺点 |
|---|---|
| 计算简单,内存开销小 | 学习率固定,难以适应复杂损失曲面 |
| 可能跳出局部最优 | 收敛速度慢,需要精细调参 |
| 配合动量效果好 | 在鞍点处停滞 |
Momentum(动量)
动量方法引入速度概念,累积之前的梯度方向,加速收敛并减少震荡。
$\mathbf{v} := \beta \mathbf{v} - \alpha \nabla J(\mathbf{w})$
$\mathbf{w} := \mathbf{w} + \mathbf{v}$
无Momentum: 有Momentum:
↑↓↑↓↑↓ ─────────→
(震荡) (平滑收敛)
Adam(Adaptive Moment Estimation)
Adam结合了Momentum和RMSprop的优点,自适应调整每个参数的学习率,是目前最常用的优化器。
一阶矩估计(动量):$\mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1-\beta_1)\mathbf{g}_t$
二阶矩估计(自适应学习率):$\mathbf{v}_t = \beta_2 \mathbf{v}_{t-1} + (1-\beta_2)\mathbf{g}_t^2$
偏差修正:$\hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1-\beta_1^t}$, $\hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1-\beta_2^t}$
参数更新:$\mathbf{w}_t = \mathbf{w}_{t-1} - \alpha \frac{\hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon}$
RMSprop
RMSprop通过维护梯度的移动平均平方,自适应调整学习率,适合处理非平稳目标。
$\mathbf{v}_t = \beta \mathbf{v}_{t-1} + (1-\beta)\mathbf{g}_t^2$
$\mathbf{w}_t = \mathbf{w}_{t-1} - \alpha \frac{\mathbf{g}_t}{\sqrt{\mathbf{v}_t} + \epsilon}$
优化器对比总结
| 优化器 | 特点 | 适用场景 | 推荐设置 |
|---|---|---|---|
| SGD | 简单,可能找到更好的极值 | 大规模数据,CNN | lr=0.01, momentum=0.9 |
| Adam | 自适应,收敛快,默认首选 | 大多数场景 | lr=0.001, β1=0.9, β2=0.999 |
| RMSprop | 适合非平稳目标 | RNN, 序列数据 | lr=0.001, α=0.99 |
| AdamW | Adam+权重衰减解耦 | Transformer, 大模型 | lr可变,wd=0.01 |
5.5正则化技术
正则化技术用于防止模型过拟合,提高泛化能力。过拟合是指模型在训练数据上表现很好,但在测试数据上表现较差的现象。
损失
│╲ 训练误差
│ ╲╱╲
│ ╲_________ 验证误差
│ ╲ ╱
│ ╲ ╱
│ ╲╱
└────────────────→ 训练轮数
↑
最佳停止点
图5-10:过拟合现象。训练误差持续下降,但验证误差在某点后开始上升。
Dropout
Dropout是一种简单有效的正则化方法,在训练时随机"关闭"一部分神经元,强制网络学习冗余表示。
训练阶段(Dropout=0.5) 测试阶段(不Dropout)
┌───┐ ┌───┐
│ h₁│──×──(被丢弃) │ h₁│────┐
├───┤ ├───┤ │
│ h₂│────────┐ │ h₂│────┤
├───┤ │ ├───┤ ├──→ 输出
│ h₃│──×── │ │ h₃│────┤
├───┤ ↓ ├───┤ │
│ h₄│──→ ┌──────┐ │ h₄│────┘
└───┘ │ 输出 │ └───┘
└──────┘
图5-11:Dropout原理。训练时随机丢弃神经元(概率p),测试时使用全部神经元并调整权重。
- 训练时:以概率 $p$ 随机将神经元输出置0,其余神经元输出乘以 $1/(1-p)$
- 测试时:使用所有神经元,不再进行随机丢弃
- 效果:相当于训练多个子网络的集成,减少神经元间的共适应
- 输入层Dropout率:0.2-0.3
- 隐藏层Dropout率:0.3-0.5
- 小数据集使用较高Dropout率
- 大模型配合Batch Norm时可适当降低
L1/L2正则化
通过在损失函数中添加惩罚项,限制模型参数的大小,防止过拟合。
L2正则化(权重衰减):
$J_{L2}(\mathbf{w}) = J(\mathbf{w}) + \lambda \sum_{i} w_i^2$
L1正则化:
$J_{L1}(\mathbf{w}) = J(\mathbf{w}) + \lambda \sum_{i} |w_i|$
| 特性 | L1正则化 | L2正则化 |
|---|---|---|
| 惩罚项 | 绝对值之和 | 平方和 |
| 效果 | 产生稀疏权重(特征选择) | 权重平滑较小(防止过大) |
| 梯度 | 常数(不依赖于w) | 与w成正比 |
| 适用 | 高维稀疏特征 | 一般深度学习 |
Batch Normalization
批归一化(Batch Normalization)对每层输入进行归一化,加速训练并具有一定正则化效果。
输入 x 输出 y
┌───┐ ┌───┐
│ │ ┌───────────┐ │ │
└───┘──│ μ_B, σ_B │──→│ ×γ│──→
│ 计算均值 │ │ +β│
│ 和标准差 │ └───┘
└───────────┘
归一化:x̂ = (x - μ_B) / √(σ²_B + ε)
缩放平移:y = γx̂ + β
图5-12:Batch Normalization流程。先归一化到标准分布,再学习缩放和平移参数。
- 加速收敛:允许使用更大的学习率,训练更快
- 减少内部协变量偏移:稳定每层的输入分布
- 正则化效果:每个样本的归一化依赖于batch内其他样本
- 降低对初始化的敏感性:训练更稳定
其他正则化技术
| 技术 | 原理 | 应用场景 |
|---|---|---|
| Early Stopping | 验证集性能不再提升时停止训练 | 通用 |
| 数据增强 | 对训练数据进行随机变换扩充 | 图像、语音 |
| Label Smoothing | 软化硬标签,避免过度自信 | 分类任务 |
| Layer Norm | 对单个样本的所有特征归一化 | NLP、RNN |
本章小结
- 感知机与MLP:从单层感知机到多层网络,前向传播实现从输入到输出的映射
- 激活函数:ReLU适合隐藏层,Sigmoid/Softmax用于输出层,为网络引入非线性
- 反向传播:基于链式法则高效计算梯度,是训练深度网络的核心
- 优化器:Adam是通用首选,SGD+Momentum追求极致性能,RMSprop适合序列数据
- 正则化:Dropout、L2正则化、Batch Norm协同使用,有效防止过拟合