对Batch Normalization的理解

在学习YOLO-v1的过程当中对于Batch Normalization的理解,一直没搞明白“神经网络训练的难题之一,在前层参数变化时,每层的输入分布也随之变化。这就造成了当层的训练困难,老是变来变去”这句话到底表达什么意思呢?
解释:
因为在深度神经网络在做非线性变换前的激活输入值(就是哪个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下两端靠近。所以这会导致反向传播时低层神经网络的梯度消失。举个sigmoid函数和relu函数的例子。
在这里插入图片描述
在这里插入图片描述
这两个函数都是机器学习或者深度学习领域两个典型的激活函数,激活函数的作用大概我不用多说。但现在的问题是,我们知道梯度下降法是从前层神经网络向后层神经网络不断传送梯度的,每一层的隐层的参数变化完全靠梯度的变化幅度。什么意思,就是我现在的w要到一个我希望的w*,如果上层传过的来梯度值过于小,我每次加的▲w就特别小,这样可能需要非常多的时间,或者我需要走很多步才能到达w*这个位置。这也是为什么网络层数越深,越难以收敛,训练速度慢的原因。因为前层网络的梯度几乎传不到后层。
那么我们就会问了,决定这个梯度传过来的大小到底是由什么决定的?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

深层神经网络在做非线性变换前的激活输入值(就是y=WX+b,中的那个x)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近。
对sigmoid函数来说,也就是网络层数越深,后来网络的激活输入值y逐渐往趋于正无穷或负无穷的方向跑了,这就导致此时的梯度几乎为0,那么这么小的梯度乘上层传回来的损失值再传到下层基本上就没了,下层学不到什么。而对Relu函数来说,比较糟糕的整体的输入值都往负无穷方向跑了,那么梯度都为0,而且还有糟糕的是,几乎激活激活函数后全部输出值也都为0。

Batch Normalization其实就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布。
在这里插入图片描述
BatchNorm为什么NB呢,关键还是效果好。①不仅仅极大提升了训练速度,收敛过程大大加快;②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。总而言之,经过这么简单的变换,带来的好处多得很,这也是为何现在BN这么快流行起来的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值