graph LR
A["输入 x1"] -->|w1| D["加权求和"]
B["输入 x2"] -->|w2| D
C["输入 x3"] -->|w3| D
D -->|"z = Σ wi*xi + b"| E["激活函数 f"]
E -->|"y = f(z)"| F["输出"]
style D fill:#84fab0
style E fill:#8fd3f4
style F fill:#ffd89b
公式: f(x) = max(0, x) = { x, if x > 0; 0, if x ≤ 0 } 导数: f'(x) = { 1, if x > 0; 0, if x ≤ 0 }
🌟 ReLU的核心优势:
解决梯度消失:正数区域梯度恒为1,误差信号无衰减传播
计算高效:只需简单的阈值比较,无指数运算
稀疏激活:约50%的神经元被抑制(输出0),提高效率
更快收敛:相比Sigmoid/Tanh快6倍左右
⚠️ ReLU的问题:
Dead ReLU:负数区域梯度为0,部分神经元可能永久失活
非零中心化:输出均值不为0
💡 改进版本:Leaky ReLU、PReLU、ELU等
2.5 激活函数对比总结
graph TD
A["选择激活函数"] --> B{"任务类型?"}
B -->|"隐藏层"| C["优先选择ReLU"]
B -->|"二分类输出"| D["使用Sigmoid"]
B -->|"多分类输出"| E["使用Softmax"]
B -->|"回归输出"| F["使用线性/恒等函数"]
C --> G{"遇到Dead ReLU?"}
G -->|"是"| H["尝试Leaky ReLU/PReLU"]
G -->|"否"| I["继续使用ReLU"]
style C fill:#90EE90
style D fill:#FFB6C1
style E fill:#87CEEB
style F fill:#FFD700
flowchart LR
A["输入层 X"] -->|"W1, b1"| B["隐藏层1"]
B -->|"激活函数"| C["激活值 A1"]
C -->|"W2, b2"| D["隐藏层2"]
D -->|"激活函数"| E["激活值 A2"]
E -->|"W3, b3"| F["输出层"]
F -->|"激活函数"| G["预测值 Y"]
G --> H["计算损失 Loss"]
style A fill:#a8edea
style C fill:#fed6e3
style E fill:#c1dfc4
style G fill:#ffd89b
style H fill:#ff6b6b
flowchart RL
H["损失 Loss"] -->|"∂L/∂Y"| G["输出层梯度"]
G -->|"链式法则"| F["∂L/∂W3, ∂L/∂b3"]
G -->|"反向传播"| E["隐藏层2梯度"]
E -->|"链式法则"| D["∂L/∂W2, ∂L/∂b2"]
E -->|"反向传播"| C["隐藏层1梯度"]
C -->|"链式法则"| B["∂L/∂W1, ∂L/∂b1"]
style H fill:#ff6b6b
style G fill:#ffd89b
style E fill:#c1dfc4
style C fill:#fed6e3
graph TD
A["优化算法"]
A --> B["SGD 收敛快但不稳定"]
A --> C["Momentum 加入动量机制"]
A --> D["AdaGrad 自适应学习率"]
A --> E["RMSprop 改进AdaGrad"]
A --> F["Adam ⭐ 深度学习首选"]
style A fill:#667eea,stroke:#333,stroke-width:3px,color:#fff
style B fill:#e8e8e8,stroke:#333,stroke-width:2px
style C fill:#e8e8e8,stroke:#333,stroke-width:2px
style D fill:#e8e8e8,stroke:#333,stroke-width:2px
style E fill:#e8e8e8,stroke:#333,stroke-width:2px
style F fill:#90EE90,stroke:#333,stroke-width:3px
🔧 六、TensorFlow实战
6.1 TensorFlow核心概念
graph TD
A["TensorFlow 核心概念"]
A --> B["张量 Tensor 多维数组"]
A --> C["计算图 Graph 描述计算流程"]
A --> D["会话 Session 执行计算"]
style A fill:#667eea,stroke:#333,stroke-width:3px,color:#fff
style B fill:#84fab0,stroke:#333,stroke-width:2px
style C fill:#8fd3f4,stroke:#333,stroke-width:2px
style D fill:#ffd89b,stroke:#333,stroke-width:2px
💡 详细说明:
张量:0维(标量)、1维(向量)、2维(矩阵)、3维+(高维张量)
计算图:节点表示操作,边表示张量流动
会话:TF 1.x需显式Session,TF 2.x使用即时执行
6.2 TensorFlow 2.x 特性
1. 即时执行(Eager Execution)
默认模式,代码逐行运行,类似NumPy
便于调试,无需构建计算图
适合快速实验和原型开发
2. @tf.function 装饰器
将Python函数转换为TensorFlow计算图
提升执行效率,减少Python调用开销
支持跨平台部署(TensorFlow Serving)
6.3 神经网络训练流程
flowchart TD
A["开始"] --> B["1. 数据加载与预处理"]
B --> C["2. 定义网络结构"]
C --> D["3. 初始化参数"]
D --> E["4. 前向传播"]
E --> F["5. 计算损失"]
F --> G["6. 反向传播"]
G --> H["7. 更新参数"]
H --> I{"达到最大迭代次数?"}
I -->|"否"| E
I -->|"是"| J["训练完成"]
style B fill:#a8edea
style C fill:#fed6e3
style E fill:#c1dfc4
style F fill:#ffd89b
style G fill:#ff6b6b
style J fill:#90EE90
🏠 七、案例:波士顿房价预测
7.1 数据集介绍
📊 数据集信息:
样本数量:506条
特征数量:13个(犯罪率、房间数、距离等)
目标变量:房价(连续值)
任务类型:回归问题
7.2 网络架构设计
graph LR
A["输入层 13个特征"] -->|"W1, b1"| B["隐藏层 10个神经元"]
B -->|"ReLU激活"| C["激活值"]
C -->|"W2, b2"| D["输出层 1个神经元"]
D -->|"线性激活"| E["预测房价"]
style A fill:#a8edea
style B fill:#fed6e3
style C fill:#c1dfc4
style D fill:#ffd89b
style E fill:#ff6b6b
graph TD
A["分布式训练策略"]
A --> B["数据并行 ⭐ 主流方案"]
A --> C["模型并行 超大模型"]
B --> B1["MirroredStrategy 单机多卡"]
B --> B2["MultiWorkerMirroredStrategy 多机多卡"]
style A fill:#667eea,stroke:#333,stroke-width:3px,color:#fff
style B fill:#90EE90,stroke:#333,stroke-width:3px
style C fill:#e8e8e8,stroke:#333,stroke-width:2px
style B1 fill:#c8f7c8,stroke:#333,stroke-width:2px
style B2 fill:#c8f7c8,stroke:#333,stroke-width:2px
💡 数据并行原理:
将数据拆分到多个设备,每个设备有完整模型副本,计算梯度后同步更新。适合常规模型训练。
💡 模型并行原理:
将模型拆分到多个设备,不同层在不同设备上运行。适合显存不足的超大模型。
8.2 数据并行原理
💡 数据并行优势:
加速训练:多GPU并行计算,训练速度提升N倍(N为GPU数量)
自动同步:TensorFlow自动处理梯度聚合和参数更新
易于实现:只需在strategy.scope()下定义模型即可
🌐 九、TensorFlow Serving部署
9.1 模型部署流程
flowchart LR
A["训练模型"] --> B["保存为SavedModel"]
B --> C["启动TF Serving"]
C --> D["REST/gRPC API"]
D --> E["客户端调用"]
E --> F["返回预测结果"]
style A fill:#a8edea
style B fill:#fed6e3
style C fill:#c1dfc4
style D fill:#ffd89b
style E fill:#ff6b6b
style F fill:#90EE90
9.2 部署架构
🎯 TensorFlow Serving特点:
高性能:专为生产环境优化,支持批处理和GPU加速
版本管理:支持多版本模型共存,热更新无需停机
灵活部署:支持Docker容器化部署,易于扩展
多协议支持:REST API(易用)和gRPC(高性能)
📊 十、深度学习框架对比
graph TD
A["深度学习框架"]
A --> B["TensorFlow Google | 工业部署"]
A --> C["PyTorch Facebook | 学术研究"]
A --> D["Keras 高层API | 易用"]
A --> E["PaddlePaddle 百度 | 国产化"]
style A fill:#667eea,stroke:#333,stroke-width:3px,color:#fff
style B fill:#FF6F00,stroke:#333,stroke-width:2px,color:#fff
style C fill:#EE4C2C,stroke:#333,stroke-width:2px,color:#fff
style D fill:#D00000,stroke:#333,stroke-width:2px,color:#fff
style E fill:#0052CC,stroke:#333,stroke-width:2px,color:#fff
🔍 框架特点对比:
TensorFlow:工业部署强,TF Serving/Lite支持完善
PyTorch:动态图设计,学术界主流,代码简洁
Keras:高层封装,易用性强,已集成到TensorFlow
PaddlePaddle:中文支持好,国产化优势明显
🎓 十一、学习路径总结
flowchart TD
A["神经网络 学习路径"]
A --> B["基础理论 神经元·激活函数·损失函数"]
A --> C["编程实践 NumPy·TensorFlow·项目"]
A --> D["工程部署 模型保存·分布式·优化"]
style A fill:#667eea,stroke:#333,stroke-width:3px,color:#fff
style B fill:#84fab0,stroke:#333,stroke-width:2px
style C fill:#8fd3f4,stroke:#333,stroke-width:2px
style D fill:#ffd89b,stroke:#333,stroke-width:2px