2017-12-07 09:40:49 ChenVast 阅读数 2602
  • 深度学习与强化学习技术沙龙 暨《深度学习模型及应用...

    主题分享:深度学习在大规模在线广告系统中的应用 张若非 美国微软人工智能与研究院高级研究总监,全球合伙人,《深度学习模型及应用详解》作者 主题分享:分布式机器学习算法的系统优化 崔斌 北京大学计算机系副主任,长江学者特聘教授,网络与信息系统研究所所长 圆桌论坛对话嘉宾: 张若非  美国微软人工智能与研究院高级研究总监 崔斌 北京大学计算机系副主任,长江学者特聘教授 段云峰 中国移动大数据系统总设计师 曾勇华 微软亚太研发集团科学家 谢梁  滴滴首席数据科学家

    244 人正在学习 去看看 CSDN讲师

一、   深度学习现状的瓶颈:

1、 计算量巨大,消耗大量的计算资源

2、 模型内存占用大,消耗大量内存资源

3、 模型存储空间大,消耗大量存储空间

4、 只能在云端利用其大量的资源进行模型训练

5、 需要移动设备连接云端,不连接即无法使用其效果。

6、 移动端资源(CPU、GPU、内存)和云端的差距过大,无法进行类似云端的大规模分布式训练。

 

总结:大模型耗费大量的资源(计算、内存、存储、电)

 

 

 

二、   移动端优势:

1、 便携,轻量

2、 实时性强

3、 无需连接云,本地使用。

4、 移动端产品众多,贴近生活。

 

总结:移动+轻量化 = 未来AI

 

 

向移动端发展的手段。

 

对大而复杂的模型进行压缩。

 

三、   模型压缩:

1、 Prunes the network:修枝剪叶,只保留一些重要的连接;

用于稀疏连接的重量级修剪,剪去权值低的,也就是去掉大部分几乎不可能发生的。

迭代地修剪和重新训练

 

用L1正则化的通道级修剪

 

案例:

network pruning 技术已经被广泛应用到CNN模型的压缩中,通过剪枝达到了state-of-the-art 的结果,而且没有减少模型的准确率;

左边的pruning阶段可以看出,其过程是:

1)、正常的训练一个网络;

2)、把一些权值很小的连接进行剪枝:通过一个阈值来剪枝;

3)、retrain 这个剪完枝的稀疏连接的网络;

 

       进一步压缩,对于weight的index,不再存储绝对位置的index,而是存储跟上一个有效weight的相对位置,这样index的字节数就可以被压缩了。

       卷积层用 8bits 来保存这个相对位置的index,在全连接层中用 5bits 来保存;

       用3bits保存相对位置为例子,当相对位置超过8(3bits)的时候,需要在相对位置为8的地方填充一个0,防止溢出;

      

 

 

      

 

2、 Quantize the weights:训练量化,通过权值量化来共享一些weights

 

假设有一个层,它有4个输入神经元,4个输出神经元,那么它的权值就是4*4的矩阵; 图中左上是weight矩阵,左下是gradient矩阵。可以看到,图中作者把 weight矩阵 聚类成了4个cluster(由4种颜色表示)。属于同一类的weight共享同一个权值大小(看中间的白色矩形部分,每种颜色权值对应一个clusterindex);由于同一cluster的weight共享一个权值大小,所以我们只需要存储权值的index 例子中是4个cluster,所以原来每个weight需要32bits,现在只需要2bits,非常简单的压缩了16倍。而在 权值更新 的时候,所有的gradients按照weight矩阵的颜色来分组,同一组的gradient做一个相加的操作,得到是sum乘上learning rate再减去共享的centroids,得到一个fine-tuned centroids,这个过程看上图,画的非常清晰了。

对于AlexNet,卷积层quantization到8bits(256个共享权值),而全连接层quantization到5bits(32个共享权值),并且这样压缩之后的网络没有降低准确率

 

用非常简单的 K-means,对每一层都做一个weight的聚类,属于同一个 cluster 的就共享同一个权值大小。 注意的一点:跨层的weight不进行共享权值;

 

 

 

3、 Huffman coding:通过霍夫曼编码进一步压缩;

Huffman Coding 是一种非常常用的无损编码技术,它按照符号出现的概率来进行变长编码。

上图的权重以及权值索引分布来自于AlexNet的最后一个全连接层。

可以看出,其分布是非均匀的、双峰形状,因此我们可以利用Huffman编码来对其进行处理,最终可以进一步使的网络的存储减少20%~30%。

 

 

 

四、   压缩总结:

1、Pruning:把连接数减少到原来的 1/13~1/9; 

2、 Quantization:每一个连接从原来的 32bits 减少到 5bits;

3、Huffman coding:网络的存储减少20%~30%

 

 

五、   设计较小的CNN架构设计

1、 SqueezeNet

SqueezeNet设计目标不是为了得到最佳的CNN识别精度,而是希望简化网络复杂度,同时达到public网络的识别精度。

三种原则:

