Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

班瀚文文字整理

深度神经网络的压缩与加速

编者按:深度神经网络的压缩与加速是近年来非常热门的一个研究课题,该技术有着强大的技能。但是在实际应用中,会带来哪些问题呢?VALSE Webinar 2020-14期邀请 王云鹤(华为诺亚方舟实验室)、王培松(中国科学院自动化研究所)、余家辉(Google Brain)、林绍辉(National University of Singapore)、谭明奎(华南理工大学)、程健(中国科学院自动化研究所)、徐畅(The University of Sydney)针对“深度神经网络的压缩与加速”开展了深入探讨,本文是该次讨论的文字实录,共计5个议题及1个观众提问的问题。

议题1

机器学习平台是公有云中增长最快的服务之一。是否有必要考虑将网络压缩算法集成为在线的机器学习服务,其中有哪些挑战与机遇?

王云鹤:国内没有像谷歌那样计算的集群,进化算法这种东西确实好,收敛性很好保证,性能也好,但是计算代价大。现在面临着一个问题,无论是网络压缩也好,无论是AutoML也好,还有NAS也好,能否落地的关键问题是,大家用这样的云服务费用对最终产生的这种实际价值相比,到底哪个价值更高。如果我们找同学去对一些模型做精细调参的话,就可以达到模型压缩的云服务,自动化的技术,这种技术的竞争力是不够的,所以说如何把这些能压缩的技术,把压缩时间、压缩成本去做的更低,我认为这个是现在面临的最大的挑战。

余家辉:这边两个问题说是否有必要,答案肯定有必要,可以看到机器平台学习上已经有一些相应的应用,一些服务,付费的一些应用。其中有哪些挑战呢?我想补充一点,我们现在很多比如像AutoML或者是pruning的算法,很多时候是在视觉的应用上做的,其实真正的应用场景上不仅是视觉还有一些语音、视觉处理的问题。这些问题上,是否现有的算法能得到一个比较好的结果,这还是非常确定的。所以这也是一个非常大的挑战。

程健:现在公有云的机器学习的服务,确实比较常见,把网络压缩集成进去,肯定会有很大的需求,但是这里面可能会遇到一些挑战,这些挑战来自于什么呢?第一,现在很多网络压缩的方法,特别是一些比较精细的方法,不一定能完全自动化,这里面还有很多参数要去设置,包括不同应用场景下,参数会有很大的不同。这个是我认为是在云服务里面,可能会遇到的一个挑战。第二,现在很多网络压缩的模型方法,实际上需要大量的数据的,因为云服务的话,可能有很多行业对这个数据,尤其是大量的数据放到云上去做训练会有顾虑。当然如果是一些通用的问题,比如像一些比较常见的应用场景,这个问题可能会稍微小一点。但是实际上,现在大家如果需要用到云服务,往往是对这个算法还不太熟,或者是传统的行业里面需要部署。在这些行业里面,数据有的时候还是非常珍贵的。

议题2

大多数网络压缩算法在GPU集群上进行训练学习,其压缩后的神经网络,如何 “无缝” 部署到其他“低功耗”设备上,如手机上的NPU、IoT设备上的单片机、FPGA等?

程健:在很多边缘端应用都是这种模式来做的,训练是在GPU上训练。我们面向的对象是IOT设备上来做这个事情,往往用的多的还是在边缘端,对云端压缩的需求没有那么高。那这种情况下怎么去做呢?我认为有几个方面,第一个方面是在云端去做训练的时候,目标函数怎么去优化。这个我认为要考虑到在边缘端上的设备情况,比如边缘端带宽的问题,如何处理数据的传输,包括它上面对功耗的诉求等等。这个问题有很多的文章,实际上是考虑在做压缩训练的时候,已经考虑到了资源受限的情况。第二个方面,现在有越来越多的工作,已经把云端和边缘端底层的硬件打通了,这样的话可以进行一些无缝的转化,也可以直接部署。当然效率现在有一些会有受限,尤其是对现在压缩里面的一些方法,不是所有的都能无缝地转化过来。量化是做的相对比较好一点的方法,其他的像剪枝、蒸馏这些方法,不一定能够做的这么好。

余家辉:我补充一点,评论里有说这项工作是脏活累活,因为你在GPU上训练,很多时候不能得到端上的延迟及内存上的功耗等等,有一类做法是先训练另外一个神经网络,把一个神经网络的architecture映射到对应的端上。有了这样的一个神经网络之后,可以拿这个神经网络做一个代理,在GPU做一些压缩、剪枝,用这种代理相当于得到一个目标,有了这个目标之后,可以做一个调节作用,在GPU上训练的network可以部署到这个端上,它也不一定是脏活累活。

议题3

近年ICLR CVPR ICCV论文中,有指出压缩网络受网络结构影响,跟使用pretrained参数并没有很大关系,使用随机初始化也能达到好的效果。这是否意味着结构的重要性远远大于参数初始化?

林绍辉:我个人的观点是这个问题需要看是在什么样的任务上进行,其实竞争比较激烈的是ICLR里面2019年有两篇paper的关于初始化的问题。其实得看不同的任务,举个例子,图像分类上面,如果你压缩之后的模型比较规则的话,比如你做一些channel的pruning,每层剪的个数是跟原始的网络结构成倍数关系的,不是那种虽说结构化剪枝但不是呈正比例的关系。比如说对MobileNet,你把它的width设成原来的0.5倍,这种是一种纯比例的关系,如果是这样的结构去做training-from-scratch的话,效果与用pre-train的方法相比是差不多的。所以在这个问题上面,我认为结构决定了性能。如果对于更为复杂的任务,比如一些视频理解或者是行为分析上面的问题,这样的模型可能还是依赖于pretrained一些模型,特别是依赖于那种数据级比较大的pre-train,我记得就是做一些video understanding很多方法都必须得在Kinetics数据集上面做pre-train,pre-train完后迁移到另外一些action recognition具体的任务上面的时候,它的效果就会得到大大的提高,但是如果没有用这样的pre-train的技术,效果非常不好,这个也是我做过很多实验得出来的一个结论。

谭明奎:这个问题是这样的,首先结构的重要性是非常重要的。一个不好的结构,压缩也好,量化也好,肯定是有一个上限的,上限是由结构来决定的。但是我不太同意这几篇论文的观点,因为我们做实验可以充分证明,一个好的pre-train的参数,是能够远远超过所谓的随机化的,当然我也相信其他几位老师做的实验和结果。但是我认为良好的pre-train的模型,肯定是比较好的。我相信论文的结果肯定是正确的,那么为什么会出现这个问题?原因可能是我们现在去pre-train的这个模型不够好,有两个方面,第一个我们的数据或者是超参数导致模型本身来讲,可能baseline这个模型本身就不够理想。Pre-train的时候,所有的参数都很重要,无论是剪枝、压缩,都会对模型起到作用。举个例子,有10个学生,我们让10个学生都参与,这个时候把其中一个学生拿走,就会对全体产生影响。但是如果有10个同学做这个任务,有5个同学就可以把这个活干完,剩下的5个同学可能就没什么重要性,这个时候再把那5个同学移走,是没什么影响的。所以这里我认为,在压缩的时候,实际上如何去训练这个pre-train的模型是非常重要的。这个包括两个,包括剪枝也好,包括量化也好,都是要在进一步进行思考的,这是我的一个观点。所以我对这几篇论文的观点,我持保留的意见。

议题4

我们可以通过NAS(Neural Architecture Search)技术搜索的到一个体积小并且性能不错的神经网络模型,那么进行网络压缩技术研究的意义在哪里?

林绍辉:这个问题好像说NAS可以解决一切问题,好像现在使用NAS就可以什么东西都能做到非常好。但是我认为有一个问题需要思考,就是NAS搜出来的模型是否是可信的。还有是关于它的泛化性问题。举个简单的例子,NAS搜出来的模型,是否是脆弱的容易受攻击的呢?这个目前来说好像还是比较少的paper去分析,基本上都是NAS搜出来比较小,在任务上面获得一个非常好的性能,没有去考虑更加深层次的本身的模型的脆弱性或者是可信度的问题。另外一个就是泛化能力如何,不是单纯的指,比如在image classification任务上面搜到一个好的模型,直接迁移到另外一个例如 object detection框架上面,而是指在不同的任务之间模型能否直接可以无缝地操作,而不应该是再迁移过去,这个是我认为泛化性的另外一个问题。

王云鹤:我刚好想谈一下第三点。在最开始ICLR那篇paper讨论剪枝之后pre-train的这个问题,那个实验,前面的老师讲的非常好,可能是他找的那个baseline没有那么好,如果有同学做过student的框架出来的话,我们的student network是直接通过channel去做一个等比例的缩减,去得到比如除以2除以4这样的结果。baseline如果冗余度非常高的话,其实网络的精度没有那么差,无论是你用一些原来的feature也好,还是用重新训的话,基本上是差不多的。我们看到这个paper之后也去试了一下,尤其在一些拍照的任务上面,或是一些商场模型上去试了一下,比如GAN或super resolution。保留和不保留原来的feature pruning出来的全值的时候,精度会差的非常多,尤其是在这种super resolution上面,保留全值精度会比原来好很多。第四个问题,我想说的是另外一个问题,NAS主要测试的是architecture,就是这一层有什么,那一层有什么,层级之间是怎么相连的,这个力度要比我们的feature pruning更高一级。在很多的实际应用里面,我们会先用NAS去找一个大概的框架,在NAS找到大概的框架的情况下,之后我们还是要去做feature pruning,去识别NAS出来的模型里面哪些的channel是没有必要的,通过这样的技术,两个结合的话,我觉得会产生一个更好的结果。

谭明奎:无论是NAS也好,还是我们给定任意一个非常棒的结构也好,是不是我们在一个数集上重新训练就能得到一个好模型呢?答案是不一定。这里面有一个很重要的因素就是在于初始化,如果初始化不够理想,或者在优化的过程中不小心收敛到一个不太好的点,就会产生模型冗余。也就是说,即便是好的结构,模型冗余风险还是存在的。在实际应用中,从工程应用的角度来讲,还是值得去做一下pruning。当然,我们根据应用场景,综合运用各种压缩手段,比如把组合各种技巧,最终得到相对较好的模型,在各种性能指标方面达到一个平衡。

