batch norm layer & scale layer
简述
Batch Normalization 论文给出的计算:
前向计算:
后向计算:
BatchNorm 主要做了两部分:
- [1] 对输入进行归一化, xnorm=x−μσ x n o r m = x − μ σ ,其中, μ μ 和 σ σ 是计算的均值和方差;—— 对应 Caffe BatchNorm 层
- [2] 归一化后进行缩放和平移,得到输出 y=γ⋅xnorm+β y = γ ⋅ x n o r m + β . —— 对应 Caffe Scale 层
Scale层设置bias_term=True,即对应于 β β .
Caffe BatchNorm 层的训练,根据从总样本中的 mini-batch 个样本,进行多次前向训练,每次计算都会考虑已经计算得到的 mean 和 variance.
前向计算
Caffe 实现中,不是将每次计算的 mean 和 variance 的结果简单累加,而是通过一个因子(一般小于 1 的变量) 把前一次计算的 mean 和 variance 的作用逐渐较少,再加上本次计算的 mean 和 variance,作为最终的结果. 即滑动平均(Moving Average)的方式.
其过程如下:
St−1 S t − 1 - 前一次 mini-batch 计算的 mean;
Yt Y t - 本次 mini-batch 计算的 mean;
λ λ - 滑动平均因子, moving_average_fraction
Forward 中,
[F1] - 滑动系数, snew=λsold+1 s n e w = λ s o l d + 1
[F2] - 均值, μnew=λμold+μ μ n e w = λ μ o l d + μ
[F3] - 方差, σnew=λσold+mσ σ n e w = λ σ o l d + m σ ,其中, m>1,则m=m−1m m > 1 , 则 m = m − 1 m
Caffe 源码未加参数 γ γ 和 β β .
反向计算
对输入的梯度进行计算,没有参数 γ γ 和 β β .
方差的梯度计算:
∂L∂σ=∑ni=0∂L∂yi⋅∂yi∂σ=∑ni=0∂L∂yi⋅(