【计算机视觉(11)】损失函数与优化基础篇:如何训练线性分类器

2025博客之星年度评选已开启 10w+人浏览 1.1k人参与

文章目录

📌 适合对象:计算机视觉初学者、机器学习入门者
⏱️ 预计阅读时间:50-60分钟
🎯 学习目标:理解损失函数的作用,掌握SVM损失和Softmax损失,学会使用梯度下降优化参数


📚 学习路线图

线性分类器
f(x,W) = Wx + b
定义损失函数
Loss Function
SVM损失
Hinge Loss
Softmax损失
Cross-Entropy
正则化
Regularization
优化问题
最小化损失
梯度下降
Gradient Descent
随机梯度下降
SGD

本文内容一览(快速理解)

  1. 损失函数(Loss Function):衡量分类器好坏的标准,量化预测与真实标签的差异
  2. 多类SVM损失(Multiclass SVM Loss):使用Hinge损失,要求正确类别分数比错误类别高一个安全边距
  3. 正则化(Regularization):防止过拟合,偏好简单的模型
  4. Softmax分类器(Softmax Classifier):将分数转换为概率,使用交叉熵损失
  5. 梯度下降(Gradient Descent):通过计算梯度,沿着损失下降最快的方向更新参数
  6. 随机梯度下降(SGD):使用小批量数据近似全量梯度,加速训练

一、什么是损失函数(Loss Function):衡量分类器好坏的标准

这一章要建立的基础:理解为什么需要损失函数,以及如何定义损失函数

核心问题:如何判断一个分类器的好坏?如何量化预测与真实标签的差异?


[!NOTE]
📝 关键点总结:损失函数量化了分类器在训练数据上的"不满意度"。对于每个训练样本,损失函数衡量预测分数与真实标签的差异。整个数据集的损失是所有样本损失的平均值。

1.1 损失函数的作用(What is Loss Function):量化分类器的好坏

概念的本质

损失函数(Loss Function)是一个函数,它量化了分类器在训练数据上的表现。损失值越大,说明分类器的预测越差;损失值越小,说明分类器的预测越好。我们的目标是找到使损失最小的参数W。

图解说明

训练数据
(x, y)
分类器
f(x,W)
预测分数
scores
损失函数
L(scores, y)
损失值
Loss
优化
最小化损失
更新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):所有样本损失的平均值

概念的本质

对于整个数据集,损失是所有训练样本损失的平均值。这给出了分类器在整个数据集上的整体表现。

图解说明

训练数据集
N个样本
样本1
损失L1
样本2
损失L2
样本3
损失L3
...
...
样本N
损失LN
平均损失
L = (L1+L2+...+LN)/N

💡 说明

  • 单个样本损失 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=N1i=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 sjsyi+1

2.1 SVM损失的定义(SVM Loss Definition):Hinge损失

概念的本质

多类SVM损失(Multiclass SVM Loss)使用Hinge损失。对于每个训练样本,它要求正确类别的分数比所有错误类别的分数至少高1(安全边距)。如果满足条件,损失为0;否则,损失为错误类别分数减去正确类别分数再加1。

图解说明

训练样本
(x_i, y_i)
计算分数
s = f(x_i, W)
正确类别分数
s_yi
错误类别分数
s_j (j≠yi)
检查条件
s_yi ≥ s_j + 1?
损失 = 0
损失 = s_j - s_yi + 1
样本损失L_i

💡 说明

  • 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,sjsyi+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 syisj+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是类别数)

图解说明

SVM损失
最小值
L = 0
最大值
L → ∞
初始化
L ≈ C-1
所有样本
预测正确
预测完全
错误
W很小
所有分数≈0

💡 说明

  • 最小值0:当 s y i ≥ s j + 1 s_{y_i} \geq s_j + 1 syisj+1对所有 j ≠ y i j \neq y_i j=yi成立时
  • 最大值:理论上可以很大,当 s j ≫ s y i s_j \gg s_{y_i} sjsyi
  • 初始化:当 W W W随机初始化很小时,所有分数接近 0 0 0,损失约为 C − 1 C-1 C1 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中,选择"最简单"的。

图解说明

损失L = 0
W使L=0
2W也使L=0
3W也使L=0
问题:
哪个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 λ是正则化强度(超参数)。

图解说明

完整损失函数
数据损失
Data Loss
正则化项
Regularization
模型预测
匹配训练数据
防止过拟合
偏好简单模型
L = Data Loss + λ×R(W)

💡 说明

  • 数据损失:衡量预测与真实标签的差异
  • 正则化项:惩罚复杂的模型(如权重很大的 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):表达偏好、简化模型、改善优化

概念的本质

正则化有三个主要作用:

  1. 表达偏好:在多个使数据损失为 0 0 0 W W W中,选择更简单的
  2. 简化模型:防止模型拟合训练数据中的噪声
  3. 改善优化:为损失函数添加曲率,使优化更容易

图解说明

正则化
表达偏好
Prefer Simple W
简化模型
Don't Fit Noise
改善优化
Add Curvature
L2正则化
分散权重
防止过拟合
提高泛化
优化更稳定
收敛更快

💡 说明

  • 表达偏好: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=kx)=jexp(sj)exp(sk),其中分母对所有类别求和。这样得到的概率满足:概率 ≥ 0 \geq 0 0,且所有概率之和 = 1 =1 =1

