深度学习优化方法及深度学习框架简介

1、深度学习优化方法

(1)SGD随机梯度下降

梯度下降的batch版本 ΔXt=-ηgt

优点:训练数据太多时,batch方法可减少机器压力,更快收敛;训练冗余时,batch方法收敛更快。

缺点:更新方向完全依赖于当前batch,更新不稳定。

(2)Momentum动量法

引入动量ΔXt=ρΔXt-1-ηgt

一定程度上保留之前的更新方向,同时利用当前batch的梯度微调方向。

优点:一定程度上增加稳定性,学习更快;并还有一定摆脱局部最优的能力。

(3)Nesterov Momentum

传统动量法的改进

ΔX t=ρΔX t-1-ηΔf(X t+ρΔX t-1)

(4)Adagrad

对学习率进行约束

α=η/Σti=1(gi)2+ε

适合处理稀疏梯度

(5)Adadelta

对Adagrad的扩展

计算上简化,累加固定大小的项(近似估计)

(6)RMSprop

Adadelta的特例

均方根RMS|g|t=√E|g2|t+ε

ΔX t=-(η/RMS|g| t)g t
适合处理非平稳目标,对RNN的效果较好

(7)Adam

本质上是带有动量项的RMSprop

利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数较为平稳。

(8)坐标下降法

一种非梯度优化的方法,它在每步迭代中沿着一个坐标的方向进行线性搜索,通过循环使用不同的坐标方法来达到目标函数的局部极小值。

2、深度学习框架

PaddlePaddle

PaddlePaddle是百度研发的开源开放的深度学习平台,是国内最 早开源、也是当前唯一一个功能完备的深度学习平台。依托百度业务场景的长期锤炼,PaddlePaddle有最全面的官方支持的工业级应用模型,涵盖自然 语言处理、计算机视觉、推荐引擎等多个领域,并开放多个领先的预训练中文模型,以及多个在国际范围内取得竞赛冠军的算法模型。
PaddlePaddle同时支持稠密参数和稀疏参数场景的超大规模深度 学习并行训练,支持千亿规模参数、数百个几点的高效并行训练,也是最早提供如此强大的深度学习并行技术的深度学习框架。PaddlePaddle拥有强大 的多端部署能力,支持服务器端、移动端等多种异构硬件设备的高速推理,预测性能有显著优势。目前PaddlePaddle已经实现了API的稳定和向后兼 容,具有完善的中英双语使用文档,形成了易学易用、简洁高效的技术特色。
PaddlePaddle 3.0版本升级为全面的深度学习开发套件,除了核心框架,还开放了VisualDL、PARL、AutoDL、EasyDL、AI Studio等一整套的深度学习工具组件和服务平台,更好地满足不同层次的深度学习开发者的开发需求,具备了强大支持工业级应用的能力,已经被中国企业广 泛使用,也拥有了活跃的开发者社区生态。

Tensorflow

Google 开源的Tensorflow是一款使用C++语言开发的开源数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(tensor)之间的交互。Tensorflow灵活的架构可以部 署在一个或多个CPU、GPU的台式及服务器中,或者使用单一的API应用在移动设备中。Tensorflow最初是由研究人员和Google Brain 团队针对机器学习和深度神经网络进行研究而开发,开源之后几乎可以在各个领域适用。
Tensorflow是全世界使用人数最多、社区最为庞大的一个框架,因 为Google公司出品,所以维护与更新比较频繁,并且有着Python和C++的接口,教程也非常完善,同时很多论文复现的第一个版本都是基于 Tensorflow写的,所以是深度学习界框架默认的老大。

Caffe

和Tensorflow名气一样大的是深度学习框架Caffe,由加州大 学伯克利的Phd贾扬清开发,全称是Convolutional Architecture for Fast Feature Embedding,是一个清晰而高效的开源深度学习框架,由伯克利视觉中心(Berkeley Vision and Learning Center,BVLC)进行维护。
从它的名字就可以看出其对于卷积网络的支持特别好,同时也是用C++写的,提供的C++接口,也提供了matlab接口和python接口。
Caffe之所以流行,是因为之前很多ImageNet比赛里面使用的网络都是用Caffe写的,所以如果你想使用这些比赛的网络模型就只能使用Caffe,这也就导致了很多人直接转到Caffe这个框架下面。
Caffe的缺点是不够灵活,同时内存占用高,只提供了C++的接口,Caffe的升级版本Caffe2已经开源了,修复了一些问题,同时工程水平得到了进一步提高。

Theano

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

MXNet

MXNet的主要作者是李沐,最早就是几个人抱着纯粹对技术和开发的热情 做起来的,如今成了亚马逊的官方框架,有着非常好的分布式支持,而且性能特别好,占用显存低,同时其开发的语言接口不仅仅有Python和C++,还有 R,Matlab,Scala,JavaScript,等等,可以说能够满足使用任何语言的人。
但是MXNet的缺点也很明显,教程不够完善,使用的人不多导致社区不大,同时每年很少有比赛和论文是基于MXNet实现的,这就使得MXNet的推广力度和知名度不高。

Torch

Torch是一个有大量机器学习算法支持的科学计算框架,其诞生已有十年 之久,但是真正起势得益于Facebook开源了大量Torch的深度学习模块和扩展。Torch的特点在于特别灵活,但是另一个特殊之处是采用了编程语 言Lua,在深度学习大部分以Python为编程语言的大环境之下,一个以Lua为编程语言的框架有着更多的劣势,这一项小众的语言增加了学习使用 Torch这个框架的成本。

PyTorch

PyTorch的前身便是Torch,其底层和Torch框架一样,但是 使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深 度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。

猜你喜欢

转载自www.cnblogs.com/zhenpengwang/p/11266206.html
今日推荐