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

news/2026/1/26 22:53:34/文章来源:https://www.cnblogs.com/gccbuaa/p/19535822

文章目录

    • 学习路线图
    • 本文内容一览(快速理解)
    • 一、什么是损失函数(Loss Function):衡量分类器好坏的标准
      • 1.1 损失函数的作用(What is Loss Function):量化分类器的好坏
      • 1.2 数据集损失(Dataset Loss):所有样本损失的平均值
    • 二、多类SVM损失(Multiclass SVM Loss):使用Hinge损失
      • 2.1 SVM损失的定义(SVM Loss Definition):Hinge损失
      • 2.2 SVM损失的性质(SVM Loss Properties):最小值和最大值
      • 2.3 损失函数的唯一性问题(Uniqueness Problem):为什么需要正则化
    • 三、正则化(Regularization):防止过拟合
      • 3.1 正则化的作用(What is Regularization):防止过拟合
      • 3.2 正则化的三种作用(Three Roles of Regularization):表达偏好、简化模型、改善优化
    • 四、Softmax分类器(Softmax Classifier):将分数转换为概率
      • 4.1 Softmax函数(Softmax Function):将分数转换为概率
      • 4.2 交叉熵损失(Cross-Entropy Loss):最大化正确类别的概率
      • 4.3 Softmax vs SVM(Softmax vs SVM):两种损失函数的比较
    • 五、优化(Optimization):如何找到使损失最小的W
      • 5.1 优化策略(Optimization Strategies):从随机搜索到梯度下降
      • 5.2 梯度的计算(Gradient Computation):数值梯度 vs 解析梯度
      • 5.3 梯度下降(Gradient Descent):沿着负梯度方向更新参数
      • 5.4 随机梯度下降(Stochastic Gradient Descent):使用小批量数据
    • 本章总结
    • 延伸阅读
      • 推荐资源

适合对象:计算机视觉初学者、机器学习入门者
⏱️ 预计阅读时间: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。

图解说明

说明

类比理解

想象你在考试。损失函数就像:

实际例子

损失函数的例子:
假设有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

说明

  • 单个样本损失Li=L(f(xi,W),yi)L_i = L(f(x_i, W), y_i)Li=L(f(xi,W),yi)
  • 数据集损失L=1N∑i=1NLiL = \frac{1}{N}\sum_{i=1}^{N} L_iL=N1i=1NLi
  • 目标:最小化数据集损失LLL

类比理解

想象你在做多道题。数据集损失就像:

  • 单题得分:每道题的得分(单个样本损失)
  • 总分:所有题目的平均分(数据集损失)
  • 目标:提高平均分(最小化损失)

实际例子

数据集损失的计算:
假设有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损失,要求正确类别的分数syis_{y_i}syi比每个错误类别的分数sjs_jsj至少高一个安全边距(通常为1)。如果满足条件,损失为0;否则,损失为sj−syi+1s_j - s_{y_i} + 1sjsyi+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损失Li=∑j≠yimax⁡(0,sj−syi+1)L_i = \sum_{j \neq y_i} \max(0, s_j - s_{y_i} + 1)Li=j=yimax(0,sjsyi+1)
  • 安全边距111,要求正确类别分数至少比错误类别高111
  • max⁡(0,...)\max(0, ...)max(0,...):如果条件满足(syi≥sj+1s_{y_i} \geq s_j + 1syisj+1),损失为000

类比理解

想象你在比赛中。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:当syi≥sj+1s_{y_i} \geq s_j + 1syisj+1对所有j≠yij \neq y_ij=yi成立时
  • 最大值:理论上可以很大,当sj≫syis_j \gg s_{y_i}sjsyi
  • 初始化:当WWW随机初始化很小时,所有分数接近000,损失约为C−1C-1C1CCC是类别数)

类比理解

想象你在考试。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):为什么需要正则化

概念的本质

如果找到一个WWW使得损失L=0L=0L=0,这个WWW不是唯一的。例如,2W2W2W也可能使L=0L=0L=0。这引出了正则化的需求:在多个使损失为000WWW中,选择"最简单"的。

图解说明

损失L = 0
W使L=0
2W也使L=0
3W也使L=0
问题:
哪个W更好?
正则化
选择简单的W

