"Bi-Real Net: Enhancing the Performance of 1bit CNNs with Improved
Representational Capacity and Advanced Training
Algorithm"这篇文章针对XNOR-net的缺陷,在网络结构及优化训练方面做了一系列增强与改进,具体包括引入one layer per
block形式的shortcut连接、采用二次函数拟合实数激活的sign操作、在更新实数权重时引入实数权重的幅度、以及预训练模型采用clip函数替代ReLU予以训练,从而在实现网络权重与激活输出二值化的同时,确保了较高的推理精度,尤其是在大型数据集(ILSVRC
ImageNet)上的表现。



如上图所示,深度网络的权重与激活经二值化之后,能够极大降低参数与激活对存储的占用消耗(memory
footprint),其次卷积计算也简化为XNOR与bit-counting操作,因而非常有利于深度网络的推理部署,尤其是在资源受限、能效要求极高的移动设备上。XNOR-net、ABC-net等是目前较为领先的二值化网络,文章所提出的Bi-Real
Net则是XNOR-net的后续演进与增强,首先网络结构上实现了one layer per block形式的shortcut连接,即当前1bit
convolution或BN输出的实数结果与下一个1bit convolution或BN输出的实数结果直接相加,从而增加了网络的数值表示范围(Value
Range),该shortcut结构如下所示:





在二值网络中,激活A与权重W的二值化通常采用Sign操作实现:



文章所提出的二值网络的训练框架如下图所示,包括forward过程(实数激活的Sign操作、实数权重的Magnitude-aware Sign操作、1bit
Conv、BN等)以及backward过程(二值权重、二值权重求导以及实数权重的更新等):



在训练阶段直接更新网络的实数权重,而Loss关于实数权重的梯度可按链式法则展开(乘积项分别为Loss关于二值权重的梯度、以及二值权重关于实数权重的梯度):



其中Loss关于二值权重的梯度可按链式法则展开如下(乘积项分别为Loss关于实数激活的梯度、BN层Gamma系数、以及二值激活):




此时首先需要求解Loss关于实数激活的梯度(可按链式法则表示为Loss关于二值激活的梯度与二值激活关于实数激活的梯度的乘积),但由于Sign函数不可微(导数为单位冲激响应),因此需要设计Sign函数的拟合函数F(可微)作为直接近似:




对Sign函数的近似会引起反向传播阶段求得的近似梯度与实数激活之间的失配(mismatch),因此拟合函数与Sign函数的近似程度影响着模型性能。XNOR-net选择分段线性函数clip(-1,x,1)作为Sign函数的近似,存在较大的偏差。文章设计了二次函数作为Sign函数的直接近似,能够进一步减少偏差、增强模型性能,且相应的导数曲线为三角形状,更适合模拟脉冲信号:






在训练阶段,由于Loss关于二值权重的梯度通常很小,因此较难引起实数权重的变化。文章为此引入了实数权重的幅度信息,即在训练时将实数权重的Sign操作替换为Magnitude-aware
Sign操作,能够增加二值权重关于实数权重的梯度,从而增加实数权重更新的步长,有助于加快模型的收敛速度:



最终用于更新实数权重的递归公式如下:



其中更新步长中的乘积项为Loss关于实数激活的梯度、BN层Gamma系数、二值激活、以及Magnitude-aware
Sign操作的梯度。Magnitude-aware Sign操作的梯度,即二值权重关于实数权重的梯度表示为(Sign函数的求导仍然采用Clip函数近似):



由于模型在推理部署阶段,实数权重的二值化仍然采用常规的Sign操作,因此采用Magnitude-aware
Sign操作训练模型并收敛之后,需要采用Sign操作额外训练若干epoch更新BN层moving参数(此时learning
rate置零),以适应实际部署的需求。


另外,由于二值网络的二值化输出为{-1,1},不包含零元素,故在更新预训练模型的参数时,选择clip函数替代ReLU作为非线性激活函数能够获得更好的初始化效果。同时在二值网络的训练阶段,weight
decay置零,即不需要对实数权重作L1或L2正则化约束。并且两个one layer per block的shortcut结构要优于一个two layer
per block的shortcut结构,具体见实验分析。

实验结果表明Bi-Real
Net在CIFAR10/100、ImageNet等数据集上的表现优于XNOR-net、ABC-net等,且参数量更少,非常适合移动端部署,并借助NEON指令集加速:





Paper地址:https://arxiv.org/abs/1808.00278v5 <https://arxiv.org/abs/1808.00278v5>

GitHub(Bi-Real net,Caffe):https://github.com/liuzechun/Bi-Real-net
<https://github.com/liuzechun/Bi-Real-net>

GitHub(XNOR-net,PyTorch):https://github.com/jiecaoyu/XNOR-Net-PyTorch
<https://github.com/jiecaoyu/XNOR-Net-PyTorch>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信