莫烦视频笔记--为什么要批标准化(Batch Normalization)?

Batch Normalization批标准化和普通的数据标准化类似,是将分散的数据统一的一种做法,也是优化神经网络的一种方法。在之前normalization的简介视频中我们提到具有统一规格的数据能让机器学习更容易学到数据之间的规律。

在神经网络中,数据分布对训练会产生影响,比如某个神经元x的值为1,某个weights的初始值为0.1,这样后一层神经元计算的结果就是Wx=0.1,又或者x=20,这样Wx的计算值就为2。现在还不能看出什么问题,但是当我们加上一层激励函数激活这个Wx的时候,问题就来了。如果我们选用像tanh这样的激励函数,Wx的激活值就变成了接近0.1和接近1的区间,接近1的部分已经处在了激励函数的饱和阶段,也就是无论x再怎么扩大,tanh激励函数输出的值也是接近于1的数。换句话说,神经网络初始阶段已经不对那些比较大的x的特征范围敏感了。这样很糟糕,想象我轻轻拍自己的感觉,居然和我重重打自己的感觉没什么差别,这就证明了我们的感官系统已经失效了。当然我们可以用之前提到的数据做normalization的预处理,使得输入的x的取值范围不会太大,让输出值经过激励函数的敏感部分。但刚刚这个问题不仅仅发生在神经网络的输入层,而且在隐藏层中常常会发生。

只是现在的X切换到了隐藏层当中,我们能不能对隐藏层的结果进行像刚才那样的normalization处理呢,答案是可以的。因为大牛们已经发明了一种技术,叫做Batch Normalization,正是处理这种情况的。

但是Normalization的Batch指的是批数据,把数据进行gradient descent,而且在每批数据进行前向传递的时候,对每一层都进行Normalization的处理。

Batch Nornalization也可以被看做成一个层面,在一层一层的添加神经网络的时候,我们先有数据X,再添加全连接层,全连接层计算的结果会经过激励函数,成为下一层的输入,接着重复之前的操作,Batch Normalization BN就被添加在每一个全连接和激励函数之间。

我们之前说过计算结果的值在进入激励函数前是非常重要的,如果我们不单单看一个值,我们可以说计算结果的值的分布对于激励函数是很重要的。对于数据大都分布在这样的区间的数据,才能更有效的向前传递,对比这两个在激活之前的值的分布,上者没有进行Normalization,下者进行了Normalization,这样当然是下者更能有效利用tanh进行非线性化的过程。

没有Normalization的数据使用tanh激活以后,激活值大部分分布在饱和阶段,也就是大部分的激活值不是-1就是1,而Normalize以后,大部分激活值在每个激活区间都还存在,再将这个激活后的分布传递到下一层的神经网络进行后续计算,每一个区间都有分布的这种情况,对于神经网络就更加有价值了。Batch Normalization不仅仅Normalize了一下数据,而且它还进行了反向Normalize的工序。

为什么这么做呢?我们引入一些Batch Normalization的公式,这三步就是我们刚刚一直在说的Normalization的工序,但是工序的后面还有一项反向操作,将Normalize后的数据再扩展和平移,原来这是为了让神经网络自己学着使用和修改这个扩展参数

平移参数,这样神经网络就能自己琢磨出前面的Normalization操作到底有没有起到优化作用,如果没有起到优化作用,我们就是用这两个参数来抵消一些Normalization的操作。

最后我们来看一张神经网络训练到最后代表的每层输出结果的分布图,这样我们就能一眼看出Normalization的功效了。让每一层的值在有效的范围内传递下去,就是Batch Normalization的最大好处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值