BN和CmBN

BN和CmBN

(Batch Normalization和Conditional Modulation Batch Normalization)

BN

       BN是Batch Normalization的缩写,是一种深度神经网络中常用的正则化方法。它通过对网络每一层的输入进行归一化,从而使得网络训练更加稳定、加速收敛并且减少了对超参数的敏感性。

       在BN中,对于每个batch的数据,首先计算出其均值和方差,然后对输入数据进行中心化和标准化操作。具体而言,假设一个batch的数据为 B = { x 1 , x 2 , . . . , x m } B=\{x_1,x_2,...,x_m\} B={ x1,x2,...,xm},其中 x i x_i xi是第 i i i个样本的输入,其维度为 n n n。则对于每一维度 i ∈ { 1 , 2 , . . . , n } i\in\{1,2,...,n\} i{ 1,2,...,n},计算出 B B B中所有样本在该维度上的均值 μ i \mu_i μi和方差 σ i 2 \sigma_i^2 σi2。然后,对于每个样本 x i x_i xi,进行如下变换:

x i ^ = x i − μ i σ i 2 + ϵ \hat{x_i}=\frac{x_i-\mu_i}{\sqrt{\sigma_i^2+\epsilon}} xi^=σi2+ϵ xiμi

       其中 ϵ \epsilon ϵ是一个极小值,防止分母为0。最后,BN会引入两个可学习参数 γ \gamma γ β \beta β,分别用于缩放和平移归一化后的值,得到最终输出:

y i = γ x i ^ + β y_i=\gamma\hat{x_i}+\beta yi=γxi^+β

       通过BN,每一层的输入都被归一化到一个相对稳定的范围内,使得网络的激活函数的输入更加规范化,避免了激活值过大或过小导致的梯度消失或爆炸问题。同时,BN也可以减轻网络对权重初始化的依赖,从而提高网络的泛化性能。

CmBN

       CmBN是Conditional Modulation Batch Normalization的缩写,是一种可以学习输入特征的Batch Normalization方法。与普通的BN不同,CmBN不仅会学习每个通道上的均值和方差,还会根据输入的条件信息对每个通道上的特征进行不同的调节。因此,CmBN可以通过学习输入条件信息来动态地调整特征的表达,使得网络在不同的条件下可以更加准确地学习到不同的特征。

       具体而言,假设输入特征为 X ∈ R C × H × W X\in\mathbb{R}^{C\times H\times W} XRC×H×W,其中 C C C是通道数, H H H W W W分别是高度和宽度。对于CmBN,输入的条件信息被表示为 Z ∈ R C z Z\in\mathbb{R}^{C_z} ZRCz,其中 C z C_z Cz是条件信息的维度。CmBN的计算过程如下:

       首先,计算出输入特征在每个通道上的均值和方差:

μ c = 1 H × W ∑ h = 1 H ∑ w = 1 W X c , h , w ,    σ c 2 = 1 H × W ∑ h = 1 H ∑ w = 1 W ( X c , h , w − μ c ) 2 \mu_c=\frac{1}{H\times W}\sum_{h=1}^H\sum_{w=1}^WX_{c,h,w},\ \ \sigma_c^2=\frac{1}{H\times W}\sum_{h=1}^H\sum_{w=1}^W(X_{c,h,w}-\mu_c)^2 μc=H×W1h=1Hw=1WXc,h,w,  σc2=H×W1h=1Hw=1W(Xc,h,wμc)2

       然后,对每个通道的特征进行归一化:

X ^ c , h , w = X c , h , w − μ c σ c 2 + ϵ \hat{X}_{c,h,w}=\frac{X_{c,h,w}-\mu_c}{\sqrt{\sigma_c^2+\epsilon}} X^c,h,w=σc2+ϵ Xc,h,wμc

       接下来,引入两个可学习参数 γ c \gamma_c γc β c \beta_c βc,用于缩放和平移归一化后的特征:

X ~ c , h , w = γ c X ^ c , h , w + β c \tilde{X}_{c,h,w}=\gamma_c\hat{X}_{c,h,w}+\beta_c X~c,h,w=γcX^c,h,w+βc

       最后,根据输入的条件信息 Z Z Z γ c \gamma_c γc β c \beta_c βc进行调节,得到最终的输出特征:

Y c , h , w = Z c X ~ c , h , w Y_{c,h,w}=Z_c\tilde{X}_{c,h,w} Yc,h,w=ZcX~c,h,w

区别

       从所有的公式对比中可以看出,CmBN和BN较大的差别就在CmBn多了这个公式。
       CmBN中的 Z c Z_c Zc是指条件信息 Z Z Z中的第 c c c个元素,它用于对特征进行调节。 Z Z Z可以是任何与输入特征相关的信息,例如网络的上一层输出、图像的标签或者其他的辅助信息。在实际应用中, Z Z Z的取值通常需要根据具体的任务和场景进行设计。

       在训练CmBN时, Z c Z_c Zc是可以通过反向传播来学习的。具体而言,对于每个样本,我们可以通过反向传播来计算出关于 Z c Z_c Zc的梯度,并利用梯度下降等优化方法来更新 Z c Z_c Zc的值。这样,网络可以根据输入的条件信息动态地调整特征的表达,从而更加准确地学习到不同的特征。在测试时, Z c Z_c Zc通常是根据具体的应用场景事先设置好的,例如在目标检测任务中,可以将 Z c Z_c Zc设置为每个目标的类别标签和位置信息。

       需要注意的是,CmBN中的 Z c Z_c Zc是针对每个通道独立学习的,因此可以对不同的通道应用不同的条件信息。这种特性可以让网络在学习特定通道的特征时更加灵活和精确。

       CmBN的主要优点是可以根据输入的条件信息对特征进行动态调节,从而提高网络的灵活性和准确性。CmBN可以应用于各种深度学习任务,例如图像分类、目标检测和语义分割等。

参考

关于BN,大家可以参考一下这个博主的文章,写的很详细,我还没来的及看,链接先保存在这,回头再看方便找
http://t.csdn.cn/GyH8D

猜你喜欢

转载自blog.csdn.net/G_Shengn/article/details/130552211
BN