【深度学习】深度学习的实践应用之路 ;深度学习,遇到这些问题根本干不过简单模型;云深度学习平台架构与实践的必经之路

2017 年 7 月 25 日 产业智能官

AI科技评论按:本文由图普科技编译自《Applying Deep Learning to Real-world Problems》,AI科技评论独家首发。

近年来,人工智能的崛起可以说是得益于深度学习的成功。驱动深度神经网络突破的三个主要因素分别是:海量的训练数据、强大的计算架构和学术领域的相关进展。因此,深度学习在图像分类、面部识别等任务的表现上不仅超越了传统方法,还超越了人类水平。这一切都为那些使用深度学习解决实际问题的新业务创造了巨大的发展潜力。

在位于柏林的Merantix总部,我们致力于研究这项新业务在不同行业下的应用。(目前,我们的研究对象是汽车业、医疗保障业、金融业和广告业。)

学术理论与现实生活通常有很大不同(来源:mimiandeunice.com)

现在训练一个神经网络比以往任何时候都要简单。然而,这并不意味着你可以将教程中的代码直接应用到应用程序中。有趣的是,学术理论对这些至关重要的训练技巧几乎不予讨论,而这些技巧恰恰是产品的关键所在。

将深度学习应用于现实问题可能会比较麻烦(来源:pinsdaddy.com)

因此,我想理解和掌握这些技巧,对于那些计划在生意上应用深度学习的人来说将会大有裨益。

在本文中,我想分享三点关键的心得和经验。当我们在Merantix用深度学习应对现实问题时,这些心得给了我们很大的帮助和启发:

  • 心得I:预训练的重要性

  • 心得II:实际标签分布的注意事项

  • 心得III:理解黑箱模型

声明:

  •  本文介绍的内容不代表完整的方法,还有很多其他的方法和技巧本文没有涉及。

  • · 本文分享的大部分心得体会不仅适用于深度学习,还适用于其他机器学习算法。

  • · 所有的心得都不是针对某一行业的。

  • · 本文中的大多内容都适用于有监督式学习的问题。

这篇文章是根据我在5月10日“柏林人工智能大会”上的演讲修改而成的。

心得I:“预训练”的重要性

在机器学习学术界,对获取数据集的关注微乎其微。相反,为了将深度学习方法与其他方法作比较,并最终确定一个最优方法,标准做法是在一个标准数据集上,以相同的评估程序来评测不同方法的表现。然而在现实情境中,你的新算法性能比另一算法高出1%并不重要,重要的是建立一个强大稳健的,并且能够准确地解决目标任务的系统。对所有机器学习系统来说,这需要一些算法能够从中学习的标记训练。

对许多现实问题来说,获取标注的训练数据的成本相当昂贵。为了详细地阐述这个问题,我们来看两个案例:

1. 医学影像

如果我们想要建立一个在CT图像中检测人体淋巴结的系统,我们需要对CT图像中的淋巴结进行标记。这是一项非常耗时的工作,因为这些图像都是3D的,而且我们需要在3D图像中识别出非常小的结构。假设,一个放射科医生一小时能标记4张图像,他的时薪是100美元;这就意味着标记一张CT图像将花费我们25美元,而标记一万张CT图像,我们要花25万美元。因此,我们需要几个医生来对同一张图像进行标注,以确保接近100%的诊断准确性。这样一来,一个医学任务的数据集的成本很容易就会超过25万美元。

2. 信用评分

如果我们想建立一个能够对客户信用等级进行评估的系统,我们就需要知道存在潜在违约风险的客户,这样我们才能让一个机器学习系统提前识别出他们。不幸的是,只有当违约真正发生的时候我们才能确定违约的客户。因此,一个比较天真的策略是给每个人发放贷款(假如是每人一万美元)。但这就意味着每一个人违约我们就将损失一万美元,这无形中就使得每一个标注数据点的价格都非常昂贵。

显然我们可以通过一些方法来降低这些成本,但总体来说,获取用于解决现实问题的标记数据的成本非常高。

那么,我们究竟该如何解决这个问题呢?

 “预训练”

预训练能有效降低成本(来源:massivejoes.com)

“预训练”的基本操作是——首先,我们需要在一个相关领域的廉价大数据集上,或者是在同一领域的“非纯净训练数据”上,对一个神经网络(或另一个机器学习算法)进行训练。尽管这样做不能直接解决问题,但这能让神经网络对你需要解决的问题有初步的了解。接下来的第二步,我们要在一个更精细的、成本更高的小数据集上进一步优化神经网络的参数。下图是“预训练”的操作示意图:

 当训练数据集很难获取时,首先在相对廉价的大型数据集上对神经网络进行“预训练”;然后,在一个成本相对高的、相对精细的数据集上调整神经网络。在对神经网络进行微调时,类别的数目可能会发生改变。

