文章目录

  • Introduction
  • Related Work
  • 网络稀疏化(Network Slimming)
  • why choose chennel-level sparsify
  • how to implement
  • 在模型中加入BN(Batch Normalization)层



本文中的方法来自于论文《Learning Effcient Convolutional Network through Network Sliming》

论文:Learning Effcient Convolutional Network through Network Sliming

Introduction

CNN模型压缩最主要的是下面三个方面:

  1. 模型大小(model size),其中包含训练参数和关联的网络结构。
  2. 运行内存(run-time memory),包括加载训练参数等。
  3. 计算操作数量(numbers of computing operation)。

cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_权重


相比于CNN网络,该方法做了以下修改:

  1. 训练的时候,在第cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_02层和第cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_网络_03层加入了一层chennel scaling factors的训练层,他们与前一层的卷积层意一一对应,与后一层卷积层使用全连接。
  2. 在训练完成之后,检查scaling层的参数,如果参数低于某一阈值就删除该chnnel,并且还要对其他channel进行微调。

Related Work

其他CNN模型压缩的方法还有:

  • Low-rank Decomposition,该方法对全连接层有奇效。
  • Weight Quantuzation,该方法通过hash将权重由一个较大的范围转变到一个较小的范围。例如,在MNIST中,将像素的值由cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_04
  • weight pruning/Sparsify,权重剪枝,将一些值较小的一些权重删去,从而达到压缩的目的。
  • structured pruning/sparsify,t通过随机停用一些channel来达到压缩的目的,类似于TensorFlow中的Dropout层通过将一定数量的channel变为0类似。
  • neural architecture learning,这个类似于CNN中的Inception模型,让网络在预先的几个模型中进行学习,选择最好的。

网络稀疏化(Network Slimming)

稀疏化:按照我的理解即是淘汰部分对结果影响较低的权重、或者通道等。

why choose chennel-level sparsify

稀疏化可以用于不同维度。我们可以在weight-level、kernel-level、channel-level、layer-level进行稀疏化。

在weight-level、kernel-level进行处理,能够具有较高的压缩效率,同时还兼具灵活性和普遍性,但是往往需要软件以及硬件支持才能在准确度兼具的情况下进行。

相反,在layer-level层面上进行,就缺乏灵活性和普遍性,事实上只有在层数>50时,对layer进行稀疏化才能获得较好的效果。

在chennel层面进行稀疏化,能够在一定程度上兼具上述优点,同时不需要软件和硬件支持。

how to implement

cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn_05


在scaling层,如果仅仅只将factor较小的channel删除,那么仅仅只能压缩十分之一。因此,还需要对其他channel进行微调(fine-tune),在这里映入了L1-pealty loss即在最终的loss函数中加入正则化。

cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_06

其中,cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn_07

下面是关于smooth-L1的解释:

cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_08

cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_09 is a hyper-parameter here and is usually taken as 1. cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_权重_10 appears near cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_权重_11

Smooth L1-loss combines the advantages of L1-loss (steady gradients for large values of cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn_12) and L2-loss (less oscillations(振荡,因为L1正则化当x在0附近时,会在-1,1振荡) during updates when cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn_12

Another form of smooth L1-loss is Huber loss. They achieve the same thing. Taken from Wikipedia, Huber loss is
cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn训练的模型太大如何部署到单片机_14
——引用自StackExchange

在模型中加入BN(Batch Normalization)层

在BN层中对数据进行下列变化:
cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_深度学习_15
cnn训练的模型太大如何部署到单片机 cnn模型压缩方法_cnn_16
事实上,如果我们不加入BN层,scaling层的factor值就无法代表重要性(虽然我们依然可以通过参数来选择channel),因为我们可以将权重的值扩大n倍,将factor的值缩小n倍,而不会影响输出结果。
(待续)