计算机视觉与深度学习-Lecture1 and Lecture2
CS231n: Convolutional Neural Networks for Visual Recognition
Stanford University | Fei-Fei Li & Andrej Karpathy
Lecture 1:Introduction to Computer Vision
历史背景
- ImageNet:由李飞飞(Fei-Fei Li)团队创建的大规模图像数据集,包含超过 1400 万张标注图像,涵盖 2 万多个类别。它的出现为深度学习在视觉领域的发展提供了数据基础。
- ImageNet 大规模视觉识别挑战赛(ILSVRC):每年举办的图像分类比赛,推动了许多突破性算法的发展。
里程碑:AlexNet(2012)
- 由 Alex Krizhevsky、Ilya Sutskever、Geoffrey Hinton 提出
- 首次将深度学习大规模应用于图像分类,在 ILSVRC 2012 上以巨大优势夺冠
- 标志着深度学习革命的开始
课程四大板块
1. Deep Learning Basics(深度学习基础)
- 线性分类器(Linear Classifier)
- 损失函数与优化(Loss Functions & Optimization)
- 神经网络与反向传播(Neural Networks & Backpropagation)
2. Perceiving and Understanding the Visual World(感知与理解视觉世界)
四个核心任务:
| 任务 | 英文 | 描述 |
|---|---|---|
| 分类 | Classification | 判断图片整体属于哪个类别 |
| 语义分割 | Semantic Segmentation | 对每个像素进行分类(同一类物体不区分个体) |
| 目标检测 | Object Detection | 定位并识别图中每个物体的边界框 |
| 实例分割 | Instance Segmentation | 对每个像素分类 + 区分同一类的不同个体 |
主要模型架构:
- CNN(卷积神经网络):图像处理的基石架构
- RNN(循环神经网络):处理序列数据,可用于视频理解
- Transformer:自注意力机制,后来成为视觉领域的核心架构(ViT, DETR 等)
- 注意力机制(Attention):让模型学会"关注"输入中的重要部分
大规模分布式训练(Large Scale Distributed Training):如何在多 GPU / 多机器上高效训练大模型
3. Generative and Interactive Visual Intelligence(生成式与交互式视觉智能)
- 自监督学习(Self-Supervised Learning):无需人工标注,让模型从数据自身学习表征
- 生成式建模(Generative Modeling):GAN、VAE、扩散模型(Diffusion Models)等,生成新图像
- 视觉语言模型(Visual Language Models):图文多模态模型(如 CLIP、GPT-4V)
- 3D 视觉(3D Vision):三维重建、神经辐射场(NeRF)等
- 具身智能(Embodied Intelligence):让 AI 在物理/虚拟环境中感知、行动和交互
4. Human-Centered Applications and Implications(以人为中心的应用与影响)
- AI 伦理、偏见、公平性
- 隐私与安全
- 实际部署与社会影响
Lecture 2:Image Classification with Linear Classifier
数据驱动方法(Data-Driven Approach)
传统方法(硬编码规则)无法应对图像分类的复杂性,现代方法采用三步走:
| 步骤 | 英文 | 说明 |
|---|---|---|
| 1. 收集 | Collect | 收集带有标签的图像数据集 |
| 2. 训练 | Train | 使用机器学习算法训练分类器 |
| 3. 评估 | Evaluate | 在新图像上评估分类器性能 |
K-最近邻算法(K-Nearest Neighbors, KNN)
距离度量
L1 距离(曼哈顿距离 / Manhattan Distance):
d1(I1,I2)=∑p∣I1p−I2p∣d_1(I_1, I_2) = \sum_p |I_1^p - I_2^p|d1(I1,I2)=p∑∣I1p−I2p∣
- 对每个像素位置 p,计算像素值之差的绝对值,再求和
- 特征保留:每个维度的差异被同等对待
- 几何上形成矩形/菱形的决策边界
- 适合特征含义明确的场景
L2 距离(欧几里得距离 / Euclidean Distance):
d2(I1,I2)=∑p(I1p−I2p)2d_2(I_1, I_2) = \sqrt{\sum_p (I_1^p - I_2^p)^2}d2(I1,I2)=p∑(I1p−I2p)2
- 计算像素值之差的平方和,再开根号
- 特征更随意:对大的差异惩罚更重
- 几何上形成圆形的决策边界
- 更常用,但在某些场景下不如 L1
超参数 K
- K 是超参数(Hyperparameter)——由我们手动设定、算法本身无法学习的变量
- K 值的选择高度依赖数据集
- K 太小 → 容易过拟合,对噪声敏感
- K 太大 → 决策边界过于平滑,可能欠拟合
超参数选择策略
核心原则:测试集只能使用一次,绝不能用于调参!
| 方法 | 做法 | 评价 |
|---|---|---|
| 1. 训练集上选最优 | 在所有训练数据上调参 | ❌ 最差,K=1 总是最优,完全过拟合 |
| 2. 测试集上选最优 | 在测试集上调参 | ❌ 作弊,无法反映真实泛化能力 |
| 3. 验证集上选最优 | 划分训练集/验证集/测试集 | ✅ 正确方法 |
| 4. 交叉验证 | 训练集分成 N 份,轮流当验证集 | ✅✅ 最佳方法,数据较少时尤其有用 |
参数方法(Parametric Approach)
- KNN 是非参数方法:训练时只是记住所有数据,预测时再做计算(lazy learning)
- 参数方法:训练阶段从数据中学习紧凑的模型参数(如权重矩阵 W),预测时只需前向计算,非常高效
线性分类器(Linear Classifier)
核心公式
f(x,W)=Wx+bf(x, W) = Wx + bf(x,W)=Wx+b
- x:输入图像(展平为一维向量,如 32×32×3 = 3072 维)
- W:权重矩阵(参数),每个类别一行
- b:偏置向量(bias),提供类别无关的偏移
- 输出:每个类别的得分(score),最高分即为预测类别
几何解释
- 每个类别对应高维空间中的一个超平面
- W 的每一行是一个类别的模板(template),代表了该类别的"原型图像"
- 分类器计算输入 x 与各类别模板的内积相似度 + 偏置
如何选定 W?→ 损失函数(Loss Function)
损失函数用于量化 W 的好坏:
- 损失越低 → 分类器表现越好
- 目标是找到使损失最小化的 W
两种常见损失函数:
1. SVM 损失(Hinge Loss / 多类 SVM 损失):
Li=∑j≠yimax(0,sj−syi+Δ)L_i = \sum_{j \neq y_i} \max(0, s_j - s_{y_i} + \Delta)Li=j=yi∑max(0,sj−syi+Δ)
- syis_{y_i}syi 是正确类别的得分,sjs_jsj 是其他类别的得分
- Δ\DeltaΔ 是安全边界(margin),通常设为 1
- 核心思想:正确类别的得分应该比错误类别高至少 Δ\DeltaΔ
- 如果正确类别的得分已经足够高,损失为零
2. Softmax 分类器(交叉熵损失 / Cross-Entropy Loss):
Li=−log(esyi∑jesj)L_i = -\log\left(\frac{e^{s_{y_i}}}{\sum_j e^{s_j}}\right)Li=−log(∑jesjesyi)
- 先将得分通过 Softmax 函数转化为概率分布:P(yi∣xi)=esyi∑jesjP(y_i | x_i) = \frac{e^{s_{y_i}}}{\sum_j e^{s_j}}P(yi∣xi)=∑jesjesyi
- 再取正确类别概率的负对数作为损失
- 核心思想:最大化正确类别的概率,等价于最小化交叉熵
- 损失范围:[0,∞)[0, \infty)[0,∞),概率越接近 1,损失越接近 0
SVM vs Softmax 对比:
| SVM Loss | Softmax Loss | |
|---|---|---|
| 关注点 | 正确得分是否比错误高 margin | 正确类别的概率是否尽可能大 |
| 一旦满足 margin | 损失为零,不再优化 | 持续优化,追求更高概率 |
| 输出解释 | 得分(无概率含义) | 概率分布 |
关键术语速查表
| 术语 | 英文 | 简要解释 |
|---|---|---|
| 超参数 | Hyperparameter | 训练前手动设定、不能被学习的参数 |
| 过拟合 | Overfitting | 模型在训练集上表现很好,但泛化到新数据时表现差 |
| 损失函数 | Loss Function | 衡量模型预测结果与真实标签之间差距的函数 |
| 交叉验证 | Cross-Validation | 将数据分成多份轮流验证,更可靠地评估模型 |
更多推荐




所有评论(0)