深度学习之轻量化网络

人工智能大力发展的趋势下,移动端和嵌入式设备上部署是迫切需求,由于现如今模型越来越深,越来越大,所以轻量化是有必要的。

轻量化网络要做什么呢?在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造。

轻量化网络是当下及以后都是一个迫切的需求,不论是自动驾驶、机器人视觉、无人机、人脸识别还是目标检测、在面试中也是高频问题,其发展也有一定的历程,包括经典的SqueezeNet、ShuffleNet、ModileNet、EfficientNet、MicroNet。

那轻量化网络主要要干什么呢?轻量化主要解决模型精度与算力、存储空间大的矛盾。其主要从几个方面做:(1)直接设计轻量化网络;该网络能有更少的参数量和计算量、拥有好模型相当的精度。(2)通过知识蒸馏、剪枝、量化、低秩分解等技术进行模型压缩。(3)通过硬件加速。

① 奇异值分解(SVD):一般我们用特征值、特征向量就可以对一个方阵进行特征分解,但是如果矩阵的行、列数各不相同就可以用奇异值矩阵进行分解,其基本的原理是,分别左右乘矩阵的转置矩阵变成方阵,在求特征值。优点:有一些SVD算法可以不用先求出来协方差矩阵,也可以求出左右奇异矩阵;左奇异矩阵可以用于行数的压缩;右奇异矩阵可以用于列数(特征维度)的压缩,也就是常说的PCA降维,可以简单理解为将不重要的(对整体结果影响不大)权重去掉。

③ 深度压缩主要结合了剪枝,量化和无损压缩霍夫曼编码的方法,将卷积神经网络的权重大大的压缩了,而且用于FPGA的部署。剪枝,量化降低了权重数量,提高了计算速率;无损压缩霍夫曼编码降低存储空间,但由于他还需要解码,所以总的来说,深度压缩并不会提高计算率,越深的网络压缩比例越大

1、剪枝:通过一定策略来过滤掉一些不重要的神经网络连接。然后再重新训练进行参数微调,不断重复这个过程直到不能够再进行剪枝为止,在imageNet数据集上,剪枝方法可以将AlexNet的参数数量减少9倍而没有精度上的损失。VGG-16同样有类似的现象,参数总量可以减少13倍左右而没有精度损失。

2、量化:权值的共享和聚类。聚类采用k-means的方法,可以将原来的32bit降到log2(k)

在同一层之间权重共享,不同层的权重分别进行聚类。原因在于:同一层的权重之间以“求和”的方数进行连接,不同层的权重用“相乘”的方式进行连接,不同层之间还有激活函数、归一化函数等等。

④ 硬件加速器:通过硬件来加速网络的运算,现在研究比较热门的忆阻器可以作为选择,还有就是随机计算。

在以后我回专门做一个专栏来总结和讲解一些经典的轻量化网络哦,喜欢的可以加关注。

你可能感兴趣的:(深度学习,人工智能)