替换3x3的卷积kernel为1x1的卷积kernel

减少输入3x3卷积的inputfeature map数量 

减少pooling 

压缩器:具有50x较少参数的AlexNet-level精度和< 0.5MB模型大小

 

 

 

2、 MobileNet

高效的卷积神经网络用于移动视觉应用

速度、模型大小上做了优化,并保持精度基本不变。

采用了depthwise separable convolutions(L. Sifre. Rigid-motionscattering for image classification, 2014. 1, 3) 的思想,在用3x3(或更大尺寸)卷积的时候并不对通道进行融合,而是采用depthwise(或叫channelwise)和1x1 pointwise的方法进行分解卷积。

mobilenet引入WidthMultiplier和Resolution Multiplier分别对网络进行瘦身和降低分辨率。

 

 

3、 ShuffleNet

一种非常高效的移动设备卷积神经网络

      

图a是一般的group convolution的实现效果。其造成的问题是,输出通道只和输入的某些通道有关,导致全局信息流通不畅,网络表达能力不足。

图b就是本文的方法啦。 即通过均匀排列,把groupconvolution后的feature map按通道进行均匀混合, 这样就可以更好的获取全局信息了。

图c是操作后的等价效果图。

 

ShuffleNet同样采用了类似于ResNet一样的模块化设计

图a是之前的一种ResNet网络结构模块,其参考了“MobileNet”的实现。其中的DWConv指的是 depthwise convolution。

图b是本文给出的一种模块(输出前后feature的size不变),相比于图a,只是将第一个1x1卷积改成了group convolution,同时后续增加通道 shuffle。

图c是本文给出的另一种模块(输出前后feature的size变小,但通道数增加),主要是为了应对下采样问题。 注意,最后的合并操作由原来的 “Add” 变成了 “Concat”, 目的是为了增加通道数。

 

原始版本的ShuffleNet的结构如下:

 

不同配置下的网络性能对比图:

 

ShuffleNet 同之前一些网络的对比效果:


相比Xception和Mobilenet,ShuffleNet都获得了性能上的提升,至于速度带来的提升则不是很明显。

ShufflleNet的主要改进就只是增强了全局信息的流通。

 

 

六、   深度学习 框架:

Caffe Caffe2 MXNet Tensorflow Torch

NCNN、MDL

Tensorflow Lite

CoreML

       从训练到推理

      

优化卷积计算:

       利用im2col-based进行选择性的卷积

       用于深度神经网络的内存高效卷积

      

 

       浮点运算定点化:

      

 

 

七、   Android端深度学习框架

NCNN vs MDL:

 

FrameWork

单线程

四线程

内存

NCNN

370ms

200ms

25M

MDL

360ms

190ms

30M

 

       TensorflowLite:

 

Quantize MobileNet

Float Mobilenet

85ms

400ms

 

 

 

八、   iOS 上的深度学习

Core ML:

扩展性弱,仅支持IOS11及以上

      

       MPSCNN:

       充分利用GPU资源,不用抢占CPU

利用Metal开发新的层很方便

 

MPSCNN:

MPSImage

CNN图像的布局,宽度为3,高度为2。

 

在iPhone6s上MPSCNN VS NCNN :

 

FrameWork

Time

NCNN

110ms

MPSCNN

45ms

 

 

九、   移动深度学习与云上的深度学习结合

1、 大规模的训练需要放在云上,压缩优化后转移到移动端。

2、 部分小模型的计算即可在移动端进行计算,无需上云。

3、 实时性强的需要放在移动端

4、 网络要求严格的模型,放在移动端,防止断网造成的不必要损失。

 

 

十、   边缘计算推进移动深度学习

1、 推进边缘计算的设备主要是移动CPU,以高通、联发科、inter Y/M系列移动CPU为代表。

2、 移动CPU更新换代快,每年一次大的更新。

3、 移动CPU处理器性能直追PC的CPU

4、 移动CPU有低功耗的特点,节能。

5、 现移动GPU已经逐渐走向成熟,从Apple的A11性能可以看出。

这是2017年旗舰移动CPU对比,骁龙VS Apple A11

 



十一、    参考资料:

http://blog.csdn.net/shuzfan/article/details/77141425

https://arxiv.org/pdf/1704.04861.pdf

https://arxiv.org/pdf/1510.00149.pdf

参考来自网络博客和以上论文。

2017-08-01 16:26:00 weixin_34208185 阅读数 49
  • 深度学习与强化学习技术沙龙 暨《深度学习模型及应用...

    主题分享:深度学习在大规模在线广告系统中的应用 张若非 美国微软人工智能与研究院高级研究总监,全球合伙人,《深度学习模型及应用详解》作者 主题分享:分布式机器学习算法的系统优化 崔斌 北京大学计算机系副主任,长江学者特聘教授,网络与信息系统研究所所长 圆桌论坛对话嘉宾: 张若非  美国微软人工智能与研究院高级研究总监 崔斌 北京大学计算机系副主任,长江学者特聘教授 段云峰 中国移动大数据系统总设计师 曾勇华 微软亚太研发集团科学家 谢梁  滴滴首席数据科学家

    244 人正在学习 去看看 CSDN讲师

