机器学习平台的优化器 (平台篇)

前言

机器学习的开源平台越来越多了, 绝大部分平台都是牛人读博期间的产物 (所以大家一定要珍惜读博能做开发的日子)。 先说一下, 主流平台也分工业和研究, 大体这两个服务方向, 今天主要偏向工业方向。 因为, 今天的主题是优化器, 一般来说工业方向对速度要求更高, 因此对优化器的速度要求更高。 譬如, Theano 在研究领域颇受欢迎, 但是Caffe和TensorFlow在工业领域比较受欢迎。

哪个行业的人搞了这些平台呢?

分布式系统牛人搞得平台:

Spark: 主创Matei Zaharia是搞云平台(MapReduce, BSP)的。

MXNet: 主创李沐是搞分布式平台(Parameter Server)的。 主创陈天奇也是搞可扩展学习的。

TensorFlow:主创Martín Abadi是搞分布式并行系统的专家。 当然它背后的Google Brain的项目最早是视频图像为主。

Deeplearning4j: 主创Adam Gibson是学计算机的89年出生的小伙, 天然就是基于Spark的, 最早是用在自然语言方向为主。

PaddlePaddle: 主创徐伟是推荐系统架构的专家, 虽然没有读博士, 但是一直坚持开发和论文结合(也说明NEC环境不错),走到百度杰出科学家也相当赞。另外, 对Kubernetes分布容器的支持也说明Paddle重视分布式这点。

搞语音识别牛人搞得平台:

Scikit-Learn: 原创David Cournapeau是搞语音识别的。

CNKT:原创俞栋小组是做语音识别的。

搞视频图像牛人搞得平台:

Caffe: 主创贾扬清主要是做图像视频分析为主的。 他所在的Berkeley实验室也目前基于图像视频,进入了自动驾驶领域。

Keras:虽然是Meta框架平台, 但是主创Google大帅哥François Chollet也是以做图像为主的。

搞自然语言处理牛人搞得平台:

Theano: Montentreal教授Bengio本人是做自然语言处理为主的。

Torch:主创Ronan Collobert是搞自然语言处理的, 是Bengio的学生。

如果按编程语言来划分?

Scala的Spark MLlib (Berkeley)

Java的DeepLearning4J (Skymind)

Python的Scikit-learn

Python的TensorFlow (Google)

Python的Theano(Univ. Montreal)

Python的Keras

Python的VELES (Samsung)

Lua的Torch (Facebook)

C的MXNet (DMLC)

C的Cognitive Toolkit (CNTK, Microsoft)

C的Caffe (Berkeley)

C的Caffe2 (Facebook)

C的PaddlePaddle (Baidu)

C的DSSTNE (Amazon)

平台分成3大类(要讲的, 不讲的, 不要讲的)?

要讲的平台们:

Scala的Spark MLlib (Berkeley)

罗马尼亚帅哥Matei Zaharia在Berkeley的AMPlab读博期间实践他提出基于MapReduce的扩展Resilient Distributed Datasets思想而开发的系统。

Python的Scikit-learn

来自法国的小伙David Cournapeau跑到京都大学读博士, 无聊期间没有像大多数去日本读书的欧洲小伙一样把妹子, 而是开发了一个机器学习框架,方便他搞语言识别实验。 后来获得开源社区支持发展成今天的Python机器学习的主流之一。

Python的TensorFlow (Google)

Google Brain项目的智能专家 Martin Abadi 和工程师 Ashish Agarwal等在 里面开发的学习平台。

Lua的Torch (Facebook)

Ronan Collobert原来工作在NEC实验室, 工作后在Bengio的指导下拿了博士学位, 所以在深度学习的自然语言处理方法很给力, 他有一篇引用超高的论文 『 Natural Language Processing (Almost) from Scratch 』值得拜读。 他在业务时间, 搞了个类似matlab那样简单,又能在深度学习方向发挥的平台。

Java的DeepLearning4J (Skymind):

89年的小哥Adam Gibson, 21岁从大学辍学, 2年后, 开始做DL4J, 之后1年, 创立公司Skymind。

C的MXNet (DMLC)

DMLC小组, 成立于2014年NIPS之后, 以上海交大校友的陈天奇与李沐牵头的华人学者发现大家都在做类似的事情, 就准备合作开发MXNet:李沐负责分布式,陈天奇进行接口设计,张铮老师指导的 Minerva 团队主要负责后端。

C的Cognitive Toolkit (CNTK, Microsoft)

2012年由俞栋(现在去了腾讯AI)领导的微软语音组开启的Computational Network Toolkit CNTK开发。2016年支持了Python接口后,改名叫Cognitive Toolkit CNTK, 目前承载了微软80%的深度学习需求。 目前发展到CNTK2.0, 号称速度第一(参考港浸会大学汇报)。 尤其对多GPU支持有特殊见解。

