如果没有 hidden layer
每个 class 只能用一个线性分界面组织像素,表示能力受限。
EECS498 · Deep Learning Revisited · 01
你当年从 KNN、linear classifier 走到 two-layer net,真正发生的变化不是 API 变多了,而是“数据怎样变成可学习的 representation”第一次闭环。
30-second recall
你当年实现了距离矩阵、线性 scores、ReLU hidden layer、softmax loss 和参数更新。
KNN 没有学习一个参数化表示:预测时仍要把测试样本与训练集比较。A2 的线性分类器第一次把经验压进 W;two-layer net 又允许数据先经过一个可学习 hidden representation,再变成 class scores。
| File | Implemented in repository | Evidence |
|---|---|---|
A1/knn.py
|
three distance kernels, label vote, K-fold CV | zip diff;Notebook test 33.86% |
A2/linear_classifier.py
|
SVM / softmax naive+vectorized, minibatch SGD | zip diff;two saved checkpoints |
A2/two_layer_net.py
|
affine → ReLU → affine, softmax, manual gradients | zip diff;test 53.59% |
CourseStack Explanation “函数链”是本课程为复习建立的统一视角,不声称是你当年的原话。
神经网络不是一袋 layer;它是把输入 representation 逐层改写,最后让正确答案的 score 更容易胜出的参数化函数。
把 CIFAR-10 图片 flatten 后,X[n] 是第 n 个样本;W1[:,h] 是生成第 h 个 hidden feature 的参数;hidden[n,h] 是这个样本在该 feature 上的 activation。参数跨样本共享,activation 随输入改变。
用最小公式恢复链条:
H = ReLU(XW₁ + b₁) [N,D]·[D,H] → [N,H]
S = HW₂ + b₂ [N,H]·[H,C] → [N,C]
L = softmax_loss(S, y) [N,C] + [N] → scalar
Your code · 2022
A2/two_layer_net.py · nn_forward_pass()
hidden = X.mm(W1) + b1
hidden *= 1 * (hidden > 0) # ReLU
scores = hidden.mm(W2) + b2
这三行已经包含了深度学习最持久的结构:线性混合负责“组合已有特征”,非线性负责让多层不坍缩成一次矩阵乘法。
每个 class 只能用一个线性分界面组织像素,表示能力受限。
XW1W2 仍等价于单个线性变换;“两层”只有记账意义。
Score 不是 probability,hidden unit 也不是预先命名的“眼睛检测器”。它们先是训练过程塑造出的数值 representation;softmax 才把相对 score 解释成归一化分布。
现代 Transformer 仍做同一件事:token IDs → embedding → 多层 hidden representations → vocabulary scores → scalar loss。模型更大、block 更复杂,但“参数共享的函数链”没有改变。
[32,128]。每个样本得到 128 个 hidden features;3072 是被加权汇总的输入维。
忽略 bias 后仍可合并成一个矩阵;加入 bias 仍只是 affine。深度没有创造分段非线性边界。
W 是所有样本共享的规则;hidden 是每个样本经过规则后产生的状态。
最朴素的 KNN 保存训练样本,预测时比较新输入与所有旧样本;它没有学出一组可复用参数,推理成本随训练集增长。Linear classifier 把分类规则压进 W,但只有线性 decision boundary;two-layer network 再加入可学习 hidden representation 与非线性。
取 N=2,D=3,H=4,C=2:
X [2,3] data
W1 [3,4] parameter
XW1+b1 [2,4] preactivation
ReLU [2,4] hidden activation
W2 [4,2] parameter
scores [2,2] class evidence
softmax loss scalar objectiveH=4 是模型构造的四个 learned features;C=2 才是类别轴。
XW1W2 可合并成一张矩阵 XW;堆两层没有扩大线性函数族。
| 对象 | 身份 | 是否随 example 变化 |
|---|---|---|
| X / hidden / scores | activations | 是 |
| W1,b1,W2,b2 | parameters | 否(只在 update 改) |
| dW1,db1,dW2,db2 | gradients | 随 batch/loss 变化 |
Hidden activation 不是模型参数。模型学的是生成 activation 的 weights;activation 还依赖当前 X。
activations 第一轴变 64;W1/W2 不变。batch size 不是 model capacity。
forward 输出 0;对该 preactivation 的 local gradient 为 0。
把 input 换成 9 个 token vectors,普通 FC 如何跨 positions 连接?这会暴露什么结构缺口?
Forward 构造 scores;下一课反向追问一个 scalar loss 怎样为 W1 的每个元素产生方向。
Based on your implementation