介绍如何删除批处理归一化层以加速神经网络。简介BatchNormalization是一种对每一层的输入进行标准化以使训练过程更快,更稳定的技术。实际上,它是一个附加层,我们通常在计算层之后和非线性之前添加它。它包括两个步骤:首先减去其平均值,然后除以其标准偏差,再将其除以γ,再将其与β抵消。这些是批处理规范化层的参数。当网络不需要数据时,平均值为0,标准差为1。批归一化在训练神经网络方面具有很高的效率,因此已被广泛使用。但是它在推理中有多大用处?训练结束后,每个批次归一化层都有一组特定的γ和β以及μ和σ,它们在训练过程中使用指数加权平均值进行计算。这意味着在推理过程中,批归一化就像对上一层的结果进行简单的线性变换(通常是卷积)。由于卷积也是线性变换,因此这也意味着这两个操作可以组合为一个线性变换!这将删除一些不必要的参数,但也会减少推理期间要执行的操作数。在实践中如何做?只需一点数学知识,我们就可以轻松地重新排列卷积以处理批量归一化。提醒一下,对输入x进行卷积后的批归一化操作可以表示为:然后,如果我们重新排列卷积W和b,请考虑如下的批归一化参数:我们可以删除批归一化层,并且仍然得到相同的结果结果!注意:通常,在批归一化层之前的层中没有偏差,因为它是无用的,而且浪费了参数,因为任何常量都将被批归一化所抵消。这有什么作用?我们将尝试两种常见的体系结构:使用batchnorm的VGG16ResNet50。为了演示,我们使用ImageNetdataset和PyTorch。两个网络都将接受5个时期的训练,以了解参数数量和推理时间如何变化。 1. VGG16我们从训练VGG165历元开始(最终精度并不重要):参数数量:单个图像的初始推断时间是:如果使用批归一化折叠,则:和:删除了8448个参数,更好的是,它快了将近0.4毫秒!最重要的是,它是完全无损的,并且性能绝对没有变化:让我们看看在Resnet50情况下的外观! 2.同样,对于Resnet50,我们开始训练它5个时期:初始参数数量为:推理时间:在使用batchnormalization折叠后,有:和:现在,我们删除了26,560个参数,更令人惊讶的是,推理时间减少了缩短1.5ms,性能完全没有下降。