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

2020 年 11 月 16 日 深度学习自然语言处理


作者:Nathan Hubens

编译:ronghuaiyang

来自:AI公园


导读

如何去掉batch normalization层来加速神经网络。

介绍

Batch Normalization是将各层的输入进行归一化,使训练过程更快、更稳定的一种技术。在实践中,它是一个额外的层,我们通常添加在计算层之后,在非线性之前。它包括两个步骤:

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

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

一旦训练结束,每个Batch normalization层都拥有一组特定的γ和β,还有μ和σ,后者在训练过程中使用指数加权平均值进行计算。这意味着在推理过程中,Batch normalization就像是对上一层(通常是卷积)的结果进行简单的线性转换。

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

在实践中怎么做?

用一点数学知识,我们可以很容易地重新对卷积进行排列来处理batch normalization。提醒一下,对一个输入x进行卷积之后再进行batch normalization的运算可以表示为:

那么,如果我们重新排列卷积的Wb,考虑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折叠,我们有:

以及:

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

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

2. Resnet50

同样的,我们开始训练它5个epochs:

初始参数量为:

推理时间为:

使用batch normalization折叠后,有:

和:

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



英文原文:https://towardsdatascience.com/speed-up-inference-with-batch-normalization-folding-8a45a83a89d8

  
  
    
下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!
后台回复【五件套


下载二:南大模式识别PPT
后台回复南大模式识别



说个正事哈



由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心



投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等

记得备注呦


推荐两个专辑给大家:
专辑 | 李宏毅人类语言处理2020笔记
专辑 | NLP论文解读
专辑 | 情感分析

整理不易,还望给个在看!

登录查看更多
0

相关内容

专知会员服务
15+阅读 · 2020年7月27日
【CVPR 2020-商汤】8比特数值也能训练卷积神经网络模型
专知会员服务
25+阅读 · 2020年5月7日
【伯克利】再思考 Transformer中的Batch Normalization
专知会员服务
40+阅读 · 2020年3月21日
专知会员服务
44+阅读 · 2020年3月6日
【ICLR-2020】网络反卷积,NETWORK DECONVOLUTION
专知会员服务
38+阅读 · 2020年2月21日
如何训练你的ResNet(三):正则化
论智
5+阅读 · 2018年11月13日
从零开始深度学习:dropout与正则化
数萃大数据
7+阅读 · 2018年7月22日
一文简述ResNet及其多种变体
机器之心
23+阅读 · 2018年4月22日
【动态】何恺明团队最新力作:群组归一化(Group Normalization)
如何用张量分解加速深层神经网络?(附代码)
教程 | 如何估算深度神经网络的最优学习率
机器之心
3+阅读 · 2017年11月17日
Arxiv
0+阅读 · 2021年1月26日
Arxiv
19+阅读 · 2020年7月13日
Arxiv
5+阅读 · 2020年3月16日
Arxiv
12+阅读 · 2018年9月15日
Arxiv
19+阅读 · 2018年6月27日
Arxiv
7+阅读 · 2018年3月22日
VIP会员
相关VIP内容
相关资讯
如何训练你的ResNet(三):正则化
论智
5+阅读 · 2018年11月13日
从零开始深度学习:dropout与正则化
数萃大数据
7+阅读 · 2018年7月22日
一文简述ResNet及其多种变体
机器之心
23+阅读 · 2018年4月22日
【动态】何恺明团队最新力作:群组归一化(Group Normalization)
如何用张量分解加速深层神经网络?(附代码)
教程 | 如何估算深度神经网络的最优学习率
机器之心
3+阅读 · 2017年11月17日
相关论文
Arxiv
0+阅读 · 2021年1月26日
Arxiv
19+阅读 · 2020年7月13日
Arxiv
5+阅读 · 2020年3月16日
Arxiv
12+阅读 · 2018年9月15日
Arxiv
19+阅读 · 2018年6月27日
Arxiv
7+阅读 · 2018年3月22日
Top
微信扫码咨询专知VIP会员