反向传播算法
优化器(不考)
学习率
GD梯度下降
最普通的优化方法,一次计算所有样本的损失的梯度,更新参数
SGD随机梯度下降
每次只计算随机一个样本的损失的梯度,更新参数
Mini-batch SGD小批量随机梯度下降
每次随机选择一小批样本,计算损失的梯度,更新参数
Momentum动量法
模拟物理中的动量,更新参数时考虑上一次的更新方向
- 是动量系数,通常取值在 [0.9, 0.99] 之间
Nesterov加速梯度法
改进自动量法
先在当前位置按上次的动量方向走一点再算梯度
Adagrad自适应梯度算法
令为第个参数在第次迭代的梯度,累计梯度平方和:
实际实现是递推相加避免重复计算:
则参数更新:
- 是一个小常数,防止除零错误,通常取
- 是初始学习率,通常取
缺点:学习率单调递减,最后学不动
RMSProp均方根传播算法
改进自Adagrad,解决学习率单调递减的问题
核心思想是按比例丢弃历史的梯度平方和,且按比例新增梯度平方,限制梯度平方和的增长速度
定义梯度平方和的指数移动平均(或/):
- 是衰减率,通常取
参数更新:
Adam自适应矩估计算法
结合Momentum和RMSProp
- 是一阶矩的衰减率,通常取
- 是二阶矩的衰减率,通常取
和初始化为0, 训练初期期望值会偏向0导致更新过小,需进行偏差修正:
- 是迭代次数
- 和 是衰减率的次幂,随着迭代次数增加,趋近于0
参数更新:
AdamW自适应矩估计权重衰减算法
改进自Adam,解决L2正则化在Adam中不生效的问题
在Adam的基础上,参数更新后再进行权重衰减:
- 是权重衰减系数,通常取
激活函数
对数Sigmoid函数
双曲正切函数
ReLU
NOTE平滑ReLU(Softplus):
批归一化(BN)
通过规范化每层输入,解决训练过程中**内部协变量偏移(Internal Covariate Shift)**问题,即前层参数变化导致后层输入分布持续变化的现象。
前向传播
对每个 mini-batch ,对每个特征维独立进行归一化:
- (缩放参数)、(平移参数)是可学习参数,恢复网络的表达能力
- 防止除零,通常取
引入 的原因是:单纯归一化会将数据限制在单位方差、零均值,可能破坏网络的表达能力(如将原本在 Sigmoid 线性区的输入推到饱和区);通过可学习的 ,网络可以自行决定是否恢复原始分布。
训练与推理的差异
-
训练时:使用当前 mini-batch 的 进行归一化
-
推理时:使用训练集上累积的全局均值 和方差 (指数移动平均):
- 为动量系数(通常 ),推理时固定该统计量
反向传播
BN 层参与梯度计算,链式法则需考虑 和 对输入的依赖。现代框架自动处理,梯度通过归一化、、 逐层回传。
放置位置
通常置于线性变换之后、激活函数之前:
因 BN 含有平移参数 ,线性层中的偏置 可省略。
作用与效果
| 作用 | 说明 |
|---|---|
| 加速收敛 | 缓解梯度消失/梯度爆炸,允许使用更大的学习率 |
| 减少过拟合 | 每个 batch 的均值方差存在随机性,带来轻微正则化效果 |
| 降低对初始化的依赖 | 每层输入分布相对稳定,参数初始化不必过于精确 |
| 允许更大学习率 | 输出分布受控,不易发散 |
局限
- 小 batch 不友好:batch 过小时统计量不稳定,影响训练质量(替代方案:LayerNorm、GroupNorm)
- 训练与推理行为不一致:训练依赖 batch 内其他样本,推理使用全局统计量
- 对序列模型不直接适用:RNN 中不同时间步共享 BN 参数需特殊处理