第十三章:Neural Networks and PyTorch --- 知识点笔记
综合来源:Lecture 13 PDF(43页)、课堂笔记(CSDN)
占位图

13.1 从线性模型到神经网络
线性模型的局限
y(x,w)=f(∑jwjϕj(x)+w0)y(\mathbf{x}, \mathbf{w}) = f\left(\sum_j w_j \phi_j(\mathbf{x}) + w_0\right)y(x,w)=f(j∑wjϕj(x)+w0)
- ϕj(x)\phi_j(\mathbf{x})ϕj(x):固定基函数(与训练数据无关)
- 即使基函数很丰富→大多数情况下不能近似任意函数
高维:诅咒与祝福
| 诅咒 | 祝福 |
|---|---|
| 需要指数级增长的数据 | 更多分离方式 |
| 点稀疏→"相似性"不可靠 | 升维+解耦→非线性可分→线性可分 |
| 容易过拟合 | 额外好特征可"解开"类别 |
数据流形 → 神经网络 ⭐
真实高维数据(图像/音频/文本)通常生活在低维流形上
- 固定基函数随维度爆炸
- 沿流形建模→复杂度=流形维度(小),非数据维度(大)
- 神经网络 = 数据依赖的基函数
- NN从数据中学习基函数→适应流形
- 也学习流形上哪些方向与任务相关
13.2 人工神经元 ⭐
生物→人工
| 生物 | 人工 |
|---|---|
| 树突(输入) | 输入 xix_ixi |
| 胞体(整合) | 加权求和 ∑wixi\sum w_i x_i∑wixi |
| 轴突(输出) | 输出 yyy |
| 突触 | 权重 wiw_iwi |
数学模型
y=f(w0+∑i=1Dwixi)=f(wTx)y = f\left(w_0 + \sum_{i=1}^{D} w_i x_i\right) = f(\mathbf{w}^T\mathbf{x})y=f(w0+i=1∑Dwixi)=f(wTx)
- 线性组合 + 激活函数fff(引入非线性)
阶跃函数 → 逻辑门
- AND门:可以用一个神经元实现
- XOR门 :单个神经元不能 实现(线性不可分)→需要隐藏层!
13.3 激活函数 ⭐⭐
| 激活函数 | 公式 | 特点 |
|---|---|---|
| Sigmoid | σ(a)=11+e−a\sigma(a)=\frac{1}{1+e^{-a}}σ(a)=1+e−a1 | 输出(0,1),梯度饱和 |
| Tanh | tanh(a)=2σ(2a)−1\tanh(a)=2\sigma(2a)-1tanh(a)=2σ(2a)−1 | 输出(-1,1),梯度饱和 |
| ReLU | max(0,a)\max(0,a)max(0,a) | 不饱和,负半轴梯度=0 |
| Leaky ReLU | max(0,a)+αmin(0,a)\max(0,a)+\alpha\min(0,a)max(0,a)+αmin(0,a) | 负半轴也有小梯度 |
| Softplus | ln(1+ea)\ln(1+e^a)ln(1+ea) | ReLU的平滑版 |
为什么ReLU更好?
- Sigmoid/Tanh在∣a∣|a|∣a∣大时→梯度→0(饱和)→梯度消失
- ReLU在a>0a>0a>0时梯度=1→不饱和→缓解梯度消失
- Leaky ReLU在a<0a<0a<0也有小梯度→避免"死神经元"
13.4 神经网络架构 ⭐⭐
单隐藏层网络
z(1)=h(W(1)x)(隐藏层) \mathbf{z}^{(1)} = h(W^{(1)}\mathbf{x}) \quad \text{(隐藏层)} z(1)=h(W(1)x)(隐藏层)
y=f(W(2)z(1))(输出层) \mathbf{y} = f(W^{(2)}\mathbf{z}^{(1)}) \quad \text{(输出层)} y=f(W(2)z(1))(输出层)
yk=f(∑jwkj(2)⋅h(∑iwji(1)xi))y_k = f\left(\sum_{j} w_{kj}^{(2)} \cdot h\left(\sum_i w_{ji}^{(1)} x_i\right)\right)yk=f(j∑wkj(2)⋅h(i∑wji(1)xi))
- W(1)W^{(1)}W(1):输入→隐藏权重 | W(2)W^{(2)}W(2):隐藏→输出权重
- hhh:隐藏层激活 | fff:输出层激活
深度网络
z(l)=h(W(l)z(l−1)),l=1,...,L\mathbf{z}^{(l)} = h(W^{(l)}\mathbf{z}^{(l-1)}), \quad l=1,\ldots,Lz(l)=h(W(l)z(l−1)),l=1,...,L
z(0)=x,z(L)=y\mathbf{z}^{(0)} = \mathbf{x}, \quad \mathbf{z}^{(L)} = \mathbf{y}z(0)=x,z(L)=y
为什么"深"而非"宽"?
- 万能逼近定理:一个隐藏层+足够多神经元→可逼近任何连续函数
- 但→深网络更高效:用更少参数表示同样复杂度函数
- 类比:逻辑门→多层比两层用更少门
13.5 PyTorch基础 ⭐
核心概念
| 概念 | 说明 |
|---|---|
| torch.tensor | 基本数据类型(数据/权重/激活) |
| nn.Module | 所有模型和层的基类 |
| nn.Linear | 全连接层 |
| Autograd | 自动微分→.backward()计算梯度 |
| Optimizer | torch.optim.Adam/SGD 参数更新 |
典型训练循环
python
model = MLPModel(dims, activation="relu")
optimizer = torch.optim.Adam(model.parameters(), lr=eta)
loss_fn = nn.CrossEntropyLoss()
for epoch in range(nepochs):
for x, t in dataloader: # Mini-batch
optimizer.zero_grad() # 清零梯度
loss = loss_fn(model(x), t) # 前向+损失
loss.backward() # 反向传播(autograd)
optimizer.step() # 参数更新
笔记中的图片索引
| 序号 | 图片内容描述 | 来源位置 |
|---|---|---|
| 图1 | 生物神经元结构 | Lecture 13 第9页 |
| 图2 | 人工神经元(求和+激活) | Lecture 13 第13页 |
| 图3 | XOR非线性决策边界 | Lecture 13 第19页 |
| 图4 | 神经网络层级结构 | Lecture 13 第23-26页 |
| 图5 | ReLU/LeakyReLU/Softplus曲线 | Lecture 13 第33页 |
| 图6 | PyTorch训练循环 | Lecture 13 第41页 |
笔记整理时间:2026年6月29日