Caffe2 (Facebook):清华自动化系帅哥贾扬清在Berkeley读博期间发力了Caffe,毕业后去了Google Brain。但是,Google Brain主推的TensorFlow,有阿根廷人工智能专家Martín Abadi 和 印度架构师Ashish Agarwal的旋律下,还有Jeff Dean超级咨询, Caffe主创贾扬清发挥余地有限, 2016年离开Google,去了Facebook领导开发了Caffe2, 沿用了他在Berkeley读博期间开发的Caffe 。 而没有沿用Caffe的原因,据说是要方便扩展到手机平台而重新轻量级架构。

不讲的平台们:

Python的Theano(Univ. Montreal)

Theano的名字来源于一个女数学家,据说是毕达哥拉斯的老婆。 Theano的著作并没有留存下来,除了她在培育下一代方面的杰出思想。 她和毕达哥拉斯的确4个子女都非常成功。 最早是深度学习大神Yoshua Bengio的Montreal Insititute of Learning Algorithm MILA组对Python平台上使用矩阵数学表达式和GPU加速的一个封装。 现在发展成了学术界最流行的实验平台之一。 但是这个平台并没有太好的对模型的封装。 于是另外一个Python项目千层面 Lasagne, 收集优化了这个平台上的各种模型。 所以一般来说, Theano-Lasagne两者绑定起来更好,你可以想想一下毕达哥拉斯的老婆在做千层面,为了教育好他们4个优秀的子女,哈哈哈。 当然基于Theano的平台还有Blocks, Keras, PyMC 3, sklearn-theano, Platoon, Theano-MPI。

目前Theano的主创, Frédéric Bastien本硕从Montreal毕业后(2007),就被Bengio留在实验室开发Theano,快10年了。

而Lasagne是2014年起步的,一帮搞音乐搜索研究的年轻人开发的, 其中一个主创 Eric Battenberg被百度硅谷招聘了, 还有好几个被Google招走了。

Python的Keras

它是Google员工大帅哥François Chollet创建的一个Meta Framework, 主要的后台是Theano和CNTK,Tensoflow。Tensorflow对Keras也是尽力的支持。

C的PaddlePaddle (Baidu)

Parallel Distributed Deep Learning,并行分布式深度学习, 主创徐伟在CMU读硕士期间就喜欢搞架构, 硕士毕业去了NEC呆了8年做到高级研究员, 之后在Facebook搞推荐系统架构呆了5年。 来自天津大学的于洋是他的主力开发和维护之一。 PaddlePaddle 对多GPU和Remote direct memory access, RDMA的支持也是被经常提起的。

题外话, 虽然百度希望云计算和人工智能能够开天辟地, 但是直觉上总是不太看好。

C的Caffe (Berkeley)

Caffe2的出现,于是Caffe本身类似被淘汰了, 已经2个多月没有更新了。

不要讲的平台们!

还有部分Github的Fork关注度不到1000的平台,他们基本没有成年就死掉了:

C的DSSTNE (Amazon):6个月没有更新了,DSSTNE不仅仅名字难记, 而且对开发者不算友好的架构,社区吸引力太弱。 为了对抗Google的TensorFlow极具上升的趋势, 我们知道Amazon在2016年11月决定选择了同样是C的MXNet平台了,并且部署到AWS所谓的MXNaas。

Python的VELES (Samsung): 2年多没有更新了, 基本死掉了, 知名度也很小。

什么是优化器?

理论上的优化器

简单来说, 机器学习按照结构风险SRM最小的框架下, 给定了优化目标。

有了优化目标就要进行优化求解(更多参考 "机器学习背后的男人们")。

优化有各种优化算法, 但是还背后有一个优化定理就是天下没有免费的午餐NFL定理 (参考 "今我来思,堆栈泛化(Stacked Generalization)" )。

有了目标, 有了定理, 就差算法了, 有很多算法,一次的SGD家族等, 二次的Newton家族等等(参考"迭代优化算法之直观概述 (SVRG)")。 算法有一个重要的评价指标就是收敛快慢(参考 "收敛率概述 (Overview of Rates of Convergence)")。

另外提下下, SGD家族的算法, 可以参考爱尔兰国立大学毕业的博士sebastian ruder的综述文章"An overview of gradient descent optimization algorithms":

根据NFL定理, 要想在一个应用方向最优, 那么就要为这个这个应用方向定制修改优化算法, 找到有没有阻碍obstacles。 最好的办法就是将最优化线路可视化。 因此, 真正懂优化器优化路线可视化的,也是一门高深学问。

当然, 大部分不会根据数据去可视化优化路径, 然后去调优的。 寄希望优化器能够自适应数据, 不需要手动调参数。 这就是adaptive算法的基本思想。 再加上momentum的加速设计就是一代神奇adam算法。 自2014年出现之后, 就立马风靡。 之后虽然也有Adamax和Nadam,但是影响不大。

