Day 17:神经网络入门(MLP、激活函数、反向传播、优化器)
📋 目录
- 神经网络概述
- 感知机与多层感知机(MLP)
- 激活函数详解
- 前向传播与反向传播
- 优化器与学习率
- 过拟合与正则化
第一部分:神经网络概述
1.1 什么是神经网络?
人工神经网络(ANN)是受生物神经系统启发而设计的计算模型,由大量相互连接的神经元组成。
生物神经元 vs 人工神经元:
| 生物神经元 | 人工神经元 |
|---|---|
| 树突(接收信号) | 输入x i x_ixi |
| 细胞体(处理) | 加权和 + 激活函数 |
| 轴突(输出) | 输出y yy |
| 突触(连接强度) | 权重w i w_iwi |
1.2 神经网络的发展历程
| 时间 | 里程碑 | 贡献者 |
|---|---|---|
| 1958年 | 感知机 | Rosenblatt |
| 1986年 | 反向传播算法 | Rumelhart, Hinton |
| 2006年 | 深度学习 | Hinton |
| 2012年 | AlexNet | Krizhevsky |
| 2017年 | Transformer | Vaswani |
1.3 为什么需要神经网络?
传统机器学习 vs 神经网络:
| 特性 | 传统ML | 神经网络 |
|---|---|---|
| 特征工程 | 需要手动构造 | 自动学习特征 |
| 非线性 | 需核技巧 | 天然非线性 |
| 大数据 | 性能饱和 | 随数据增长 |
| 可解释性 | 较好 | 较差 |
第二部分:感知机与多层感知机(MLP)
2.1 单层感知机
结构:输入层 → 输出层(无隐藏层)
数学形式:
y = sign ( w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b ) y = \text{sign}(w_1x_1 + w_2x_2 + \dots + w_nx_n + b)y=sign(w1x1+w2x2+⋯+wnxn+b)
局限性:只能解决线性可分问题(如XOR问题无法解决)
2.2 多层感知机(MLP)
结构:输入层 → 隐藏层 → 输出层
输入层 隐藏层 输出层 x₁ ────→ h₁ ────→ y₁ x₂ ────→ h₂ x₃ ────→ h₃ ...数学形式:
h = f ( W ( 1 ) x + b ( 1 ) ) h = f(W^{(1)}x + b^{(1)})h=f(W(1)x+b(1))
y = g ( W ( 2 ) h + b ( 2 ) ) y = g(W^{(2)}h + b^{(2)})y=g(W(2)h+b(2))
其中f ff和g gg是激活函数。
2.3 MLP的表示能力
万能近似定理:一个具有足够神经元的单隐藏层MLP可以逼近任意连续函数。
第三部分:激活函数详解
3.1 为什么需要激活函数?
没有激活函数:多层线性变换等价于单层线性变换
W 2 ( W 1 x + b 1 ) + b 2 = W x + b W_2(W_1x+b_1)+b_2 = Wx+bW2(W1x+b1)+b2=Wx+b
有了激活函数:引入非线性,可以学习复杂模式
3.2 常用激活函数对比
| 函数 | 公式 | 导数 | 优点 | 缺点 |
|---|---|---|---|---|
| Sigmoid | σ ( x ) = 1 1 + e − x \sigma(x) = \cfrac{1}{1+e^{-x}}σ(x)=1+e−x1 | σ ( x ) ( 1 − σ ( x ) ) \sigma(x)(1 - \sigma(x))σ(x)(1−σ(x)) | 平滑,输出[0,1] | 梯度消失,非零中心 |
| Tanh | tanh ( x ) = e x − e − x e x + e − x \tanh(x) = \cfrac{e^x - e^{-x}}{e^x + e^{-x}}tanh(x)=ex+e−xex−e−x | 1 − tanh 2 ( x ) 1 - \tanh^2(x)1−tanh2(x) | 输出[-1,1],零中心 | 梯度消失 |
| ReLU | ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x) | 0或1 | 计算快,缓解梯度消失 | 神经元死亡 |
| Leaky ReLU | max ( 0.01 x , x ) \max(0.01x, x)max(0.01x,x) | 0.01或1 | 解决神经元死亡 | 参数固定 |
| Softmax | e x i ∑ e x j \cfrac{e^{x_i}}{\sum e^{x_j}}∑exjexi | 特殊 | 输出概率 | 多分类专用 |
3.3 激活函数选择指南
| 层类型 | 推荐激活 | 原因 |
|---|---|---|
| 隐藏层 | ReLU | 计算快,缓解梯度消失 |
| 隐藏层(备选) | Leaky ReLU, ELU | 解决神经元死亡 |
| 输出层(二分类) | Sigmoid | 输出概率 |
| 输出层(多分类) | Softmax | 输出概率分布 |
| 输出层(回归) | Linear | 输出连续值 |
3.4 Sigmoid和Tanh的梯度消失问题
# ReLU vs Sigmoid 梯度对比# Sigmoid在|x|>3时梯度接近0# ReLU在x>0时梯度=1,x<0时梯度=0第四部分:前向传播与反向传播
4.1 前向传播(Forward Propagation)
过程:输入 → 逐层计算 → 输出
# 单层前向传播defforward_pass(X,W,b,activation):z=np.dot(X,W)+b a=activation(z)returna损失函数:衡量预测与真实值的差距
| 任务 | 损失函数 | 公式 |
|---|---|---|
| 回归 | MSE | $ L = \frac{1}{n}\sum(y - \hat{y})^2 $ |
| 二分类 | 二元交叉熵 | $ L = -[y\log\hat{y} + (1 - y)\log(1 - \hat{y})] $ |
| 多分类 | 分类交叉熵 | $ L = -\sum y_i\log\hat{y}_i $ |
4.2 反向传播(Backpropagation)
核心思想:利用链式法则计算损失函数对每个参数的梯度。
链式法则:
$ \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w} $
步骤:
- 计算输出层误差δ L \delta_LδL
- 逐层反向传播误差δ l = δ l + 1 ⋅ W l + 1 T ⊙ σ ′ ( z l ) \delta_l = \delta_{l+1} \cdot W_{l+1}^T \odot \sigma'(z_l)δl=δl+1⋅Wl+1T⊙σ′(zl)
- 计算梯度∂ L ∂ W l = a l − 1 T δ l \frac{\partial L}{\partial W_l} = a_{l-1}^T \delta_l∂Wl∂L=al−1Tδl
- 更新参数W l : = W l − α ∂ L ∂ W l W_l := W_l - \alpha \frac{\partial L}{\partial W_l}Wl:=Wl−α∂Wl∂L
4.3 反向传播示例(手算)
# 简化示例:单隐藏层网络# 输入: x = [x1, x2]# 隐藏层: h = σ(W1·x + b1)# 输出: y = σ(W2·h + b2)# 损失: L = (y - y_true)²# 梯度计算:# dL/dW2 = dL/dy * dy/dz2 * dz2/dW2# dL/dW1 = dL/dy * dy/dz2 * dz2/dh * dh/dz1 * dz1/dW1第五部分:优化器与学习率
5.1 梯度下降变体
| 优化器 | 特点 | 更新公式 |
|---|---|---|
| BGD | 使用全部样本 | $ \theta := \theta - \alpha \nabla J(\theta) $ |
| SGD | 每次一个样本 | 快但不稳定 |
| Mini-batch | 每次一个batch | 速度和稳定性平衡 |
5.2 自适应优化器
| 优化器 | 核心思想 | 特点 |
|---|---|---|
| Momentum | 加入惯性 | 加速收敛,减少震荡 |
| RMSprop | 自适应学习率 | 适合非平稳目标 |
| Adam | Momentum + RMSprop | 最常用,默认选择 |
| AdamW | Adam + 权重衰减 | 更好的正则化 |
5.3 Adam优化器详解
Adam (Adaptive Moment Estimation):
- 一阶矩估计(均值):$ m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t $
- 二阶矩估计(未中心化方差):$ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 $
- 偏差校正后更新:$ \theta_{t+1} = \theta_t - \alpha \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} $
推荐配置:
- $ \alpha = 0.001 $(学习率)
- $ \beta_1 = 0.9 $
- $ \beta_2 = 0.999 $
- $ \epsilon = 10^{-8} $
5.4 学习率调度
学习率衰减策略:
# 1. 阶梯衰减# 2. 指数衰减# 3. 余弦退火# 4. 循环学习率第六部分:过拟合与正则化
6.1 神经网络的过拟合
原因:
- 模型参数远多于样本数
- 训练时间过长
- 网络结构过复杂
6.2 正则化方法
| 方法 | 原理 | 效果 |
|---|---|---|
| L1/L2正则化 | 权重大小惩罚 | 防止权重过大 |
| Dropout | 随机丢弃神经元 | 集成效果 |
| 早停 | 验证集监控 | 防止过度训练 |
| Batch Normalization | 层间标准化 | 稳定训练 |
| 数据增强 | 增加训练样本 | 提高泛化 |
6.3 Dropout详解
原理:训练时以概率p pp随机丢弃神经元
效果:
- 防止神经元共适应
- 相当于训练多个子网络的集成
- Dropout比率通常取 0.2-0.5
6.4 Early Stopping
fromsklearn.neural_networkimportMLPClassifier# 使用早停mlp=MLPClassifier(hidden_layer_sizes=(100,50),early_stopping=True,validation_fraction=0.1,n_iter_no_change=10)