本次阅读的论文是斯坦福大学韩松的博士论文《DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING》
一、Abstract Why?近年来,神经网络在人们实际生活中取得了巨大成功,但是,神经网络这类算法存在着一个鲜明的特点,它是一种计算密集型和存储密集型的算法,这就导致神经网络很难在嵌入式设备上部署,本文就旨在解决这一个限制。
How?作者在文章中提出了一种叫做“Deep Compression"的方法,主要分为三个步骤:pruning, trained quantization and Huffman coding。剪枝(pruning)就是将权重中一些相对不重要的参数剪去(设为0),量化(trained quantization)则是用低比特的数据表示高比特的数据,Huffman coding则是一种常见的数据无损的压缩算法。
Result通过Deep Compression, 在ImageNet数据集上, 作者将AlexNet模型的存储所需空间缩小了35倍(240MB->6.9MB),并且没有精度损失,同样,将VGG-16模型所占用的存储空间缩小了49倍(552MB->11.3MB),同样也没有精度上的损失。
二、INTRODUCTION近年来,深度神经网络已经成为了计算机视觉领域十分有力的一个工具,但是,这些强大的深度神经网络都有相当数量的参数,对存储空间和存储带宽提出了很高的要求。
1、在手机等移动工具上,一般都存在这一个问题,例如在苹果的APP STORE上,大于100MB的文件必须在连接wifi的情况下才能下载,这就妨碍了深度神经网络在手机等设备上的部署。 2、手机等移动设备电池续航能力有限,而且散热也差,而深度神经网络在运行时需要频繁的访存以及乘累加运算,这些操作的功耗都是非常高的,因此这一点也限制了深度神经网络的部署。文章针对这种情况,主要实现以下目标: 1、解决存储空间占用过大的问题 2、解决功耗过高的问题 于是,作者提出了deep compression的方法,将模型的大小压缩至原来的数十倍,使得模型参数能完全放在SRAM内,免去了对DRAM的访问,大大降低了功耗,最终实现了很高的加速比和功率效率。
三、Methods Network Pruning 如何剪枝剪枝是一种能有效压缩模型大小和防止过拟合的方法,所谓剪枝,就是剪去一些不重要的连接:设置某个阈值,低于每个阈值的权重都被永久置为0,不再参与今后的计算。每次剪枝之后,我们还可以对模型进行retrain,微调权重,这样不断迭代,直至结果满意为止。 在本文中,我们通过剪枝将AlexNet模型的大小缩减了9倍,将VGG-16的模型大小缩减了13倍。
剪枝后参数的存储剪枝之后,模型中绝大多数参数都会被置为0,因此,剪枝之后的权重矩阵是一个稀疏矩阵,针对稀疏矩阵的存储方式有很多,例如CSR、CSC等,本文作者采用CSR来存储稀疏化后的权重。 如上图所示,AA数组存储的是稀疏矩阵中非零元素的值,JA数组存储A中每一行第一个非零元素在AA中的索引,JA中最后一个元素为非零元素个数+1,而IC数组存储的是AA中对应元素的列号,若设A中非零元素有a个,A矩阵有n行,那么采用CSR存储只需要2a+n+1个数据即可。 那么如果有乘法A*v,则操作如下: for(i=1;i
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?