2016-11-16 14:59:17 oMengLiShuiXiang1234 阅读数 3553



PaddlePaddle


简单介绍


PArallel Distributed Deep Learning (并行分布式深度学习)  PaddlePaddle 是百度自主研发的性能优先、灵活易用的深度学习平台,是一个已经解决和将要解决一些实际问题的平台。已为百度内部多项产品提供深度学习算法支持,在深度学习框架方面,覆盖了搜索、图像识别、语音语义识别理解、情感分析、机器翻译、用户画像推荐等多领域的业务和技术, 如外卖的预估出餐时间、预判网盘故障时间点、精准推荐用户所需信息、海量图像识别分类、字符识别(OCR)、病毒和垃圾信息检测、机器翻译和自动驾驶等领域。


官网


http://www.paddlepaddle.org/

所用语言以及适合模型


C/C++ /cuda /  python   CNN/RNN/LSTM 

适用系统:linux osx


支持模式


支持CPU/GPU的单机和分布式模式。同时支持海量数据训练、数百台机器并行运算


优缺点


具有高质量的GPU代码;非常好的RNN设计;可以实现CPU并行运算

(1)灵活

PaddlePaddle支持大量的神经网络架构和优化算法,支持任意复杂RNNs结构,高效处理batch,无需数据填充。简单书写配置文件即可实现复杂模型,比如拥有注意力(Attention)机制、外围记忆层(External Memory)或者用于神经机器翻译模型的深度时序快进网络。

(2)高效

为了利用异构计算资源的能力,PaddlePaddle中的每一级都会进行优化,其中包括计算、内存、架构和通信。以下是几个例子:

Ø  使用SSE/AVX内联函数、BLAS数据库(例如MKL、ATLAS、cuBLAS)和定制化的CPU/GPUKernal来优化数学运算。

Ø  高度优化RNNs网络,在没有Padding的情况下,也能处理不同长度的序列。

Ø  优化的本地和分布式训练,同时支持高纬稀疏模型。

(3)可扩展

有了PaddlePaddle,使用多个CPU和GPU以及机器来加速训练可以变得很轻松。 PaddlePaddle能通过优化通信,获得高吞吐量和性能。

(4)与产品的连接

PaddlePaddle的部署也很简单。在百度,PaddlePaddle已经被用于产品和服务中,拥有大量用户。应用场景包括预估外卖的出餐时间、预判网盘故障时间点、精准推荐用户所需信息、海量图像识别分类、字符识别(OCR)、病毒和垃圾信息检测、机器翻译和自动驾驶等等。

在PaddlePaddle简单、可扩展的逻辑下,徐伟评价说:“这将使工程师们能够快速、轻松地将深度学习技术应用到他们的产品当中,我们想让更多的人使用人工智能,人工智能对于我们的未来生活是非常重要的。”

 

 

TensorFlow

简单介绍


TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从手机、单个CPU / GPU到成百上千GPU卡组成的分布式系统。TensorFlow在很多地方可以应用,如语音识别,自然语言理解,计算机视觉,广告等等。但是,基于以上论点,我们也不能过分夸大TensorFlow这种通用深度学习框架在一个工业界机器学习系统里的作用。在一个完整的工业界语音识别系统里,除了深度学习算法外,还有很多工作是专业领域相关的算法,以及海量数据收集和工程系统架构的搭建。

TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。TensorFlow可被用于语音识别或图像识别等多项机器深度学习领域,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。

相比于theano tensorflow的RNN仍有些不足

可以做测试(如果结果不是理想的输出,那么可以找github上的测试样例进行测试)

 

官网

https://www.tensorflow.org/

所用语言及适合模型


C++/CUDA/python  CNN /RNN/ LSTM

所用系统  linux、OSX


支持模式


灵活的架构可以部署在一个或多个CPU、GPU的台式以及服务器中

 

优缺点


(+)计算图抽象,如同 Theano

(+)比 Theano 更快的编译速度

(+)进行可视化的 TensorBoard

(+)数据和模型并行

(-)比其它框架慢

(-)比 Torch 更臃肿;更神奇;

(-)预训练模型不多

(-)计算图是纯 Python 的,因此更慢

(-)无商业化支持

(-)需要退出到 Python 才能加载每个新的训练 batch

(-)不能进行太大的调整

(-)在大型软件项目上,动态键入易出错

 

CAFFE

简单介绍


Caffe由加州大学伯克利的PHD贾扬清开发,全称ConvolutionalArchitecture for Fast Feature Embedding,是一个清晰而高效的开源深度学习框架,目前由伯克利视觉学中心(Berkeley Visionand Learning Center,BVLC)进行维护。


官网

http://caffe.berkeleyvision.org/

