数据的归一化
先放上宏毅大神的图,说明一下我们为什么要做数据的归一化
说明:x2的变化比较大,使用w2方向上就显得比较陡峭(梯度),学习率就不能设置得过大。
Batch Normalization
为什么要有batch normalization
主要是避免internal covariate shift,如图所示,输出上下波动太大(如同第二个人)的话会影响整个模型的训练,第二个人告诉第二个人话筒放低点,第三个人告诉第二个人放高点,如果你的步长过大的话就会变成第二个图,跟没训练一样,所以最开始为了解决这样的状况,会考虑把学习率放小点,但这样网络就会变得比较慢。所以bn就可以把每一层的输出的变化都变小。训练也会变快,我们也就能训练更加深层的神经网络。
这边吴恩达的解释也是异曲同工:
Batch归一化减少了输入值改变的问题,它的确使这些值变得更稳定,神经网络的之后层就会有更坚实的基础。即使使输入分布改变了一些