Conv+BatchNorm+Relu
本文以公式推导的形式,介绍了为啥Conv+BatchNorm+Relu会和单纯的Conv消耗的时间是一样的。
实际上,Conv+BatchNorm+Relu也可以推导成Conv的形式。
1. BatchNorm
计算均值:
μ B = 1 B ∑ i = 1 B x i \mu_B=\frac{1}{B}\sum_{i=1}^{B}{x_i} μB=B1∑i=1Bxi
计算方差:
σ B 2 = 1 B ∑ i = 1 B ( x i − μ B ) 2 + ϵ \sigma_B^2=\frac{1}{B}\sum_{i=1}^{B}(x_i-\mu_B)^2+\epsilon σB2=B1∑i=1B(xi−μB)2+ϵ
批标准化(Batch Normalization,通常缩写为BN)中的一个步骤,用于标准化神经网络中的输入数据:
x i ^ = x i − μ B σ B 2 + ϵ \hat{x_i}=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} xi^=σB2+ϵxi−μB
- x i ^ \hat{x_i} xi^ 是标准化后的第 i 个输入样本的值。
- x i x_i xi 是原始输入样本的值。
- μ B \mu_B μB是批次(Batch)中所有样本的均值,用于计算标准差和方差。
- σ B 2 \sigma_B^2 σB2 是批次中所有样本的方差,用于计算标准差和方差。
- ϵ \epsilon ϵ 是一个小的常数,通常添加到分母中,以避免分母为零,确保数值稳定性。
BN层计算公式:
y
=
γ
x
i
^
+
β
y=\gamma\hat{x_i}+\beta
y=γxi^+β
将 x i ^ \hat{x_i} xi^带入得:
y = γ x i − μ B σ B 2 + ϵ + β y=\gamma\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta y=γσB2+ϵxi−μB+β
2. Conv
卷积公式:
x i = w x i + b x_i=wx_i+b xi=wxi+b
代入下面公式:
y = γ x i − μ B σ B 2 + ϵ + β y=\gamma\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta y=γσB2+ϵxi−μB+β
得:
y = γ w x i + b − μ B σ B 2 + ϵ + β = γ w σ B 2 + ϵ x i + γ b − μ B σ B 2 + ϵ + β y=\gamma\frac{wx_i+b-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta\\ =\gamma\frac{w}{\sqrt{\sigma_B^2+\epsilon}}x_i+\gamma\frac{b-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta y=γσB2+ϵwxi+b−μB+β=γσB2+ϵwxi+γσB2+ϵb−μB+β
3. ReLU
y = m a x ( 0 , x ) y=max(0,x) y=max(0,x) 仅仅是这个简单的计算公式,可随意进行添加。
m a x ( 0 , γ w σ B 2 + ϵ x i + γ b − μ B σ B 2 + ϵ + β ) max(0,\gamma\frac{w}{\sqrt{\sigma_B^2+\epsilon}}x_i+\gamma\frac{b-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta) max(0,γσB2+ϵwxi+γσB2+ϵb−μB+β)