DATE——Design, Automation and Test in Europe,是欧洲最大的设计自动化会议。DATE 汇集的人群从研究者、开放商到终端用户,几乎覆盖了整个生态。具体说,设计师和设计自动化的用户、研究人员和供应商,以及电子电路和系统的软硬设计、测试和制造的专家。此外,DATE 非常强调 IC/SoC,可重配置硬件,还有嵌入式系统。


2017 年的 DATE 本月 27 号在瑞士洛桑揭幕。在为期 5 天的会议中,除了常规的主旨演讲、论文发表、讲座和研讨会,还有一个商业展出,展示的内容包括最先进的设计和测试工具、方法、IP 以及设计服务,还有可重构和其他的硬件平台,比如汽车、无线、电信和多媒体应用。可以说,相比其他顶会,DATE 的内容可能与我们的生活关系更为密切。


每届顶会的论文都代表了领域“热门研究方向”、“最新研究方法”,其中尤属最佳论文值得关注。2017 年 DATE 评选出了 4 篇最佳论文,设计(D Track)、应用(A Track)、测试(T Track)和嵌入式软件(E Track)四个分类各一篇。其中,2017 年 DATE 嵌入式软件 E Track 的最佳论文奖被授予了杜克大学陈怡然教授组关于移动平台深度学习计算的文章——《MoDNN:用于深度神经网络的本地分布式移动计算系统》。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

*投稿时陈怡然教授尚在匹兹堡大学,今年初已转到杜克大学工作


在这篇论文中,研究人员提出了一个可以通过无线局域网(WLAN)工作的深度神经网络(DNN)的本地分布式移动计算系统,叫做 MoDNN。MoDNN 可以通过在多个移动设备之间引入执行的并行性,显著加速 DNN 的计算。


DNN 的应用越来越广,不仅是在大型的数据中心,现在,有些智能手机的功能也强大到能运行某些深度学习,举几个常见的例子,过滤掉麦克风里的杂音,或者删除加速计采集的数据里不必要的信号。


深度学习可以大幅提升手机 App 的性能,让智能手机变得更加“智能”。这一切的基础,就是在移动端也能运行 DNN。


研究人员表示,“据们所知,本文是第一篇利用WLAN中的各种移动设备作为DNN计算资源的论文,在执行并行性增强和数据传输方面有多项创新”。


下面我们就来具体看一下陈怡然教授组的这项研究成果。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


论文 MoDNN:用于深度神经网络的本地分布式移动计算系统


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


作者:毛驾臣、陈翔、Kent W. Nixon、Christopher Krieger,陈怡然


摘要


虽然深层神经网络(DNN)在许多应用中被广泛使用,但是通常难以在资源受限的设备(例如移动平台)上部署DNN。一些现有的尝试主要集中在客户端 - 服务器计算模式或DNN压缩模型中,这需要基础设施的支撑或专门的训练。本文提出了MoDNN——一个用于DNN应用的本地分布式移动计算系统。MoDNN 可以将已训练的DNN模型分割到多个移动设备上,减轻设备级计算成本和内存使用,从而加速DNN计算。我们还设计了两种模型分区方案以最小化非并行数据的传递时间,包括唤醒时间和传输时间。实验结果表明,当工作节点数从2增加到4时,MoDNN可以加速DNN计算2.17-4.28×。除了并行执行之外,性能加速也部分来自于数据传送时间的减少,例如对于传统2D网格分区,减少了30.02%。


背景介绍


移动网络日益增长的带宽激发了移动设备上多媒体交互式应用的快速增长,这涉及密集的对象识别和分类任务。深度神经网络(DNN)由于其高精度和自适应性而被广泛地用于执行这些任务。然而,DNN的运行会占用相当大的资源。一个代表性的例子是VGG,它代表了2014年 ImageNet 大规模视觉识别挑战(ILSVRC14)的最先进性能。VGG具有15M的神经元、144M的参数和3.4B的连接。当部署在移动设备时,VGG花费大约16秒来完成一个图像的识别过程,这在实践中是不可容忍的。


DNN的巨大计算负载和移动设备的有限计算资源之间的鸿沟对用户体验产生了不利影响,并催生了一些研究工作来填补这一鸿沟。例如,客户端 - 服务器模式是一种直接的解决方案,可以有效地将高计算成本卸载到外部基础设施上:Hauswald etal.(2014) 提出了一种流水线机器学习结构中的数据卸载方案; Li et al.(2014) 建立了DNN训练的高效分布式参数服务器框架。此外,也有许多研究致力于减少DNN的计算工作量,例如模型压缩:Han et al.(2015)使用三级流水线深度压缩DNN模型:剪枝,受训量化和霍夫曼编码;Chen et al(2015)引入了低成本哈希函数将权重分组到哈希桶中以用于参数共享。


