Batch Normalization介绍

什么是批归一化Batch Normalization
训练神经网络的时候,如果只对输入层数据进行归一化处理,当数据经过wx+b这样的矩阵乘法以及非线性运算之后,其数据分布很可能会被改变,随着层数越来越深,数据分布变化越来越大,为了让激活函数的输入层更合理分布,所以我们考虑在网络的中间层也进行归一化,这就是BN

Batch Normalization的流程
设定上一层的输出结果是X= x 1 , x 2 . . . , x m x_1,x_2...,x_m x1,x2...,xm
第一步 计算上一层输出的均值:
常量 u β = ( x 1 + x 2 + . . . + x m ) / m u_{\beta}=(x_1+x_2+...+x_m)/m uβ=(x1+x2+...+xm)/m;其中m是batch size大小

第二步 计算上一层输出数据的标准差:
常量 σ β 2 = ∑ i = 1 m ( x i − u β ) 2 / m {\sigma}^2_{\beta}={\sum}_{i=1}^m(x_i-u_{\beta})^2/m σβ2=i=1m(xiuβ)2/m

第三步 进行标准差标准化
x ‘ = x − u β σ 2 + ϵ x^{`} = \frac{x-u_{\beta}}{\sigma^2+\epsilon} x=σ2+ϵxuβ 其中 ϵ \epsilon ϵ是一个微小常数,只是为了让分母不等于0 。

第四步 重构x。得到每一层新的输入分布
y = γ ∗ x ‘ + β y=\gamma*x^` + \beta y=γx+β,其中 学习的参数是 γ , β {\gamma},{\beta} γ,β.

上述是训练过程的批归一化,但是在测试过程中,基本只有一个测试样本,此时 u β u_\beta uβ是从计算的所有批次batch 的 u β u_\beta uβ加起来平均得到的,而标准差 σ β 2 {\sigma}^2_{\beta} σβ2是根据每个批次 σ β 2 {\sigma}^2_{\beta} σβ2的无偏估计得到的。所以当模型训练完毕的时候,测试阶段需要的参数也已经固定了。
其中固定的均值和方差就是
E [ x ] = E B [ u β ] E[x]=E_B[u_\beta] E[x]=EB[uβ]
V a r [ x ] = m m − 1 E B [ σ 2 ] Var[x]=\frac{m}{m-1}E_B[\sigma^2] Var[x]=m1mEB[σ2]

测试时候,输入的分布就是
x ‘ = x − E [ x ] V a r [ x ] + ϵ x^`=\frac{x-E[x]}{\sqrt{}Var[x]+\epsilon} x= Var[x]+ϵxE[x]

每一层的分布就变成
在这里插入图片描述

批归一化BN的优点
1是为了加快模型训练
2是每一层的归一化避免了梯度消失或者梯度爆炸
3是关于BN能否解决过拟合的问题,这个问题网上讨论很多,我认为一种比较好的解答如下:个人认为BN不能解决过拟合,根据paper中的实验来说,是无法阻止过拟合的。但是BN可以在某些情况下对过拟合有抑制作用,使得过拟合在更多的 train epoch之后才出现。不能解决但是能缓解
BN的核心思想不是为了防止梯度消失或者是防止过拟合,其核心思想是通过系统参数搜索空间进行约束来增加系统鲁棒性,这种约束压缩了搜索空间,约束也改善了系统的结构合理性,这会带来一些列的性能改善,比如加速收敛、保证梯度、缓解过拟合等等,这也是为什么很多模型使用BN就不用dropout了。

归一化的意义
训练归一化的意义,缓解深层网络的梯度弥散问题,加快模型训练。
那么在深度学习模型中,越深的层数据分布变化的越剧烈,导致之前底层学习到的参数很难适应当前的数据分布。这样会导致
1 训练速度变慢;
2 前一层的剧烈变化可能导致后一层陷入饱和区,提前结束训练;
3层与层之间相互影响,优化很难进行。
常见的两种归一化
第一种 线性归一化
x ‘ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^`=\frac{x-min(x)}{max(x)-min(x)} x=max(x)min(x)xmin(x)
第二种 标准差标准化
x ‘ = x − u σ x^`=\frac{x-u}{\sigma} x=σxu
标准差标准化让处理后的数据符合标准正态分布,也就是均值0,标准差1

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值