如何细化神经网络模型?谷歌开源MorphNet
Posted 图灵TOPIA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何细化神经网络模型?谷歌开源MorphNet相关的知识,希望对你有一定的参考价值。
图灵TOPIA
编译:刘静
图灵联邦编辑部出品
想要微调您的neural network到一个特定的任务吗?
试试Google今天开源的MorphNet吧!
这是一种用于神经网络模型细化的开源技术,它将现有网络作为输入,并生成一个更小 、 更快、性能更好的新网络。
深度神经网络(DNNs)在解决实际相关性难题(如图像分类,文本识别和语音转录)方面效果卓越。然而,为给定问题设计合适的DNN架构仍然是一项具有挑战性的任务。
考虑到可能的架构有很大的搜索空间,从0开始为特定应用设计网络在计算资源和时间方面可能非常昂贵。神经结构搜索和AdaNet等方法使用机器学习搜索设计空间,以便找到改进的架构。另一种方法是使用现有的体系结构来解决类似的问题,并一次性地为手头的任务对其进行优化。
研究人员描述了一种用于神经网络模型细化的复杂技术MorphNet,它采用了后一种方法。
MorphNet将现有的神经网络作为输入,并生成一个新的神经网络,这个神经网络更小,速度更快,并且针对一个新的问题产生了更好的性能。
目前该技术已被应用于Google规模的生产环境中,以设计更小,更精确的生产服务网络。
以下是官方博客的详细内容:
工作原理
MorphNet通过收缩和扩展阶段(shrinking and expanding )的循环来优化神经网络。
在收缩阶段,MorphNet通过应用稀疏正则化器来识别效率低下的神经元,并将它们从网络中去除,使得总损失函数网络包括每个神经元的成本。
然而,MorphNet计算的不是每个神经元的平均成本,而是神经元相对于目标资源的成本。随着训练的进行,优化器在计算梯度时会知道资源成本,从而了解哪些神经元资源效率高,哪些神经元可以删除。
例如,考虑MorphNet如何计算神经网络的计算成本(例如,FLOP)。为简单起见,让我们考虑一个表示为矩阵乘法的神经网络层。在这种情况下,该层有2个输入(x_n),6个权重(a,b,...,f)和3个输出(y_n; 神经元)。使用乘以行和列的标准教科书方法,您可以确定评估此图层需要6次乘法。
MorphNet将此计算为输入计数和输出计数的乘积。请注意,尽管左侧的示例显示了权重稀疏度,其中两个权重为0,但我们仍需要执行所有乘法来评估此图层。但是,中间的例子显示了结构化的稀疏性,其中神经元y_n的行中的所有权重都是0。MorphNet识别出该层的新输出计数为2,并且该层的乘法数从6次减少到4次。利用这个想法,MorphNet可以确定网络中每个神经元的增量成本,以产生更高效的模型(右),其中神经元y_3已被移除。
在扩展阶段,我们使用宽度乘数统一扩展所有图层大小。例如,如果我们将神经元数量增加50%,那么原本由100个神经元组成的低效层就会缩小到10个,而原本由80个神经元组成的重要层可能会扩大到120个,从而拥有更多的资源来工作。净效应是将计算资源从网络中效率较低的部分重新分配到它们可能更有用的部分。
在收缩阶段之后,人们可以停止MorphNet,只是简单地削减网络规模,以满足更紧张的资源预算。这在目标成本方面导致了更有效的网络,但有时会导致精度下降。或者,用户也可以完成扩展阶段,这将匹配原始目标资源成本,但提高了精度。
为何选择MorphNet?
有针对性的正则化: MorphNet对正则化采取的方法比其他稀疏正则化指标更有意义。特别是,以诱导更好稀疏化的MorphNet方法靶向于特定资源的减少(如每次推断的模型大小或FLOPS)。这使得能够更好地控制由MorphNet推导出的网络结构,根据应用领域和相关约束条件,这种网络结构可能有明显不同。
例如,下图的左侧面板显示了一个基线网络,其中包含在JFT上训练的常用ResNet-101架构。MorphNet在指定FLOP(中心,FLOP降低40%)或模型大小(右侧,权重减少43%)时生成的结构有很大不同。当优化计算成本时,网络较低层中的较高分辨率神经元往往比较高层中的较低分辨率神经元更容易被修剪掉。当目标是较小的模型尺寸时,修剪权衡则相反。
MorphNet的目标正则化。矩形宽度与图层中的通道数成比例。底部的紫色条是输入图层。左:用作MorphNet输入的基线网络。中:输出应用FLOP正则化器。右:输出应用大小正则化器。
MorphNet是为数不多的可以针对特定参数进行优化的解决方案之一。这使它能够针对特定实现的目标参数。例如,通过合并特定于设备的计算时间和内存时间,可以将延迟作为原始方式的一阶优化参数。
拓扑变换:当MorphNet学习每层神经元的数量时,该算法可能遇到一个特殊情况,即稀疏层中的所有神经元。当一个图层有0个神经元时,通过从网络中剪切受影响的分支来有效地改变网络的拓扑结构。例如,在ResNet架构的情况下,MorphNet可能会保留跳过连接但删除残余块,如下所示(左)。对于Inception风格的体系结构,MorphNet可能会删除整个并行分支,如右图所示。
左:MorphNet可以删除ResNet风格网络中的残留连接。右:它还可以删除Inception风格网络中的并行塔。
可扩展性: MorphNet可在单次训练中学习新结构,当您的训练预算有限时,这是一种很好的方法。MorphNet还可以直接应用于昂贵的网络和数据集。例如,在上面的比较中,MorphNet直接应用于ResNet-101,最初是在JFT上训练的,花费了100个gpu月的时间。
可移植性: MorphNet生成的网络是“可移植的”,因为它们旨在从头开始重新训练,并且权重与架构学习过程无关。您不必担心复制检查点或遵循特殊训练方法。只需像往常一样训练您的新网络!
Morphing Networks
谷歌通过固定 FLOPs 将 MorphNet 应用到在 ImageNet 数据集上训练的 Inception V2 模型上(详见下图)。基线方法是使用一个宽度乘法器,通过均匀地减少每个卷积的输出数量(红色)来权衡精度和FLOP。MorphNet方法直接针对FLOP,并在收缩模型时产生更好的权衡曲线(蓝色)。在这种情况下,FLOP成本降低了11%至15%,与基线相比具有相同的精度。
MorphNet应用于ImageNet上的Inception V2。单独应用flop 正则化器(蓝色)可将相对于基线(红色)的性能提高11-15%。包括正则化器和宽度倍增器在内的完整周期,相同成本(“x1”;紫色)的精度提高,从第二个周期(“x2”;青色)持续改进。
此时,您可以选择其中一个MorphNet网络来满足较小的FLOP预算。或者,您可以通过将网络扩展回原始FLOP成本来完成这个循环,从而在相同的成本下获得更好的精度(紫色)。再次重复MorphNet收缩/扩展循环会导致另一个精度增加(青色),导致总精度提升1.1%。
结论
我们已将MorphNet应用于Google的多个生产规模图像处理模型。使用MorphNet可带来模型大小/ FLOP的显著降低,且质量几乎没有损失。
参考链接:
https://ai.googleblog.com/2019/04/morphnet-towards-faster-and-smaller.html
GitHub:
https://github.com/google-research/morph-net
论文:
https://arxiv.org/pdf/1711.06798.pdf
以上是关于如何细化神经网络模型?谷歌开源MorphNet的主要内容,如果未能解决你的问题,请参考以下文章
重磅谷歌开源 TensorFlow 图说生成模型,可真正理解图像
Q新闻丨雅虎开源色情图片检测神经网络;Vue.js 2.0 发布;谷歌开源同步定位与制图库Cartographer
开源 | Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型