说明

  • 唯一性问题:如果WWW使L=0L=0L=0,那么kWkWkWk>0k>0k>0)也可能使L=0L=0L=0
  • 原因:SVM损失只关心分数的相对大小,不关心绝对大小
  • 解决方案:正则化,偏好权重较小的WWW

类比理解

想象你在解方程。唯一性问题就像:

  • 方程: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)

说明

  • 数据损失:衡量预测与真实标签的差异
  • 正则化项:惩罚复杂的模型(如权重很大的WWW
  • λ\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. 表达偏好:在多个使数据损失为000WWW中,选择更简单的
  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函数将原始分数转换为概率分布。对于分数向量sss,Softmax函数计算:P(y=k∣x)=exp⁡(sk)∑jexp⁡(sj)P(y=k|x) = \frac{\exp(s_k)}{\sum_j \exp(s_j)}P(y=kx)=jexp(sj)exp(sk),其中分母对所有类别求和。这样得到的概率满足:概率≥0\geq 00,且所有概率之和=1=1=1

图解说明

说明

类比理解

想象你在投票。Softmax函数就像:

实际例子

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)。对于正确类别yiy_iyi,损失是:Li=−log⁡(P(yi∣xi))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

说明

  • 交叉熵损失Li=−log⁡(P(yi∣xi))L_i = -\log(P(y_i|x_i))Li=log(P(yixi))
  • 目标:最大化P(yi∣xi)P(y_i|x_i)P(yixi),等价于最小化LiL_iLi
  • 性质P(yi∣xi)→1P(y_i|x_i) \to 1P(yixi)1时,Li→0L_i \to 0Li0P(yi∣xi)→0P(y_i|x_i) \to 0P(yixi)0时,Li→∞L_i \to \inftyLi

类比理解

想象你在考试。交叉熵损失就像:

  • 概率:你答对某道题的概率
  • 目标:希望概率接近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:只要syi≥sj+1s_{y_i} \geq s_j + 1syisj+1,损失就为000,不关心syis_{y_i}syi具体是多少
  • Softmax:希望P(yi)P(y_i)P(yi)尽可能接近111,对分数的大小敏感
  • 选择:通常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]
关键点总结:优化是通过迭代更新参数WWW,使损失函数最小化的过程。梯度下降沿着损失下降最快的方向(负梯度方向)更新参数。可以使用数值梯度(近似)或解析梯度(精确)计算梯度。实际中通常使用解析梯度,但用数值梯度检查实现。

5.1 优化策略(Optimization Strategies):从随机搜索到梯度下降

概念的本质

优化策略有多种:

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

图解说明

优化策略
随机搜索
Random Search
梯度下降
Gradient Descent
随机尝试W
选择最好的
计算梯度
沿着负梯度更新
效率低
需要很多尝试
效率高
直接找到方向

说明

  • 随机搜索:简单但效率低,需要尝试很多WWW
  • 梯度下降:计算梯度,沿着负梯度方向更新WWW,效率高
  • 梯度:损失函数对WWW的导数,指向损失增加最快的方向

类比理解

想象你在山上找最低点。优化策略就像:

  • 随机搜索:随机走,看哪里最低(效率低)
  • 梯度下降:看哪个方向最陡(梯度),往那个方向走(效率高)

实际例子

优化策略的例子:
随机搜索:
- 随机生成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. 数值梯度:通过有限差分近似,dW≈L(W+h)−L(W)hdW \approx \frac{L(W+h) - L(W)}{h}dWhL(W+h)L(W)(近似,慢,但容易实现)
  2. 解析梯度:通过微积分计算,dW=dLdWdW = \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):沿着负梯度方向更新参数

概念的本质

梯度下降是优化损失函数的基本方法。从初始WWW开始,计算梯度dWdWdW,然后沿着负梯度方向更新WWWW=W−learning_rate×dWW = W - \text{learning\_rate} \times dWW=Wlearning_rate×dW。重复这个过程,直到损失收敛。

图解说明

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

说明

  • 梯度dWdWdW指向损失增加最快的方向
  • 负梯度−dW-dWdW指向损失下降最快的方向
  • 学习率α\alphaα:控制步长,太大可能发散,太小收敛慢
  • 迭代:重复计算梯度和更新,直到收敛

类比理解

