议题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的,网络与底层的应用也非常相关。所以在一定程度上,能更多地接触一些底层的应用,比如这些应用的场景也是非常重要的。