图像分类任务#
从有限标签集 Y={dog,cat,…} 中为输入图像选出一个标签,学习
f:X→Y.图像在计算机中存为整数张量,例如 800×600×3,与语义之间存在 semantic gap。
主要挑战:
- viewpoint
- illumination
- background clutter
- occlusion
- deformation
- intraclass variation
- context
数据驱动方法#
- 收集带标签数据集
- 训练分类器
- 在新数据上评估
def train(images, labels): return model
def predict(model, X): return labels
最近邻 / KNN#
训练:记下全部数据;预测:找最近的 K 个邻居多数投票。
L1 距离:
d1(I1,I2)=p∑∣I1p−I2p∣L2 距离:
d2(I1,I2)=p∑(I1p−I2p)2L1 依赖坐标系(单位球为菱形),L2 不依赖(单位球为圆)。
复杂度:训练 O(1),预测 O(N),与实际部署需求相反。
K 越大决策边界越平滑,对噪声更鲁棒。
像素空间的距离不反映语义相似性(遮挡 / 平移 / 着色可构造出 L2 距离相同但视觉差异巨大的图像),故 KNN + 像素距离几乎不用于真实图像分类。
超参数选择#
超参数(K、距离度量等)需要通过验证集选择。
正确做法:train / validation / test 三分;或在小数据集上做 k-fold 交叉验证。深度学习中通常只做一次划分。
测试集只在所有模型选择完成后用一次。
线性分类器#
参数化形式:
f(x,W)=Wx+b,其中 W∈RC×D,b∈RC,x∈RD。
对 CIFAR-10:D=3072,C=10,W 为 10×3072 矩阵。
三种视角:
- 代数视角:Wx+b 直接计算分数
- 可视视角:W 的每一行 reshape 后是该类的模板;模型本质是模板匹配,每类只能一个模板(解释”双头马”现象)
- 几何视角:每类对应一个超平面 wc⊤x+bc=0,分数沿法向量单调变化
无法处理的情形:
原因:决策边界必须是超平面。
损失函数引入#
数据集 {(xi,yi)}i=1N,整体损失为单样本损失的平均:
L=N1i∑Li(f(xi,W),yi).
Softmax 分类器#
把分数 s=f(xi;W) 视作 logits,用 Softmax 转为概率:
P(Y=k∣X=xi)=∑jesjesk.交叉熵损失(即多项逻辑回归 / 负对数似然 / MLE):
Li=−log(∑jesjesyi).取值范围:Li∈[0,+∞)。
初始化健全性检查:参数小随机初始化时各类分数近似相等,故
Li≈−logC1=logC.CIFAR-10 中 log10≈2.30,训练起点应接近此值。