我们发现,有一个重要的场景,在以前的研究中还没有充分考察。那就是,在本地分布式移动计算系统上运行DNN。与由外部基础设施支持单个移动设备的客户端 - 服务器模式相比,本地分布式移动计算系统有几个重要的优势,包括更多的本地计算资源、更高的隐私、对网络带宽更少的依赖等等。


这篇论文的主要贡献是:


  1. 调查了使用多个授权的、支持WiFi的、用于DNN计算的移动设备在WLAN中构建计算集群的方法。携带了测试数据(例如图像)的移动设备充当 Group Owner(GO),其他设备充当工作节点;

  2. 基于两类DNN层的特性(卷积层和完全连接层)和不同移动设备的计算能力,提出两种分区方案以最小化移动设备之间的数据传送时间;

  3. 在计算集群中的每个移动设备上使用中间件来调度整个执行过程。


据我们所知,本文是第一篇利用 WLAN 中的各种移动设备作为DNN计算资源的论文,在执行并行性增强和数据传输方面有多项创新”。实验结果表明,当工作节点数从2增加到4时,由于实现了高执行并行性,以及数据传输时间显著减少,MoDNN可以加速DNN计算2.17-4.28X。


MoDNN的系统框架


图1是MoDNN的系统框架概述,包括三个主要组件:


1)由GO和多个工作节点形成的本地分布式网络集群;

2)将DNN模型分割到工作节点上的模型处理器;

3)执行DNN的数据传递和识别服务的中间件。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

图1


我们注意到卷积层(CL)的计算成本主要取决于其输入大小。因此,我们引入了Biased One-Dimensional Partition (BODP)的方案来划分CL。相反,完全连接层(FL)的内存使用主要由层中的权重数量决定。鉴于此,专门针对稀疏FL引入了由Modified Spectral Co-Clustering (MSCC)和Fine-Grain CrossPartition(FGCP)组成的权重分割方案。值得注意的是,一旦DNN被训练,DNN模型分区只需要在应用程序中执行一次。因此,只要训练的DNN保持相同,分区成本可以由系统的执行来分摊。


更多关于系统实现和实验设置的技术细节,请查阅论文。


结语


在这篇论文中,作者提出了 MoDNN 本地分布式移动计算系统,以实现 DNN 在移动平台上的并行计算。由于卷积层和完全连接层被认为是影响总体执行时间的主要DNN组件,因此作者提出了几种高级分区方案,即 BODP、MSCC 和 FGCP,以平衡每个工作节点的工作负载,最小化数据传送时间。实验表明,在DNN计算上,MoDNN 比线性性能加速表现更好,展现了DNN应用中移动平台的巨大潜力。


文章转自新智元公众号,原文链接

2019-05-11 18:31:57 a609640147 阅读数 318
  • 深度学习与强化学习技术沙龙 暨《深度学习模型及应用...

    主题分享:深度学习在大规模在线广告系统中的应用 张若非 美国微软人工智能与研究院高级研究总监,全球合伙人,《深度学习模型及应用详解》作者 主题分享:分布式机器学习算法的系统优化 崔斌 北京大学计算机系副主任,长江学者特聘教授,网络与信息系统研究所所长 圆桌论坛对话嘉宾: 张若非  美国微软人工智能与研究院高级研究总监 崔斌 北京大学计算机系副主任,长江学者特聘教授 段云峰 中国移动大数据系统总设计师 曾勇华 微软亚太研发集团科学家 谢梁  滴滴首席数据科学家

    244 人正在学习 去看看 CSDN讲师

大型的分布式训练需要较好的通信带宽以便进行梯度的交换,这限制了多节点训练的可扩展性同时也需要昂贵的高带宽设备。这种情况在移动端进行分布式训练时会变得更加糟糕。这篇文章发现分布式SGD中有99.9%的梯度交换都是冗余的,并提出了深度梯度压缩(DGC)用来减少通信带宽。为了保证压缩过程中的精度,DGC使用了4中方法:动量修正、本地梯度剪裁、动量因子遮蔽和warm-up训练。文章中将DGC使用在了图像分类、语音识别和语言模型上面,这些任务中使用的数据集有Cifar10、ImageNet,Penn Treebank 和 Librispeech Corpus。这些情景中在精度未受损失的情况下,DGC的压缩比例达到了270倍至600倍,并将ResNet-50的梯度从97MB剪切至0.35MB,将DeepSpeech的梯度由488MB剪切至0.74MB。深度梯度压缩使得在1Gbps的网络下进行大规模训练成为可能并且促进了分布式训练在移动端的发展。

论文地址:
https://arxiv.org/abs/1712.01887

引言

大规模机器学习提高了模型生产力,同步的SGD被广泛的应用于分布式训练。网络带宽成为了增大训练规模的显著瓶颈,并且带宽问题在移动端进行分布式训练时变得更加糟糕。深度梯度压缩(DGC)通过压缩梯度的方式解决了通信带宽问题,并且为了保证精度不受影响还使用动量修正、本地梯度剪裁、动量因子遮蔽和 warm-up 训练等方法。文章还在不同的任务、模型和数据集上进行了验证包括:图像分类(模型为CNN,数据集为Cifar10 和 ImageNet)、语言模型(模型为RNN,数据集为Penn Treebank)、语音识别(Librispeech Corpus)。这些实验表明梯度可以被压缩600倍而没有造成精度损失,这比前面的一些研究高出了一个数量级。

