线性分类器
约 1514 个字 预计阅读时间 10 分钟
上节回顾:图像分类
图像分类是将输入图像分配到一个预定义类别中的任务。
[输入为图像,输出为类别标签的示意图:显示一张猫的图像被分类到"猫"类别]
图像分类的挑战
识别面临许多挑战,包括:
- 光照变化
- 变形
- 遮挡
- 背景杂乱
- 类内变化
- 视角变化
[图像分类挑战示例:显示不同光照、变形、遮挡等情况的图像]
参数化方法
线性分类器是一种参数化方法,通过学习权重参数来对图像进行分类。
参数化方法流程
- 输入:图像
- 参数:权重W
- 输出:各类别的分数
线性分类器的数学表达
其中: - x是输入图像(拉伸为列向量) - W是权重矩阵 - b是偏置向量 - f(x,W)是每个类别的分数
形状说明
假设有10个类别,图像为32×32×3: - x的形状:(3072,) - W的形状:(10, 3072) - b的形状:(10,) - f(x,W)的形状:(10,)
线性分类器的偏置技巧
可以通过在数据向量中添加一个额外的"1",将偏置合并到权重矩阵中:
线性分类器的预测是线性的
这意味着将图像的像素值缩放c倍,得分也会缩放c倍。
[线性缩放示例:一张图像与其0.5倍缩放版本的得分对比]
解释线性分类器
线性分类器可以从三个角度进行解释:
1. 代数视角
将像素拉伸为列向量,与权重矩阵相乘。
2. 视觉视角
可以将W的每一行重新排列为图像大小,每个类别有一个"模板"。
模板的局限性
单个模板无法捕捉数据的多种模式
例如:马的模板可能会有两个头!
[线性分类器的视觉解释:显示不同类别的模板图像]
3. 几何视角
线性分类器在高维空间中用超平面划分不同类别的区域。
决策区域
每个类别对应一个决策区域,它们之间的边界是超平面。
[几何视角示例:二维平面上的决策边界示意图]
损失函数
选择权重W的关键是定义一个损失函数来量化分类器的好坏。
损失函数
损失函数告诉我们当前分类器的性能如何:
- 低损失 = 好的分类器
- 高损失 = 差的分类器
也称为:目标函数、代价函数。
数学定义
给定一个数据集 \((x_i, y_i)_{i=1}^N\),其中: - \(x_i\) 是图像 - \(y_i\) 是整数标签
单个样本的损失为 \(L_i = L(f(x_i, W), y_i)\)
整个数据集的损失为平均值:
两种常见的损失函数
1. 交叉熵损失(多项式逻辑回归)
希望将原始分类器分数解释为概率。
Softmax函数
Softmax函数将原始分数转换为概率分布:
其中 \(s = f(x_i; W)\) 是未归一化的对数概率(logits)。
计算流程
- 从分类器获得分数(例如:[3.2, 5.1, -1.7])
- 通过指数函数获得未归一化概率(例如:[24.5, 164.0, 0.18])
- 归一化概率使其总和为1(例如:[0.13, 0.87, 0.00])
- 计算正确类别概率的负对数
单个样本的交叉熵损失:
或展开形式:
这相当于在最大化观测数据的似然性(最大似然估计)。
交叉熵损失的范围
交叉熵损失的最小值和最大值是多少?
最小值为0(当正确类别的概率为1时) 最大值为+∞(当正确类别的概率接近0时)
随机初始化的损失
如果所有分数都是小的随机值,损失是多少?
约为-log(1/C),其中C是类别数 例如,对于10个类别,约为log(10) ≈ 2.3
2. 多类SVM损失
SVM损失的核心思想是:"正确类别的分数应该比所有其他类别的分数高。"
数学定义
给定一个样本 \((x_i, y_i)\) 和分数 \(s = f(x_i, W)\),SVM损失为:
这里的1是"边距"(margin)。
计算示例
假设分数为: - 猫:3.2(正确类别) - 汽车:5.1 - 青蛙:-1.7
损失计算: - 与汽车相比:max(0, 5.1 - 3.2 + 1) = max(0, 2.9) = 2.9 - 与青蛙相比:max(0, -1.7 - 3.2 + 1) = max(0, -3.9) = 0 - 总损失:2.9 + 0 = 2.9
SVM损失的范围
SVM损失的最小值和最大值是什么?
最小值为0(当正确类别的分数至少比其他类别高1时) 最大值为+∞(理论上没有上限)
随机初始化的损失
如果所有分数都是随机的,预期的损失是多少?
对于C个类别,每个类别贡献约1的损失,总损失约为C-1
交叉熵与SVM损失的比较
假设有如下分数: - [10, -2, 3](第一个是正确类别) - [10, 9, 9](第一个是正确类别) - [10, -100, -100](第一个是正确类别)
比较
对于这些例子,SVM损失都是0
只要正确类别的分数足够高,SVM损失就不会变化
即使正确类别的分数很高,交叉熵损失也始终为正数
如果进一步增加正确类别的分数(如从10到20),交叉熵损失会继续减小
这表明交叉熵损失总是希望增加正确类别的分数,而SVM损失只关心"足够好"的分数。
总结
- 线性分类器可以从代数、视觉和几何三个角度理解
- 我们有一个数据集 \((x, y)\)
- 我们有一个分数函数:\(f(x; W, b) = Wx + b\)
- 我们有损失函数来量化分类器的性能:
- Softmax损失:\(L_i = -\log\frac{\exp(s_{y_i})}{\sum_j \exp(s_j)}\)
- SVM损失:\(L_i = \sum_{j \neq y_i} \max(0, s_j - s_{y_i} + 1)\)
下一步:我们如何找到最佳的W和b?(正则化和优化)