BN,IN都是这个公式
其中μ和σ是running_mean和running_var(方差variance)
γ和β(gamma, beta) 是weight和bias, 也被称作缩放和平移参数
对于BN来说,只有γ和β才是learnable params
这是稍微复杂的写的BN的过程
仿射(affine)指的就是最后一步
如果
affine=False
则固定γ=1,β=0,并且不能学习被更新
如果 track_running_stats=True,
表示跟踪整个训练过程中的batch的统计特性,得到方差和均值,而不只是仅仅依赖与当前输入的batch
的统计特性。相反的,如果track_running_stats=False
那么就只是计算当前输入的batch的统计特性中的均值和方差了。为什么会有gamma, beta这两个参数?
让BN能够把feature通过学习可以缩放成一个任意 方差为某个值,均值为某个值的东西(李沐)
如果单纯地使用前三个公式,有可能会影响一些层的表达能力,例如,如果使用激活函数使用sigmoid,那么这个操作会强制输入数据分布在sigmoid接近线性的部分,接近线性的模型显然不好(影响整个模型的表达能力)。所以文中说把前三个公式作为基本变换(单位变换),加上放缩γ和平移β后再拿来使用,这两个参数是可以学习的。
在极端情况下,即,]时,经过BN层的数据没有变化。即
做BN的时候,每个channel都会做BN
BN和IN(affine仿射, track_running_stats)
于 2021-10-05 21:23:08 首次发布