BatchNormalization解释

参考网址:点击打开链接

一、为什么要使用BatchNormalization?

在深度网络的训练过程中,只要网络的前几层发生微小的变化,就会在后面网络的累积放大下去。一旦网络的某一层的输入数据的分布发生了变化,那么这层网络就需要去适应这个新的数据分布,所以训练过程中,如果训练数据一直在发生改变的话,就会使网络的训练速度很慢。为了解决这个问题就可以使用BatchNormalization算法。


二、BatchNormalization是怎么做的?

首先对应的是一种归一化处理,将数据变化为均值为0,标准差为1的数据。即减去平均值,除以标准差。

                                

只是归一化存在一定的问题,当你进行归一化处理后,数据的差距会减小,导致在使用S型激活函数的时候,会让本来处于两侧的数据都跑到了中间部分,这样提取出来的特征就变弱、或者消失了。所以又引入一个变换重构的方式

                                   

参数γ和β是可学习参数

这样当的时候,就会恢复到原来的特征。


最终有


有一个问题:先进行正则,又变回去,那不是等于没变么?

不会。因为,再变换引入的两个新参数 g 和 b,可以表示旧参数作为输入的同一族函数,但是新参数有不同的学习动态。在旧参数中, \bold{x} 的均值取决于下层神经网络的复杂关联;但在新参数中, \bold{y}=\bold{g}\cdot \bold{\hat{x}} + \bold{b} 仅由 \bold{b} 来确定,去除了与下层计算的密切耦合。新参数很容易通过梯度下降来学习,简化了神经网络的训练。



阅读更多
上一篇卷积神经网络里的复杂度计算
下一篇poj 4151电影节
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