批量规范化
在应用批量规范化时,批量大小的选择可能比没有批量规范化时更重要。
momentum
在批量归一化(Batch Normalization,BN)中,momentum(动量)是一个重要的超参数,它决定了如何更新和调整移动均值(moving_mean)和移动方差(moving_var)的速度。动量的作用在于平滑训练过程中计算的均值和方差,从而使得模型在推理阶段(预测阶段)能够更加稳定地进行标准化。
momentum的具体作用
在批量归一化中,每次使用当前批次的数据计算均值和方差。但是,网络的每一层通常会在训练过程中看到不同的批次数据,这意味着计算出的均值和方差在每次训练时都可能会有所不同。为了应对这种不稳定,Batch Normalization引入了移动均值和方差,它们的更新不仅依赖于当前批次的均值和方差,还依赖于之前批次的统计数据。这样可以避免单个批次数据带来的波动。
公式
在训练过程中,移动均值和移动方差的更新公式如下:
[
\text{moving_mean} = \text{momentum} \times \text{moving_mean} + (1 - \text{momentum}) \times \text{mean}
]
[
\text{moving_var} = \text{momentum} \times \text{moving_var} + (1 - \text{momentum}) \times \text{var}
]
- momentum: 动量系数,控制历史均值和方差对当前批次计算的影响程度。通常取值范围是 [0, 1],它表示历史信息的权重。
- mean 和 var: 当前批次的均值和方差。
momentum的作用:
- 平滑更新:通过使用动量,移动均值和方差的更新变得更加平滑,不会因为单个批次的波动而产生较大的变化。
- 减少训练波动:动量可以减少由于小批量数据而带来的训练波动,避免在推理阶段因批次差异造成的较大差异。
- 稳定预测:在推理阶段(即测试和验证阶段),批量归一化不再使用当前批次的均值和方差,而是使用训练过程中计算的移动均值和方差。这可以确保在推理时的标准化操作是基于整个训练集的数据特征,而不是依赖单个批次的数据。
动量参数的选择:
- 较高的momentum(接近1):如果momentum接近1,那么移动均值和方差的更新将主要依赖于历史信息,当前批次的影响较小。这样会使得更新更加平稳,但可能会导致对当前批次信息的反应较慢。
- 较低的momentum(接近0):如果momentum接近0,那么更新过程会更多地依赖当前批次的数据,而历史数据的影响会较小。这意味着模型会更灵活地适应当前批次的数据,但可能会导致预测时的不稳定性。
总结
- momentum是一个超参数,控制历史批次均值和方差对当前批次更新的影响程度。
- 在训练过程中,动量帮助平滑均值和方差的更新,避免由单一批次造成的不稳定,并确保模型在预测阶段使用稳定的统计量。
- 通常,momentum值设定为接近1(例如0.9或0.99),以便提供稳定的学习过程。
批量规范化
http://example.com/2024/11/11/20241112_批量规范化/