这一部分单独拿出来讲讲,因为后面和 Transformer 的 Layer Normalization 有些类似。
→ 卷积层 → 激活函数 → 池化层 → 归一化层(多用batch norm实现)
关于norm#
一般norm都遵循下面的计算公式:
x^=σ2+ϵx−μy=γx^+β
Batch Normalization#
输入特征图 X∈RB,C,H,W,其中 B 是 batch size,表示喂了多少样本(特征图数量),C 是特征维度(通常指通道数),H 是高度,W 是宽度。
对于每个特征维度 c,跨batch计算均值和方差:
μc=BHW1i=1∑Bj=1∑Hk=1∑WXi,c,j,k,σc2=BHW1i=1∑Bj=1∑Hk=1∑W(Xi,c,j,k−μc)2得到两个 C 维向量 μ∈RC 和 σ2∈RC,然后广播成 B×C×H×W 的矩阵,进行归一化:
X^i,c,j,k=σc2+ϵXi,c,j,k−μcYi,c,j,k=γcX^i,c,j,k+βcBatchsize#
BN强依赖 Batch 中其他样本(跨样本统计)。一般来说,Batch size 越大,BN 的效果越好。Batch size 太小,BN 的效果会变差,甚至可能不收敛。