Day 17:神经网络入门(MLP、激活函数、反向传播、优化器)

Day 17:神经网络入门(MLP、激活函数、反向传播、优化器)

📋 目录

  1. 神经网络概述
  2. 感知机与多层感知机(MLP)
  3. 激活函数详解
  4. 前向传播与反向传播
  5. 优化器与学习率
  6. 过拟合与正则化

第一部分:神经网络概述

1.1 什么是神经网络?

人工神经网络(ANN) 是受生物神经系统启发而设计的计算模型,由大量相互连接的神经元组成。

生物神经元 vs 人工神经元

生物神经元 人工神经元
树突(接收信号) 输入 xix_ixi
细胞体(处理) 加权和 + 激活函数
轴突(输出) 输出 yyy
突触(连接强度) 权重 wiw_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(w1x1+w2x2+⋯+wnxn+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)

结构:输入层 → 隐藏层 → 输出层

text 复制代码
输入层     隐藏层     输出层
   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))

其中 fff 和 ggg 是激活函数。

2.3 MLP的表示能力

万能近似定理:一个具有足够神经元的单隐藏层MLP可以逼近任意连续函数。


第三部分:激活函数详解

3.1 为什么需要激活函数?

没有激活函数:多层线性变换等价于单层线性变换

W2(W1x+b1)+b2=Wx+bW_2(W_1x+b_1)+b_2 = Wx+bW2(W1x+b1)+b2=Wx+b

有了激活函数:引入非线性,可以学习复杂模式

3.2 常用激活函数对比

函数 公式 导数 优点 缺点
Sigmoid σ(x)=11+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)=ex−e−xex+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.01x,x) \max(0.01x, x) max(0.01x,x) 0.01或1 解决神经元死亡 参数固定
Softmax exi∑exj \cfrac{e^{x_i}}{\sum e^{x_j}} ∑exjexi 特殊 输出概率 多分类专用

3.3 激活函数选择指南

层类型 推荐激活 原因
隐藏层 ReLU 计算快,缓解梯度消失
隐藏层(备选) Leaky ReLU, ELU 解决神经元死亡
输出层(二分类) Sigmoid 输出概率
输出层(多分类) Softmax 输出概率分布
输出层(回归) Linear 输出连续值

3.4 Sigmoid和Tanh的梯度消失问题

python 复制代码
# ReLU vs Sigmoid 梯度对比
# Sigmoid在|x|>3时梯度接近0
# ReLU在x>0时梯度=1,x<0时梯度=0

第四部分:前向传播与反向传播

4.1 前向传播(Forward Propagation)

过程:输入 → 逐层计算 → 输出

python 复制代码
# 单层前向传播
def forward_pass(X, W, b, activation):
    z = np.dot(X, W) + b
    a = activation(z)
    return a

损失函数:衡量预测与真实值的差距

任务 损失函数 公式
回归 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}

步骤

  1. 计算输出层误差 δL\delta_LδL
  2. 逐层反向传播误差 δl=δl+1⋅Wl+1T⊙σ′(zl)\delta_l = \delta_{l+1} \cdot W_{l+1}^T \odot \sigma'(z_l)δl=δl+1⋅Wl+1T⊙σ′(zl)
  3. 计算梯度 ∂L∂Wl=al−1Tδl\frac{\partial L}{\partial W_l} = a_{l-1}^T \delta_l∂Wl∂L=al−1Tδl
  4. 更新参数 Wl:=Wl−α∂L∂WlW_l := W_l - \alpha \frac{\partial L}{\partial W_l}Wl:=Wl−α∂Wl∂L

4.3 反向传播示例(手算)

python 复制代码
# 简化示例:单隐藏层网络
# 输入: 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 学习率调度

学习率衰减策略

python 复制代码
# 1. 阶梯衰减
# 2. 指数衰减
# 3. 余弦退火
# 4. 循环学习率

第六部分:过拟合与正则化

6.1 神经网络的过拟合

原因

  • 模型参数远多于样本数
  • 训练时间过长
  • 网络结构过复杂

6.2 正则化方法

方法 原理 效果
L1/L2正则化 权重大小惩罚 防止权重过大
Dropout 随机丢弃神经元 集成效果
早停 验证集监控 防止过度训练
Batch Normalization 层间标准化 稳定训练
数据增强 增加训练样本 提高泛化

6.3 Dropout详解

原理 :训练时以概率 ppp 随机丢弃神经元

效果

  • 防止神经元共适应
  • 相当于训练多个子网络的集成
  • Dropout比率通常取 0.2-0.5

6.4 Early Stopping

python 复制代码
from sklearn.neural_network import MLPClassifier

# 使用早停
mlp = MLPClassifier(
    hidden_layer_sizes=(100, 50),
    early_stopping=True,
    validation_fraction=0.1,
    n_iter_no_change=10
)
相关推荐
北方的银狐-Zero1 小时前
ERP 管执行,数据管标准,OntoL本体 管思考:企业智能化升级的规划图
大数据·人工智能·本体论
浅安的邂逅2 小时前
260918-白帽把 OpenAI 论坛“打穿“了:攻防赛漏洞、账户被 Claude 入侵、模型偷偷掩盖不当行为
人工智能·大模型·ai编程·ai模型·行业动态
jinyishu_2 小时前
认识 AI Agent:概念、架构、设计模式与主流框架
人工智能
Hrain-AI2 小时前
AI 爬虫三档授权工程落地:搜索放行、训练拦截、Agent 分层(附脚本)
人工智能·elasticsearch·milvus
sunhy_csdn2 小时前
“词码”作为 Token 候选译名
人工智能
Hrain-AI2 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
Koi慢热2 小时前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全
净水深流3 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
万联WANFLOW3 小时前
从“连接网络”到“编排业务”:企业网络架构正在发生什么变化?
网络·人工智能