【论文学习笔记-4】Bi-DenseNet(Jun,2019)
本文遍历了之前的低比特网络方案及二值网络方案的关键技术,发现传统方法——诸如尺度因子等——并非达到SOTA表现的必须技术,而达到二值网络精度仅仅只需要保持网络中的丰富信息流。本文增加了网络中的ShortCut连接,设计了一个新的网络Bi-DenseNet,采用标准训练策略达到了SOTA表现。
Bi-DenseNet与之前网络的比较:
对常用技术的研究和(为什么无效)的经验证明
作者测试了ResNet18在CIFAR10和ImageNet上是否使用尺度因子,是否使用全精度下采样层以及是否使用ApproxSign的top1,top5精确度结果如下(后文详细分析):
CIFAR10
ImageNet
Scaling Factors
尺度因子的目的是提高输出值的范围,但是文章认为在输出后使用BatchNorm会抵消尺度因子的效果。随后本文在CIFAR-10上做了测试,发现使用尺度因子反而会导致0.7到3.6个百分点的下降;而在ImageNet上测试时使用尺度因子会导致1-1.7个百分点的下降。作者认为是因为随后的BatchNorm层吸收了尺度因子的效果,举例如图:
思考
这里对XNOR的网络格式产生了一些误解,事实上XNOR-Net是先对上一层的激活值进行BatchNorm然后再执行二值化计算,如图为XNOR-net的二值化层计算过程:
Full-Precision Pre-Training
有些二值网络的训练模式如下:先进行全精度网络训练,到达某个Epoch时进行二值网络训练,作者认为只有这样训练和直接训练二值网络的时间是可比较的且效果更好时,才认为这样是有益的。作者用三种方式训练同一种网络,效果如下:
如果可见,直接训练二值网络(红色)的效果最好,而全精度预训练模型再转为单精度时会出现重学习问题
ApproxSign Function
Liu等人设计了一种可微的近似函数Approxsign来作为反传函数,效果如下:
作者测试了该反传函数和普通的sign反传函数在训练时的效果,结果显示当使用Scaling时两个函数的表现相同,但是在CIFAR10数据集上没有使用Scaling时,使用approxsign函数的效果会更差,而在ImageNet上两者差距很小。实验显示只有在全精度网络的Fine-tuning上ApproxSign函数才有一定的作用,因此为了简便,后文的方法不使用ApproxSign函数。
训练BNN的黄金定律:
- 理论的核心是维持网络中充足的信息流。这样可以补偿二值网络中精度的损失。
- 不是所有全精度网络训练的方法都适用于BNN,比如紧凑的网络设计,因为他们的设计逻辑背道而驰(全精度是为了减少冗余,BNN则是为了补偿信息损失)
- BNN中应该去掉BottleNeck结构
- 考虑是否使用全精度下采样层来保持信息流
- 使用shortcut连接是一个直接的避免信息流瓶颈的方法,这对BNN很关键
- 为了克服信息流的瓶颈,应该适当增加网络的宽度(特征图的维度)并且更深,但是可能会有更大的计算量
- 从0训练BNN时,前文提到的复杂训练策略并不是达到SOTA效果的必要方法。
BNN的主要缺点是信息密度,32bit的精度基本上8bit也能做到,但是比8bit还低的话准确率会明显下降:
文章提出的维持信息流的三个方法
- 多用Shortcut,可以让深层网络获取线程网络的信息,多用Shortcut可以提高网络的表现能力,尤其是对于BNN。
- 要么别用BottleNeck,用的话也要尽量提高BottleNeck里的filter个数。
- 将网络中的特定关键层用全精度网络来替换,因为二值化缺乏shortcut的全精度层带来的信息损失无法由随后的二值化层弥补。因此之前的方法常将第一个卷积层和最后一个全连接层用全精度实现。另一个关键层是下采样卷积层。这些层可以考虑要不要使用全精度,即使这会增加模型的size和操作的数量
ResnetE
将Resnet中的bottleneck层的三个卷积层换成了两个3x3卷积层,提高了filter的数量(下图a,b)
通过降低每个block的blocksize增加了shortcut的数量
使用了全精度的下采样卷积层并做了测试,发现全精度下采样在CIFAR-10上有0.2-1.2百分点的精度提升,但是模型的大小由1.39MB增加到了2.03MB,这样显得精度提升不是很值。但是在ImageNet上采用全精度下采样增加了提高了3个百分点的精度,模型大小从3.36MB提升到了4.0MB,这个精度提升比起模型大小的改变是很明显的。
BinaryDenseNet
这个网络的shortcut不同于Resnet,将输入和输出直接联结(如下图b,d):
每层的信息可以被深度网络中的后续层重复使用。之后去掉bottleneck:如下图e:
但是仅仅这样的效果并不能让人满意,主要是因为二值网络的表现能力有局限。随后减半了growth rate k(代表被联结的特征数量),翻倍了block数量,(将一个有N个filters的卷积变为两个有N/2个filters的卷积)以保持总参数数量相同,见下图f:(也可以翻倍k,减半block)
关于下采样层的策略:
可以使用全精度的下采样卷积,使用更高的reduction rate,调换了池化层和卷积层的顺序(Max-Pool
→
\to
→ ReLU
→
\to
→ 1x1 Conv)。也可以用更低的reduction rate的二值下采样层。