剪枝后这个深度神经网络速度提高了3倍体积略

2020-10-18 17:24:30 来源: 天津信息港

剪枝后这个深度神经网络速度提高了 3 倍,体积缩小了 4 倍

作 者 Ranjeet Singh

翻译 had_in(电子科技大学)

编 辑 Pita

剪枝就是一种推理方法,它可以有效地获得更小的模型、更高效的内存、更高效的功率和更快的推理,同时在精度上损失较小,其他类似的技术还有权值共享和量化。深度学习的灵感来自于神经科学领域的几个方面。在深度学习中剪枝也是一个受生物学启发的概念,我们将在稍后的文章中进行讨论。

随着深度学习的进步,最先进的模型也变得越来越精确,但这种进步是有代价的,我将在这个博客里对其中的一些进行说明。

一:模型尺度变得越来越大

Dally, NIPS 2016年深度神经网络高效方法研讨会

二:速度

训练时间以fb.resnet.torch为基准,基于M40 GPUs。

如此长的训练时间限制了机器学习研究人员的效率。

三:能量效率

AlphaGo: 1920个cpu和280个gpu,每场比赛3000美元的电费

在移动设备上:快速耗尽电池电量

数据中心:增加成本

解决方法 — 高效的推断算法

剪枝

权重共享

量化

低秩逼近

二值神经网络 / 三值神经网络

Winograd转换

生物学启发的剪枝算法

人工神经网络中的剪枝被认为是来自人类大脑突触修剪的一个想法,在人类大脑中,当轴突和树突完全衰退和死亡,会导致突触消失,这发生在许多哺乳动物的幼年早期和发育期初期之间。突触修剪从出生时开始,一直持续到25岁左右。

深层神经网络剪枝

Lecun等. NIPS,89 Han等. NIPS15

网络通常看起来与左边的那个类似:下层的每个神经元都与上层每个神经元相连,但这意味着我们需要将许多浮点数相乘。理想情况下,我们只需要将每个神经元连接到其他的几个神经元上就可以省去一些乘法;这就是所谓的“稀疏”网络。

稀疏模型更容易压缩,而且我们可以在推断时跳过0值以改进推断延迟。

如果可以根据神经元的贡献大小对网络中的神经元进行排序,那么就可以将排名较低的神经元从网络中移除,从而得到一个更小、更快的网络。

获得更快/更小的网络,对于在移动设备上运行这些深度学习网络非常重要。

例如,可以根据神经元权重的L1/L2范数进行排序。在修剪之后,准确性会下降(如果排序较合理,可则能不会下降太多准确率)并且网络通常中国电信对巡视组前期交办的信访已查清86.1%是迭代地训练-修剪-训练-修剪以较大程度保证模型的准确率。如果我们一次修剪得太多,网络可能会受到严重,无法恢复准确率。因此在实践中,这是一个迭代的过程—通常称为“迭代剪枝”修剪/训练/重复。

请参阅Tensorflow团队编写的代码,以了解迭代剪枝。

权重修剪

将权重矩阵中的单个权重设置为零。这相当于删除连接,如图所示。

为了实现k%的稀疏性,我们将权重矩阵W中的各个权重按大小排序,将最小的k%的部分权重设置为零。

f = h5py.File“model_weights.h5”“r+”

for k in 【.25, .50, .60, .70, .80, .90, .95, .97, .99】

ranks = {}

for l in list(f【‘model_weights’):-1】

w = np.array(data)

ranks【l】=rankdatanp.abswmethod=’dense’ — 1.astypeint.reshapew.shape

lower_bound_rank = np.ceilnp.maxranks【l】*k.astypeint

w = w*ranks【l】

data = w

单元/神经元修剪

将权重矩阵中的整个列设置为零,实际上是删除相应的输出神经元。

为了达到k%的稀疏性,我们根据权重矩阵的l2范数对列进行排序,并删除最小的k%的列。

f= h5py.File“model_weights.h5”“r+”

fork in 【.25, .50, .60, .70, .80, .90, .95, .97, .99】

ranks= {}

forl in list(f【‘model_weights’):-1】

w= np.array(data)

norm= LA.norm(w,axis=0)

norm= np.tile(norm,w.shape【0】1)

ranks【l】= rankdatanorm,method=’dense’ — 1.astypeint.reshapenorm.shape

lower_bound_rank= np.ceilnp.maxranks【l】*k.astypeint

w= w*ranks【l】

data= w

利用一个简单的神经网络结构对MNIST数据集上的图像分类模型进行剪枝 ,如下:

引用的参考代码中使用的体系结构

使用代码重新生成的退化曲线图

关键要点

参考

本文相关词条概念解析:

剪枝

剪枝是方案的优选过程,根据不同方案期望值的大小,从左向右,逐一比较。期望值较大的为较优方案得以保留,期望值较小的方案予以舍弃,在舍弃的方案枝上画一“LL”。该枝代表的方案就是最优方案。

神经网络

人工神经网络(ArtificialNeuralNetwork,即ANN),是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activationfunction)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。

小儿经常肚胀怎么办
中医怎么辩证治疗胸闷气短
小孩健脾吃什么
复方鳖甲软肝片成分
本文标签: