继续创作,加速生长!这是我参与「日新计划 10 月更文应战」的第16天,点击检查活动详情

导读

怎么去掉batch normalization层来加速神经网络

介绍

Batch Normalization是将各层的输入进行归一化,使练习过程更快、更安稳的一种技术。在实践中,它是一个额外的层,咱们一般添加在核算层之后,在非线性之前。它包括两个过程:

  • 首要减去其平均值,然后除以其标准差
  • 进一步经过缩放,经过偏移,这些是batch normalization层的参数,当网络不需要数据的时候,均值为0、标准差为1。

使用Batch Normalization折叠来加速模型推理

Batch normalization在神经网络的练习中具有较高的功率,因此得到了广泛的运用。但它在推理的时候有多少用途呢?

一旦练习结束,每个Batch normalization层都拥有一组特定的和,还有和,后者在练习过程中运用指数加权平均值进行核算。这意味着在推理过程中,Batch normalization就像是对上一层(一般是卷积)的成果进行简单的线性转化。

由于卷积也是一个线性变换,这也意味着这两个操作能够合并成一个单一的线性变换!这将删去一些不必要的参数,但也会减少推理时要执行的操作数量。

在实践中怎么做?

用一点数学知识,咱们能够很容易地从头对卷积进行摆放来处理batch normalization。提醒一下,对一个输入x进行卷积之后再进行batch normalization的运算能够表示为:

使用Batch Normalization折叠来加速模型推理

那么,假如咱们从头摆放卷积的Wb,考虑batch normalization的参数,如下:

使用Batch Normalization折叠来加速模型推理

咱们能够去掉batch normalization层,依然得到相同的成果!

注意:一般,在batch normalization层之前的层中是没有bias的,因为这是无用的,也是对参数的浪费,因为任何常数都会被batch normalization抵消掉。

这样做的作用怎样?

咱们将测验两种常见的架构:

  • 运用batch norm的VGG16
  • ResNet50

为了演示,咱们运用ImageNet dataset和PyTorch。两个网络都将练习5个epoch,看看参数数量和推理时刻的改变。

1. VGG16

咱们从练习VGG16 5个epoch开端(终究的准确性并不重要):

使用Batch Normalization折叠来加速模型推理

参数的数量:

使用Batch Normalization折叠来加速模型推理

单个图像的初始推理时刻为:

使用Batch Normalization折叠来加速模型推理

假如运用了batch normalization折叠,咱们有:

使用Batch Normalization折叠来加速模型推理

以及:

使用Batch Normalization折叠来加速模型推理

8448个参数被去掉了,更好的是,几乎快了0.4毫秒!最重要的是,这是完全无损的,在性能方面肯定没有改变:

使用Batch Normalization折叠来加速模型推理

让咱们看看它在Resnet50的情况下是怎么样的!

2. Resnet50

相同的,咱们开端练习它5个epochs:

使用Batch Normalization折叠来加速模型推理

初始参数量为:

使用Batch Normalization折叠来加速模型推理

推理时刻为:

使用Batch Normalization折叠来加速模型推理

运用batch normalization折叠后,有:

使用Batch Normalization折叠来加速模型推理

和:

使用Batch Normalization折叠来加速模型推理

现在,咱们有26,560的参数被移除,更惊奇的hi,推理时刻减少了1.5ms,性能一点也没降。

使用Batch Normalization折叠来加速模型推理

英文原文:towardsdatascience.com/speed-up-in…