人们通常会在有着1000个类别的ImageNet数据集上对神经网络进行“预训练”,然后根据他们实际需要解决的问题对神经网络进行微调,而微调过程中的类别数与“预训练”中的类别数很可能是不一样的。这就意味着神经网络的最后一层需要重新初始化。通常情况下,神经网络中最后一层的学习效率要相对高一些,因为最后一层需要从头开始学习,而前面的层的学习速率会低一些。对于像ImageNet这样的数据集,这样的特征学习是通用的,因此它能直接用于解决其他的计算机视觉问题。

我们应该如何获取“预训练”的数据?

 “预训练”数据的来源

1. 预训练模型:网络上有很多经过训练的模型,其中最应该指出的就是Model Zoos。Model Zoos包含了一系列不同的训练数据,这些数据经过了专家学者、公司企业和深度学习爱好者的训练。

2. 公共数据集:网上有很多数据集,所以不要在收集数据集上浪费时间,花时间看看网上有没有能够解决你的问题的数据集。

3. 数据抓取:如果网上既没有一个公共的“预训练”模型,也没有你需要的数据集,那么你可以通过一个小门路来生成一个数据集。你可以建立一个所谓的“抓取器”,让它自动从特定的网站上收集数据集。这样你就能建立一个新的数据集了。

预训练的数据来源

弱标记的数据

因为我们会在一个更精确的数据集上对神经网络进行调整,所以在调整之前我们是可以在所谓的“弱标记”数据集上对其进行“预训练”的。之所以称之为“弱标记”数据集,是因为其中的数据标记并非是完全正确的(可能有90%的数据是正确的,10%是错误的)。“弱标记”数据的好处在于它能够轻松获取,不需要人工参与标记。这与那些人工参与标记的数据集相比成本要低很多。

举个例子来说,在攻读博士学位期间,我从维基百科和IMDb上获取了一个数据集,这个数据集中包含了50万张人脸图像。将照片中每个人的出生日期和照片底部显示的拍摄日期结合起来,这样我们就能大致判断出每张图像的年龄。需要注意的是,在某些情况下,照片底部显示的拍摄日期可能是错的,或者一张照片中可能有多个人而面部检测器在识别人脸时出现了差错,因此,我们不能完全保证图像年龄的判断都是正确的。尽管如此,我们还是应该在这个“弱标记”数据集上进行“预训练”,以提高神经网络的性能,而仅在准确标记了的数据集上训练是完全不够的。

在前面提到的医学影像问题上,我们同样可以用这样的逻辑来理解。为了使标记准确度尽可能接近100%,我们需要好几个医生单独对同一张CT图像进行标记。这就相当于我们用于进一步调整神经网络的数据库。另外,我们可以收集一个仅由一个人完成标记的“弱标记”大数据集,这样我们不但能够减低标记的成本,还能确保神经网络经过了不同的图像数据训练过。

总之,提高神经网络性能不一定要昂贵的人工标记或人工注释,通过免费的,或是低成本的标记数据集,同样可以提高性能。

心得II: 实际标签分布的注意事项

现实中的标签分布(来源:r4risk.com.au)

既然我们已经获得了“预训练”和调整的数据,接下来我们就能开始神经网络的正式训练了。在正式训练中,出现了另一个学术界与现实世界之间的巨大分歧。

在学术界,数据集大多都是平衡的。也就是说,在有监督的分类问题上,每一类别通常有数目相同的样本。下图中有两个学术界数据集的例子:MNIST是一个非常有名的手写数字数据集,这个数据集中包含了与数字的数量大致相等的样本。Food 101是学术界数据集的另一个典型,其中的每一类食物都有整整1000张图像。

MNIST和Food101都是“平衡数据集”

非平衡标签分布

我想再一次用两个现实中的案例来说明这个问题:

1. 医学影像:医学影像的训练数据是很不平衡的。病患中的大多数其实都是健康的,只有一小部分人患某种疾病。

2. 信用评分:实际上,大多数客户都归还了贷款,违约的人只占大约1-2%。

不平衡的现实生活的标签分布

正如上面所说的,在这两个案例中,标签分布是非常不平衡的。这在现实生活中其实是很常见的。实际上,每一类都有相同多的样本量是很少见的。

不平衡的错误分类成本

不幸的是,这种情况变得越来越糟糕。在学术界,数据集中每一类别的分类错误的成本通常是一样的。但是在现实生活中就大不相同了。

1. 医学影像:将一个健康的人误诊为病人还不是最糟糕的,只要医生在反复检查后发现这个人实际上是健康的就没有问题。但是讲一个患病的人错误地判断为健康的人,让病人没能得到及时的治疗,这就非常危险了。

2. 信用评分:拒绝向那些会归还贷款的人提供贷款还不算最糟糕的,这最多让你损失一些贷款利率。但是给违约的人提供贷款的代价就很高了,你需要承担借出的所有贷款。

下面是这两个案例的示意图:

现实应用中不平衡的错误分类成本

如何解决这一问题?

既然类别和错误分类的成本都是不平衡的,那么我们就必须要想个方法来应对这个不平衡的问题。针对这一问题的文献十分有限,我们找到了一些与之相关的博客文章和Stack Overflow问题。

