神经网络压缩

Posted by Fangjuntao on 2020-01-24

概念

一个深度学习模型通常包含数以百万计甚至千万计的参数和十几层甚至几十层的网络,通常需要非常大的计算代价和存储空间。神经网络压缩是指通过改变网络结构或利用量化、近似的方法来减少网络的参数或存储空间, 在不影响神经网络性能的情况下,降低网络计算代价和存储空间。(引用自百度百科)

简介

神经网络压缩简单来说通过有关方法来减少网络的参数和存储空间,在神经网络性能影响不大的情况下。
主要三种:

  1. 近似:
    近似类方法主要利用矩阵或张量分解的思想,通过少量参数重构原始网络参数矩阵或参数张量,以达到减少网络存储开销的目的。通常,在网络运行时,这些参数将会被适当重建,网络的运行时开销并没有得到有效减少。
  2. 量化:
    量化方法的主要思想是将网络参数的可能值从实数域映射到有限数集,或将网络参数用更少的比特数来表示。量化的方法将原本具有无限种可能的参数约束到少数几种参数中,再对这些参数进行重用,就可以减少网络存储开销。通过改变参数的数据类型,如将原本的64位浮点型量化为整形甚至布尔型,网络的运行时开销也将得到大幅度减少。
  3. 裁剪:
    网络裁剪的主要特点是会直接改变网络的结构。网络裁剪可以按粒度分为层级裁剪,神经元级裁剪和神经连接级裁剪。层级裁剪的裁减对象是网络层,裁剪的结果是获得更浅的网络。

研究意义

神经网络压缩不但具有必要性,也具有可能性。首先,尽管神经网络通常是深度越深,效果越好,但针对具体的应用场景和需求,适当深度和参数数目的网络即能够满足。盲目加深网络复杂度所带来的微弱性能提升在许多应用场合意义并不大。其次,神经网络常常存在过参数化的问题,网络神经元的功能具有较大的重复性,即使在网络性能敏感的场景,大部分网络也可以被“安全地”压缩而不影响其性能。神经网络压缩可以有助于理解神经元作用机理和使神经网络模型部署在轻量级的设备上。
深度神经网络尽管在计算机视觉、语音识别、机器人技术等多个领域都取得了良好成果。深度学习的实际应用往往受限于其存储和运算规模。例如,VGG-16网络含有约1.4亿浮点数参数,假设每个参数存储为32位浮点数格式,则整个网络需要占用超过500兆存储空间。这样的计算量在只能通过高性能并行设备进行,且仍不具备很好的实时性。

方法

a. 基于张量分解的网络压缩(张量是向量和矩阵的自然推广,向量可称为一阶张量,矩阵可称为二阶张量)
b. 基于量化的网络压缩
c. 基于裁剪的网络压缩

具体论文方法

  1. 二值神经网络:(准确率有待提高)
    二值网络是非常极致的一种神经网络,它的权重、激活值只有+1 与-1 两种状态。
    二值网络本身就是一种模型压缩方法,它能以更小的存储代价、计算代价实现相同的功能。
    论文地址:https://arxiv.org/pdf/2001.05936v1.pdf

  2. ResNet压缩20倍,Facebook提出新型无监督模型压缩量化方法:
    论文地址:https://arxiv.org/abs/1907.05686
    本文提出的量化方法注重于恢复网络的输出。跟PQ方法相比,本文是注重恢复压缩后的权重。同时,在训练的过程中,本文也运用了蒸馏的思想,用于提升压缩网络的精度。
    算法: 全连接层量化