第五章

神经网络基础

从感知机到深度神经网络,掌握现代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)

前向传播是神经网络进行预测的过程,数据从输入层流向输出层,逐层计算每层的输出值。

前向传播计算流程
  1. 输入层:接收原始数据 $\mathbf{x}$
  2. 线性变换:$\mathbf{z}^{[l]} = \mathbf{W}^{[l]}\mathbf{a}^{[l-1]} + \mathbf{b}^{[l]}$
  3. 激活函数:$\mathbf{a}^{[l]} = f(\mathbf{z}^{[l]})$
  4. 逐层传递:重复步骤2-3直到输出层
  5. 输出结果:得到预测值 $\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。

与Sigmoid对比:Tanh的输出以0为中心,相比Sigmoid的(0,1)输出,梯度更新更稳定,收敛更快。

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:反向传播计算图。误差从输出层向后传播,每层计算局部梯度并累积。

反向传播完整流程

算法步骤
  1. 前向传播
    • 输入样本经过网络计算预测值 $\hat{y}$
    • 计算损失函数 $L(y, \hat{y})$
    • 保存各层中间结果
  2. 计算输出层梯度
    • $\delta^{[L]} = \nabla_{\hat{y}}L \odot f'(\mathbf{z}^{[L]})$
  3. 反向传播误差($l = L-1, ..., 1$)
    • $\delta^{[l]} = (\mathbf{W}^{[l+1]})^T \delta^{[l+1]} \odot f'(\mathbf{z}^{[l]})$
  4. 计算参数梯度
    • $\nabla_{\mathbf{W}^{[l]}}L = \delta^{[l]}(\mathbf{a}^{[l-1]})^T$
    • $\nabla_{\mathbf{b}^{[l]}}L = \delta^{[l]}$
  5. 更新参数
    • $\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}$

超参数推荐:默认 $\beta_1=0.9$, $\beta_2=0.999$, $\epsilon=10^{-8}$, 学习率 $\alpha=0.001$ 在大多数情况下表现良好。

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
选择建议:新手首选Adam,追求极致性能可尝试SGD+Momentum,训练Transformer优先考虑AdamW。

5.5正则化技术

正则化技术用于防止模型过拟合,提高泛化能力。过拟合是指模型在训练数据上表现很好,但在测试数据上表现较差的现象。

    损失
      │╲    训练误差
      │  ╲╱╲
      │      ╲_________ 验证误差
      │       ╲    ╱
      │        ╲  ╱
      │         ╲╱
      └────────────────→ 训练轮数
           ↑
        最佳停止点
            

图5-10:过拟合现象。训练误差持续下降,但验证误差在某点后开始上升。

Dropout

Dropout是一种简单有效的正则化方法,在训练时随机"关闭"一部分神经元,强制网络学习冗余表示。

    训练阶段(Dropout=0.5)      测试阶段(不Dropout)
    
    ┌───┐                      ┌───┐
    │ h₁│──×──(被丢弃)        │ h₁│────┐
    ├───┤                      ├───┤    │
    │ h₂│────────┐             │ h₂│────┤
    ├───┤        │             ├───┤    ├──→ 输出
    │ h₃│──×──   │             │ h₃│────┤
    ├───┤        ↓             ├───┤    │
    │ h₄│──→ ┌──────┐          │ h₄│────┘
    └───┘    │ 输出 │          └───┘
             └──────┘
            

图5-11:Dropout原理。训练时随机丢弃神经元(概率p),测试时使用全部神经元并调整权重。

Dropout工作机制
  • 训练时:以概率 $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 Norm的优势
  • 加速收敛:允许使用更大的学习率,训练更快
  • 减少内部协变量偏移:稳定每层的输入分布
  • 正则化效果:每个样本的归一化依赖于batch内其他样本
  • 降低对初始化的敏感性:训练更稳定
使用位置:通常在卷积层/全连接层之后,激活函数之前。部分实现放在激活函数之后也有效。

其他正则化技术

技术 原理 应用场景
Early Stopping 验证集性能不再提升时停止训练 通用
数据增强 对训练数据进行随机变换扩充 图像、语音
Label Smoothing 软化硬标签,避免过度自信 分类任务
Layer Norm 对单个样本的所有特征归一化 NLP、RNN

本章小结

  • 感知机与MLP:从单层感知机到多层网络,前向传播实现从输入到输出的映射
  • 激活函数:ReLU适合隐藏层,Sigmoid/Softmax用于输出层,为网络引入非线性
  • 反向传播:基于链式法则高效计算梯度,是训练深度网络的核心
  • 优化器:Adam是通用首选,SGD+Momentum追求极致性能,RMSprop适合序列数据
  • 正则化:Dropout、L2正则化、Batch Norm协同使用,有效防止过拟合