值得注意的是,不平衡的类别和不平衡的错误分类成本都是高度相关的,因为这意味着对于部分样本,我们几乎没有训练数据;而且出现错误的成本相当高。

我将那些有助于模型分类的方法大致分成了四种:

1. 更多训练数据

最突出的方法就是从少量的类别中收集尽量多的数据。以医学影像为例,这就意味着我们要尽量收集患有某种疾病的病人的图像。如果收集这些图像的成本过高,那么就用前面所讨论的其他方法来获取训练数据。注意,在调整训练标签分布的时候你需要非常小心,因为这对于模型的预测判断有很大的影响:如果你在训练数据集中增加了患病病人的数量,那么模型就更倾向于将对象预测为患病病人。

收集更多稀缺类别的数据。当训练过程中的标签分布与预测结果不匹配时你就要非常注意了。

2.改变标记

如果你不能收集到更多稀缺类别的数据,那就考虑换一种分类方法。在实际的应用中,你可能不需要区分A疾病与B疾病,只要能识别出这两者中的其一就够了。在这种情况下,你可以将这两个类别合并。这样一来,训练期间的训练流程将会被简化;而且在模型推断阶段,即使A疾病和B疾病混淆了也没有太大关系。

在训练期间,或在模型评估阶段将两个或多个类别合并能使问题简单化

3. 采样

如果你既不能得到更多数据,也无法改变标记,那就意味着你需要研究原始数据了。那么究竟该如何确保我们的模型善于处理稀缺类别呢?你只需要在训练过程中改变算法处理案例的方式。通常情况下,样本都是经过统一采样得来的,这也就意味着算法在训练期间处理每个案例的方式都是一样的。

我们可以采取一些不同的、有助于提高稀缺类别标记的性能的采样方法。

  • 忽略样本:忽略高频类别的部分样本可以说是最简单的方法了。我们可以在每一类样本数目大致相同的情况下采用这种方法。

  • 过采样/欠采样:“过采样”指的是将稀缺类别的样本以更高的频率展示给算法;而“欠采样”的意思则相反。从算法的角度来看,这两种方法的结果是一样的。这两种方法相对于前面的方法好处在于没有样本是被忽略的。

  • 消极样本挖掘:第三组采样方法稍微复杂一些,但却是最有效的方法。跟之前的“过采样”和“欠采样”不同,我们这一步的采样是有意识的。尽管我们有很多高频类别的样本,但是我们最关心的还是其中最复杂、最困难的样本,比如那些被误分类概率最高的样本。因此,我们可以在训练过程中有规律地对模型进行评估,同时调查样本,以识别出其中很可能被误分类的部分。这样一来,我们能够轻易地选择出算法最常学习的样本了。

4. 对损失进行加权

采用上述的三个方法以后,我们在改善类别分布方面做的就已经够多了。因此,我们现在可以转移注意力至算法本身。幸运的是,还有一些方法是能够用于让算法更多地关注稀缺类别的。其中一个直接的方法就是增加稀缺类别样本的损失权重。

稀缺类别的损失权重增加了

心得III:理解黑箱模型

一个黑箱(来源:辛普森一家)

正如我们在前面提到的“预训练”,学术界最重要的目标就是不论采用的模型是怎样的,都要达到或超越当今最先进的性能。而在考虑现实生活应用时,仅建立一个性能良好的模型是不够的。

我们还需要:

  • 理解模型为什么及如何出现预估错误的,

  • 给出直观的事实说明为什么我们的模型性能要优于之前的任何方法,

  • 确保模型不会被欺骗。

在深度神经网络兴起之前,大部分模型都是相对容易理解的。看以下几点:

  • 线性模型:线性分类器或回归模型提供了每一特征和预测结果之间的直接关系。这就使我们能够直接、轻易地理解模型预估决策机制。

  • 决策树:“决策树”的优势在于我们可以沿着树来理解决策是如何形成的。总体上来说,最顶端的枝节涵盖了最重要的特征。谈到任意决策森林时,情况就变得稍微复杂一些了,但树的结构还是能让我们很好地理解其中的原理的。

不幸的是,理解深度神经网络的决策机制要困难得多。因为深度神经网络是高度非线性的,而且其中的变量数量基本都是上亿的。所以要解释其决策的方式是很困难的。

传统机器学习方法VS深度学习

如今,如何解释决策程序已经成为了现实生活应用中的一个巨大挑战,因为深度神经网络正迅速融入我们生活的各个领域——汽车自动驾驶、医疗诊断、金融决策等等。大部分的实际应用对我们的生活、财产和一些敏感信息都会产生巨大的影响。因此,算法作出的错误决策很可能会谋财害命。

“特斯拉汽车事故”(左图)和关于人工智能转变为种族主义者的报道文章(右图)

不幸的是,这些失误的发生不全是偶然的,攻击者的有意而为也会引发这些失误。为了强调这个话题的相关性,研究专家已经发现,只要在一张普通图像上增加简单任意的噪声,就能改变深度神经网络的分类结果,而人眼几乎察觉不出图像的变化。同样,在与纯人工图像相适应的同时,仍能得到一个非常自信的预测结果。

