这是ICLR2016年的bestpaper
我们首先通过正常的网络训练来学习连接。接下来,我们修剪小权重连接:所有权重低于阈值的连接都将从网络中删除。最后,我们对网络进行再训练,以学习剩余稀疏连接的最终权重。
我们使用压缩稀疏行(CSR)或压缩稀疏列(CSC)格式存储修剪产生的稀疏结构,该格式需要2a+n+1个数字,其中a是非零元素的数量,n是行或列的数量。
为了进一步压缩,我们存储索引差异而不是绝对位置,并将此差异编码为8位(对于conv层)和5位(对于fc层)。当我们需要一个大于界限的索引差时,我们使用图2所示的零填充解决方案:如果差超过8,即最大的3位(例如)无符号数,我们会添加一个填充零
以上是剪枝的部分 没什么问题。
训练量化和权重共享
网络量化和权重分享通过减少表示每个权重所需的比特数量来进一步压缩修剪后的网络。我们通过让多个连接共享相同的权重来限制需要存储的有效权重的数量,然后对这些共享的权重进行微调。
重量分配如图3所示。假设我们有一个层,它有4个输入神经元和4个输出神经元,权重是4×4矩阵。左上角是4×4的权重矩阵,左下角是4乘以4的梯度矩阵。权重被量化为4个仓(用4种颜色表示),同一仓中的所有权重共享相同的值,因此对于每个权重,我们只需要将一个小索引存储到共享权重表中。在更新过程中,所有梯度按颜色分组并相加,乘以学习率并从上次迭代的共享质心中减去。对于修剪后的AlexNet,我们能够为每个CONV层量化为8比特(256个共享权重),为每个FC层量化为5比特(32个共享权值),而不会损失任何精度。
为了计算压缩率,给定k个簇,我们只需要log2(k)位来编码索引。通常,对于具有n个连接并且每个连接用b比特表示的网络,将连接约束为仅具有k个共享权重将导致压缩率为: