微信又改版啦,为了让大家能及时看到我们的文(福)章(利),特意做了一个“星标教程”以免与大家擦肩而过~
HOT CHIPS是一年一度的高性能芯片大会,各大行业巨头都在此盛会上展出自家最尖端的芯片和技术。在今年的第30届会议上,我们的Paul亲临现场并为大家带来了关于机器学习领域的一手笔记。
他在重点介绍on-device推理领域的同时,也将向大家介绍在云端加速训练的内容;这一部分由MIT Han’s实验室的Song Han在此次会议上提出。
显然,一种更好地完成on-device推理工作的方法是构建一个特殊的on-device推理引擎。在这两天的会议上,Arm、英伟达(NVIDIA)和赛灵思(Xilinx)等公司都展出了他们的该类产品。所有的服务器处理器都对神经网络编程进行了优化,即使是新一代的Intel处理器(目前称为Cascade Lake SP)也对ISA进行了新的扩展:增加了专门用于评估神经网络的指令,可比常规指令更快完成任务。
神经网络的训练几乎总是在云端使用32位浮点数进行。大量研究表明即使我们计划最终运行一个降价模型(reduced model),我们也需要在训练期间保持精度。如果降得过快,我们便会错过陷入局部极小值的机会,或者在不收敛的情况下结束。通常,当我们看到一张图在展示代表训练算法正在探索的空间的平面时,这张图都是一张光滑的鞍状图而没有任何问题。然而实际上,下方的图片才更具代表性。
深度模型压缩
剪枝(Pruning)
第一个优化方法是剪枝(Pruning)。训练出来的网络有大量的连接,其中很多可以被移除而不会影响模型的准确性。一旦这些连接被移除,网络就可以在较少连接的情况下进行重新训练,模型的精准度也会通过重新训练和重新计算全部权重而得到恢复。剪枝和再训练的过程可以重复进行,直到在不损失过多准确性的情况下再无连接可被移除。
人类的大脑也会进行剪枝。新生儿有50万亿个突触,这个数字随着婴儿大脑的生长而在一周岁时达到1000万亿。而当婴儿进入青春期时,这个数字会减半到500万亿。用这种方法修剪神经网络也会有类似的效果,有时经过剪枝和重新训练的网络不仅更小,准确率也会同时提高。在AlexNet上使用这种方法,卷积层可以减少3倍,完全连接层可以减少10倍。
稀疏(Sparsity)
第二个方法是稀疏(Sparsity)。我们都知道任何数乘以0的结果是0,所以当我们将0权重作为一个乘数时我们就得到了最简单直白的优化方法。因此我们不仅不需要将0输入到乘法器中,我们还可以使另一个输入保持在原来的值上,从而既节省了对总线的内存访问,又节省了电源。当进行训练时,很多权重几乎不参与推理并接近于0。通过将这些权重直接设置为0,我们可以使矩阵变得稀疏并使任何优化成为可能。
如下图所示,稀疏性可以是非结构化的,也可以是结构化的。通过使用稀疏性,一个可以交付1TOPS的网络实际可以交付3TOPS(如果将所有从未实际执行过的操作都计算在内的话)。
量化(Quantization)
量化(Quantization)意味着将权重的宽度从32位浮点数减少到16位、8位甚至更低。令人惊讶的是,这么做并不会损失过多的准确性,却使深度压缩实际奏效。
联合以上优化方法
如果这么做,我们会得到高达50X的压缩比,同时Song演讲中提出的每一个基准测试都在压缩网络中提高了精准性。
更令人惊讶的是,剪枝后的模型加速了图像分类和目标探测能力。这是因为速度的限制(即“roof line”)是对内存带宽的限制,而不是对计算的限制。通过减少内存访问,计算单元可以保持更忙碌的状态。这几乎与用于执行推理的引擎无关。如此看来,压缩网络似乎只有利端而无弊害:更小、更快、更准确。
硬件设计
基于HOT CHIPS上神经网络处理器的介绍和展示,我从Song Han和其他人的工作中得到的经验教训是:
在云端要以完全精准的状态训练
使用上述技术压缩网络
优化稀疏矩阵的推理硬件,避免表示0
优化存在一个输入为0的MAC操作,并禁止操作和访问非零操作数
将精度降低到8位或者16位,并构建大量8位MAC机
不要使用缓存,这只是在浪费时间。明智地安排操作,以便尽可能多地重用从内存中获取的值,而不是在后续的工作中返过头来重新加载相同的值。
*原创内容,转载请注明出处。
Breakfast Bytes系列:
欢迎您的留言!
领取专属 10元无门槛券
私享最新 技术干货