关于对卷积神经网络BN,bias,relu之间关系的理解

以下三个问题其实是一个问题

一、为什么加BN,为什么加relu

二,为什么如果+BN ,卷积层可以不加bias

三,为什么BN要在relu前

--------------------------------------------------------------------------------------------------------

relu的效果就是把负值归零,可以理解为清除与特征无关的信息。relu的输出就是有用的信息,和大面积的0。

---------------------------

BN共分为4步,

第一步均值,作用是将输入数据中心平移至0点。

第二步方差,作用是将平移至0点的数据在输出方向上拉伸或缩小为1个标准差的倍数。

第三步gamma,作用是将这1个标准差的信号变成gamma倍。

第四步beta,作用是在输出方向上平移数据。

以上是从数据角度,如果从0点角度来说

BN第一步均值,是将0点定位数据中心。

第二步方差,是将数据到0点的距离调整为以标准差为单位

第三步gamma,是将数据到0点的距离调整为gamma倍标准差为单位

第四部beta,是在输出方向移动0点,调整数据在0上或者在0下的位置。

-----------------------------------

最终0下被relu清除,0上被relu完整输出给下一个卷积。

所以BN+relu是一个整体,共同决定了输出值究竟淘汰了多少信息,以及保留信息的强度。

卷积相当于粗加工,他就把原输入过滤一遍,然后把结果扔出来,不过他不会调整力度太轻他就仍天上扔的远,太重的他就扔地上扔的近。(bias会解决这个问题,这里认为有BN卷积里就没有加bias)。

relu本质上就是一个位置固定地机器,不管来的是什么,在哪里,有多高。他就是永远在0点切一刀,切到啥是啥。 然后0下的压扁当托盘,拖着0上的一起交给下一个卷积。

这两者直接接触明显会产生三个问题:扔高了切不到等于没切;仍低了直接不切全压扁了;扔出来的东西太大太小棱角太多,切完丢给下一个卷积人家没法处理。

而这三个问题就是由BN的4各环节一一解决的:接稳(均值),打磨(方差和gamma),对准刀口(beta)。

所以BN是为了relu做准备,提供给relu一个整理好的数据集,给relu摆好位置,让relu无需动脑,直接下刀。

所以如果BN如果在relu后,那么相当于relu先蒙着眼自己切一刀,切到什么就看卷积的直接输出是什么,最极端情况是relu什么也没切到(全正)相当如relu直接输出所有数据。或者relu直接把所有信号清零(全负)。 

并且这不算完,然后BN还会再把relu产生的大量0点,重新调整为负最大值。相当于把大面积正输出,变为负输出,relu归零变 成 了 归负极 。相当于弱化有用信息,并强化无用信息,并且把大量无用信息极端最大化。

连起来比喻就相当于卷积大师傅丢一个只有BN懂的东西出来,却被relu一步抢先闭眼直接凌空一刀一锤。BN接住天一看似曾相识,话不多说就把这个上半球按照整球标准精细打磨了一遍,然后按操作手册把数据调整高度,对准relu刀口,画条黑线,线下全部打叉,丢给下一个卷积。

因为下一个卷积会针对这个奇怪的东西改变自己来加工他,所以最后结果会是怎样不好说,就只能看最后结果。

可以肯定的只有:要不就是上一个卷积认为有用的数据,相当大一部分被当成了干扰项传给了下一个卷积。要不就是上一个卷积认为无用的数据,相当大一部分被当成特征传给了下一个卷积。

所以BN要在relu前,看上去更合理。

---------------------------------------

同时因为BN的均值环节,完全无视卷积的bias效果,不管bias如何平移数据,BN均值都会将数据中心归零,都会是一个结果,所以卷积的bias无用,可以不加。而BN中beta的作用,就是卷积层中的bias的作用。可以理解为BN相当于是在卷积的卷积和bias两个环节中间,加了均值,方差,gamma三个环节把卷积的bias,变成了自己的beta。

你可能感兴趣的:(matplotlib,python)