深度梯度压缩算法

梯度稀疏化

本文通过只发送重要梯度信息来减少通信带宽,梯度的重要程度通过其大小来指定:只有大于某一阈值的梯度才会被传送。为了避免信息损失,剩余的梯度会在本地累积直到累积到足够大然后被传送。于是出现了两种情况:立即发送了大的梯度,延时发送了小梯度。假使 F(ω)F(\omega)为需要优化的损失函数。

上式中χ\chi为训练数据集,ω\omega为网络的权重,NN是训练的节点数,Bk,tB_{k,t}是minibatch中的一个序列其大小为bb。在经过TT轮迭代后有下式。

从上式可以发现本地梯度累积可以被视为batch size由NbNb增大到NbTNbT

动量修正

当稀疏化非常高时会影响收敛,本文中发现动量修正及本地梯度剪裁会减小这种影响。在N个训练节点上使用vanilla momentum SGD 进行分布式训练时。

上式中mm为动量,经过T轮迭代后权重系数ω\omega的变化为。

如果SGD的动量直接应用在稀疏梯度上,更新规则变成。

经过动量修正后有。

本地梯度剪裁

梯度剪裁被广泛的采用以防止梯度爆炸。因为需要在每个节点经过迭代来累积梯度,文中在当前的梯度GtG_t与前面的累积梯度(Gt1G_{t-1})相加之前进行梯度剪裁。并且将当前节点的梯度乘以系数N1/2N^{-1/2}进行规范化。假定原始的梯度的L2-norm为G2||G||_2thrGthr_G,本地的梯度L2-norm Gk2||G^k||_2thrGkthr_{G^k},有如下公式。

动量因子遮蔽

因为小的梯度被延时更新,所以当这些更新发生时,它们是过时的或者陈旧的。在本文的实验中当梯度稀疏化为99.9%时,大多数的参数是每隔600至1000个迭代来进行更新,这相对于一个epoch中的迭代轮数来说太大了。陈旧的梯度会减慢模型收敛速度并削弱模型的表现。本文引入了动量因子遮蔽这种方法以减轻陈旧梯度的影响。不同于搜索新的动量系数,本文中对积累梯度和动量因子使用了相同的遮蔽。

Warm-up 训练

在早期的训练阶段网络被迅速的更新,并且这些梯度变换多样并且很有效。梯度稀疏化限制了模型的变化范围因此延长了模型显著性改变的周期。Warm-up 训练方法在进行大的minibatch训练很有帮助,在进行warm-up训练时,使用较小的学习率来减慢模型最开始的更新速度并减少有效梯度的稀疏化。在最开始的几个epoch中,本文将梯度稀疏化率由一个较小的值通过指数化增长到最终值。
下图为本文中提出的深度梯度压缩的算法流程。

实验

本文在3种机器学习任务上进行了验证:图像分类任务(Cifar10和ImageNet),语言模型(Penn Treebank),语音识别(AN4和Librispeech)等。唯一的超參就是warm-up训练策略中引入的参数。在所有的与DGC相关的实验中,作者将warm-up周期中的稀疏化率设置为:75%,93.75%,98.4375%,99.6%,99.9%。
1.ResNet-110 在 Cifar10 数据集上训练结果

2.在ImageNet数据集上的梯度压缩率对比

3.在语言模型和语音识别上的实验

4.DGC在各个实验中的加速对比

从上面的图中可以发现,本文中所使用的深度梯度压缩方法在不影响模型精度或者影响很小的情况下对梯度进行了大幅压缩且获得了很大的压缩比率,并有效减小了模型训练所需要的通信带宽。

结论

深度梯度压缩(DGC)在CNNs和RNNs中压缩比率达到了270-600倍。为了达到这种压缩比率并且不降低模型收敛速度,DGC引入了动量修正、本地梯度剪裁、动量因子遮蔽和warm-up训练机制。作者又进一步提出了分层的阈值策略来加速梯度稀疏化处理流程。DGC减少了需求的通信带宽并且提高了在廉价、商用的网络设备上进行分布式训练的可扩展性。



扫码识别关注,获取更多论文解读

2018-04-06 18:51:48 u012554092 阅读数 322
  • 深度学习与强化学习技术沙龙 暨《深度学习模型及应用...

    主题分享:深度学习在大规模在线广告系统中的应用 张若非 美国微软人工智能与研究院高级研究总监,全球合伙人,《深度学习模型及应用详解》作者 主题分享:分布式机器学习算法的系统优化 崔斌 北京大学计算机系副主任,长江学者特聘教授,网络与信息系统研究所所长 圆桌论坛对话嘉宾: 张若非  美国微软人工智能与研究院高级研究总监 崔斌 北京大学计算机系副主任,长江学者特聘教授 段云峰 中国移动大数据系统总设计师 曾勇华 微软亚太研发集团科学家 谢梁  滴滴首席数据科学家

    244 人正在学习 去看看 CSDN讲师