余家辉:评论里有问工业界现在用NAS的比较多还是网络压缩技术的比较多。从我观察的角度来看,现在应该还是用网络压缩技术比较多,因为毕竟有更长的历史。NAS相对来说比较新,还有一点非常重要的是,NAS现在所展示的一些应用,目前来看还是非常有限的,比如在视觉上,分类上,检测上,NAS是不是能在以RNN为基础的神经网络或者是LSTM相关的,还是很有待去验证的一件事情。所以目前来看,压缩技术用的稍微更多。

议题5

遵循“没有免费午餐”定理,应根据实际问题选择合适的方法。对于具体的计算机视觉应用场景而言,如何针对性的进行网络压缩?

王云鹤:在很多工程项目里,其实是好多的团队一起做交付的,可能不同的团队采用的技术不一样,最后会根据具体的performance的比评去选择最好的一个结果。这个实际上很难去直接给定一个计算机视觉的场景,去找到最好的相应解法。根据不同的任务,还是要把常见的网络压缩的技术先试一下,看一下哪个比较work。比如在底层拍照的相关上面,直接做蒸馏的话,效果不是很明显,很难去设计一个有效的算法去把教师神经网络里面的知识去提纯,然后帮助小的拍照模型去训练。有一些量化的模型,对这种拍照的任务也不友好,比如说做了int 8,可能会有其他的artifacts实现,如果做更低比特的话,由于图像本身就是int 8的数据的形式,可能会对整体的预测也不是很好。但是对于高层语义,分类检测分割基本上是比较通用的算法。

林绍辉:计算机视觉任务场景这么多,很难说一个方法对应着哪个视觉任务就比较能够work,有很多时候其实都是试出来的。但是如果遇到一些不同的视觉任务,我会有这样的一种尝试方式,可能会思考这个视觉任务当中,能不能针对这个视觉任务,提出个比较好的compact block去做这个事情,这个其实我觉得compact block去做这个特定任务下的一些应用的话,我觉得这个效益比较大。因为只要设计好了这样一个block很多性能上面会有很大的一个改善。我也会去思考这个NAS在这个特定的任务上面能不能够寻找一种策略,或者是一些问题去做NAS搜索。首先我会去尝试一下,其次我可能会去试一下,目前比较成熟一些pruning或者是quantization等等的一些算法,在上面去进一步验证一下,这种方式能不能去做。我做过一些SR的工作, quantization直接做上去的时候不是太好,所以如果要去做这个东西,里面还有很多问题需要去调整。总结一下,如果想把这个任务做好,很多技术不是单一的直接去做,必须得把东西联合起来,才能够获得一个更高倍数的压缩与加速。

王培松:对于不同的视觉任务来说,有一点也是比较重要的,首先要寻找瓶颈是在哪个地方,是在于memory太大,计算量太大,还是模型存储太大。比如我们之前在做实际任务的时候,遇到一个问题,做超分的时候,计算量、模型的存储其实都是OK的,但是memory占用很大。这样的话,对于计算量和模型存储都不是问题,但是对于memory占用就很是问题。所以首先要找到这个瓶颈到底是在哪个地方,再去针对地做不同的压缩方案。但是如果知道了这个瓶颈在哪里,怎么去解决这个问题,就很难给出指导性的建议了,可能更多地靠尝试,或是一些经验性的东西。

观众提问

如果想从事网络压缩方向的工作,需要具备哪些能力?

徐畅:因为程健老师作为高校的博士生导师,我们请程健老师,从招研究生的方面讲一下他的要求。

程健:这个问题我谈谈我的看法,做网络压缩和深度学习,或者做机器学习,本身并没有太大的区别。如果数学基础稍微好一点,编程稍微好一点,可能做这个方向入手会更快一点。包括整个深度学习里面,绝大部分的研究方向,对原来的方向,或者是学科专业,其实并没有太大的要求。我在招学生的时候,最不看重的就是专业方向,更多的还是要能够自我学习的能力,对这个方向感兴趣愿意去做,就一定能做出来。

徐畅:好的,谢谢程健老师。我们请家辉老师从公司的角度来谈一下这个问题,如果招员工或者是实习生,需要具备哪些能力。

余家辉:对于从事网络压缩方向,从我的角度没有具体的有哪些能力一定需要的,更像是说做深度学习需要什么样的能力,比如数学编程基础,当然还有个人素质,比如艰苦,努力工作这些会比较重要。还有补充一点是说,因为网络压缩方向,毕竟还是high level的,网络与底层的应用也非常相关。所以在一定程度上,能更多地接触一些底层的应用,比如这些应用的场景也是非常重要的。

深度学习大讲堂
深度学习大讲堂

高质量原创内容平台,邀请学术界、工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术、产品和活动信息。

理论深度神经网络
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

合合信息机构
推荐文章
暂无评论
暂无评论~