目录
[一. 梯度](#一. 梯度)
[二. 上游梯度](#二. 上游梯度)
[三. 梯度下降](#三. 梯度下降)
[四. 批次](#四. 批次)
收集一些名词以及解释,本文会持续更新新名词。
一. 梯度
梯度(Gradient)是函数在某一点的变化率 ,直观理解是:"变化的速度和方向"。
数学定义:对于一个函数,梯度表示为:
。它表达的是:当
发生一个小的变化时,
变化的快慢和方向。
梯度=真梯度+噪声
二. 上游梯度
在反向传播中,我们把损失对网络中所有参数的梯度逐层传递,从输出层(损失函数)开始,逐步计算每一层的梯度,直到输入层。上游梯度(Upstream Gradient)指的就是:从输出开始,梯度逐层传递到当前层时所传递过来的误差信号。
误差信号就是指网络输出的"预测结果"与"真实标签"之间的差距。
数学定义:对于一个损失函数 ,它衡量了预测值与真实值之间的误差。如果你把这个损失函数当作目标函数(我们要优化的目标),那么误差信号就是损失函数对每个参数的偏导数。
这个偏导数表示了:如果:说明
太大了,应该减小
来减小损失
。如果
说明
太小了,应该增大
来减小损失
。
误差信号 具体来说就是:每个输出的误差方向(增加还是减少),目的是让最终的损失
更小。
在反向传播中,我们从损失函数开始计算梯度:第一步,计算损失函数对输出层的梯度:
;第二步,使用链式法则计算梯度,传递到上一层:
;直到最后,将误差信号一路反向传递到每一层。这时,每一层传递过来的梯度称为"上游梯度"。上游梯度就是损失 如何**"影响"这一层的参数** ,即这一层参数对最终损失的贡献有多大。上游梯度 是反向传播过程中计算梯度的基础,它告诉网络如何更新网络中每一层的参数。如果没有上游梯度,就无法知道参数如何调整来减少损失。
三. 梯度下降
在深度学习中,训练的过程就是优化网络的参数 ,以最小化损失函数。优化方法中,最常见的就是 梯度下降。
梯度下降的核心思想是:向梯度的反方向调整参数,使损失最小化。
假设我们有一个参数,我们希望通过梯度下降找到最佳参数值:计算损失函数
对参数
的梯度:
;通过梯度更新参数:
其中:
- η是学习率,决定了每次更新的步长。
四. 批次
假设有一堆训练样本(比如 10000 张图)。训练时不会一次把 10000 张全塞进网络(太慢太占显存),也不会每次只用 1 张(太不稳定)。于是把数据切成很多"小包"。一个批次(batch)就是:一次前向 + 一次反向 + 一次参数更新所使用的那一包样本。
batch size:这个包里有多少个样本,比如 8/16/32/64。
mini-batch:一般说 batch 都指 mini-batch(不是全量数据)。
一次参数更新用的是 批次平均梯度:
其中:
:batch 的平均梯度
:batch size(批次大小)
:第
个样本的损失
:对参数
求梯度
更新公式为(以 SGD 为例):
也就是说,每张图都对"往哪改参数"投一票(它的梯度),取平均后再更新,B 越大,投票越多,方向越稳;B 越小,方向越抖。所以每次用尽可能多的样本进行训练是梯度最稳的做法,但是可能会学习噪声导致过拟合。
| 批次大小 | 特点 |
|---|---|
| 很小 | 噪声大,泛化好,BN不稳定 |
| 适中 | 稳定+泛化平衡 |
| 很大 | 梯度平滑,可能泛化差 |
批次大小影响的是"优化路径",不是模型表达能力,模型能力由:网络结构,参数量,数据质量决定,batch 只是影响"怎么学"。
一个 batch 触发一次 step(也叫 iteration):
- 从数据集中取出一批 B个样本。
- 前向传播:算输出、算 loss(通常取 batch 平均)。
- 反向传播:算梯度(对参数的偏导)。
- 优化器用梯度更新参数(SGD/Adam 等)。
- 进入下一个 batch。