1. SquezeeNet

标题 SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
作者团队,发表时间 伯克利&斯坦福 ICLR-2017
文章解决的问题 如何设计网络使得模型变小精度不降低
解决的方案 依据三条设计准则设计fire模块,加入bypass,模型压缩
实验与结果 1.数据库: ImageNet
2. 训练参数: dropout为0.5,补零padding为1,初始学习率为0.04
3. 训练策略:
4.Result:模型比AlexNet小510倍,精度略有提升
总结

1.1 论文导读

小型网络模型的优点:

  • 有利于分布式训练,减少数据交换量
  • 模型变小,对客户端的更新更便捷
  • 更容易在FPGA上进行部署

相关工作:

模型压缩:SVD,Network Pruning,quantization,huffman encoding
CNN 微架构:LeCun(5x5),VGG(3x3),NIN(1X1),Inception module,ResNet Module
CNN宏观架构:Deeper(VGG),ResNet,bypass connections

三条设计准则

  • 将3x3的filters替换成1x1
  • 减少3x3滤波器的输入通道数
  • 延迟和减少下采样以获得更多激活map,即网络前期尽量使stride为1

SquezeeNet

这里写图片描述
如上图所示,Fire module分为两个模块,squeeze模块由S1x1个1x1大小的滤波器组成,呼应设计准则1,expand层由e1x1个1x1大小的滤波器和e3x3个3x3大小的滤波器构成,同时保证S1x1 < e1x1+e3x3,呼应设计准则2

这里写图片描述
具体网络设计如上图(左边的模型),模型间很少采用pooling层,呼应设计准则3
在fire9之后有dropout为0.5,补零padding为1,初始学习率为0.04

SquezeeNet的压缩

使用韩松的Deep Compression 算法,采用6-bit的参数量化和33%的稀疏,最终模型大小为0.47MB (510×
smaller than 32-bit AlexNet),并且算法准确度并没有损失。

SquezeeNet宏观模型调优

如figure2所示,有三种模型,普通SquezeeNet,加入简单的bypass的SquezeeNet,加入复杂的bypass的SquezeeNet,简单的bypass是将值进行直接相加,并没有增加通道数,而复杂的bypass则通过加入若干个1x1的卷积核实现通道数的增加,增加了信息量,在一定程度上可以弥补S1x1模块造成的信息减少,但是结果证明,简单的bypass的SquezeeNet反而效果最好,这一点作者估计也是懵逼吧!

SquezeeNet微观模型调优

