Abstract

本文在二值化权重(BWN)方面做出了创新,发表在AAAI2018上,作者是自动化所程建团队。本文的主要贡献是提出了一个新的训练BWN的方法,揭示了哈希与BW(Binary Weights)之间的关联,表明训练BWN的方法在本质上可以当做一个哈希问题。基于这个方法,本文还提出了一种交替更新的方法来有效的学习hash codes而不是直接学习Weights。在小数据和大数据集上表现的比之前的方法要好。

主要贡献

  • 本文揭示了保持内积哈希与BWN之间的紧密关联。
  • 为了减轻用哈希方法所带来的loss,本文将binary codes乘以了一个scaling factor并用交替优化的策略来更新binary codes以及factor。
  • 在Cifar10,Cifar100以及ImageNet上实验,本文提出的BWNH方法比之前方法要好。

Inner-product preserving hashing

保留内积哈希方法是沈老师团队在15年ICCV上提出的,方法是给定两个点集XRS×MWRS×NXiRS×1以及WiRS×1分别代表向量XW的第i个点,记作向量XW的内积相似性(inner-product similarity)为SRM×N。则目标函数变为:

minSh(X)Tg(W)F2(1)

h()g()表示的是向量XW的哈希函数。

哈希与BWN之间的关联

假设有一个L层pre-trained CNN model,XRS×M是第L层的input feature map.记作第L层的权重的真实值为WRS×N,目标是得到二进制的weighs B{1,+1}S×N,天真的想法可能就是直接优化二者的差:

minL(B)=WBF2s.t.B{+1,1}S×N(2)

优化上式的解就是B=sign(W).直接来优化W会导致accuracy的严重下降。这时我们可以优化内积相似性的quantiztion error:
minL(B)=XTWXTBF2s.t.B{+1,1}S×N(3)

我们可以发现公式(3)和公式(1)很相似,令S=XTW,B=g(W),h(X)=X,这时两个等式是一致的。换句话说,训练一个二值化网络(BWN)本质上就转化称为了一个哈希问题。由于h(X)=X是一个确定的公式,所以不用学习X的哈希codes。这可以用在哈希空间的ACD(asmmetric distances calculation)方法来实现。
其实公式(3)有时候仍然会导致accuracy的下降(原因?)。本文采用了在每个hashing codes Bi上乘以一个scaling factor:g(W)=BAA是一个对角矩阵,αi=Aii对应Bi的scaling因子,这样目标函数就变为:
minL(A,B)=SXTBAF2=iNSiαiXTBiF2(5)

S=XTW,SiRM×1是向量S的第i列向量。等式(5)又可以分为N个独立子问题:
minLi(ai,Bi)=SiαiXTBiF2s.t.Bi{+1,1}S×1(6)

这里本文也采用交替更新的策略来求解公式(6).更新Bi,固定αi;反之亦然。
首先初始化BiαiBi=sign(Wi),对于αi,用Wi的平均L1范数来初始化。
然后更新αi固定Bi,对公式(6)进行展开,
minLi(αi)=const+αi2XTBiF22αiSiTXTBi(7)

αi进行求导,Li(αi)αi=2αiXTBiF22SiTXTBi(8)令其等于0,则αi的解为
αi=SiTXTBiXTBiF2(9)

最后更新Biαi,对公式(6)进行展开,
minLi(Bi)=const+ZTBiF22Tr(BiTq)s.t.Bi{+1,1}S×1(10)

在这里Z=αX,Tr()是矩阵的迹,q=αXSi.这里公式(10)可以用15年沈老师团队在CVPR上提出DCC(discrete cyclic coordinate descent)离散循环梯度下降方法来解决。
DCC算法的推导可以参考http://jikaichen.com/2016/05/31/notes-on-sdh/这篇博客。
大致算法就是:令bBi的第j个元素,而Bi是列向量Bi除了b的剩下的元素。类似的,记作qjq的第j行的元素,qq除了qj剩下的元素;vT是矩阵Z的第j行以及Z是除了vT剩下的元素。则公式(10)就变为:
min(BiTZvqj)bs.t.b{+1,1}(11)

这样我们可以得到Bi的第j个元素的解:
b=sign(qjBiTZv)(12)

通过使用这种方法,通过固定Bi的其他S1个元素,Bi的每一个元素都可以被更新。
这种方法理论上是收敛的,实验结果也证明算法经过很少的迭代就可以收敛,下图展示了不同CNN model的收敛情况,可以看出在很少的迭代次数下就收敛了。
From Hashing to CNNs: Training Binary Weight Networks via Hashing

Layer-wise optimization

由于本文提出的交替优化binary weight策略是一层一层优化的,这样下来量化误差会层与层累加。这是因为量化第l层会导致第l层的输出的量化误差,而第l层的输出正是第l+1层的输入,因此也就间接导致了第l+1层的优化。
本文采用Wu等人在QCNN中提出的training shceme.假设有一个pre-trainedL层的CNN model和一个第l层被二值化的CNN model,记作第l+1层的输入分别为Xl+1以及X~l+1.则目标函数将变为:

minL(A,B)=(Xl+1)TWl+1(X~l+1)TBl+1Al+1F2=Sl+1(X~l+1)TBl+1Al+1F2(13)

目标相似性矩阵Sl+1可以通过Xl+1Wl+1计算出来,真实相似性通过X~l+1和binary codesBl+1所得到。因此通过这样一个层与层的training框架,quantization error可以被避免。

The While Training Scheme

From Hashing to CNNs: Training Binary Weight Networks via Hashing
这里就是量化完二值化weights,之后会有一个fine-tune的过程。

Experiments

From Hashing to CNNs: Training Binary Weight Networks via Hashing
From Hashing to CNNs: Training Binary Weight Networks via Hashing
From Hashing to CNNs: Training Binary Weight Networks via Hashing
以上分别是VGG-9,Alexnet以及ResNet-18的结果,比当前BWN方法都好。
From Hashing to CNNs: Training Binary Weight Networks via Hashing
上图表明本文提出的BWNH方法没有fine-tuning的情况下依然accuracy很高,当然fine-tuning会提高accuracy。

The Effect of Scaling Factor

From Hashing to CNNs: Training Binary Weight Networks via Hashing
上图展示了scaling factor的作用,可以看出scaling factor非常重要,没有scaling factor网络的accuracy会下降的非常严重,而且会很快的下降到很低,本文将scaling factor融合到了BN层在前向传播的时候,这就不会带来额外的存储。还有一点就是通过上图可以发现优化完conv2会比优化conv1的accuracy高,This is because the binary weights in conv2 compensates the accuracy drop by adapting to the input featuremaps generated by binary weights in conv1.
本文只对weights进行二值化,并没有对featuremaps进行二值化,这也是一个研究点。

相关文章:

  • 2021-09-25
  • 2021-08-05
  • 2022-01-25
  • 2021-11-02
  • 2021-10-13
猜你喜欢
  • 2021-09-01
  • 2022-12-23
  • 2022-01-03
  • 2021-10-14
  • 2022-01-13
  • 2021-08-31
相关资源
相似解决方案