想象你在下山。梯度下降就像:

  • 当前位置WWW
  • 梯度:最陡的方向(损失增加最快)
  • 负梯度:下山的方向(损失下降最快)
  • 学习率:每一步走多远
  • 目标:到达最低点(损失最小)

实际例子

梯度下降的例子:
初始化:
$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. 下一步学习

    • 神经网络:更复杂的模型
    • 反向传播:如何计算复杂模型的梯度
    • 卷积神经网络:图像分类的强大模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新零售行业低代码平台应用实践

在数字化浪潮推动下&#xff0c;新零售行业正经历从“渠道融合”到“全链路智能协同”的转型深水区。线上线下数据割裂、业务流程繁琐、需求迭代滞后、复合型人才短缺等痛点&#xff0c;成为制约企业突破增长瓶颈的核心障碍。低代码平台凭借“可视化搭建、快速迭代、全民参与”…

深度测评8个一键生成论文工具,本科生毕业论文轻松搞定!

深度测评8个一键生成论文工具&#xff0c;本科生毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。在面对繁重的学术任务时&#xff0c;这些工具不仅能够帮助…

Docker-构建自己的Web-Linux系统-镜像colinchang/ubuntu-desktop:22.04

下载镜像 docker pull colinchang/ubuntu-desktop:22.04 或者 docker pull docker.1ms.run/colinchang/ubuntu-desktop:22.04 速度更快3G大小运行 docker run -d \--name ubuntu-desktop\--shm-size512m \-p 28443:6901 \-e VNC_PWadmin\-u root \--restart always \docker.1ms…

Flink SQL 的 LIMIT 子句语义、坑点与实战技巧 - 详解

Flink SQL 的 LIMIT 子句语义、坑点与实战技巧 - 详解2026-01-26 22:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

P1163 银行贷款(1.26)

点击查看代码 #include<bits/stdc++.h> using namespace std;double w,k; int m;bool check(double x) {double rest=w;for(int i=0;i<m;i++){rest=rest*(1+x)-k;}return rest>0; }int main() {cin>>…

Jamplus工具Parse阶段的源码解析(1)

本次分析的JamPlus为Jamplus0.3(基于Jam2.5) 阅读本篇文章需要对Lex&Yacc有一定了解,如果没有基础,推荐看完《Lex&Yacc入门》和《使用Yacc》再来阅读本篇文章。 Jam的解析阶段 Jam一共有4个阶段的操作,启…

解决兼容性导致的CATIA V5R21 新建文档卡死 dsls.licgen.v1.6.ssq.exe 闪退问题

解决了GT730M显卡兼容性导致的CATIA V5R21 新建文档卡死 & 系统版本太高引起的 dsls.licgen.v1.6.ssq.exe 闪退问题。手头一直用着一台T440p(4700MQ+730M),最近在Win10 LTSC 21H2下装CATIA,以前运行良好的CATI…

AI应用架构师视角下的AI模型评估标准深度洞察

AI应用架构师视角下的AI模型评估标准深度洞察&#xff1a;从“论文指标”到“落地适配”的思维跃迁 一、引入&#xff1a;那些让架构师深夜崩溃的“模型坑” 你有没有过这样的经历&#xff1f; 花了3个月调通的SOTA图像分类模型&#xff0c;上线后却因为推理延迟高达500ms&…

opencv 实现图像拼接

图像拼接问题&#xff0c;也就是把多张有重叠区域的图像&#xff08;比如从不同角度 / 位置拍摄的同一场景&#xff09;拼接成一张更大、更完整的全景图&#xff0c;这在视觉检测、机器人建图、安防监控等场景中非常常用。下面我会从核心原理、主流方法到可执行的代码实现&…

别急着递归——聊聊《最接近的二叉搜索树值》背后的“算法直觉”

别急着递归 ——聊聊《最接近的二叉搜索树值》背后的“算法直觉” 如果你刷过 LeetCode,大概率见过这道题: Closest Value in BST(最接近的二叉搜索树值) 题目一句话就能说清楚: 给你一棵 二叉搜索树(BST) 再给你一个 浮点数 target 让你找一个 值最接近 target 的节点…

通过神经网络识别图像位置