上个月, 又出现了一篇号称超越Adam的文章YellowFin, 上演了黄鳍金枪鱼跳大坝的故事(http://cs.stanford.edu/~zjian/project/YellowFin/), 这是来自斯坦福的InfoLab(http://infolab.stanford.edu/)。 从理论上讲述,condition number 到 generalized condition number 带来的效果的变化。 至于什么是generalized condition number,就不展开了, 有兴趣大家去细细读下下。

除了Momentum系列的SGD,譬如Adagrad, Adam, 还有分布式系列的SGD,譬如Downpour, 还有Variance Reduction系列的SGD, 譬如SAGA, SVRG等等。 其中SVRG系列, 据说实现起来的内存消耗太大, 所以实现并不广泛。 但是我想效果这么明显,未来会找到大应用的。

实践上的优化器

在实践中, 一般把学习模型和优化算法分开来,那么这个分开的优化算法, 就是优化器了。

当然模型也开始划分成物理架构和损失函数的大类。 譬如在神经网络中, 一般又分成采用什么网络结构, 这个网络结构上采用什么损失函数去计算。 这样可以可以定义好目标了。 有了目标之后,就要配置上优化器了。

要注意的事, 这里的学习模型,学习目标函数, 和优化器这三部分在不同的平台上的可见度和可配置度都不太一致的。

譬如就学习模型而言, 在scikit-learn里面整个模型需要整个人工指定, 然后绑定一起使用。 可以有部分参数。 好用但是不灵活。 在Torch里面, 可以分层次进行指定。 而在TensorFlow里面可以使用声明描述语言(Declarative)然后进行自动模型组织。

那么优化器呢? 这就是我们要考察的部分。 这些知名的平台的优化器有哪些种类, 是怎么实现的, 和基本模型有什么样的搭配?

Scikit-Learn的例子

举个Scikit-Learn的例子, 在Scikit-Learn里面, 对于SRM损失类算法的优化器叫Solver, 解算器。

常用的有:

1)牛顿法的LBFGS,

2)共轭梯度Congugate Gradient, cg,

3)和SVM优化的liblinear,

4)然后居然也加入了最新的SAG 和SAGA算法。

在最新版的, Scikit-Learn里面, 对于

但是对于神经网络,BP算法类, 除了可以使用LBGFS外, 还可以使用手动配置的SGD优化器和Adam优化器。

这样,我们大概知道Scikit-Learn这个平台里面优化器,有哪些,是怎么用的了。 也可以看出还是蛮时髦的, 但是却没有分布式算法。

小结:

我们罗列目前比较风流的平台们, 大概引述了下我们要比较的优化器们。 下期我们开始讲述其他平台的优化器是什么样的。

参考:

https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

https://scholar.google.com/citations?user=Gxz1fqwAAAAJ

https://docs.microsoft.com/en-us/cognitive-toolkit/presentations

http://lasagne.readthedocs.io/en/latest/_sources/user/development.txt

http://ofai.at/~jan.schlueter/

http://www.sohu.com/a/119789749_465975

https://www.linkedin.com/in/emailweixu/

原文发布于微信公众号 - AI2ML人工智能to机器学习(mloptimization)

原文发表时间:2017-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏媒矿工厂

AI如何用于现场直播场景

与许多产业一样,通过软件和算法辅助,电视与视频制作很可能被人工智能和机器学习所改造,而当前这些制作任务都是由人来执行。随着现场直播报道涉及的范围越来越广,而相关...

42430
来自专栏磐创AI技术团队的专栏

资源 | 机器学习高质量数据集大合辑

在机器学习中,寻找数据集也是非常重要的一步。质量高或者相关性高的数据集对模型的训练是非常有帮助的。

10240
来自专栏大数据文摘

机器学习菜鸟最常犯的5个错误,以及如何避免

17740
来自专栏新智元

Nature:科学家首次实现肉眼可见的量子纠缠

18560
来自专栏新智元

【一图读懂】你不得不知道的10个影响人类社会的算法

【新智元导读】本文的信息图表详细介绍了算法的定义、起源以及 10个重要而且基本的算法,并提出有关算法,尤其是人工智能和深度学习对人类社会、经济的影响的思考。 在...

42060
来自专栏程序员叨叨叨

1.4 本书主要内容和结构

本书旨在引导初级 GPU 学习者步入 GPU 编程的大堂,并普及一些在国内资料中较少见到的 GPU 算法,例如光照渲染中的 bank BRDF,以及体绘制中的光...

10120
来自专栏大数据文摘

资源 | 机器学习高质量数据集大合辑

在机器学习中,寻找数据集也是非常重要的一步。质量高或者相关性高的数据集对模型的训练是非常有帮助的。

15040
来自专栏机器之心

更偏好白人男性?Science新研究证明人工智能也能学会偏见

选自Science 机器之心编译 参与:吴攀、晏奇 至少从口号上来说,我们一直在追求「人人平等」,但我们也都清楚我们离这一目标还相去甚远,部分原因是因为世界并不...

37680
来自专栏CVer

从零基础到BAT算法岗SP——秋招准备攻略

今天故事的主人公是Amusi的一位朋友:二喵。二喵大佬曾分享了一篇诚意满满的秋招心得体会篇,详情请戳:从零基础到BAT算法岗SP——我的秋招之路。

35320
来自专栏PPV课数据科学社区

一条通往数据科学家的必经之路!

经常有人问我“要成为数据挖掘工程师或者数据科学家应该读什么书?”类似的问题。下面是一份建议书单,同时也是成为数据科学家的指南,当然,这不包括取得合适大学学位的要...

36960

扫码关注云+社区

领取腾讯云代金券