深度学习——正则化(Normalization)简介

深度学习——Batch Norm

文章目录

前言:为什么要正则化

关于这个问题,举一个生活上的例子。我们知道在工业生产的时候,只有标准化的,流水线的生产方式,效率才是高的。一个流水线上生产的产品,几乎都是一模一样的。为什么要这样?因为这样生产效率高。如果一个流水线上一会儿生产特斯拉,一会儿又生产法拉利,那么这个流水线光折腾不同的零件就够让人折腾了,谈何加快效率?

在神经网络当中也是这样子,如果所有层的输入数据都是同分布的,那么就像一条流水线生产同一种东西那样,效率就会很高。但实际上,经过每一层的运算之后,输出的数据都会有所不同,这些不同的数据也会处在不同的范围之内,范围不同,进一步导致分布的不同,那就没有什么“标准化”可言了。在这种情况下,我们就需要正则化。将各个层的输入数据都统一在同一个范围和分布上,以达到“标准化”。进而增加训练效率。

在神经网络当中,由于有很多Hidden Layer,因此正则化的过程会比较复杂。这当中最为常用的是Batch Norm(简称:BN),除了Batch Norm,还有Layer Norm, Instance Norm,Group Norm等等
深度学习——正则化(Normalization)简介

一.单一神经元的正则化

我们假设有这么一个但神经元:
深度学习——正则化(Normalization)简介
我们把输入值x1, x2, x3 统称为X,那么对于输入值的正则化,按照下面步骤进行(不难):

  • step1:计算输入值的平均值
    μ = 1 m ∑ i = 1 m x i \mu = \frac{1}{m}\sum_{i=1}^{m} x_{i} μ=m1​i=1∑m​xi​
  • 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​i=1∑m​(xi​−μ)2
  • step3:正则化
    x = x σ 2 x = \frac{x}{\sigma^2} x=σ2x​

但是,神经网络的结构远远不是单神经元,这个时候,我们就需要对上面这个步骤进行拓展,也就是Batch Norm。

二. Batch Norm

我们假设,有如下这样子的神经网络:
深度学习——正则化(Normalization)简介
对于每一层,都会首先计算出一个线性方程Zi,然后,这个线性方程代入到激活函数当中(甭管是Simoid,还是ReLu等),计算出一个全新的输出值。Batch Norm其实就是对各个线性方程的输出结果Zi进行运算:
首先,给定Z1, Z2, Z3, ……, Zm

  • step1:计算z的平均值
    μ = 1 m ∑ i = 1 m z i \mu = \frac{1}{m}\sum_{i=1}^{m} z_{i} μ=m1​i=1∑m​zi​
  • step2:计算z的方差
    σ 2 = 1 m ∑ i = 1 m ( z i − μ ) 2 \sigma^2 = \frac{1}{m}\sum_{i=1}^{m}(z_{i}-\mu)^2 σ2=m1​i=1∑m​(zi​−μ)2
  • step3:正则化
    z n o r m ( i ) = z i − μ σ 2 + ϵ z_{norm}^{(i)} = \frac{z_{i}-\mu}{\sqrt{\sigma^2+\epsilon}} znorm(i)​=σ2+ϵ ​zi​−μ​
    其中epsilon是为了防止方差为0的情况
  • step4
    z i ~ = γ z n o r m ( i ) + β \tilde{z^{i}} = \gamma z_{norm}^{(i)} + \beta zi~=γznorm(i)​+β
    这当中,gamma和beta都是学习参数,可以手动指定。当然你也可以参考梯度下降改进的方式,用Adam之类的方式来处理。
    值得一提的是,当:
    γ = σ 2 + ϵ , β = μ \gamma = \sqrt{\sigma^2 + \epsilon}, \beta = \mu γ=σ2+ϵ ​,β=μ
    的时候,当我们把这个代入step3的式子时候会发现:
    z i ~ = z n o r m ( i ) \tilde{z^{i}} = z_{norm}^{(i)} zi~=znorm(i)​

那么,换到整个神经网络当中,我们每一层Hidden Layer都进行上述计算,那么最后就会完成Batch Norm.

如果,我们用Mini-Batch的方法来进行相关运算,那么伪代码如下:

for t=1,2,3,……,number_of_mini-batch:
	前向运算:
		每一个Hidden Layer,都运用Batch Norm进行计算,来替代原本的z值(运算过程如step1~step4所示)
	使用反向传播,计算对w,beta,gama的偏导,然后更新参数
上一篇:电磁学9.毕奥-萨法尔定律


下一篇:吴恩达机器学习笔记-15(异常检测)