图解说明

原始分数
s = [3.2, 5.1, -1.7]
指数函数
exp(s)
未归一化概率
[24.5, 164.0, 0.18]
归一化
除以总和
概率分布
[0.13, 0.87, 0.00]

💡 说明

  • 指数函数 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(yixi))。目标是最大化正确类别的概率,等价于最小化负对数概率。

图解说明

概率分布
P = [0.13, 0.87, 0.00]
正确类别
y_i = 猫
正确类别概率
P(y_i) = 0.13
负对数
-log(0.13)
损失
L_i = 2.04

💡 说明

  • 交叉熵损失 L i = − log ⁡ ( P ( y i ∣ x i ) ) L_i = -\log(P(y_i|x_i)) Li=log(P(yixi))
  • 目标:最大化 P ( y i ∣ x i ) P(y_i|x_i) P(yixi),等价于最小化 L i L_i Li
  • 性质 P ( y i ∣ x i ) → 1 P(y_i|x_i) \to 1 P(yixi)1时, L i → 0 L_i \to 0 Li0 P ( y i ∣ x i ) → 0 P(y_i|x_i) \to 0 P(yixi)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损失
Hinge Loss
Softmax损失
Cross-Entropy
只关心相对大小
s_yi ≥ s_j + 1
关心概率大小
P(y_i) → 1
对分数大小
不敏感
对分数大小
敏感

💡 说明

  • SVM:只要 s y i ≥ s j + 1 s_{y_i} \geq s_j + 1 syisj+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):从随机搜索到梯度下降

概念的本质

优化策略有多种:

  1. 随机搜索:随机尝试不同的 W W W,选择损失最小的(效率低)
  2. 跟随斜率:计算梯度,沿着损失下降最快的方向更新 W W W(高效)

图解说明

优化策略
随机搜索
Random Search
梯度下降
Gradient Descent
随机尝试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 解析梯度

概念的本质

梯度可以通过两种方式计算:

  1. 数值梯度:通过有限差分近似, d W ≈ L ( W + h ) − L ( W ) h dW \approx \frac{L(W+h) - L(W)}{h} dWhL(W+h)L(W)(近似,慢,但容易实现)
  2. 解析梯度:通过微积分计算, d W = d L d W dW = \frac{dL}{dW} dW=dWdL(精确,快,但容易出错)

图解说明

梯度计算
数值梯度
Numerical
解析梯度
Analytic
有限差分
(L(W+h)-L(W))/h
微积分
dL/dW
近似

容易实现
精确

容易出错
梯度检查
Gradient Check

💡 说明

  • 数值梯度:通过小的扰动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=Wlearning_rate×dW。重复这个过程,直到损失收敛。

图解说明

初始W
计算损失
L(W)
计算梯度
dW = dL/dW
更新W
W = W - α×dW
收敛?
最优W

💡 说明

  • 梯度 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个),计算这批样本的梯度,然后更新参数。

图解说明

训练数据集
N个样本
随机选择
小批量(32个)
计算小批量梯度
dW_batch
更新W
W = W - α×dW_batch
下一个批量
遍历所有数据
1个epoch
重复多个epoch

💡 说明

  • 小批量:每次使用一小批样本(如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:常用
- 太小:梯度噪声大,不稳定
- 太大:计算慢,失去随机性

 


📝 本章总结

核心要点回顾

  1. 损失函数

    • 量化分类器在训练数据上的表现
    • 数据集损失是所有样本损失的平均值
  2. 多类SVM损失

    • 使用Hinge损失
    • 要求正确类别分数比错误类别高至少1
    • 最小值0,最大值∞
  3. 正则化

    • 防止过拟合
    • 完整损失 = 数据损失 + λ×正则化项
    • L2正则化偏好权重较小的W
  4. Softmax分类器

    • 将分数转换为概率分布
    • 使用交叉熵损失
    • 最大化正确类别的概率
  5. 优化

    • 梯度下降沿着负梯度方向更新参数
    • 使用解析梯度(精确、快)
    • SGD使用小批量数据加速训练

知识地图

损失函数与优化
损失函数
Loss Function
优化
Optimization
SVM损失
Hinge Loss
Softmax损失
Cross-Entropy
正则化
Regularization
梯度计算
Gradient
梯度下降
GD
随机梯度下降
SGD

关键决策点

  • 选择损失函数:SVM只关心相对大小,Softmax提供概率解释
  • 正则化强度:使用验证集选择λ,平衡数据损失和正则化
  • 学习率:太小收敛慢,太大可能发散
  • 批量大小:32/64/128常用,平衡速度和稳定性
  • 梯度检查:使用数值梯度检查解析梯度的实现

📚 延伸阅读

推荐资源

  1. CS231n课程:Stanford CS231n: Convolutional Neural Networks for Visual Recognition

    • 详细的损失函数和优化课程
  2. 经典论文

    • “Support Vector Machines” - SVM的经典论文
    • “Deep Learning” (Goodfellow et al.) - 深度学习的优化方法
  3. 下一步学习

    • 神经网络:更复杂的模型
    • 反向传播:如何计算复杂模型的梯度
    • 卷积神经网络:图像分类的强大模型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值