点击蓝字关注我

—▼—
前言
当我们用一些数据做一个预测系统时,我们首先需要对数据进行预处理,例如标准化、正则化、滑动窗口等,比如常用的Z-score、最大最小标准化,它能将数据转化为同一个量级,这样的话能够保证数据的稳定性、可比性。这些标准化方法在浅层神经网络中已经足够使用,效果已经很不错。但是在深度学习中,网络越来越深,使用这些标准化方法就难以解决相应的问题。
为什么需要批量归一化?
在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的去适应新的数据分布,在深度神经网络中,这让训练变得非常复杂而且缓慢。对于这样,往往需要设置更小的学习率、更严格的参数初始化。通过使用批量归一化(Batch Normalization, BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布,这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的,这样就解决了数据分布不断改变带来的训练缓慢、小学习率等问题。
在哪里使用批量归一化?
批量归一化是卷积神经网络中一个可选单元,如果使用BN能够保证训练速度更快,同时还可以具备一些正则化功能。
在卷积神经网络中卷积层和全连接层都可以使用批量归一化。
对于卷积层,它的位置是在卷积计算之后、激活函数之前。对于全连接层,它是在仿射变换之后,激活函数之前,如下所示:
conv_1 = tf.nn.conv2d()norm_1 = tf.nn.batch_normalization(conv_1)relu_1 = tf.nn.relu(norm_1)pool_1 = tf.nn.max_pool(relu_1)
以卷积层为例,网络架构的流程为:
卷积运算
批量归一化
激活函数
池化
批量归一化
其实批量归一化在思想上和Z-score是有很多共通之处的。
在深度学习训练过程中会选取一个小批量,然后计算小批量数据的均值和方差,
下面看一下原文中批量归一化的算法步骤:
tensorflow中BN的使用
在tensorflow中可以直接调用批量归一化对数据进行处理,它的函数为,tf.nn.batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None)
来解释一下函数中参数的含义:
x:输入的数据,可以是卷积层的输出,也可以是全连接层的输出
mean:输出数据的均值
variance:输出数据的方差
offset:偏移,就是前面提到的beta
scale:缩放,前面提到的gamma
variance_epsilon:一个极小的值,避免分母为0
▲
END


长按扫码可关注
相关文章【动手学计算机视觉】第一讲:图像预处理之图像去噪【动手学计算机视觉】第二讲:图像预处理之图像增强【动手学计算机视觉】第三讲:图像预处理之图像分割【动手学计算机视觉】第四讲:图像预处理之图像增广【动手学计算机视觉】第五讲:传统目标检测之特征工程【动手学计算机视觉】第六讲:传统目标检测之Harris角点检测【动手学计算机视觉】第七讲:传统目标检测之SIFT特征【动手学计算机视觉】第八讲:传统目标检测之HOG特征【动手学计算机视觉】第九讲:传统目标检测之DPM模型【动手学计算机视觉】第十讲:传统目标检测之卷积神经网络概述【动手学计算机视觉】第十一讲:卷积层与池化文章好看就点这里