在一张图像或人工图像上加上少量的任意噪声(左图)能轻易地骗过神经网络

在现实生活中,你通常会非常想弄清楚为什么你的系统不能发挥它本身的效能。

在Merantix,我们对这些问题非常重视,我们相信这些问题在未来将会变得更加重要,因为深度学习系统在现实生活中将会有更多的实际应用。

最近,我们开发了一个名为Picasso(Medium Post,Github)的深度学习可视化工具箱。由于要研究各种各样的神经网络架构,所以我们开发了Picasso来帮助我们在不同的领域查看标准的模型。比如,在汽车驾驶中理解道路分叉或道路对象识别失误;广告业中理解为什么某种创意能获得更高的点击率;在医学影像领域分析CT图像或X光图中出现的不明对象。下图是我们的开源Picasso视觉化检视器的演示图:

 

总结

在本文中,我分享了在Merantix用深度学习解决现实问题时总结出的三个非常重要的心得体会,希望这些心得对那些计划在生意中使用深度学习的人有所帮助。正如我在文章开头说的,在将深度学习应用于实际生活中时,我们有许多非常有用的技巧,也有很多需要注意的事项。

原文作者Rasmus Rothe是欧洲最重要的深度学习专家之一,也是Merantix的联合创始人之一。他曾在苏黎世大学、牛津大学和普林斯顿大学学习计算机科学,并专攻深度学习。他曾开发了howhot.io,并将其作为他博士研究的一部分;创办了欧洲最大的Hackathon HackZurich,并为谷歌和BCG工作。



被捧上天的深度学习,遇到这些问题根本干不过简单模型


AI科技大本营                                                        

                                                                         

今天我们来唱唱反调,推荐一篇Hacker News和Reddit的双料热文《何时该不用深度学习》。


作者 | Pablo Cordero

翻译 | reason_W



前段时间,某教授认定“没有大数据就不要用深度学习”,这让一位正在辛苦做研究的博士后立时炸了,“只要你能搞懂模型,小数据同样可以用深度学习”。


对此,另一位博士后实在看不下去了,他认为这些大牛不能瞎忽悠:你们这样争吵,让初学者到底去听谁的?你们还让不让初学者来学深度学习了?


这个博士后就是加州大学圣克鲁兹分校系统生物组的Pablo Cordero,他正在用机器学习来研究单细胞测量的问题。他认为,当此深度学习越来越多地被用到生物信息学研究之际,大家一定要实事求是向前看,不能让错误的风向吹倒深度学习的大旗。


毕竟,深度学习不是万能的,更不是万达的。除了“没有免费的午餐”定理,深度学习模型的差别还相当微妙,使用的过程需要非常细心,有时还需要做非常昂贵的超参数搜索、调整与测试。


因而,从实用的角度看,深度学习在许多情况下并不好用,反而是简单的模型效果更好。在这里,清醒地认识深度学习所不适用的场景,便成为避免争论的关键。Pablo Corder对这类场景的分析如下:


低预算或低投入问题


深度神经网络是非常灵活的模型,有着大量的架构和节点类型、优化器与正则化策略。


根据不同的应用场景:


  • 你的模型可能会有卷积层(多大?使用什么池化操作?)或循环结构(有或没有门控?);

  • 它可能真的很深(hourglass、siamese或其他架构?)也可能只有几个隐藏的层(有多少单位?);

  • 它可能使用整流线性单元或其他激活函数;

  • 它可能会有或不会有dropout (在什么层次中?用什么分数?),权重很有可能被正则化(L1范数,L2范数,还是其他某种方式?)。


这只是一部分列表,还需要尝试很多其他类型的节点,连接,甚至损失函数。


这些都是在训练时需要去调整的超参数,需要去探索的架构,这使得即便只训练一个大型网络都会相当耗时。


最近Google在吹嘘它的AutoML管道可以自动找出最好的架构,虽说其结果让人印象极深,但该成果是超过800个GPU全天候运行数周才得到的,这种资源可不是每一个人都触手可及的。


这里的问题不在于深度学习,而在于训练深度网络的计算和调试,它们的开销太大了。对于许多日常问题的预测,这样的开销没有任何意义,因为即便是调整小型网络,它的性价比也实在太低。


所以,就算你足够的预算和投入,也没有理由不优先尝试替代方法。你很有可能会惊喜地发现,线性SVM才是真正的需求。


向公众解释模型参数/特征的重要性


深度神经网络还是一个臭名昭著的黑箱,尽管预测能力很强,但可解释性不足。


虽说最近有不少工具在某些领域很见效果,如显著图与激活差异性,但它们还不能完全迁移到所有的应用场景中。这主要是在于,当你想确保神经网络不是通过记诵数据集或是专注于特定的虚假特征来欺骗你时,此类工具就能做出效果;但如何把每个特征的重要性解释为深层网络的整体决策,仍旧很难实现


在这方面,没有什么曾真正的打败过线性模型,因为线性模型的学习系数与响应有直接的关系。当你需要把这些解释传达给需要据此来做决定的普通人时,这尤其重要。


