前期准备:作业环境#
cd /Volumes/lexar1t/learn/cs231n/assignment1
uv venv --python 3.9
source .venv/bin/activate
uv pip install numpy matplotlib future jupyterlab jupyterlab-lsp python-lsp-server
cd cs231n/datasets && ./get_datasets.sh && cd ../..
bash
Lec1 Intro#
训练动力学#
高容量算法需要靠海量数据驱动,模型才能学会泛化。这些泛化规则和过拟合背后,有着深层的数学原理。
L=data loss(拟合数据)N1i∑Li+正则(压制容量,防过拟合)λR(W)
CV 的最简单任务:图像分类#
2011 至今,ImageNet 见证了深度学习的再度繁荣。

CV 的进阶任务:图像理解#
包括图像分割,目标检测……
CV 的未来:和生成式结合#
视觉不是全部。
Lec2 DL Basics#
计算机视觉的挑战#
以 RGB 图像为例:
平移旋转(位置及其关系)
RGB 变化(取决于表面材质、颜色和光源)
背景(高频和低频信息)
尺度变化(缩放)
图像尺寸(被归一化了,没那么重要)
遮挡
形变
类内差异
上下文
数据驱动的算法构建#
以图像识别为例
- 收集 (images, label) 对
- 用机器学习算法设计分类器,并使用数据训练
- 用保留数据测试分类器效果
最简单的两类分类器#
Nearest Neighbor Classifier#
算法设计#

曼哈顿距离(L1)和欧氏距离(L2):旋转敏感和旋转不敏感。(泛函)

L1 距离对于旋转是不规则的,如果我们的特征是具体的,尺度不同的,推荐使用。
L2 距离是一个圆,如果我们的特征尺度相似,并不具体,可以使用。
超参数#
最近的 K 个邻居投票决定这个点是什么类别。
K 是我们接触的第一个超参数。
如何调参,寻找更好的超参数?

也就是说,将我们能够得到的数据划分为三段:训练集、验证集和测试集。
我们在测试集上训练,选定对于验证集效果最好的超参,然后拿去给测试集测试。
还能更合理吗?交叉验证。

但是太吃算力了,在大规模深度学习中是高成本的。人们往往依靠直觉调参,使用单一验证集。
Linear Classification#
原理:
f(x,W)=Wx+b

现代深度学习模型的构建原语。

局限性(单层)

损失函数 Loss#
L=N1i∑Li(f(xi,W),yi)
反映预测的偏差程度。
在机器学习中,找到参数 w 使得损失函数 L 最小的过程称为优化(optimization)。
Softmax 分类器#
归一化,选最大。
给定输入就是这第 i 张图 xi
的前提下,标签 Y 等于第 k 类的概率
P(Y=k∣X=xi)=∑jesjesk
交叉熵#

计算理想分布 P(y)=(A1B0C0) 和实际分布:P(y)=(AxaBxbCxc) 的 KL 散度:
KL(P,Q)=∑P(y)logQ(y)P(y)=−logP(xa)
代入 Y=k∣X=xi 也就是说:
L=KL(P,Q)=−logP(Y=k∣X=xi)
我们也叫这个为交叉熵(当理想分布为 One-Hot 编码时)
Lec3 Regularization & Optimization#
正则化#
L=拟合训练数据N1i∑Li+避免模型在训练集上做的太好λR(W)
对于 λR(W),λ 是正则化强度, R(W) 是正则化项。
L2 正则化(也叫 weight decay):
R(W)=k∑l∑Wk,l2
会让近 0 值被更多保留。
L1 正则化:
R(W)=k∑l∑∣Wk,l∣
会让权重更少近 0 项,保留少数非零项。
组合 L1 L2:
R(W)=k∑l∑βWk,l2+∣Wk,l∣
正则化是一个不断发展的前沿课题。很多东西都能扯到正则化。
Loss Landscape
可微且凸函数。
海森矩阵#
我们用牛顿法引入海森矩阵。
高中我们学过,求 f(x)=0 可以用:
x′=x−f′(x)f(x)
逐步逼近。
模型效果最好 ⇔ L(W) 取极小值 ⇔ L′(W)=0。于是我们又回到了牛顿迭代法:
W′=W−L(2)(W)L′(W)
把一共有 n 个参数的权重拉直为 W1…Wn
原来的一阶导 L′(W) 变成梯度 ∇L(W)
原来的二阶导 L(2)(W) 变成海森矩阵:
H=∂W1∂W1∂2L∂W2∂W1∂2L⋮∂Wn∂W1∂2L∂W1∂W2∂2L∂W2∂W2∂2L⋮⋯⋯⋯⋱⋯∂W1∂Wn∂2L∂W2∂Wn∂2L⋮∂Wn∂Wn∂2L
不计成本的优化:
W′=W−H∇L=H−1∇L
这就是牛顿法。现实里面的方法是做各种近似,然后以距离牛顿法的效果有多远为评价标准。
梯度下降(Gradient Descent, GD):
L′=L+λ∇WL(W,x,y)
- 数值解,浮点运算
- 解析解,DAG 图链式发展
梯度下降遇到的问题#
局部最优解#
local minima 不等于 gobal minima

鞍点和平原是优化要面临的主要挑战。
鞍点海森矩阵非正定。
随机梯度下降(Stochastic DG, SDG)#
x,y 取 minibatch:
L′=L+λ∇WL(W,x′,y′)
Momentium#
优化器保存动量。