神经网络压缩
1.1神经网络压缩的必要性与可能性
深度学习的实际应用往往受限于其存储和运算规模。例如,VGG-16网络含有约1.4亿浮点数参数,假设每个参数存储为32位浮点数格式,则整个网络需要占用超过500兆存储空间。在运算时,单张测试图片共需要大约3.13 × 10 8 次浮点数运算。这样的计算量在目前只能通过高性能并行设备进行,且仍不具备很好的实时性。高性能并行计算设备具有体积大、能耗大、价格高的特点,在许多场合都不能使用。因此,如何在资源受限场合,如手机、平板电脑、各种嵌入式和便携式设备上运行神经网络,是深度学习走向日常生活的关键一步。
神经网络的压缩不但具有必要性,也具有可能性。首先,尽管神经网络通常是深度越深,效果越好,但针对具体的应用场景和需求,适当深度和参数数目的网络即能够满足。盲目加深网络复杂度所带来的微弱性能提升在许多应用场合意义并不大。其次,神经网络常常存在过参数化的问题,网络神经元的功能具有较大的重复性,即使在网络性能敏感的场景,大部分网络也可以被“安全地”压缩而不影响其性能。
神经网络压缩的方法
2.1 基于张量分解的网络压缩
张量是向量和矩阵的自然推广,向量可称为一阶张量,矩阵可称为二阶张量,将矩阵堆叠形成“立方体”,这种数据结构则称为三阶张量。一张灰度图像在计算机中由矩阵表示,是二阶张量。一张RGB三通道的彩色图像在计算机中则保存为三阶张量。当然,三阶张量也可以堆叠形成更高阶的张量。张量分解是张量分析中的重要组成部分,其基本原理是利用张量数据中的结构信息,将张量分解为形式更简单、存储规模更小的若干张量的组合。典型的张量分解方法有CP分解,Tucker分解等。
在神经网络中,参数通常以“张量”的形式集中保存。对全连接层而言,全连接通过权重矩阵将输入向量变换到输出向量,其参数为二阶张量。对卷积层而言,设输入数据为具有?通道的三阶张量。则卷积层中的每一个卷积核也都是具有?通道的三阶卷积核,故一层卷积层所包含的一组卷积核构成了形如? ×? ×? ×?的四阶张量。
基于张量分解的网络压缩的基本思想,就是利用张量分解的技术将网络的参数重新表达为小张量的组合。重新表达后的张量组一般能够在一定的精度下近似与原张量相同,而所占用的空间又得到大大降低,从而获得网络压缩的效果。文献[41]和文献[39]分别是利用张量CP分解和Tucker分解的网络压缩工作。文献[69]利用的是较新的TensorTrain分解方法