什么是批标准化

Batch Normalization ,批标准化和普通的数据标准化类似,是将分散的数据统一的一种方法,也是优化神经网络的一种方法。

批标准化,不仅在将数据输入模型之前对数据做标准化,而且还在网络的每一次变换之后都做标准化。即使在训练过程中均值和方差随时间发生变化,它也可以适应性地将数据标准化。

优点

我们知道在数据预处理时做标准化可以加速收敛,同理,在神经网络中使用标准化也可以加速收敛,而且还有更多的好处。
(1)具有正则化的效果
(2)提高模型的泛化能力
(3)允许更高的学习速率从而加速收敛
(4)批标准化有助于梯度传播,因此允许更深的网络,对于有些特别深的网络,只有包含多个BatchNormalization 层时才能进行训练

Keras 实现批标准化

BatchNormalization 广泛用于Keras 内置的高级卷积神经网络架构,比如ResNet50、Inception V3 和Xception.
BatchNormalization 层通常在卷积层或密集连接层之后使用。
layers.Batchnormalization()

超参数选择原则

网络容量: 可以认为其与网络中的可训练参数成正比。 网络中的神经单元数越多,层数越多,神经网络的拟合能力越强,但是随着神经单元数的增多,训练难度将增加,训练速度也将减缓,越容易出现过拟合。

如何选择超参数

所谓的超参数,也就是搭建神经网络中,需要我们自己选择的参数。比如中间层的神经元个数、学习速率等。(网络的权重,偏置等那些通过梯度下降优化出来的参数不是超参数)

在说如何选择超参数之前,先想一下如何提高网络的拟合能力?
一种显然的想法是增大网络容量:
1、增加层
2、增加隐藏神经元的个数
那这两种方法哪一种更好呢?
单纯的增加神经元个数对于网络性能的提高并不明显,然而增加层会大大的提高网络的拟合能力,这也是为什么现在深度学习的层越来越深的原因。(但是单层的神经元个数也不能设置得太小,不然会造成信息瓶颈,会丢失有用信息,使得模型欠拟合)

话说回来,好的参数选择可以将模型调成理想模型,理想模型就是刚好在欠拟合和过拟合的界线上,也就是正好拟合数据。

步骤:
首先开发一个过拟合的模型:
(1)添加更多的层
(2)让每一层变得更大。
(3)训练更多的轮次。
然后,抑制过拟合:
(1)dropout
(2) 正则化
(3)图像增强
再次,调节超参数: 学习速率,隐藏层单元数,训练轮次。

超参数选择没有捷径(除非运气好到爆,一下就弄对了),它是一个经验与不断测试的结果,所以慢慢积累经验吧