batch_normal机制初窥

参考文献:
https://www.cnblogs.com/hansjorn/p/6298576.html

大家都做过对图片信息的处理。
在这个过程中,我们会发现,由于图像的像素是0-255之间。
这就说明,在整个过程中,我们发现其值永远在第一象限中。
假设我们想用方程max(wx + b)来进行分类。
那整个过程中,训练的目的,就是训练w和b。

W的初始化,一般是从高斯分布中进行随机初始化的。
有正有负。

这个时候用这个分类器对像素进行分类,发现图像的所有点,都集中在第一象限中。
那么在整个过程中,我们会发现,max(wx+b)为了达到收敛的效果,必然会为此付出巨大的代价。
最显著的是,随机初始化的分布是普通的高斯分布,那么这个随机分布,正是问题所在。

那么为了防止曲线从外部进行分割,导致分割收敛的速度慢,或者导致陷入局部最优解。

有一个方法,就是将原始的数据进行一个拆分,将它拆分为一个在四个象限中都有的形象,也就是一个平面。

这样的方法有很多,最简单的方法就是z-score的方法,对每个维度进行平均求方差,就能达成这样的效果。

那么在多层神经网络当中,我们可以采用层次处理的方法。
对每一层都进行这个操作,那么无疑会大大加快处理时间。

理论上说呢,这个操作应该是在max(wx+b)后进行的,这样是对每一层进行处理。

可惜的是,不是这样的,要处理的对象是wx+b,作者认为对max后进行处理,一开始的时候参数不稳定,不太适合,所以干脆对wx+b进行处理

那么怎么处理呢,就是针对每一纬度,wx+b都是减去自身均值再除以标准差,因为是针对一个batch进行处理,所以叫做batch_normal。
在对卷积的处理过程中,我们意识到卷积层的参数是被共享的,那怎么进行batch_normal,很简单,在所有纬度进行操作后,取标准差和均值。

在这之后,我们意识到 y ( k ) = γ k x ^ k + β k y^{(k)} = \gamma^{k}\hat x^{k} +\beta^{k} y(k)=γkx^k+βk公式转变为左边的方程。
其中 γ \gamma γ是标准差,而 β \beta β是均值。
这不是又加回去了吗

其实不是的,因为在batch_normal后,其值会倾向于在0.2到0.8中,对于sigmoid来说,它会导致只用线型部分,所以必须加上这一段,进行学习。

这个算法解决了什么问题呢?
学习率更高了
dropout可以更低了,因为过拟合一般都发生在边缘位置,我们直接从中间开始切割。
降低L2权重,L2也是降低模型复杂度的方法

但同样,在这样的操作过程中,我们会发现

abbreviated 缩略

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值