文章目录
📌 适合对象:计算机视觉初学者、机器学习入门者
⏱️ 预计阅读时间:50-60分钟
🎯 学习目标:理解损失函数的作用,掌握SVM损失和Softmax损失,学会使用梯度下降优化参数
📚 学习路线图
本文内容一览(快速理解)
- 损失函数(Loss Function):衡量分类器好坏的标准,量化预测与真实标签的差异
- 多类SVM损失(Multiclass SVM Loss):使用Hinge损失,要求正确类别分数比错误类别高一个安全边距
- 正则化(Regularization):防止过拟合,偏好简单的模型
- Softmax分类器(Softmax Classifier):将分数转换为概率,使用交叉熵损失
- 梯度下降(Gradient Descent):通过计算梯度,沿着损失下降最快的方向更新参数
- 随机梯度下降(SGD):使用小批量数据近似全量梯度,加速训练
一、什么是损失函数(Loss Function):衡量分类器好坏的标准
这一章要建立的基础:理解为什么需要损失函数,以及如何定义损失函数
核心问题:如何判断一个分类器的好坏?如何量化预测与真实标签的差异?
[!NOTE]
📝 关键点总结:损失函数量化了分类器在训练数据上的"不满意度"。对于每个训练样本,损失函数衡量预测分数与真实标签的差异。整个数据集的损失是所有样本损失的平均值。
1.1 损失函数的作用(What is Loss Function):量化分类器的好坏
概念的本质:
损失函数(Loss Function)是一个函数,它量化了分类器在训练数据上的表现。损失值越大,说明分类器的预测越差;损失值越小,说明分类器的预测越好。我们的目标是找到使损失最小的参数W。
图解说明:
💡 说明:
- 输入:训练数据 ( x , y ) (x, y) (x,y),其中 x x x是图像, y y y是标签
- 分类器: f ( x , W ) = W x + b f(x,W) = Wx + b f(x,W)=Wx+b,输出类别分数
- 损失函数: L ( scores , y ) L(\text{scores}, y) L(scores,y),衡量预测与真实标签的差异
- 目标:找到使损失最小的 W W W
类比理解:
想象你在考试。损失函数就像:
- 预测分数:你的答案(分类器的预测)
- 真实标签:正确答案
- 损失值:你答错的程度(损失越大,错得越多)
- 目标:通过学习和练习(优化),使损失最小(答对更多)
实际例子:
损失函数的例子:
假设有3个训练样本,3个类别(猫、汽车、青蛙)
样本1(猫)的分数:[3.2, 5.1, -1.7]
- 猫的分数:3.2
- 汽车的分数:5.1(最高,但错误)
- 青蛙的分数:-1.7
问题:汽车的分数(5.1)比猫的分数(3.2)高
→ 分类器预测错误
→ 应该有损失
损失函数的作用:
- 量化这种"不满意度"
- 如果正确类别的分数最高,损失应该小
- 如果错误类别的分数更高,损失应该大
1.2 数据集损失(Dataset Loss):所有样本损失的平均值
概念的本质:
对于整个数据集,损失是所有训练样本损失的平均值。这给出了分类器在整个数据集上的整体表现。
图解说明:
💡 说明:
- 单个样本损失: L i = L ( f ( x i , W ) , y i ) L_i = L(f(x_i, W), y_i) Li=L(f(xi,W),yi)
- 数据集损失: L = 1 N ∑ i = 1 N L i L = \frac{1}{N}\sum_{i=1}^{N} L_i L=N1∑i=1NLi
- 目标:最小化数据集损失 L L L
类比理解:
想象你在做多道题。数据集损失就像:
- 单题得分:每道题的得分(单个样本损失)
- 总分:所有题目的平均分(数据集损失)
- 目标:提高平均分(最小化损失)
实际例子:
数据集损失的计算:
假设有3个训练样本:
样本1(猫):损失 = 2.9
样本2(汽车):损失 = 0(预测正确)
样本3(青蛙):损失 = 12.9
数据集损失:
$$L = \frac{2.9 + 0 + 12.9}{3} = 5.27$$
损失值的含义:
- 损失$= 0$:所有样本都预测正确(理想情况)
- 损失$> 0$:有预测错误
- 损失越大:错误越多或错误越严重
目标:
找到$W$使得$L$最小
二、多类SVM损失(Multiclass SVM Loss):使用Hinge损失
这一章要建立的基础:理解SVM损失的定义和计算方式
核心问题:如何定义损失函数,使得正确类别的分数比错误类别高?
[!NOTE]
📝 关键点总结:多类SVM损失使用Hinge损失,要求正确类别的分数 s y i s_{y_i} syi比每个错误类别的分数 s j s_j sj至少高一个安全边距(通常为1)。如果满足条件,损失为0;否则,损失为 s j − s y i + 1 s_j - s_{y_i} + 1 sj−syi+1。
2.1 SVM损失的定义(SVM Loss Definition):Hinge损失
概念的本质:
多类SVM损失(Multiclass SVM Loss)使用Hinge损失。对于每个训练样本,它要求正确类别的分数比所有错误类别的分数至少高1(安全边距)。如果满足条件,损失为0;否则,损失为错误类别分数减去正确类别分数再加1。
图解说明:
💡 说明:
- Hinge损失: L i = ∑ j ≠ y i max ( 0 , s j − s y i + 1 ) L_i = \sum_{j \neq y_i} \max(0, s_j - s_{y_i} + 1) Li=∑j=yimax(0,sj−syi+1)
- 安全边距: 1 1 1,要求正确类别分数至少比错误类别高 1 1 1
- max ( 0 , . . . ) \max(0, ...) max(0,...):如果条件满足( s y i ≥ s j + 1 s_{y_i} \geq s_j + 1 syi≥sj+1),损失为 0 0 0
类比理解:
想象你在比赛中。SVM损失就像:
- 正确类别:你支持的队伍
- 错误类别:其他队伍
- 安全边距:你希望你的队伍至少领先1分
- 损失:如果其他队伍领先或差距小于1分,就有损失
实际例子:
SVM损失的计算示例:
样本1(猫),分数:$[3.2, 5.1, -1.7]$
- 正确类别(猫)分数:$s_{y_i} = 3.2$
- 错误类别1(汽车)分数:$s_j = 5.1$
- 错误类别2(青蛙)分数:$s_j = -1.7$
计算损失:
$$L_i = \max(0, 5.1 - 3.2 + 1) + \max(0, -1.7 - 3.2 + 1)$$
$$= \max(0, 2.9) + \max(0, -3.9)$$
$$= 2.9 + 0 = 2.9$$
解释:
- 汽车的分数$(5.1)$比猫的分数$(3.2)$高,差距只有$1.9$
- 需要至少高$1$,但实际只高$1.9$,所以损失$= 5.1 - 3.2 + 1 = 2.9$
- 青蛙的分数$(-1.7)$比猫的分数$(3.2)$低很多,满足条件,损失$= 0$
如果所有错误类别的分数都比正确类别低至少$1$:
$L_i = 0$(完美预测)
2.2 SVM损失的性质(SVM Loss Properties):最小值和最大值
概念的本质:
SVM损失有一些重要性质:
- 最小值:0(当所有样本都预测正确时)
- 最大值:理论上可以很大(当预测完全错误时)
- 初始化:当W很小时,所有分数≈0,损失≈C-1(C是类别数)
图解说明:
💡 说明:
- 最小值0:当 s y i ≥ s j + 1 s_{y_i} \geq s_j + 1 syi≥sj+1对所有 j ≠ y i j \neq y_i j=yi成立时
- 最大值:理论上可以很大,当 s j ≫ s y i s_j \gg s_{y_i} sj≫syi时
- 初始化:当 W W W随机初始化很小时,所有分数接近 0 0 0,损失约为 C − 1 C-1 C−1( C C C是类别数)
类比理解:
想象你在考试。SVM损失的性质就像:
- 最小值0:所有题都答对(理想情况)
- 最大值:所有题都答错(最坏情况)
- 初始化:刚开始学习时,随机猜测,平均损失较高
实际例子:
SVM损失的性质:
1. 最小值:
如果正确类别分数$= 10$,所有错误类别分数$\leq 9$
→ $L_i = 0$(完美)
2. 最大值:
如果正确类别分数$= 1$,某个错误类别分数$= 100$
→ $L_i = \max(0, 100 - 1 + 1) = 100$(很大)
3. 初始化($3$个类别):
所有分数$\approx 0$
→ $L_i = \max(0, 0 - 0 + 1) + \max(0, 0 - 0 + 1)$
$= 1 + 1 = 2$
→ 平均损失$\approx 2$($C-1 = 3-1 = 2$)
这些性质帮助我们:
- 理解损失的合理范围
- 检查实现是否正确
- 理解训练过程
2.3 损失函数的唯一性问题(Uniqueness Problem):为什么需要正则化
概念的本质:
如果找到一个 W W W使得损失 L = 0 L=0 L=0,这个 W W W不是唯一的。例如, 2 W 2W 2W也可能使 L = 0 L=0 L=0。这引出了正则化的需求:在多个使损失为 0 0 0的 W W W中,选择"最简单"的。
图解说明:
💡 说明:
- 唯一性问题:如果 W W W使 L = 0 L=0 L=0,那么 k W kW kW( k > 0 k>0 k>0)也可能使 L = 0 L=0 L=0
- 原因:SVM损失只关心分数的相对大小,不关心绝对大小
- 解决方案:正则化,偏好权重较小的 W W W
类比理解:
想象你在解方程。唯一性问题就像:
- 方程:x + y = 5(有无数解)
- 问题:哪个解更好?
- 正则化:选择最简单的解(如x=2, y=3,而不是x=100, y=-95)
实际例子:
唯一性问题的例子:
假设$W$使损失$L=0$
样本1(猫),分数:$[3.2, 5.1, -1.7]$
- 使用$W$:猫分数$3.2$,汽车分数$5.1$(错误)
- 但如果我们调整$W$,使猫分数更高...
使用$2W$:
- 所有分数翻倍:$[6.4, 10.2, -3.4]$
- 相对大小不变:汽车$(10.2) > 猫(6.4)$
- 但差距更大:$10.2 - 6.4 = 3.8 > 1$
- 如果原来$L=0$,现在$L$仍然$=0$
问题:
- 哪个$W$更好?$W$还是$2W$?
- 需要额外的标准来选择
解决方案:
- 正则化:偏好权重较小的$W$
- 例如:$L_2$正则化,最小化$\|W\|^2$
三、正则化(Regularization):防止过拟合
这一章要建立的基础:理解为什么需要正则化,以及正则化的作用
核心问题:如何防止模型在训练数据上表现太好,但在测试数据上表现差?
[!NOTE]
📝 关键点总结:正则化在损失函数中添加一个惩罚项,防止模型在训练数据上过拟合。完整的损失函数 = 数据损失 + 正则化项 = 数据损失 + 正则化项 =数据损失+正则化项。正则化偏好简单的模型,提高泛化能力。
3.1 正则化的作用(What is Regularization):防止过拟合
概念的本质:
正则化(Regularization)是在损失函数中添加一个惩罚项,防止模型在训练数据上表现太好(过拟合)。完整的损失函数 = 数据损失 + λ × 正则化项 = 数据损失 + \lambda \times 正则化项 =数据损失+λ×正则化项,其中 λ \lambda λ是正则化强度(超参数)。
图解说明:
💡 说明:
- 数据损失:衡量预测与真实标签的差异
- 正则化项:惩罚复杂的模型(如权重很大的 W W W)
- λ \lambda λ(lambda):正则化强度,控制两者的平衡
- 目标:最小化完整损失函数
类比理解:
想象你在学习。正则化就像:
- 数据损失:你在训练题上的得分(希望得分高)
- 正则化:防止你死记硬背训练题(希望理解原理)
- 平衡:既要答对训练题,又要理解原理,不能只背答案
实际例子:
正则化的例子:
完整损失函数:
$$L = \text{Data Loss} + \lambda \times R(W)$$
$L_2$正则化:
$$R(W) = \sum W^2$$(所有权重的平方和)
- 偏好权重较小的$W$
- 使权重"分散",不集中在少数维度
$L_1$正则化:
$$R(W) = \sum |W|$$(所有权重的绝对值之和)
- 偏好稀疏的$W$(很多权重为$0$)
- 特征选择
正则化强度$\lambda$:
- $\lambda = 0$:不考虑正则化,只最小化数据损失
- $\lambda > 0$:平衡数据损失和正则化
- $\lambda$很大:过度正则化,模型太简单
为什么需要正则化?
1. 防止过拟合:模型在训练数据上表现好,但在测试数据上表现差
2. 提高泛化能力:模型在新数据上也能表现好
3. 表达偏好:选择更简单的模型
3.2 正则化的三种作用(Three Roles of Regularization):表达偏好、简化模型、改善优化
概念的本质:
正则化有三个主要作用:
- 表达偏好:在多个使数据损失为 0 0 0的 W W W中,选择更简单的
- 简化模型:防止模型拟合训练数据中的噪声
- 改善优化:为损失函数添加曲率,使优化更容易
图解说明:
💡 说明:
- 表达偏好:L2正则化使权重"分散",不集中在少数维度
- 简化模型:防止模型学习训练数据中的噪声和细节
- 改善优化:正则化项为损失函数添加曲率,使优化更稳定
类比理解:
想象你在写作文。正则化的作用就像:
- 表达偏好:偏好简洁的表达,而不是冗长的描述
- 简化模型:不要过度关注细节,要抓住主要思想
- 改善优化:有明确的方向,更容易找到好的表达
实际例子:
正则化的三种作用:
1. 表达偏好($L_2$正则化):
没有正则化:$W = [100, 0, 0, 0]$
有$L_2$正则化:$W = [25, 25, 25, 25]$
- 权重"分散",不集中在第一个维度
- 更平衡,更稳定
2. 简化模型:
没有正则化:模型可能学习训练数据中的噪声
有正则化:模型学习主要模式,忽略噪声
- 提高泛化能力
- 在测试数据上表现更好
3. 改善优化:
没有正则化:损失函数可能很"平坦",优化困难
有正则化:添加曲率,优化更容易
- 梯度更稳定
- 收敛更快
四、Softmax分类器(Softmax Classifier):将分数转换为概率
这一章要建立的基础:理解Softmax分类器和交叉熵损失
核心问题:如何将分类器的分数解释为概率?如何使用概率进行训练?
[!NOTE]
📝 关键点总结:Softmax分类器使用Softmax函数将原始分数转换为概率分布。损失函数是交叉熵损失(负对数似然),最大化正确类别的概率。Softmax损失的范围是[0, ∞),最小值0,最大值∞。
4.1 Softmax函数(Softmax Function):将分数转换为概率
概念的本质:
Softmax函数将原始分数转换为概率分布。对于分数向量 s s s,Softmax函数计算: P ( y = k ∣ x ) = exp ( s k ) ∑ j exp ( s j ) P(y=k|x) = \frac{\exp(s_k)}{\sum_j \exp(s_j)} P(y=k∣x)=∑jexp(sj)exp(sk),其中分母对所有类别求和。这样得到的概率满足:概率 ≥ 0 \geq 0 ≥0,且所有概率之和 = 1 =1 =1。
图解说明:
💡 说明:
- 指数函数: exp ( s k ) \exp(s_k) exp(sk)确保概率 ≥ 0 \geq 0 ≥0
- 归一化:除以 ∑ j exp ( s j ) \sum_j \exp(s_j) ∑jexp(sj)确保概率之和 = 1 =1 =1
- 结果:得到有效的概率分布
类比理解:
想象你在投票。Softmax函数就像:
- 原始分数:每个候选人的得票数
- 指数函数:放大差距(得票多的更多,得票少的更少)
- 归一化:转换为百分比(总和=100%)
- 概率分布:每个候选人的得票概率
实际例子:
Softmax函数的计算:
原始分数:$s = [3.2, 5.1, -1.7]$
步骤1:指数函数
$$\exp(3.2) = 24.5$$
$$\exp(5.1) = 164.0$$
$$\exp(-1.7) = 0.18$$
步骤2:归一化
总和$= 24.5 + 164.0 + 0.18 = 188.68$
概率:
$$P(\text{猫}) = \frac{24.5}{188.68} = 0.13$$
$$P(\text{汽车}) = \frac{164.0}{188.68} = 0.87$$
$$P(\text{青蛙}) = \frac{0.18}{188.68} = 0.00$$
结果:
- 所有概率$\geq 0$ ✓
- 概率之和$=1$ ✓
- 汽车的概率最高($0.87$),符合原始分数
4.2 交叉熵损失(Cross-Entropy Loss):最大化正确类别的概率
概念的本质:
Softmax分类器的损失函数是交叉熵损失(Cross-Entropy Loss),也称为负对数似然(Negative Log-Likelihood)。对于正确类别 y i y_i yi,损失是: L i = − log ( P ( y i ∣ x i ) ) L_i = -\log(P(y_i|x_i)) Li=−log(P(yi∣xi))。目标是最大化正确类别的概率,等价于最小化负对数概率。
图解说明:
💡 说明:
- 交叉熵损失: L i = − log ( P ( y i ∣ x i ) ) L_i = -\log(P(y_i|x_i)) Li=−log(P(yi∣xi))
- 目标:最大化 P ( y i ∣ x i ) P(y_i|x_i) P(yi∣xi),等价于最小化 L i L_i Li
- 性质: P ( y i ∣ x i ) → 1 P(y_i|x_i) \to 1 P(yi∣xi)→1时, L i → 0 L_i \to 0 Li→0; P ( y i ∣ x i ) → 0 P(y_i|x_i) \to 0 P(yi∣xi)→0时, L i → ∞ L_i \to \infty Li→∞
类比理解:
想象你在考试。交叉熵损失就像:
- 概率:你答对某道题的概率
- 目标:希望概率接近1(答对)
- 损失:如果概率低,损失大;如果概率高,损失小
- 对数:使用对数放大差距(概率0.1和0.9的差距比0.4和0.6的差距大)
实际例子:
交叉熵损失的计算:
概率分布:$P = [0.13, 0.87, 0.00]$
正确类别:$y_i = 猫$(第$0$类)
损失:
$$L_i = -\log(0.13) = -(-2.04) = 2.04$$
如果概率更高:
$P = [0.9, 0.1, 0.0]$
$L_i = -\log(0.9) = 0.11$(损失小)
如果概率更低:
$P = [0.01, 0.99, 0.0]$
$L_i = -\log(0.01) = 4.61$(损失大)
损失的范围:
- 最小值:$0$(当$P(y_i) = 1$时)
- 最大值:$\infty$(当$P(y_i) \to 0$时)
- 初始化:当所有分数$\approx 0$时,$P(y_i) \approx 1/C$,$L_i \approx \log(C)$
4.3 Softmax vs SVM(Softmax vs SVM):两种损失函数的比较
概念的本质:
Softmax损失和SVM损失有不同的特点:
- Softmax:将分数解释为概率,使用交叉熵损失,对分数的大小敏感
- SVM:只关心分数的相对大小,使用Hinge损失,对分数的大小不敏感(只要满足安全边距)
图解说明:
💡 说明:
- SVM:只要 s y i ≥ s j + 1 s_{y_i} \geq s_j + 1 syi≥sj+1,损失就为 0 0 0,不关心 s y i s_{y_i} syi具体是多少
- Softmax:希望 P ( y i ) P(y_i) P(yi)尽可能接近 1 1 1,对分数的大小敏感
- 选择:通常Softmax更常用,因为它提供概率解释
类比理解:
想象你在比赛。两种损失函数就像:
- SVM:只要你的队伍领先至少1分,就满意(不关心领先多少)
- Softmax:希望你的队伍领先越多越好(概率越高越好)
实际例子:
SVM vs Softmax的例子:
情况1:分数$[10, 9, 8]$(正确类别是第$0$类)
- SVM损失:$\max(0, 9-10+1) + \max(0, 8-10+1) = 0 + 0 = 0$
- Softmax损失:$-\log(\exp(10)/(\exp(10)+\exp(9)+\exp(8))) \approx 0.05$
情况2:分数$[100, 99, 98]$(正确类别是第$0$类)
- SVM损失:$\max(0, 99-100+1) + \max(0, 98-100+1) = 0 + 0 = 0$(相同)
- Softmax损失:$-\log(\exp(100)/(\exp(100)+\exp(99)+\exp(98))) \approx 0.05$(相同)
情况3:分数$[3.2, 5.1, -1.7]$(正确类别是第$0$类)
- SVM损失:$\max(0, 5.1-3.2+1) + \max(0, -1.7-3.2+1) = 2.9 + 0 = 2.9$
- Softmax损失:$-\log(0.13) = 2.04$
观察:
- SVM只关心相对大小,不关心绝对大小
- Softmax关心概率,对分数大小更敏感
五、优化(Optimization):如何找到使损失最小的W
这一章要建立的基础:理解如何通过优化找到使损失最小的参数
核心问题:如何高效地找到使损失函数最小的W?
[!NOTE]
📝 关键点总结:优化是通过迭代更新参数 W W W,使损失函数最小化的过程。梯度下降沿着损失下降最快的方向(负梯度方向)更新参数。可以使用数值梯度(近似)或解析梯度(精确)计算梯度。实际中通常使用解析梯度,但用数值梯度检查实现。
5.1 优化策略(Optimization Strategies):从随机搜索到梯度下降
概念的本质:
优化策略有多种:
- 随机搜索:随机尝试不同的 W W W,选择损失最小的(效率低)
- 跟随斜率:计算梯度,沿着损失下降最快的方向更新 W W W(高效)
图解说明:
💡 说明:
- 随机搜索:简单但效率低,需要尝试很多 W W W
- 梯度下降:计算梯度,沿着负梯度方向更新 W W W,效率高
- 梯度:损失函数对 W W W的导数,指向损失增加最快的方向
类比理解:
想象你在山上找最低点。优化策略就像:
- 随机搜索:随机走,看哪里最低(效率低)
- 梯度下降:看哪个方向最陡(梯度),往那个方向走(效率高)
实际例子:
优化策略的例子:
随机搜索:
- 随机生成W1, W2, ..., W1000
- 计算每个W的损失
- 选择损失最小的W
- 问题:需要尝试很多W,效率低
- 结果:可能找到不错的W(如15.5%准确率),但远非最优
梯度下降:
- 从随机$W$开始
- 计算梯度$dW$(损失对$W$的导数)
- 更新$W$:$W = W - \text{learning\_rate} \times dW$
- 重复直到收敛
- 优势:直接找到下降方向,效率高
- 结果:找到使损失最小的$W$(如$95\%$准确率)
5.2 梯度的计算(Gradient Computation):数值梯度 vs 解析梯度
概念的本质:
梯度可以通过两种方式计算:
- 数值梯度:通过有限差分近似, d W ≈ L ( W + h ) − L ( W ) h dW \approx \frac{L(W+h) - L(W)}{h} dW≈hL(W+h)−L(W)(近似,慢,但容易实现)
- 解析梯度:通过微积分计算, d W = d L d W dW = \frac{dL}{dW} dW=dWdL(精确,快,但容易出错)
图解说明:
💡 说明:
- 数值梯度:通过小的扰动h计算损失的差异,近似梯度
- 解析梯度:通过微积分直接计算梯度
- 实践:使用解析梯度,但用数值梯度检查实现(梯度检查)
类比理解:
想象你在测量速度。两种方法就像:
- 数值梯度:测量一小段时间内的位移,计算平均速度(近似)
- 解析梯度:用公式直接计算瞬时速度(精确)
实际例子:
梯度计算的例子:
数值梯度:
当前$W$:$[0.34, -1.11, 0.78, ...]$
当前损失:$L(W) = 1.25347$
扰动第一个维度:
$W + h$:$[0.34+0.0001, -1.11, 0.78, ...]$
新损失:$L(W+h) = 1.25322$
梯度(第一个维度):
$$dW[0] = \frac{1.25322 - 1.25347}{0.0001} = -2.5$$
问题:
- 需要对每个维度都计算(慢)
- 只是近似(h不能太小也不能太大)
解析梯度:
直接计算$\frac{dL}{dW}$(通过链式法则)
- 精确
- 快(一次计算所有维度)
- 但需要推导公式,容易出错
实践:
- 使用解析梯度训练
- 用数值梯度检查实现(梯度检查)
- 如果两者接近,说明实现正确
5.3 梯度下降(Gradient Descent):沿着负梯度方向更新参数
概念的本质:
梯度下降是优化损失函数的基本方法。从初始 W W W开始,计算梯度 d W dW dW,然后沿着负梯度方向更新 W W W: W = W − learning_rate × d W W = W - \text{learning\_rate} \times dW W=W−learning_rate×dW。重复这个过程,直到损失收敛。
图解说明:
💡 说明:
- 梯度: d W dW dW指向损失增加最快的方向
- 负梯度: − d W -dW −dW指向损失下降最快的方向
- 学习率 α \alpha α:控制步长,太大可能发散,太小收敛慢
- 迭代:重复计算梯度和更新,直到收敛
类比理解:
想象你在下山。梯度下降就像:
- 当前位置: W W W
- 梯度:最陡的方向(损失增加最快)
- 负梯度:下山的方向(损失下降最快)
- 学习率:每一步走多远
- 目标:到达最低点(损失最小)
实际例子:
梯度下降的例子:
初始化:
$W = [0.34, -1.11, 0.78, ...]$
损失:$L(W) = 1.25347$
迭代1:
计算梯度:$dW = [-2.5, 0.6, 0, ...]$
更新:$W = W - 0.01 \times dW$
$= [0.34, -1.11, 0.78, ...] - 0.01 \times [-2.5, 0.6, 0, ...]$
$= [0.365, -1.116, 0.78, ...]$
新损失:$L(W) = 1.20000$(下降)
迭代2:
计算梯度:$dW = [-2.3, 0.5, 0.1, ...]$
更新:$W = W - 0.01 \times dW$
新损失:$L(W) = 1.15000$(继续下降)
...
迭代$N$:
损失:$L(W) = 0.05$(收敛)
停止:损失不再下降
学习率的选择:
- $\alpha = 0.01$:小步长,收敛慢但稳定
- $\alpha = 0.1$:大步长,可能发散
- $\alpha = 0.001$:很小步长,收敛很慢
5.4 随机梯度下降(Stochastic Gradient Descent):使用小批量数据
概念的本质:
当训练数据很大时,计算所有数据的梯度很昂贵。随机梯度下降(SGD)使用小批量(minibatch)数据近似全量梯度。每次迭代随机选择一小批样本(如32/64/128个),计算这批样本的梯度,然后更新参数。
图解说明:
💡 说明:
- 小批量:每次使用一小批样本(如32个)计算梯度
- 近似:小批量梯度是全量梯度的近似,但计算快得多
- 随机性:每次随机选择不同的样本,增加随机性,有助于跳出局部最优
- epoch:遍历所有训练数据一次称为一个epoch
类比理解:
想象你在统计。SGD就像:
- 全量统计:统计所有人的数据(准确但慢)
- 抽样统计:随机抽取一部分人统计(近似但快)
- 多次抽样:多次随机抽样,逐步接近全量结果
实际例子:
SGD的例子:
训练数据:50,000个样本
全量梯度下降:
- 每次计算所有50,000个样本的梯度
- 计算量大:O(N)
- 慢,但梯度准确
SGD(批量大小=32):
- 每次随机选择32个样本
- 计算这32个样本的梯度
- 更新参数
- 重复,直到遍历所有数据(1个epoch)
优势:
- 计算快:O(batch_size) << O(N)
- 内存小:不需要存储所有数据的梯度
- 随机性:有助于跳出局部最优
批量大小的选择:
- 32/64/128:常用
- 太小:梯度噪声大,不稳定
- 太大:计算慢,失去随机性
📝 本章总结
核心要点回顾:
-
损失函数:
- 量化分类器在训练数据上的表现
- 数据集损失是所有样本损失的平均值
-
多类SVM损失:
- 使用Hinge损失
- 要求正确类别分数比错误类别高至少1
- 最小值0,最大值∞
-
正则化:
- 防止过拟合
- 完整损失 = 数据损失 + λ×正则化项
- L2正则化偏好权重较小的W
-
Softmax分类器:
- 将分数转换为概率分布
- 使用交叉熵损失
- 最大化正确类别的概率
-
优化:
- 梯度下降沿着负梯度方向更新参数
- 使用解析梯度(精确、快)
- SGD使用小批量数据加速训练
知识地图:
关键决策点:
- 选择损失函数:SVM只关心相对大小,Softmax提供概率解释
- 正则化强度:使用验证集选择λ,平衡数据损失和正则化
- 学习率:太小收敛慢,太大可能发散
- 批量大小:32/64/128常用,平衡速度和稳定性
- 梯度检查:使用数值梯度检查解析梯度的实现
📚 延伸阅读
推荐资源
-
CS231n课程:Stanford CS231n: Convolutional Neural Networks for Visual Recognition
- 详细的损失函数和优化课程
-
经典论文:
- “Support Vector Machines” - SVM的经典论文
- “Deep Learning” (Goodfellow et al.) - 深度学习的优化方法
-
下一步学习:
- 神经网络:更复杂的模型
- 反向传播:如何计算复杂模型的梯度
- 卷积神经网络:图像分类的强大模型
7717

被折叠的 条评论
为什么被折叠?



