【二值化网络】Back to Simplicity: 思考BNN网络的设计

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第1张图片

Paper: https://arxiv.org/abs/1906.08637
开源代码:https://github.com/hpi-xnor/BMXNet-v2

2019年6月19的一篇新paper。BNN用于降低成本和计算量,非常有效。作者重新思考了BNN中一些常用技术的有效性,并且为BNN网络提出了几项设计准则,并且搭建了一个BinaryDenseNet网络。

主要是通过实验数据去说明一些设计方法是否有效。可以作为应用的一个借鉴。


Introduction

在移动端执行CNN加速,主要有两种方式。

第一种:通过网络设计亚索网络信息,比如mobilenet和shufflenet等

第二种:做量化,减少每个数据表示时需要的精度。二值化会掉点,前期很多工作关注于通过一些tricks等减少量化误差。

但是,作者认为前期很少思考过这样一个问题“Are those real-valued network architectures
seamlessly suitable for BNNs?”

作者得出的结论是“most of these techniques are not necessary to reach state-of-the-art performance.”

主要contributions如下:

  1. 认为通过标准策略就可以训练出标准BNN,重新思考了如缩放因子,自定义渐变和微调全精度模型的有效性。认为这些对BNN的提升不是很重要。
  2. 提出了BNN的几项设计准则,搭了一个 BinaryDenseNet
  3. 开源了代码,用于分类和检

     

Common Techniques

首先看常见的方法:scaling factors, full-precision pre-training and approxsign function

Binary层的实现

Straight-Through Estimator(STE):

image

liu等提出的approxsign:

image

作者通过实验证明,approxsign函数只是更适合于微调全精度模型二值化网络的情况。

Scale Factor

作者通过实验说明,认为学习到的有用的scale factor对于具有BN层的网络而言不是必须的。

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第2张图片

全精度模型的预训练

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第3张图片

使用clip函数预训练的结果没有relu好,二值化网络从头开始训练的精度最高。


设计准则

  1. 保持网络丰富的信息流
  2. 紧凑的网络不适合BNN,因为设计理念相排斥(消除冗余vs弥补信息损失)
  3. BNN中不应该存在bottleneck设计或者提高bottleneck中滤波器的数量
  4. 仔细考虑BNN中关键层使用全精度(下采样层)来保留信息流
  5. 避免信息流bottleneck的直接方法是尽可能多的使用shortcut连接
  6. 为了解决信息流的bottleneck,适当提高网络的宽度和深度,这会带来额外的计算代价。

Shortcut部分

感觉这是作者提出来的最重要最实用的一点了

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第4张图片

实验结果

Imagenet

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第5张图片

voc2007

【二值化网络】Back to Simplicity: 思考BNN网络的设计_第6张图片

Thoughts

这篇paper作者主要通过实验来说明一些问题。最实用的地方就是消除bottleneck的设计。将一个block拆成两个block,每个block支路上只有一层3x3卷积。

你可能感兴趣的:(深度学习)