例如,医生需要结合多种不同的数据来做出诊断。变量和结果之间的关系越简单和越直接,医生利用的效果就越好,而不是低估/高估实际结果。


此外,有些情况下,模型的准确性(通常这恰恰是深度学习所擅长的)并不像解释性那样重要。


例如,策略制定者可能想知道一些人口统计变量(比如对死亡率)的影响,并且可能对这种关系的直接近似比对预测的准确性更有兴趣。


在这两种情况下,与更简单,更易理解的方法相比,深度学习就会处于不利地位。


建立因果机制


模型解释的极端情况是当我们试图建立一个物理模型,即一个实际捕获数据背后的现象的模型。 好的例子包括试图猜测两个分子(例如药物,蛋白质,核酸等)是否在特定的细胞环境中相互作用,或者假设特定的营销策略如何对销售产生实际的影响。


在这个领域,专家们的意见是,没有什么可以超越老式的贝叶斯方法,这是我们最好的(即使不完美的)表示和推断因果关系的方式。


 Vicarious最近做了一个很好的研究,说明了为什么该方法在电子游戏任务的表现上比深度学习效果更好- https://www.vicarious.com/img/icml2017-schemas.pdf


从“非结构化”特征中学习


这一点可能还在争论。我发现深度学习擅长的一个领域是为特定任务找到有用的数据表示


一个很好的例子是刚刚说的词嵌入。自然语言具有丰富而复杂的结构,可以用“上下文感知”网络近似:每个单词都可以在编码了使用频率较高的上下文的向量中进行表示。在大型语料库中学习的NLP任务中使用词嵌入有时可以在另一个语料库的特定任务中提升效果。


然而,如果所讨论的语料库是完全非结构化的,则可能没有任何用处。例如,假设您正在通过查看关键字的非结构化列表来对对象进行分类。由于关键字没有在任何特定的结构中使用(如在一个句子中),所以词嵌入不太可能对此有所帮助。在这种情况下,数据就是一个词袋,这种表示可能就足以满足任务。


与此相反的是,如果您使用预训练的话,并且能更好地捕获关键字相似度,那么词嵌入就并不是那么昂贵。不过,我还是宁愿从一个单词的表示开始,看看能否得到很好的预测。毕竟,这个词袋的每个维度都比对应的词嵌入槽更容易解读。


未来还很深


深度学习领域炙手可热,资金充足,发展迅猛。当你读到在会议上发表的论文的时候,它已经经过两三次迭代,并且已经不值得推荐了。


这给我提出的以上几点提了一个很大的醒:在不久的将来,深度学习可能对这些情景来说是非常有用的


毕竟,用于解释图像和离散序列的深度学习模型的工具正变的越来越好。

Edward与tensorflow结合进行概率规划,可以使用深度和贝叶斯模型。 摘自Tran et al. ICLR 2017


像Edward(Google提出的一种深度概率编程语言)这样的新软件,已经在综合使用贝叶斯建模和深度网络框架,以通过概率编程和自动变分推理来量化神经网络参数和简单贝叶斯推断的不确定性。


从长远来看,可能会出现一个简化的建模词汇表,以揭示深度网络的显著属性,从而缩小你所需要尝试的参数空间。 


所以,请继续刷arXiv吧,本文所谈的内容,可能一两个月后就完全没用了。


原文地址

http://hyperparameter.space/blog/when-not-to-use-deep-learning/



云深度学习平台架构与实践的必经之路

第四范式                    

                                                                         

7月15日,被《福布斯》杂志誉为“大数据运动的里程碑”的全球顶级大数据会议StrataData Conference在京召开。第四范式先知平台架构师陈迪豪受邀出席大会,并分享了云深度学习平台的架构与实践经验。

 

作为第四范式先知平台架构师,陈迪豪活跃于Openstack、Kubernetes、TensorFlow等开源社区,实现了Cloud Machine Learning 云深度学习平台,对如何进行云深度学习平台架构有着深厚积累。本次演讲中,他介绍了什么是云深度学习?在经过实践后,应该如何重新定义云深度学习?以及第四范式在这方面的应用和实践。以下文章根据现场演讲实录整理。





定义云深度学习平台





什么是云深度学习?随着机器学习的发展,单机运行的机器学习任务存在缺少资源隔离、无法动态伸缩等问题,因此要用到基于云计算的基础架构服务。云机器学习平台并不是一个全新的概念,Google、微软、亚马逊等都有相应的服务,这里列举几个比较典型的例子。

 

第一个是GoogleCloud Machine Learning Engine,它底层托管在GoogleCloud上,上层封装了Training、Prediction、Model Service等机器学习应用的抽象,再上层支持了Google官方的TensorFlow开源框架。亚马逊也推出了Amzonmachine learning平台,它基于AWS的Iaas架构,在Iaas上提供两种不同的服务,分别是可以运行MXNet等框架的EC2虚拟机服务,以及各种图象、语音、自然语言处理的SaaSAPI。此外,微软提供了Azure Machine Learning Studio服务,底层也是基于自己可伸缩、可拓展的Microsoft Azure Cloud服务,上层提供了拖拽式的更易用的Studio工具,再上面支持微软官方的CNTK等框架,除此之外微软还有各种感知服务、图象处理等SaaSAPI,这些服务都是跑在Scalable的云基础平台上面。