超参数SR(S1x1/(e1x1+e3x3)), pct (e3x3/(e1x1+e3x3) , base_e为第一个fire module的ei数值
这里写图片描述
最终实验选择:
basee = 128, incre = 128, pct = 0.5, freq = 2, and SR = 0.125

2. MobileNet

2.1 MobileNet V1

标题 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
作者团队,发表时间 Google CVPR-2017
文章解决的问题 如何设计网络使得模型变小精度不降低
解决的方案 deepwise分离卷积层,所有层后都会做BN和Relu,减少卷积层数,减小输入图片大小,
实验与结果 1.数据库: ImageNet,COCO等
2. 训练参数: dropout为0.5,补零padding为1,初始学习率为0.04
3. 训练策略:RMSprop,模型小不做数据增强,不做或者较小的正则化
4.Result:模型比AlexNet小510倍,精度略有提升
总结 MobileNet应用广泛,包括Large Scale Geolocalizaton, Face Attributes,Object Detection,Face Embeddings

2.1.1 论文导读

deepwise分离卷积层

将传统的卷积层N个DxDxM分解为两个卷积:M个DxDx1,N个1x1xM,减少了参数量,并减少了八到九倍的计算量!
这里写图片描述

网络架构

每个deepwise分离卷积层间都有relu和BN计算
这里写图片描述
这里写图片描述
这里写图片描述

Width Multiplier : 更瘦的网络

定义一个超参数卷积宽度乘法因子a,参数取值为0.25,0.5,0.75,1,减少卷积的个数,这样做能减少a2的参数量与计算量:
这里写图片描述

Resolution Multiplier : 通过缩小图片减少特征

定义一个超参数分辨率乘法因子p,p取值为0~1,具体输入图像分辨率为128,160,192,224。
这里写图片描述

Fine Grained Recognition:

**训练技巧:
1. 用噪声较大的大数据库进行pretrain,然后用精确的小数据库进行finetune!
2. 利用较大规模精确度较高的模型网络的结果数据进行训练,这样的好处在于数据量可以无限大,且训练时不太需要考虑正则化!

2.2 MobileNet V2

标题 MobileNetV2: Inverted Residuals and Linear Bottlenecks
作者团队,发表时间 Google CVPR-2018
文章解决的问题 如何设计网络使得模型变小达到mobile设备的实时性
解决的方案 通过引入Inverted residuals block,将block改成梭形;在channel少的block最后层不做relu以提高准确率
实验与结果 1.数据库: ImageNet,COCO等
2. 训练参数: standard weight decay:0.00004 learning rate:0.045, learning rate decay rate of 0.98 per epoch
3. 训练策略:RMSprop, decay and momentum:0.9,standard weight decay:0.00004
4.Result: MobileNetV2可提高ImageNet中的分类精度,大幅提 高目标检测效率(SSD:20倍,YOLOV2:10倍)
总结

2.2.1 论文导读

Linear Bottlenecks

作者认为,对于神经网络某层的输入,我们可以将其中感兴趣的信息(manifold of interest)映射到低维子空间,并得出:
1. 经过relu后要是感兴趣的信息都非零,就意味着其仅仅是经过了一个线性变换;
2. 要想保持感兴趣的输入完整信息,就必须要让输入感兴趣的信息位于输入空间的低维子空间
作者发现,使用relu最完美的情况在输入的感兴趣信息全部包含在其激活区域,因此可以完整保留下来。但现实可能并非那么理想,因此在通道较少的情形使用relu可能有害,通道较多的情形因为存在信息的重复,所以适宜使用relu。

Inverted residuals

作者认为低维度的卷积层足以表达感兴趣区域,而高维度的卷积层表达其中的细节,因此提出将传统的残差块交换一下卷积次序,设计成中间粗两边细的梭形,利用这种设计将感兴趣信息和细节区分开来(allows to separate the network expressiviness (encoded by expansion layers) from its capacity (encoded by bottleneck inputs)),从而达到提高准确率,降低参数数目的目的,如下图:
这里写图片描述

网络结构

Bottleneck residual block结构:
这里写图片描述
relu6指的是将结果限定在0-6区间上,这样float16可以更好的表示参数!
整体网络结构:
这里写图片描述

3. ShuffleNet

标题 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
作者团队,发表时间 Face++ CVPR-2017
文章解决的问题 1x1卷积运算量太大
解决的方案 使用group convolution减少运算量,使用shuttle channel解决group convolution造成的边效应
实验与结果 1.数据库: ImageNet,COCO等
2. 训练参数: 学习率衰减1e-4,线性衰减,少量的尺度增强,batch size:1024,3x10^5次迭代训练
3. 训练策略:RMSprop,模型小不做数据增强,不做或者较小的正则化
4.Result:模型比AlexNet小510倍,精度略有提升
总结

3.1 论文导读

近期工作方向

  • 有效的模型设计
  • Group Convolution:group convolution(AlexNet) and depthwise separable convolution(MobileNet)
  • 模型加速:剪枝,量化,因式分解,利用FFT加速卷积运输
  • Channel Shuffle Operation:在group convolution后将通道打乱

方法

1. 在Group Convolutions后将交换通道顺序

作者发现使用 1x1卷积层(pointwise convolutions)运算量特别大,但是使用Group Convolution减少其运算量时group之间会出现边效应,所以引入channel shuttle的概念,将通道顺序重新排列,如下图所示:
这里写图片描述

2. ShuffleNet Unit

ShuffleNet Unit为下图的b,c子图,主要变化是将普通的1x1的卷积层进行分组计算,随后将重新排列通道顺序,stride=2的网络也略有不同!这样设计网络的好处可以大大减少运算量,但参数数量并没有发生变化,所以网络全部采用ShuffleNet Unit效果不一定理想,只在关键层使用!
这里写图片描述

3. Network Architecture

这里写图片描述

知识拓展:
CNN中千奇百怪的卷积方式大汇总

4. Xception

标题 Xception: Deep Learning with Depthwise Separable Convolutions
作者团队,发表时间 Google CVPR-2017
文章解决的问题 优化Inception模型
解决的方案 结合depthwise separable convolution,将1x1卷积结果的通道分块给3x3卷积
实验与结果 1.数据库: ImageNet,JFT等
2. 训练参数: 学习率衰减1e-5,
3. 训练策略:RMSprop
4.Result:模型大小比Inception V3相同,精度有明显提升
总结 Xception module可以进一步优化

4.1 论文导读

Inception的概念

Inception module的思想是将空间相关性和跨通道连接进行解耦,通过先进行1x1的卷积操作,然后进行3x3或者5x5的卷积操作,达到减少运算量和参数数量的目的!
这里写图片描述
进一步将Inception进行极致优化,变成先一次1x1的卷积,对结果进行分块,输入给3x3的卷积层!
这里写图片描述

depthwise separable convolution与Inception module的区别:

  • Inception module先进行1x1的卷积操作,depthwise separable convolution最后进行
  • Inception module每一层都会有激活函数,这是至关重要的,猜想应该是能提升模型的非线性表达能力
  • depthwise separable convolution会将宽高进行解耦计算,举个栗子,将5x5的计算分解为5x1和1x5

The Xception architecture

这里写图片描述

Xception是基于这样的假设:在特征图中,空间相关性和通道相关性可以完全解耦!
Xception的结构实质上是depthwise separable convolution layers和残差连接的线性组合。depthwise separable convolution layers即figure4所示。

实验

训练参数:

On ImageNet:
– Optimizer: SGD
– Momentum: 0.9
– Initial learning rate: 0.045
– Learning rate decay: decay of rate 0.94 every 2 epochs
On JFT:
– Optimizer: RMSprop [22]
– Momentum: 0.9
– Initial learning rate: 0.001
– Learning rate decay: decay of rate 0.9 every 3,000,000 samples

dropout : 0.5
weight decay:L2 regularization) rate of 1e −5