所用语言及适合模型


cmd/matlab/python  CNN  

所用系统:所有系统

支持模式


可以在CPU和GPU直接无缝切换,同时支持多GPU

 

优缺点


上手快:模型与相应优化都是以文本形式而非代码形式给出;

速度快:能够运行最棒的模型与海量的数据

模块化:方便扩展到新的任务和设置上

开放性:公开的代码和参考模型用于再现

社区好:可以通过BSD-2参与开发与讨论

 

(+)在前馈网络和图像处理上较好

(+)在微调已有网络上较好

(+)不写任何代码就可训练模型

(+)Python 接口相当有用

(-)需要为新的 GPU 层编写 C++/CUDA

(-)不擅长循环网络

(-)面对大型网络有点吃力(GoogLeNet,ResNet)

(-)不可扩展

(-)无商业化支持

 

Theano

简单介绍


2008年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python软件包,最著名的包括Blocks和Keras。Theano的核心是一个数学表达式的编译器,它知道如何获取你的结构。并使之成为一个使用numpy、高效本地库的高效代码,如BLAS和本地代码(C++)在CPU或GPU上尽可能快地运行。它是为深度学习中处理大型神经网络算法所需的计算而专门设计的,是这类库的首创之一(发展始于2007年),被认为是深度学习研究和开发的行业标准。

深度学习领域内的很多学术研究人员依赖于 Theano,这个用 Python 编写的框架可谓是深度学习框架的老祖宗。Theano 像 Numpy 一样,是一个处理多维数组的库。与其他库一起使用,Theano 很适合于数据探索和进行研究。(高校做的,偏学术)


官网

http://deeplearning.net/software/theano/

所用语言及适合模型


python CNN /RNN/ LSTM

所用系统  所有操作系统


支持模式


Cpu,gpu,多gpu并行

 

优缺点


(+)Python+Numpy

(+)计算图是很好的抽象

(+)RNN 完美适配计算图

(-)原始 Theano 在某种程度上有些低水平

(+)高层次 wrappers(Keras,Lasange)减轻了这种痛苦

(-)错误信息没有帮助

(-)大型模型有较长的编译时间

(-)比 Torch 更「臃肿」

(-)对预训练模型支持不佳

(-)在 AWS 上有很多 bug,调bug很难


Deeplearning4j


简单介绍


Deeplearning4j是“for Java”的深度学习框架,也是首个商用级别的深度学习开源库。适用于人脸/图像识别;语音搜索;语音转文字(Speech to text);垃圾信息过滤(异常侦测);电商欺诈侦测


官网

https://deeplearning4j.org/

所用语言及适合模型

基于java

所用系统

支持模式

 

 

优缺点

这是一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark集成,即插即用,方便开发者在APP中快速集成深度学习功能



总结





总的来说

1)Caffe具有出色的CNN实现功能的开发语言,在计算机视觉领域,Caffe仍然是最流行的工具包。Caffe的开发语言支持C++和Cuda,速度很快,但是由于一些历史性的遗留架构问题,它的灵活性不够强。而且对递归网络和语言建模的支持很差。Caffe支持所有主流开发系统,上手难度属于中等水平。

2)TensorFlow是一个理想的RNN API实现,它使用了向量运算的符号图方法,使得开发的速度可以很快。TensorFlow支持的比较好的系统只有各种Linux系统和OSX,不过其对语言的支持比较全面,包含了Python、C++和Cuda等,开发者文档写得没有Caffe那么全面,所以上手比较难,在性能方面,也不如Caffe及PaddlePaddle。

3)而此次百度的PaddlePaddle性能优先并兼顾灵活,通过使用GPU异构计算来提升每台机器的数据处理能力,获得了业内“相当简洁、设计干净、稳定,速度较快,显存占用较小”等好评。

而在关键的进入门槛上,相比Google TensorFlow和Facebook Torch,PaddlePaddle的上手难度低得多,且拥有非常优秀的业界特征,包括NLP和推荐等应用场景、对RNN很好的支持、高质量代码、以及分布式训练等,已经足以满足大多数AI场景的需求。且PaddlePaddle更加务实,可解决实际问题。






 

2017-12-07 09:40:49 ChenVast 阅读数 2539

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

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

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

2019-05-11 18:31:57 a609640147 阅读数 212

大型的分布式训练需要较好的通信带宽以便进行梯度的交换,这限制了多节点训练的可扩展性同时也需要昂贵的高带宽设备。这种情况在移动端进行分布式训练时会变得更加糟糕。这篇文章发现分布式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 阅读数 311

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 阅读数 0

论文: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

边缘计算用途

阅读数 19

tensorflow架构

阅读数 56363

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