【李宏毅2020 ML/DL】P45-50 Network Compression

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes

本节内容综述
  1. 为什么提出模型压缩?因为我们有把Deep Model放在移动端设备的需求,因此要压缩空间、加快计算速度。
  2. 李老师不擅长硬件,因此今天的内容中没有这方面的。
  3. 第一部分是 Network Pruning 。最后得出结论,对神经元而非weight进行Pruning,可以保留转换成矩阵的特性,不会在运算速度上造成伤害。
  4. 接下来是 Knowledge Distillation 的内容。
  5. 第三部分是 Parameter Quantization 。
  6. 第四部分是 Architecture Design,李老师认为这可能是最有效的做法之一。
  7. 最后,简单介绍了一下 Dynamic Computation 。

 

文章目录

 

小细节

Network Pruning

Networks are typically over-parameterized (there is significant redundant weights or neurons).

Prune them!

在生物学,在90年代就有《Optimal Brain Damage》这样的文章,相关研究。

如何做

【李宏毅2020 ML/DL】P45-50 Network Compression

对于一个神经网络,可以通过衡量并去除其不重要的weight或者neuron,得到新网络。

之后,再用数据训练。

注意,不要一次 remove 太多东西,否则网络可能不会 recover 。一般来讲,都是多次做几次 fine-tune 。

Why Pruning?

How about simply train a smaller network?

It is widely known that smaller network is more difficult to learn successfully.

Larger network is easier to optimize?https://www.youtube.com/watch?v=_VuWvQUMQVk

有一篇论文提出了“大乐透假设”:Lottery Ticket Hypothesis。

Lottery Ticket Hypothesis

【李宏毅2020 ML/DL】P45-50 Network Compression
如上,对完整的网络初始化、训练、压缩,之后:

  • 如果对新的小网络完全重新初始化,那么不会训练成功;
  • 如果对新的小网络像之前一样初始化,那么会训练成功。

作者由此提出:可能神经元会不会被训练起来,与初始值有很大关系,是一种大乐透现象。

Rethinking the Value of Network Pruning

【李宏毅2020 ML/DL】P45-50 Network Compression
但是这篇文章,正好得出了与“大乐透假设”相反的结论。

Network Pruning - Practical Issue

【李宏毅2020 ML/DL】P45-50 Network Compression
如上,做完了 Pruning 的网络,难以组成矩阵,用 GPU 加速了…因此,实际操作上,可能直接把 Pruning 掉的量直接设为 0 。

但是,这样又不会让网络占有的空间变小。因此,实际应用中,运行 Pruning 后的网络是一件比较复杂的事。

【李宏毅2020 ML/DL】P45-50 Network Compression
如上,发现如果使用取消了连接的 Pruning 后的网络,使用 GPU 的加速并快不到哪里去。

【李宏毅2020 ML/DL】P45-50 Network Compression

因此,如上,直接去掉某一个神经元是一个比较好的 Pruning 方向。这不会增加计算负担,不会妨碍构成矩阵运算。

Knowledge Distillation

【李宏毅2020 ML/DL】P45-50 Network Compression

训练一个大网络,用小网络(Student Net)学习大网络。

为什么这样有用?因为小网络学的是一个基于大网络的 distillation 。不仅仅学到一个输出神经元的价值,而是多个神经元的输出。

【李宏毅2020 ML/DL】P45-50 Network Compression
此外,实际上可以用 Student Net 学习集成模型。这样大大起到了压缩空间的效果,又能较好地进行学习。

Temperature

【李宏毅2020 ML/DL】P45-50 Network Compression
如上,在输出层,我们为Target Network在做 softmax 除以一个“温度”(通常大于1),以此,让这些值变得相近,方便 Student Network 的学习。

李老师:作业证明,加了温度也不会有什么额外的效果...

Parameter Quantization

  1. Using less bits to represent a value.
  2. Weight clustering.

【李宏毅2020 ML/DL】P45-50 Network Compression
如图,只要保存各个参数的类别,以及类别对应的数值表就可以。

此外,还可以进行哈夫曼编码等压缩。

Binary Weights

【李宏毅2020 ML/DL】P45-50 Network Compression
如图,对神经网络进行梯度下降,进行优化;最后把参数都元整为1或-1,则参数就可以用一个位来表示了。记录这个模型。

【李宏毅2020 ML/DL】P45-50 Network Compression
如图,发现在不少问题上,有了 Binary Connect 效果更好。这可能因为 Binary Weights 本身就是一种正则。

Architecture Design

Low rank approximation

【李宏毅2020 ML/DL】P45-50 Network Compression
如图,加了一层,是有可能让参数变小的。

Review: Standard CNN

【李宏毅2020 ML/DL】P45-50 Network Compression

如图,标准的CNN架构,其中两个通道,4个filter,一共有72个参数。

Depthwise Separable Convolution

【李宏毅2020 ML/DL】P45-50 Network Compression

首先,在 Depthwise Convolution 中,我们的 filter 不是立体的,不需要多通道高,每个 filter 只处理自己的 channel 。

接下来,用 Pointwise Convolution 中,用 1×1 的filter 进行多通道卷积。

这样,其 input 与 output 与标准的卷积层相比,参数少了许多,只有18+8=26个。

【李宏毅2020 ML/DL】P45-50 Network Compression
具体解释一下,如上图,Depthwise Separable Convolution进行了“参数共享”。

【李宏毅2020 ML/DL】P45-50 Network Compression
如上,因为一般来输出的通道数 O O O 可能很大, 1 O ≈ 0 \frac{1}{O} \approx 0 O1​≈0;可见,Depthwise Separable Convolution能优化的大小与卷积核尺寸有关。

其应用有很多:

  • SqueezeNet
  • MobileNet
  • ShuffleNet
  • Xception

Dynamic Computation

【李宏毅2020 ML/DL】P45-50 Network Compression
如图,根据目前情况,选择不同的计算方案(强力的耗费资源的,或弱小的但不费资源的)。

有几个解决方案:

  1. 训练大量的分类器(从小到大),但是这样会占用存储空间;
  2. 可以将不同的 layer 提取,从而有不同的分类器。如下图。

【李宏毅2020 ML/DL】P45-50 Network Compression
但是,如上图两个表,这也会面临两个问题:

  • 靠近输入层的layer其output对于任务表现并不好;
  • 此外,对中间层进行训练,还会影响整体网络的性能。

Multi-Scale Dense Networks

【李宏毅2020 ML/DL】P45-50 Network Compression
李老师提及了 Multi-Scale Dense Networks,让大家可以参考。

 

上一篇:WPF Deli DL-888D(New)得力标签打印机联调


下一篇:【论文精读】DL-Based 脑部医学图像双任务:联合配准和肿瘤分割