以上这些都是业界比较成熟的云深度学习平台,而在真实的企业环境中,我们为什么还需要实现CloudMachine Learning服务呢?首先国外的基础设施并不一定是国内企业可以直接使用的,而如果只是本地安装了TensorFlow,那也只能在裸机上进行训练,本地默认没有资源隔离,如果同时跑两个训练任务就需要自己去解决资源冲突的问题。因为没有资源隔离,所以也做不了资源共享,即使你有多节点的计算集群资源,也需要人工的约定才能保证任务不会冲突,无法充分利用资源共享带来的便利。此外,开源的机器学习框架没有集群级别的编排功能,例如你想用分布式TensorFlow时,需要手动在多台服务器上启动进程,没有自动的Failover和Scalling。因此,很多企业已经有机器学习的业务,但因为缺少CloudMachine Learning平台,仍会有部署、管理、集群调度等问题。

 


那么如何实现Cloud Machine Learning平台呢?我们对云深度学习服务做了一个分层,第一层是平台层,类似于Googlecloud、Azure、AWS这样的IaaS层,企业内部也可以使用一些开源的方案,如容器编排工具Kubernetes或者虚拟机管理工具OpenStack。有了这层之后,我们还需要支持机器学习相关的功能,例如Training、Prediction、模型上线、模型迭代更新等,我们在MachineLearning Layer层对这些功能进行抽象,实现了对应的API接口。最上面是模型应用层,就可以基于一些开源的机器学习类库,如TensorFlow、MXNet等。



整个CloudMachine learning运行在可伸缩的云服务上,包行了模型开发、模型训练,以及模型服务等功能,形成一个完整的机器学习工作流。但这并不是一个闭环,我们在实践中发现,线上的机器学习模型是有时效性的,例如新闻推荐模型就需要及时更新热点新闻的样本特征,这时就需要把闭环打通,把线上的预测结果加入到线下的训练任务里,然后通过在线学习或者模型升级,实现完整的机器学习闭环,这些都是单机版的机器学习平台所不能实现的。



打造云深度学习平台主要包含以下几个组件:首先是客户端访问的APIService,作为服务提供方,我们需要提供标准的RESTful API服务,后端可以对接一个Kubernetes集群、OpenStack集群、甚至是自研的资源管理系统。客户端请求到API服务后,平台需要解析机器学习任务的参数,通过Kubernetes或者OpenStack来创建任务,调度到后端真正执行运算的集群资源中。如果是训练任务,可以通过起一个训练任务的Container,里面预装了TensorFlow或MXNet运行环境,通过这几层抽象就可以将单机版的TensorFlow训练任务提交到由Kubernetes管理的计算集群中运行。在模型训练结束后,系统可以导出模型对应的文件,通过请求云深度学习平台的API服务,最终翻译成Kubernetes可以理解的资源配置请求,在集群中启动TensorFlowServing等服务。除此之外,在Google Cloud-ML最新的API里多了一个Prediction功能,预测时既可以启动在线Service,也可以启动离线的Prediction的任务,平台只需要创建对应的Prediction的容器来做Inference和保存预测结果即可。通过这种简单的封装,就可以实现类似Google Cloud-ML的基础架构了。

 


架构上进行了分层抽象,实现上也只需要三步。第一步是创建一个Docker镜像,下面的Dockerfile例子是从TensorFlow项目中截取出来的,官方已经提供了一个可以运行的Docker镜像,通过加入定制的启动脚本就可以实现开发环境、模型训练以及模型服务等功能。第二步是实现一个标准的API服务,下面是一个Python实现的实例,用户发送一个启动训练任务的请求,服务端可以解析请求的参数和内容,并将任务提交到Kubernetes等后端集群中。第三步是生成Kubernetes所需的文件格式,下面的JSON文件大家也可以在GitHub中找到,实现了将分布式TensorFlow任务提交到Kubernetes集群中运行。我们通过简单的三个配置就可以完成机器学习任务从本地到云端的迁移过程,也就是实现了CloudMachine Learning服务。前面提到云深度学习平台需要支持资源隔离和资源共享,这是如何实现的呢,其实Kubernetes本身就有这个抽象,用户可以在请求时申明需要的CPU、内存、甚至是GPU资源,通过cgroups、namespace等容器技术来实现资源隔离,而kube-scheduler实现了资源调度和资源共享等功能。实现自研或者公有云的CloudMachine Learning平台,开发者可以很容易提交训练任务、创建模型服务等,但在一个真实的机器学习场景中,只解决计算资源的隔离和调度是远远不够的,我们还需要重新思考如何集成数据处理、特征工程等问题。






重新定义云深度学习平台




