Batch Normalization

0.简介

优点:克服了深度网络在训练中的缺点,摆脱了relu、低学习率和doupout正则化方式束缚
目的也是增加网络的非线性性

1.减少内部协变量转变(InternalCovariate Shift)

保证非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,训练将加速。
内部协变量:我们把训练过程中深度网络内部结点的分布变化称为内部协变量转移(We refer to the change in the distributions of internal nodes of a deep network)
白化:去除输入数据的冗余信息,现使用pca之后再进行

在这里插入图片描述

这样的计算成本比较高,所以再BN中使用标准化的方式来进行去冗余信息
减少内部协变量转变:先使用标准划来预处理:
x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \hat x^{(k)} = \frac{x^{(k)} - E[x^{(k)}]} {\sqrt {Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E[x(k)]
但是简答的标准划会减少本层中的特征信息,所以要通过一个线性的转换来增添他的身份信息。
y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) . y^{(k)} = \gamma^{(k)}\hat x^{(k)} + \beta^{(k)}. y(k)=γ(k)x^(k)+β(k).
参数 γ \gamma γ β \beta β是要训练得到的,这些参数与原始的模型参数一起学习,并恢复网络的表示能力。

γ ( k ) = V a r [ x ( k ) ] \gamma^{(k)} = \sqrt{Var[x^{(k)}]} γ(k)=Var[x(k)] β ( k ) = E [ x ( k ) ] \beta^{(k)} = E[x^{(k)}] β(k)=E[x(k)]
在训练的时候,输入一张图片会导致没有标准差和期望的信息,所以bn使用的是取每个batch中的均值

2.提高学习率

学习率过高可能会导致梯度爆炸或梯度消失,以及陷入差的局部最小值,而一些老的非线性的激活函数(sigmoid和tanh)是有激活条件的,所以要把数据压缩到激活的条件范围内比较好。通过标准化整个网络的激活值,在数据通过深度网络传播时,它可以防止层参数的微小变化被放大
在这里插入图片描述
而ReLU这一函数并没有上界,也就是其导数不存在趋近于0的情况,那么为什么在进行图像处理相关的神经网络的时候还是需要将其进行正则化呢?因为输入数据基本上不是独立同分布的,所以可以通过bn来将输入数据规范化为正态分布确实有利于提升网络的整体效果。因此在ReLU函数之前接上了一个Batch Normalization层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值