神经网络实现视觉图像位置识别&#xff0c;核心是目标检测&#xff08;Object Detection&#xff09; 技术&#xff0c;其本质是让模型同时完成目标分类&#xff08;识别图像里有什么&#xff09;和位置回归&#xff08;预测目标的坐标框&#xff09;。以下是从技术原理到落地实…

模型导出为 ONNX/TensorRT 格式

将训练好的 YOLOv8 模型轻量化并导出为 ONNX/TensorRT 格式&#xff0c;最终部署到 Jetson Nano 这类嵌入式设备上加速推理&#xff0c;这是实际落地中非常关键的一步&#xff0c;能显著提升模型在边缘设备上的运行速度。下面我会从模型导出、TensorRT 优化、Jetson Nano 部署三…

北京首个AI教育实训基地!摩尔线程联合北京市十一学校赋能创新人才培养

2026年1月23日&#xff0c;摩尔线程与北京市十一学校共同宣布&#xff0c;双方战略合作的“AI教育实训基地”已正式启用。作为首个落地北京的AI实训示范项目&#xff0c;该基地部署了摩尔线程MTT AIBOOK及云端算力&#xff0c;为学校多元化的人工智能课程体系注入了坚实的国产算…

浅谈 OpenAI Agents SDK

一、OpenAI Agents SDK是什么&#xff1f; OpenAI Agents SDK是一个轻量级且易于使用的工具包&#xff0c;用于构建基于代理的AI应用程序。 提供了一些基本构建块&#xff0c;包括具备指令和工具的代理&#xff08;Agents&#xff09;、用于代理间任务委托的交接&#xff08;…

AI Agent成“权限刺客“?企业安全团队集体破防!程序员必看风险管控指南

AI Agent正在加速工作流程的执行。它们可以安排会议、访问数据、触发工作流、编写代码并实时采取行动&#xff0c;以超越人类的速度提升企业生产力。直到某天安全团队突然发现&#xff1a;“等等…这是谁批准的&#xff1f;” 与传统用户或应用程序不同&#xff0c;AI Agent往…

震惊!AI终于会“摸鱼“了!Skills架构让大模型秒变职场老油条,代码即一切!

架构师&#xff08;JiaGouX&#xff09; 我们都是架构师&#xff01; 架构未来&#xff0c;你来不来&#xff1f; 大纲&#xff08;先对齐结构&#xff09; TL;DR&#xff1a;3分钟带走 5 个结论“代码就是一切”到底在说什么能力强&#xff0c;但为什么还是干不好活Skills 是…

震惊!工程师总说需求做不了?揭秘AI Agent内部循环,小白也能看懂!

你有没有遇到过这种情况&#xff1a;需求评审时&#xff0c;工程师说这个功能实现不了&#xff0c;你却完全不知道为什么&#xff1f; 问题往往出在这里——你设计的是一个 AI Agent&#xff0c;但你并不知道它背后到底在做什么。 一、Agent 其实是个永动机 打个比方&#x…

AI开发新风向!高效智能体技术揭秘,让你的大模型从“吃内存大户“变身“效率王者“,2026年必学技术!

高效智能体不是更小的模型&#xff0c;而是在记忆、工具使用和规划模块上优化&#xff0c;以最大化任务成功率同时最小化资源消耗&#xff08;包括token使用、推理延迟和计算成本&#xff09;的智能体系统。 高效智能体研究的演进轨迹&#xff08;2023-2025&#xff09;。蓝色&…

震惊!中国电信AI新神作TeleMem让大模型“开挂“,记忆暴涨38%!小白程序员也能轻松上手!

思维导图曾被证明可以帮助学习障碍者快速提升成绩&#xff0c;那么当前已经可堪一用的智能体系统如果引入类似工具是否可以帮助改善长期学习记忆能力呢&#xff1f;有研究团队做出了探索性尝试。 在长上下文和Agent应用不断落地的过程中&#xff0c;越来越多研究者开始意识到&…

震惊!普通程序员也能手搓AI视频agent?2026年AI视频奇点已来,小白也能弯道超车!

最近相当长一段时间&#xff0c;我把大量精力放在了一件事上。 把 AI 编程和 AI 视频真正结合起来&#xff0c;用来开发我们自己的 AI 视频 agent 平台。 这个过程给我最大的一个感受只有一句话——AI 编程的发展速度&#xff0c;已经快到普通人可以直接下场做产品的程度了。…