深度学习——Batch Norm
前言:为什么要正则化
关于这个问题,举一个生活上的例子。我们知道在工业生产的时候,只有标准化的,流水线的生产方式,效率才是高的。一个流水线上生产的产品,几乎都是一模一样的。为什么要这样?因为这样生产效率高。如果一个流水线上一会儿生产特斯拉,一会儿又生产法拉利,那么这个流水线光折腾不同的零件就够让人折腾了,谈何加快效率?
在神经网络当中也是这样子,如果所有层的输入数据都是同分布的,那么就像一条流水线生产同一种东西那样,效率就会很高。但实际上,经过每一层的运算之后,输出的数据都会有所不同,这些不同的数据也会处在不同的范围之内,范围不同,进一步导致分布的不同,那就没有什么“标准化”可言了。在这种情况下,我们就需要正则化。将各个层的输入数据都统一在同一个范围和分布上,以达到“标准化”。进而增加训练效率。
在神经网络当中,由于有很多Hidden Layer,因此正则化的过程会比较复杂。这当中最为常用的是Batch Norm(简称:BN),除了Batch Norm,还有Layer Norm, Instance Norm,Group Norm等等
一.单一神经元的正则化
我们假设有这么一个但神经元:
我们把输入值x1, x2, x3 统称为X,那么对于输入值的正则化,按照下面步骤进行(不难):
- step1:计算输入值的平均值
μ = 1 m ∑ i = 1 m x i \mu = \frac{1}{m}\sum_{i=1}^{m} x_{i} μ=m1i=1∑mxi - step2:计算方差
σ 2 = 1 m ∑ i = 1 m ( x i − μ ) 2 \sigma^2 = \frac{1}{m}\sum_{i=1}^{m}(x_{i}-\mu)^2 σ2=m1