神经网络与深度学习课程出现在越来越多大学 ECE/CS 高年级的核心课程中。这类课程通常要求学生既能数学推导(前向传播、反向传播),又能用 Python/PyTorch 实现模型并完成实验报告。
这篇指南覆盖最常见的考核内容,适合正在学习或备考神经网络相关课程(如 ECE4179、ECE421、COMP5421 等)的学生。
核心知识体系
1. 感知机与前向传播(Feedforward)
单层感知机:
$$\hat{y} = \sigma(w^T x + b)$$
- 激活函数:sigmoid、ReLU、tanh、softmax
- 损失函数:MSE(回归)、交叉熵(分类)
多层网络前向传播(逐层计算):
输入层 → [线性变换 + 激活] → 隐藏层 → ... → 输出层
考试中常见题型:给定权重矩阵,手动计算 2–3 层网络的输出。
2. 反向传播(Backpropagation)
反向传播是神经网络课程最重要也最容易出错的部分。
核心公式(链式法则):
$$\frac{\partial L}{\partial w} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z} \cdot \frac{\partial z}{\partial w}$$
各激活函数的梯度:
| 激活函数 | 公式 | 梯度 |
|---|---|---|
| Sigmoid | σ(x) = 1/(1+e^(-x)) | σ(x)(1-σ(x)) |
| ReLU | max(0, x) | 0 if x<0, 1 if x>0 |
| tanh | (e^x - e^(-x))/(e^x + e^(-x)) | 1 - tanh²(x) |
反向传播手动推导步骤:
- 前向传播,记录所有中间变量
- 计算输出层梯度 δ_L = ∂L/∂z_L
- 逐层向后传播:δ_l = (W_{l+1}^T δ_{l+1}) ⊙ σ'(z_l)
- 计算权重梯度:∂L/∂W_l = δ_l · a_{l-1}^T
3. 优化算法
梯度下降变体:
| 算法 | 更新规则 | 特点 |
|---|---|---|
| SGD | θ = θ - η∇L | 简单,噪声大 |
| Momentum | v = βv - η∇L;θ = θ + v | 加速收敛 |
| Adam | 结合 Momentum + RMSProp | 自适应学习率,目前最常用 |
学习率(Learning Rate)选择:
- 太大 → 震荡,不收敛
- 太小 → 收敛极慢
- 常用策略:学习率调度(Cosine Annealing、Step Decay)
4. 卷积神经网络(CNN)
CNN 是图像任务的标准架构,也是 ECE 深度学习课程的重点。
卷积层计算:
输出尺寸公式: $$H_{out} = \lfloor \frac{H_{in} + 2P - K}{S} \rfloor + 1$$
其中 H = 高度,P = Padding,K = 卷积核大小,S = Stride
典型 CNN 架构(常考):
| 架构 | 特点 | 参数量 |
|---|---|---|
| LeNet-5 | 最早的 CNN,MNIST | ~60K |
| AlexNet | 深度 CNN,ImageNet | ~60M |
| VGGNet | 规整 3x3 卷积叠加 | ~138M |
| ResNet | 残差连接,解决梯度消失 | ~25M(ResNet-50) |
残差块(Residual Block):
输入 x → [Conv → BN → ReLU → Conv → BN] → + x → ReLU
关键理解:跳跃连接(skip connection)使梯度可以直接流向前层,解决了深层网络的梯度消失问题。
5. 正则化方法(Regularization)
过拟合是深度学习中最常见的问题,正则化是必考知识点:
| 方法 | 原理 | 使用场景 |
|---|---|---|
| L1 正则(Lasso) | 损失 + λΣ | w |
| L2 正则(Ridge) | 损失 + λΣw² | 权重衰减,最常用 |
| Dropout | 随机丢弃神经元(训练时) | 防止共适应 |
| Batch Normalization | 每层归一化激活值 | 加速训练,稳定收敛 |
| Early Stopping | 验证集 loss 上升时停止 | 简单有效 |
Assignment 实现(PyTorch)
ECE 深度学习课程的作业通常需要用 PyTorch 实现模型。
标准训练循环
import torch
import torch.nn as nn
import torch.optim as optim
# 定义模型
class SimpleNN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(hidden_dim, output_dim)
)
def forward(self, x):
return self.layers(x)
# 初始化
model = SimpleNN(784, 256, 10)
optimizer = optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()
# 训练循环
for epoch in range(num_epochs):
model.train()
for batch_x, batch_y in train_loader:
optimizer.zero_grad() # 梯度清零
output = model(batch_x) # 前向传播
loss = criterion(output, batch_y) # 计算 loss
loss.backward() # 反向传播
optimizer.step() # 更新参数
# 验证
model.eval()
with torch.no_grad():
# ... 计算验证集精度
实验报告写作要点
ECE 深度学习课的实验报告通常要求:
- 实验设置说明:模型架构、超参数、数据集划分
- 训练曲线图:Loss / Accuracy vs Epochs(用 Matplotlib 生成)
- 结果分析:不同超参数设置的对比,解释差异原因
- 结论:什么设置最好,为什么
常见扣分点:
- 只贴图表,没有文字分析("Loss 下降了" 不算分析,"使用 Adam 比 SGD 收敛更快,原因是其自适应学习率..." 才是)
- 超参数选择没有说明理由
- 报告写成流水账,没有结构
期末考试策略
手推题(必考):
- 反向传播链式法则推导(给定小型网络,手算梯度)
- CNN 卷积输出尺寸计算
- L2 正则化对梯度的影响
概念题(高频):
- BatchNorm vs LayerNorm 的区别和应用场景
- Dropout 在训练和推理时的不同行为
- 梯度消失和梯度爆炸的原因及解决方案
备考建议:
- 把反向传播推导练习到不看公式也能写出来
- 理解 ResNet 残差块解决的问题(梯度消失),而不只是背结构
- CNN 参数量计算(卷积层参数 = K×K×C_in×C_out + C_out bias)
常见问题
神经网络课程对数学基础有什么要求?
需要掌握:多变量微积分(链式法则、偏导数)、线性代数(矩阵乘法、特征值)和基础概率(贝叶斯、高斯分布)。这些在 ECE 低年级课程中通常已经涉及。
PyTorch 和 TensorFlow 哪个更常用于课程?
大多数北美大学 2023 年后的 ECE/CS 深度学习课程已经转向 PyTorch,因为其动态图更接近 Python 思维,调试更方便。TensorFlow 在工业界仍大量使用,但课程作业以 PyTorch 为主。
Assignment 报告写多长合适?
通常没有严格字数限制,但每个实验结果后应有对应分析(2–4 句),整体报告 5–10 页(含图表)比较合适。过短显得分析不足,过长如果质量一般反而扣印象分。