TensorFlow是一个可用于深度学习的数值计算库,基于TensorFlow可以实现MLP、CNN、RNN等机器学习模型,但有了它是不是就不需要Spark呢?他们的关系是什么?在生产环境中,我们发现TensorFlow并没有完全取代已有的大数据处理工具,我们需要用Spark做数据分析和特征工程,还需要数据仓库等服务去存储和查询结构化数据。TensorFlow是一个非常优秀的深度学习框架,但在真实场景中用户还需要一些PowerGraph处理的图关系特征作为输入,这都是单独一个框架无法解决的。对于用户的建模流程如何组织、如何做数据清洗、如何做特征抽取、如何上线训练好的模型、如何预估模型效果,这些可以使用AzureML Studio工具去完成,而且是TensorFlow所缺乏的。前面我们介绍了Cloud Machine Learning,可以实现一个类似Google的分布式、高可用、带集群编排的计算平台,但这远远不够,因为我们还需要使用大数据处理的框架,包括MapReduce、流式处理、图计算等框架。TensorFlow只是整个机器学习流程里面做模型训练其中一部分,我们可能还需要Kubernetes做CPU、GPU的管理和调度。如果我们要完成一个机器学习的业务,就需要同时掌握TensorFlow、Spark、Hadoop、Hive、Kubernetes等框架的原理和应用,而不只是提供一个GoogleCloud-ML或者AWS服务就够了,这也是我们要重新定义Cloud Machine Learning的原因。

 

前面介客观上我们需要这么多知识,但主观上我们希望有什么呢?我们更希望有一个从数据处理到模型训练再到模型上线的一个全闭环服务,而不仅仅是机器学习框架或者通用计算平台,我们希望不写代码就可以做特征抽取的工作,我们希望机器学习的工作流是很容易描述的,而不需要通过编写代码的方式来实现,我们需要一个很灵活的基础架构可以支持各种异构的计算资源,我们希望平台是可拓展的可以实现自动Failover和Scaling。除了前面提到的Google、微软、亚马逊做的云机器学习平台,我们还需要从IaaS、PaaS、SaaS这多维度上提供使用接口,满足不同层次用户的使用需求,另一方面这应该是低门槛的产品服务,让任意的领域专家都可以轻易使用。后面我们会介绍在真实场景下如何改造CloudMachine Learning平台,并且介绍第四范式对外提供的低门槛、分布式、高可用的先知机器学习平台。






第四范式的云深度学习实践经验





第四范式先知平台是一个基于Cloud的全流程机器学习产品,用户通过Web登陆到先知平台就可以使用模型调研、预估服务的功能,并且可以通过拖拽的方式来描述机器学习的工作流。它的使用步骤如下,第一步是数据清洗,用户不需要写Spark代码而只需要拖拽出一个图标,我们称之为一个算子,然后就提交数据清洗任务了。然后,通过拖拽数据拆分算子,可以将数据集拆分为训练集和测试集两部分,其中一部分留在左边用于特征抽取。一般来说,用Spark、Mapreduce等开源工具也可以做特征抽取,但对编程技能和工程能力有一定的要求,我们希望通过定义特征抽取的配置或者脚本,让用户可以不写代码也可以实现对原始数据集的特征工程。然后,连接我们自主研发的GDBT、LR等模型训练算子,当然也可以基于开源的TensorFlow或者MXNet等框架实现算法。最后,经过模型训练得到模型文件后,用刚刚拆分出来的测试集进行模型预测,还可以使用通用的模型评估算子进行AUC、ROC、Logloss等指标的可视化展示。在先知平台上,用户只需要通过构建流程图的方式,就可以实现数据处理、模型训练等功能,真正解决真实场景下机器学习业务的问题。



先知平台主要解决以下几个目标场景:1. 简化数据引入,平台不要求数据必须使用分布式存储,也可以直接从RDBMS这类的SQL数据库中导入训练样本数据。2.简化数据拆分,用户不需要写Spark代码,只需要提供数据拆分后的存储路径,并且支持按比例拆分或者按规则拆分两种模式。3. 简化特征抽取,平台支持连续特征、离散特征的抽取和组合,对于连续特征支持自动化的多分桶算法,我们也会归纳常用的特征抽取方法并且封装成脚本或者配置,用户只需了解对应的配置而不需要自己编码实现具体的逻辑。平台还可以根据已有的特征配置自动进行特征组合拓展,提升模型效果。4. 简化模型训练,平台可以支持开源的机器学习算法实现和第四范式自主研发的超高维度LR算法,这个LR算法实现了Parameterserver可以解决几十亿、上百亿特征维度的高速分布式训练问题。对于学习率、正则化参数等可以做到自动调优。另外,平台还提供了线性分形分类器等扩展算法,可以无须人为干预的更加有效利用数值类特征。5. 简化模型评估,得到模型预估结果后,我们可以计算模型的ROC、Logloss、K-S等指标,不同模型计算指标的方式是类似的,用户就不需要重复编写实现代码,直接通过拖拽算子调用即可,以上都是先知平台所解决的问题。6.简化模型上线,对于常见的高维LR/GBDT模型,可以一键发布为线上服务实例,不仅简化了模型的部署和运维,而且上线实例还包括大部分的特征工程逻辑,无须手动再次开发特征处理逻辑的线上版本。


