主题:对2016年ICLR最佳论文进行初步解读
原因:希望能够在这个方向上想到合适的idea,有共同爱好或者有想法的朋友可以私信我。一起脱发一起科研,不出意外的话接下来应该还有会找同类的论文进行比对思考,有推荐同类型经典高引用文献可推荐给我谢谢。
内容:对一篇讲神经网络的压缩的论文进行整理。后续能不能搞成系列就随缘
论文链接:https://arxiv.org/pdf/1510.00149.pdf
PS:不知道这种内容写成博客的话用不用经过原作者的同意,需要的话请告知,立删。如在解读过程中有错误也请指出。
PPS: 作者是斯坦福大学博士韩松,同时也是深鉴科技创始人兼首席科学家。。。。。给大佬点烟。
摘要:摘要部分总结来说就是现在深度学习发展的很快,计算量大很吃内存,为了能够用内存有限的嵌入式系统中实现它,需要对模型进行压缩。方法呢就是pruning(剪枝),trained quantization(量化) , Huffman coding(霍夫曼编码)三个步骤来进行,相互协同,在不影响准确性的基础上,使得存储需求降低几十倍(很强QAQ),然后经过AlexNet网络结构在ImageNet数据集上的检验, 证明了效果很强。这样的好处就是我们可以在cache上面跑而不是内存。
这个图就是对整个压缩步骤的结构化解释,对摘要的一个形象化表示吧
一.Introduction
以百度,facebook的例子说明了一些神经网络经典模型究竟有多大,为了迎合硬件迫切需要压缩的意思。论文的目标是让大型的网络结构能够移植到移动设备上运行。
文章主干:
二.剪枝
PS:作者自己在2015年也发表了文章关于如何在不影响acc的基础上进行剪枝(作者没有明说,但是我觉得应该是这个SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5MB model size)
附上大佬论文连接:https://zz.glgoo.top/extdomains/scholar.google.com.hk/citations?user=E0iCaa4AAAAJ&hl=zh-CN&oi=sra
操作方法:
1.正常输入,然后将网络中的小于某个阈值的参数丢弃,再重新进行训练。处理之后得到的稀疏结构(出来好多0当然稀疏)作为CSC或者CSR.
2.为了能够进一步的压缩,用相对位置取代绝对位置。其中卷积层需8bit长度,全连接层设置为5bit长度
上图位卷积层相对位置的参数保存示例,diff行意味着距离前一位有效值的相对距离,若相对位置超过8,则额外添加一个0.
三.量化和权值共享
- 减少网络结构中全职所占有的比特数(简单粗暴的理解大概是取近似值或保留整数)
- 对有多个连接的权重共享权重值,提高效率。
- 对权重值进行微调
OS:结合上图理解,4输入4输出的神经元,权重位4*4的矩阵,相同颜色的权值可量化为同一个值(centroids),在更新网络的时候,也可以将需要更新的值进行量化。试验证明,在不影响acc的前提下,AlexNet网络中卷积层量化到8bit(256个共享权值),全连接层可量化到5bit(32个共享权值)。
接下来论文计算了一波压缩率:k:cluster(在这里看作颜色可能比较好理解),那么需要的比特数是log2(k),n为共享前的权值数,每一个权值需要b bits。
上图中k=4,b=32,n=16
决定共享权重值的方法:
K-means聚类
初始化权重值的方法:
1.Forgy:随机选取(黄色的点,可能看不清),2.
2.Density-based基于累积分布函数的,中心点集中在两个峰值之间,比随机选取的离散化强。
3.Linear:线性分割,顾名思义,高度离散化。
后来经实验证明,在这种情况下Linear初始化的方法最好。
四.霍夫曼编码
常见的是可变字长编码技术,论文中没有详细介绍。简单概括来说就是符号出现的概率越大(表示这个权重的值越常见),那么它所对应的码长就越短。
五.实验过程
照着论文原文中的table看就ok了,就是进行了一些对比试验,证明了压缩效果很好。