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
)
相关推荐
喜欢打篮球的普通人3 分钟前
MiniMind 学习笔记(十八):速通强化学习——从 MDP 到 PPO 的概念与算法地图
笔记·深度学习·学习
要吃这碗饭4 分钟前
AI 智能体如何通过 auth.md 注册 Bright Data 账号
数据库·人工智能·php
天远Date Lab13 分钟前
零信任架构实战:基于天远学籍核验三要素构建自动化竞赛资格审查网关
运维·人工智能·架构·自动化
海盗123414 分钟前
AI 新闻日报 2026-10-09:企业代理独立身份、便利店机器人上岗、世界模型接棒
人工智能·机器人·人工智能aigc
核数聚19 分钟前
低端标注拼的是单价,高端标注拼的是能力
人工智能·核数聚
东离与糖宝24 分钟前
RAG调参的承重项:Agentic AutoRAG背后藏着反转
人工智能
FL162386312929 分钟前
外来入侵植物检测数据集VOC+YOLO格式1111张5类别
人工智能·yolo·机器学习
oioihoii34 分钟前
三步改掉 AI 味,附可直接复制的去 AI 味提示词
人工智能
阿乔外贸日记35 分钟前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算
曹牧41 分钟前
AI Skill
人工智能