目前,先知平台已经成功应用于银行、金融和互联网等各行各业,基于“先知平台”的反欺诈模型能够帮助银行在毫秒级识别可疑交易,同时在新闻、视频、音频等内容推荐场景下,“先知平台”也成功大幅度提升关键业务指标。此外,在赋能企业利用机器学习升级运营效率的同时,更有意义的是,“先知平台”还极大地降低了机器学习的使用门槛。作为一个针对全流程机器学习业务的人工智能平台,先知封装了从数据处理、模型训练到模型上线和反馈更新的系统闭环,用户不再需要很强的编程技术和工程能力,领域专家和业务人员都可以通过推拽方式进行建模和上线,帮助企业快速实现从数据收集到业务价值提升的终极目标。



随着专利算法的不断更新,更加实时高效的极致工程优化,未来先知平台将进一步降低人工智能工业应用的门槛,帮助越来越多的企业享受人工智能服务。目前,先知平台试用版已经正式对外开放,欢迎扫描二维码注册使用。

产业智能官


子曰:“君子和而不同,小人同而不和。”  《论语·子路》


 云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。


如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。


在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。


云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!


人工智能通过三个方式激发经济增长:

  1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

  2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;

  3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。


新一代信息技术(云计算、大数据、物联网、区块链和人工智能)的商业化落地进度远不及技术其本身的革新来得迅猛,究其原因,技术供应商(乙方)不明确自己的技术可服务于谁,传统企业机构(甲方)不懂如何有效利用新一代信息技术创新商业模式和提升效率。


“产业智能官”,通过采编对甲、乙方参考价值巨大的云计算、大数据、物联网、区块链和人工智能的论文、研究报告和商业合作项目与案例,面向企业CEO、CDO、CTO和CIO,从而服务新一代信息技术输出者和新一代信息技术消费者。


助力新一代信息技术公司寻找最有价值的潜在传统客户与商业化落地路径,帮助传统企业选择与开发适合自己的新一代信息技术产品和技术方案,消除新一代信息技术公司与传统企业之间的信息不对称,推动云计算、大数据、物联网、区块链和人工智能的商业化浪潮。


给决策制定者和商业领袖的建议:

  1. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新评估未来的知识和技能类型;

  2. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开发过程中确定更加明晰的标准和最佳实践;

  3. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临较高失业风险的人群;

  4. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

  5. 开发人工智能型企业所需新能力:员工团队需要积极掌握判断、沟通及创造性思维等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。






产业智能官  AI-CPS



新一代技术操作系统(AI-CPS OS:云计算+大数据+物联网+区块链+人工智能,在商业应用场景中构建状态感知-实时分析-自主决策-精准执行-学习提升认知计算机器智能实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链



长按上方二维码关注微信公众号 AI-CPS

更多信息回复:案例分析、研究报告、商业模式

云计算、大数据、物联网、区块链、人工智能




本文系“产业智能官(公众号ID:AI-CPS)收集整理,转载请注明出处!



版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com






登录查看更多
0

相关内容

数据集,又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。
Data set(或dataset)是一个数据的集合,通常以表格形式出现。每一列代表一个特定变量。每一行都对应于某一成员的数据集的问题。它列出的价值观为每一个变量,如身高和体重的一个物体或价值的随机数。每个数值被称为数据资料。对应于行数,该数据集的数据可能包括一个或多个成员。
【干货书】高级应用深度学习,294页pdf
专知会员服务
151+阅读 · 2020年6月20日
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
45+阅读 · 2020年5月23日
【新加坡国立大学】深度学习时代数据库:挑战与机会
专知会员服务
33+阅读 · 2020年3月6日
深度学习算法与架构回顾
专知会员服务
80+阅读 · 2019年10月20日
7个实用的深度学习技巧
机器学习算法与Python学习
16+阅读 · 2019年3月6日
实战经验分享-少量数据NLP场景下进行深度学习训练的建议
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
已删除
将门创投
5+阅读 · 2018年3月21日
最适合机器学习新手的10种算法
论智
9+阅读 · 2018年1月23日
教程帖:深度学习模型的部署
论智
8+阅读 · 2018年1月20日
【深度学习】深度学习的核心:掌握训练数据的方法
产业智能官
12+阅读 · 2018年1月14日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
17+阅读 · 2018年4月2日
VIP会员
相关资讯
7个实用的深度学习技巧
机器学习算法与Python学习
16+阅读 · 2019年3月6日
实战经验分享-少量数据NLP场景下进行深度学习训练的建议
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
已删除
将门创投
5+阅读 · 2018年3月21日
最适合机器学习新手的10种算法
论智
9+阅读 · 2018年1月23日
教程帖:深度学习模型的部署
论智
8+阅读 · 2018年1月20日
【深度学习】深度学习的核心:掌握训练数据的方法
产业智能官
12+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员