神经网络的归一化

1. 归一化操作的对象?

 归一化是指对于输入到网络中的初始数据进行归一化

 

2. 归一化的作用是什么?

作用只有一个!

为了更容易train,让模型更好更快的收敛----而关键就在于梯度的传播

那怎么让梯度传播的更好呢?

就是消除量纲!

(1)让各个变量的变化区间长度相同,防止等高线椭圆导致的优化时之字形路线,所以收敛就更好更快了

(2)让各个变量的取值不是太跑偏(过大或者过小),因为过大或者过小可能不利于激活函数的激活,(或者导致W矩阵的值/输入输出值过大?占内存?)

还有就是在深度网络中,由于链式法则的累积效应,梯度过大或者过小会导致梯度爆炸或者消失,而梯度又是与输入值有关(原因可参考sigmoid激活函数的梯度反向传播推导部分),所以输入值保持在一个不大不小的区间比较好

 

一般会归一化到[0,1]或者[-1,1], 但是是否是以零对称对于激活函数的影响其实不大,因为还会经过liner层的计算才会输入到ReLU中,范围就不一定是以0为中心了。

3. 为什么归一化可以帮助模型收敛?

消除输入数据的量纲(即取值范围不同)

如果神经网络的输出值(x1, x2)中,x1,x2取值的区间长度有长有短,就会导致优化的时候走“之字形”路线(由于梯度的方向,见下解释),网络收敛缓慢。

为什么量纲不同会导致优化的时候走“之字形”路线?

以二维为例:

f(x1, x2)的函数是一个三维曲面(可以想象二维高斯分布的分布函数图像)

因为x1, x2的取值范围的长度不同,分布函数f(x1, x2)会在取值范围更大的那个变量的方向被拉伸,则f(x1, x2)的等高线就从圆变成了椭圆。图示如下:

神经网络的归一化_第1张图片

如果两个变量的取值范围相近,等高线就会近似圆形

神经网络的归一化_第2张图片

椭圆在优化loss的时候会走“之字”路线,收敛缓慢(因为某一点的梯度方向垂直于等高线,所以椭圆优化的时候会走“之字形”路线)

4. 归一化与BN

归一化一般只对最初的输入数据进行,而BN则可在每一层都加入

(因为如果每层都进行归一化会改变层输出的分布,破坏了每一层提取出的特征的信息;而BN由于引入了α、β可学习因子,在把数据变成0均值1方差之后,又可通过α、β的调整一定程度上恢复原来的数据分布情况)

所以在使用BN的情况下,归一化变得不是十分必要。

5. 归一化到[0, 1]还是[-1, 1]?

一般神经网络的输入是以0对称分布比较好,也是由于梯度传播的问题,以0为中心可以防止优化的时候“之字形”路线(详见输出值关于0对称的部分)

但是由于归一化之后还会经过liner层,所以就算是归一化到[-1,1]也不一定还是以0对称分布

所以二者影响不大

6.关于归一化的理解误区

误区1:归一化到[0,1]是为了ReLU激活函数,

ReLU的设计初衷就是半区域抑制,如果将ReLU的全部输入都为正值,则会变成identity mapping,失去其作为【非线性】激活的作用。ReLU就是要对不同输入有不同的抑制/激活态才可以有丰富的表达力。

ReLU的正确方式应该是让输入数据正负尽量平衡,现在的CNN通常会在ReLU之前加上BN,也就使得ReLU的输入正负比较平衡(正负的期望都是0.5)

 

 

 

 

 

你可能感兴趣的:(深度学习,深度学习基础理论)