结果:

这里写图片描述

实验证明:
1. 在逻辑回归层前加入全连接层能提高分类准确率
2. 残差连接的引如能加快网络收敛,提高分类准确率
3. 不使用激活函数反而能加快网络收敛,提高分类准确率,这与Szegedy大神的结论相悖,作者认为Xception网络中3x3
的卷积输入通道变少(因分块,figure4所示),使用激活函数反而会丢失信息!

2019-08-30 15:28:00 weixin_30814329 阅读数 3
  • 深度学习与强化学习技术沙龙 暨《深度学习模型及应用...

    主题分享:深度学习在大规模在线广告系统中的应用 张若非 美国微软人工智能与研究院高级研究总监,全球合伙人,《深度学习模型及应用详解》作者 主题分享:分布式机器学习算法的系统优化 崔斌 北京大学计算机系副主任,长江学者特聘教授,网络与信息系统研究所所长 圆桌论坛对话嘉宾: 张若非  美国微软人工智能与研究院高级研究总监 崔斌 北京大学计算机系副主任,长江学者特聘教授 段云峰 中国移动大数据系统总设计师 曾勇华 微软亚太研发集团科学家 谢梁  滴滴首席数据科学家

    244 人正在学习 去看看 CSDN讲师

论文:https://arxiv.org/pdf/1712.01887.pdf

译文:深度梯度压缩:减小分布式训练的通信带宽

摘要

大规模分布式训练需要通信带宽用于梯度交换,这在节点较多时,限制了训练的可扩展性,而且网络带宽比较贵。如果是在移动设备上进行分布式训练(如联合学习),情况会变得更加糟糕,高延迟,低吞吐还断断续续的网络连接。本文,我们发现分布式SGD中99.9%的梯度交换都是多余的,然后提出深度梯度压缩(DGC),极大地减少了通信带宽。为了保留压缩过程中的精度,DGC采用了四种方法:

1、动量纠正(momentum correction)

2、本地梯度裁剪(local gradient clipping)

3、动量因子掩蔽(momentum factor masking)

4、热身训练(warm-up training)

我们已经把DGC应用到图像分类、语音识别和语言模型,并且基于各种数据集,包括Cifar10、ImageNet、Penn Treebank和Librispeech Corpus。在这些场景,DGC的梯度压缩比例有270倍到600倍,而且不会损失准确率。ResNet50的梯度大小从97MB减少到0.35MB,以及DeepSpeech从488MB减少到0.74MB。DGC可以在1Gbps以太网和移动设备中进行分布式训练。 

介绍

大规模分布式训练可以训练更深更大的模型。SGD被广泛应用于分布式训练。通过增加训练节点,以及利用数据并行,相同大小的训练数据,forward-backward的总体计算时间会大幅减少。但是,梯度交换比较耗时,特别是RNN的计算/通信比较小。因此,当分布式训练规模变大时,网络带宽会变成主要瓶颈。在移动设备上,带宽问题会变得更加严重。 

深度梯度压缩

1、梯度稀疏化:

我们只发送重要梯度(稀疏更新),来减少通信所需的带宽。只有那些大于某个阈值的梯度会被发送(注:梯度跟权值不是一一对应的吗?那些没传的梯度,权值怎么更新?)。为了防止丢失信息,我们本地累加剩余的梯度,最终这些梯度大到可以发送。因此,我们是立马发送大梯度,最终发送所有的梯度,如算法1所示。

 

 

 

系统的性能以及分析

实现DGC需要筛选top k梯度。给定稀疏率99.9%,我们就需要从几百万权值中,挑选出top 0.1%。时间复杂度是O(n),其中n是梯度个数。我们采用抽样来减少top k的选择时间先抽样0.1% ~ 1%,再在样本上筛选top k梯度。 

结论

DGC能够把梯度压缩270倍到600倍,并且适用于很多CNN和RNN。为了不让DGC导致收敛慢,采用了动量纠正、本地梯度裁剪、动量因子掩蔽和热身训练。我们进一步提出分级阈值选择,来加速梯度稀疏化过程。DGC减少了分布式训练的通信带宽需求,提高了可扩展性。 

 

注:有在移动设备上做分布式训练的场景?

 

转载于:https://www.cnblogs.com/yangwenhuan/p/11413310.html

没有更多推荐了,返回首页