:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Categorized / Tech

  • Dec 29 / 2017
  • 0
Tech

锐眼洞察 | 你不知道的前端算法之热力图的实现

作者:TalkingData 李凤禄

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

 

inMap 是一款基于 canvas 的大数据可视化库,专注于大数据方向点线面的可视化效果展示。目前支持散点、围栏、热力、网格、聚合等方式;致力于让大数据可视化变得简单易用。

GitHub 地址:https://github.com/TalkingData/inmapinmap 

热力图这个名字听起来很高大上,其实等同于我们常说的密度图。

image_(3).png

如图表示,红色区域表示分析要素的密度大,而蓝色区域表示分析要素的密度小。只要点密集,就会形成聚类区域。 看到这么炫的效果,是不是自己也很想实现一把?接下来手把手实现一个热力(带你装逼带你飞、 哈哈),郑重声明:下面代码片段均来自 inMap。

准备数据

inMap 接收的是经纬度数据,需要把它映射到 canvas 的像素坐标,这就用到了墨卡托转换,墨卡托算法很复杂,以后我们会有单独的一篇文章来讲讲他的原理。经过转换,你得到的数据应该是这样的:

WX20171229-115317

好了,我们得到转换后的像素坐标数据(x、y),就可以做下面的事情了。

创建 canvas 渐变填充

创建一个由黑到白的渐变圆

WX20171229-115345
  • createRadialGradient() 创建线性的渐变对象
  • addColorStop() 定义一个渐变的颜色带

效果如图:

Kapture_2017-12-25_at_16.08_.33_.gif

那么问题就来了,如果每个数据权重值 count 不一样,我们该如何表示呢?

设置 globalAlpha

根据不同的count值设置不同的Alpha,假设最大的count的Alpha等于1,最小的count的Alpha为0,那么我根据count求出Alpha。

let alpha = (count - minValue) / (maxValue - minValue);

然后我们代码如下:

WX20171229-115408

效果跟上一个截图有很大区别,可以对比一下透明度的变化。

image.png

(这么黑乎乎的一团,跟热力差距好大啊)

重置 canvas 画布颜色

  • getImageData() 复制画布上指定矩形的像素数据
  • putImageData() 将图像数据放回画布:

getImageData()返回的数据格式如下:

WX20171229-115425

返回的数据是一维数组,每四个元素表示一个像素(rgba)值。

实现热力原理:读取每个像素的alpha值(透明度),做一个颜色映射。

代码如下:

WX20171229-152527WX20171229-153113

创建颜色映射,一个好的颜色映射决定最终效果。

inMap 创建一个长256px的调色面板:

WX20171229-152614

inMap 默认颜色如下:
WX20171229-152630

将gradient颜色设置到调色面板对象中:

WX20171229-152643

返回调色面板的像素点数据:

WX20171229-152702

创建出来的调色面板效果图如下:(看起来像一个渐变颜色条)

image_(2).png

最终我们实现的热力图如下:

Kapture_2017-12-25_at_15.21_.01_(1)_.gif

 

  • Dec 27 / 2017
  • 0
Tech

锐眼发现 | 来自华盛顿大学教授的机器学习“内功心法”

作者:Pedro Domingos

译者:AI科技大本营(微信号「rgznai100」)

转载自:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

译者注:

本文最初发表在 《ACM通讯》2012年第10辑。作者是华盛顿大学教授,著名的机器学习专家 Pedro Domingos。作者2016年凭借畅销书《终极算法》而名声大噪,成为全球机器学习领域代表人物之一。而5年前 Domingos 教授发表的这篇“内功心法”,也是整个国外机器学习领域几乎人人必读的一篇文章。在很多大学的机器学习课程以及优达学城等在线培训体系中,都推荐学生精读此文。

这篇文章高屋建瓴的介绍了机器学习实践当中若干需要关注、而又不见于一般教科书的问题,堪称经验之谈,非常宝贵。 国内的机器学习爱好者多次翻译过这篇文章,但是翻译质量良莠不齐。为此小编委托高手重译此文,再次发表以飨各位小伙伴,强烈建议大家收藏,有时间的话多读几遍。

本文是中译版,在AI科技大本营(rgznai100)微信公众号会话中输入“经典”,即可获得原始PDF文件。

机器学习系统可以自动从数据中学习程序。这种方法比起手工编程更具吸引力。近10年,机器学习发展势头迅猛,已不仅限于计算机科学,还被用于网络搜索,垃圾邮件过滤器、推荐系统、广告植入、信用评分、欺诈检测、股票交易、药物设计以及其他应用上

麦肯锡全球研究院近日发布了一篇报告,断言机器学习(即数据挖掘和预测分析)将会驱动下一次革新浪潮。市面上有好些不错的教科书适合感兴趣的从业人员和研究人员(比如,Mitchell and Witten etal.)。但是,很多在实践当中极其重要的“内功心法”,教科书里是没有的,结果就导致很多机器学习项目浪费了大量的时间,或最后没有得到想要的结果。然而,大部分的内功心法并不难讲清楚,本文试图做一个解说。

机器学习种类很多,但为了方便说明,我主要就集中在最成熟、使用范围最广的一个类型:分类。但我要讨论的问题适用于所有类型的机器学习。

分类器是输入(一般来说)一个离散向量以及/或者连续特征值,然后输出一个单一的离散值,即类别。比如,垃圾邮件过滤器把邮件分为“垃圾邮件”和“非垃圾邮件”,输入值可能是一个布尔向量x = (x1,…,xj,…,xd),如果字典里以j开头的单词出现在邮件里,那么xj = 1,若没出现,则xj = 0。学习器输入一组训练样本 (xi, yi),其中xi = (xi,1, . . . , xi, d)为可观察输入,yi为对应的输出,输出的是一个分类器。学习器就是要测试这个分类器以后输入样本xt时,是否还能得出正确的输出值yt(例如,垃圾邮件过滤器是否能把之前未见过的邮件正确分类)。

机器学习=表示+评价+优化

假如你有一款应用,你觉得机器学习能够对其有所帮助。那么摆在你面前的第一个大难题就是可供选择的学习算法种类繁多,让人眼花缭乱,到底选哪一个呢?现有的算法就有数千种,而每年又有数百种算法相关著作出版。在这样繁多的算法中不致迷失的关键,就是明白算法的三大组成部分:

表示:一个分类器一定要用计算机能够处理的形式化语言来表示。反之,选择一个学习器的表示就等价于选择一个可能具有学习能力的分类器集。这个集被称为学习器的假设空间(hypothesis space)。如果一个分类器没有在假设空间内,那么学习器就无法学习。之后我会讲一个相关问题,就是如何表示输入值,换言之,就是要用什么特征。

评价:评价函数(也叫做目标函数或者打分函数)用于区分分类器的好坏。为了便于优化,通过算法生成用于内部的评价函数和优化分类器的外部评估函数并不相同。

优化:最后,我们需要一个方法来找到分数最高的分类器。优化技术对于提升学习器效率至关重要,如果评价函数得出了多个分类器,那么就由优化来决定最终的去留。通常来说,新的学习器开始都用现成的优化器,之后会换成定制的优化器。附表为三大成分的范例。

例如,K近邻算法通过确定K个最相似训练样本,将出现最多的类别定为测试样本的类别。基于超平面的算法形成每个类别特征的线性组合,并将得分最高的线性组合作为预测结果。决策树在每个内部节点测试一个特征,一个分支代表一个特征值,枝叶是分类预测结果。

算法1 决策树归纳

算法1就是布尔域决策树学习器的基本框架,使用了信息增益和贪婪搜索。信息增益(xj, y)是特征xj和类别y之间的互信息。节点制造(x,c0,c1)得出测试特征X 的节点值,把c0 作为x = 0的子类, c1 作为 x = 1的子类。当然,不是表格中一个成分的所有组合都有相同意义。比如,离散表示通常用组合优化,而连续表示就用连续优化。然而,很多学习器既有离散成分也有连续成分,事实上,也许不久后在一些学习器上就会有所有可能的组合了!很多教材都是按照表示来安排的,这样容易忽略其他重要的部分。选择这些没什么捷径,但落实到机器学习项目上,有些部分会更重要一些。

泛化才是关键

机器学习的根本目标就是训练出超越样本的泛化模型,这是因为无论我们有多少数据,我们都不太可能在测试中再次看到这些具体的样本。(请注意,如果字典里有100,000个单词,垃圾邮件过滤器要就可能要描述2^100,000  多不同输入)。训练集表现得好很容易(只要记住所有的样本就行了)。

机器学习初学者们普遍犯的一个错误就是用训练数据进行测试,结果很理想,就以为自己成功了。当用该分类器测试新数据的时候,结果比随机猜测好不了多少。所以,如果你雇别人来创建分类器,记得要自己私藏一点数据,他们把分类器给你的时候,自己测一下。

如果你被聘请去创建一个分类器,一开始就保留些数据,等到最后完成的时候用来测试,最后基于所有的数据结果,你就知道自己的分类器怎么样了。测试数据可能会以一些潜在方式对分类器造成污染,比如,如果我们用测试数据调超参。(机器学习算法有大量的超参,超参的调整关乎成败,所以要重点关注)。当然,留出数据会减少训练量,但交叉验证法可以缓解这个问题:随机把你的训练数据分成10个子集,每次选一个子集做训练,该子集的并集留下,作为测试集,测试结果的均值就可以让我们知道参数集表现如何。

在机器学习早期,人们对于将训练数据和测试数据分开的意义认识不深。这其中部分原因是,如果学习器的表示有限(比如,超平面),那么训练集和测试集的误差就不明显。但是,随着分类器灵活性增加(比如,决策树),或者有大量特征值的线性分类器,则训练与测试集的隔离是绝对必要的。

把泛化作为关键会给机器学习带来一个有趣的结果。不像其他优化问题,我们没法访问我们想优化的函数!我们只能用训练错误代替测试错误,这样会有很大的问题(之后会谈到如何解决)。但好的一方面是,因为目标函数只是最终目标的代理,我们不用完全优化它:实际上,通过简单的贪婪搜索得到的局部优化可能会比全局最优更好。

光有数据还不够

把泛化作为关键还会带来另一个重要的后果:不管你有多少数据,光有这些数据是不够的。比如从100万个样本中得到了100个变量的布尔函数,还有2^100 – 10^6个样本的类别是你不知道,那要怎么把这些类别弄清楚呢?在没有其他信息的情况下,不就只能靠扔硬币随机决定了。

早在200多年前,著名的哲学家大卫·休谟就提出人的认识是有限的,但直到今天,很多机器学习犯错的根源就是没有意识到这件事。每个学习器一定要包含数据没有提供的知识和假设,这样才能将数据泛化。Wolpert在他著名的“没有免费午餐”理论中确定了这一概念。根据这个概念,随机猜测会打败学习了所有函数的学习器。

这听上去让人很沮丧。那我们怎样才能学习呢?幸运的是,我们在现实世界中学的函数并非均匀的来自所有可能的数学函数!实际上,一些泛泛的假设——像平滑,样本相似则类别相似,依赖性有限、复杂度有限等等——就足够了,这就是机器学习能够成功的很大一部分原因。和推理一样,归纳(学习器要做的)就是一个知识杠杆:输入少量知识输出大量知识。归纳比推理更强大,输入知识更少,却得到有用的结果。

当然,和所有的杠杆一样,输入的越多,得到的就越多。选择表示的关键是看哪种知识更容易表达。比如,如果我们懂得大量使样本相似的知识,那么例子导向方法是一个不错的选择。如果我们有概率相关性的知识,那么就用图形模型。如果我们知道每个类别要用那种预测,那么“如果……那么……”规则会是个最好的选择。好的学习器仅仅固化假设是不够的,还要允许我们能够明确表述它们,任意改变它们,并且能够自动把它们用于学习中(比如,用一阶逻辑或者程序)。

综上,在机器学习中需要知识没什么可惊讶的。机器学习不是魔术,不能无中生有,而是由少变多。编程需要我们一切都从零做起。机器学习更像是种地,让大自然来做大部分工作。农民把肥料和种子混在一起长出庄稼。而学习器和数据知识合在一起就长出了程序。

过拟合有好几副面孔

要是我们的知识和数据不足以让我们得到一个好的分类器呢?那么我们很可能就臆造一个分类器,把数据中的各种随机抖动都当真了。这个问题就叫做过拟合,是机器学习中常出现的问题。当你的学习器输出的分类器在训练集上准确率达100%,而测试集仅50%,而事实上两者的准确率都应为75%,这个时候就发生了过拟合。

每个了解机器学习的人都知道过拟合,但其表现方式不尽相同。发现过拟合的办法之一就是把泛化误差分解为偏差和方差。偏差是学习器持续学习一种错误东西,而方差是指学习器做出的决断与输入信号无关,是随机的。

图1. 飞镖的偏差和方差

如图1所示,用飞镖做类比。一个线性学习器偏差很高,因为两个类别之间的交界不是超平面时,学习器就不能进行归纳。决策树不会发生这个问题,因为它们可以表示任何布尔函数,但是它们会出现很高的方差,由同样的现象引出的问题,在不同的数据集上训练,决策树模型会得到完全不同的结果,而理论上来说,它们应该是一样的。

相同的问题也出现在优化方式的选择上:在选择优化算法时,束搜索比贪婪搜索有更低的偏置,但有更高的方差,因为它用到了更多的假设。因此,与我们的直觉相反,真正优秀的分类器不一定要比差的分类器表现更好。

图2. 那怕真分类器是规则集,朴素贝叶斯也比决策树学习器要好

如图2所示,即使真正的分类器是规则集,在训练样本不到1000个的时候,朴素贝叶斯分类器比决策树分类器精确度更高。哪怕贝叶斯假设错误,界面是线性,准确率还是很高!这样的情况在机器学习中很常见:较强的错误假设会比较弱的正确假设表现更好,这是因为后者需要更多的数据来避免过拟合。

交叉验证可以避免过拟合,比如,通过它来选择合适大小的决策树进行学习。但这也不是万能的,如果我们用来制造过多的参数选择,交叉验证就会自行开始过拟合。

除了交叉验证之外,还有其他各种方式来预防过拟合。

其中最常用的方法是在评价函数中加入正则项。这样可以对于过于复杂的模型进行处罚,因而系统更容易产生结构简单的模型。

另外一种方式是在加入新的结构之前通过卡方验证来检验统计显著性,以此来判断加入此结构是否有助于提升效果。当数据不足时,这些方法非常有用。然而,如果有谁生成某种方法可以完全“解决”过拟合问题,你应当持怀疑态度。因为很容易就从过拟合变成欠拟合。想要同时做到避免过拟合和欠拟合需要设计出完美的分类器,然而根据“天下没有免费的午餐”原理,在没有足够知识的前提下,没有任何一个分类器能够在各种情况下都表现最好。

一个关于过拟合的误解是,认为它是噪声造成的,比如说训练样本的标签标错了。这确实会让过拟合加重,因为这会让学习器产生出变换反复的决策面,以满足这些样本的标定。但是在没有噪声的情况下, 也可能发生严重的过拟合。例如,假设我们有一个布尔型分类器需要把训练集中的正样本找出来(换句话说,分类器以析取范式的方式,将训练集中样本的特征结合起来)。这个分类器将训练集中的样本正确分类,而将测试集中的正样本全部错误分类,无论训练集中有没有噪声。

多重假设检验与过拟合十分相关。标准的统计检验一次只能检验一种假设,而学习器可以同时检验百万种。结果是,看上去很重要的假设也许实际上并没有多重要。例如,如果有一家信托基金公司连续十年业绩领先于业内,你会觉得它很厉害,但是如果仔细一想,如果每年任何一家公司都会有50%的概率领先,那么它就有可能很幸运地连续十年领先。这个问题可以通过加入一系列的假设,做显著性测试来判断,但同样会带来欠拟合的问题。一种更加有效的方式是控制错误接受的比例,也称为错误发现率。

高维度直觉失误

除了过拟合之外,机器学习最大的问题就是维度灾难了,这个说法是1961年Bellman提出来的,很多算法在低维度表现不错,但是一旦输入值为高维度就应付不了了。但在机器学习中,这个说法还有更多含义。随着样本的维度(特征值)增加,泛化的难度也按指数递增,因为大小固定的训练集在输入空间只占很少一部分。那怕1万亿个样本,维度为100的训练集也只占了输入空间10^-18的部分。这就是为什么机器学习如此必要而复杂。

更严重的是,机器学习算法依赖(显式或者隐式)的相似性推理在高维度会崩溃。想象一个K近邻分类器把汉明距离作为相似性度量,假设类别就只是x1 ∧ x2,没有其他特征,这很简单。但如果还有98个不相关的特征x3,…, x100,那么它们的噪音就会淹没x1和x2之间的信号,最近邻分类会有效地做出随机预测。

更令人困扰的是,如果100个特征都相关,那么近邻算法也会出现问题,这是因为在高维度所有样本都很相似。假如,所有的样本都分布在规则网格内,有个测试样本Xt,如果网格是d维度,Xt的2d邻近样本和它距离都相同,所以随着维度增加,越来越多的样本成为了xt的近邻样本,近邻样本的选择就变得随机了。

这仅仅是高维度带来的一个问题:我们的本能来自三维世界,没法应用于高维度世界。在高维度世界,多元高斯分布大部分的质量不是靠近均值,而是在其周围距离不断增加的“壳”里。高维度的橘子的质量主要就集中在果皮上,而不是果肉里。如果一个数量恒定的样本均匀地分布在一个高维度超立方体中,大部分样本应该靠近超立方体的表面而不是近邻。如果我们把超球体刻进超立方体中来近似超球体,在高维度中,几乎超立方体所有的量都在超球体的外面。这对机器学习来说是个坏消息,因为一种类别的形态常常靠其他形态来近似。

在一维和二维建分类器很容易,我们通过肉眼观察就可以在不同类别样本之间找到合理界面。(如果人能看到高维度那机器学习也没什么必要了。)但是一到高维度,我们就很难理解发生了什么。这也给设计分类器带来了难度。有人会觉得特征越多越好,大不了就是没什么新信息嘛。

但实际上,因为维度灾难,弊会大于利。不过好在有种效应叫做“非均匀性祝福”会部分消除这种诅咒。在大部分应用中,样本不是均匀分布在示例空间内,而是集中或者靠近低维流形。比如,K近邻算法特别适用于手写数字识别,那怕数字图像每像素上就有一个维度。因为数字图像的空间比图像空间小很多。学习器可以隐式地利用这种较低的有效维度,或算法来显式地减少使用的维度(比如,Tenenbaum)。

理论保证不一定有用

机器学习论文里满是各种理论保证,最常见的一种就是限制样本数量来保证泛化成功。你怎么看呢?首先,它们有可能是真的。归纳一般来说和推理是对立的:在推理中,你可以保证所有结论是正确的,但在归纳就正好相反。这是几个世纪以来的一个老观念了。近十多年来的一个重大进步就是我们意识到可以保证归纳的结果,尤其是如果我们想解决概率保证。

论证方式很简单。如果真错误率大于ε,我们就认为这是个坏分类器。所以坏分类器的可能性是和n 随机一致,独立训练样本小于(1 − ε)n。把b作为坏分类器在学习器假设空间H中的数量。通过一致限,使得它们中至少一个的可能性持续低于b(1 − ε)n。假设学习器总是会得到一个一致的分类器,而坏分类器出现的概率就小于|H|(1 − ε)n 而我们默认b ≤ |H|。所以如果我们希望可能性小于δ,让n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就够了。

但不幸的是,我们对这种保证要持保留态度,因为通过这种方式得到的边界会非常松散。上述边界一个非常棒的特征就是样本需求数量以|H| 和 1/δ的对数增长。大部分假设空间都是按多个d特征值呈双指数的,这样我们就还需要一些d的指数样本。例如,有一个布尔变量的布尔函数。如果这里有e个不同样本,那么就有2e不同的函数。那么有2d 个不同的函数,那么函数总量就为22d。就算假设空间只有指数的,边界还是非常松散,因为一致限很悲观。例如,有100个布尔特征,而假设空间是决策树,有10层,为了保证上述边界δ = ε = 1%,我们需要50万个样本。但实际上只要一小部分就可以满足学习了。

另外,我们还要警惕这样的边界意味着什么。它不是说,如果你的学习器得到一个与训练集一致的假设,就意味着假设成功,而是说明训练集够大的话,你的学习器要么得到一个好的假设,要么就是没法找到一个一致的假设。这个边界也没有告诉我们怎么选择一个好的假设空间,只告诉了我们,如果一个假设空间包含了真分类器,那么学习器输出坏分类器的概率就会随训练集的减少而下降。如果我们压缩假设空间,那么边界会提高,前提是其包含的真分类器也压缩了(有些情况真分类器不在假设空间内,但该理论同样适用。)

另外一种理论保证是渐近:给无穷的数据,保证学习器输出正确的分类器。这是一种确认,但可能会导致我们轻率地下决定去选择某一种分类器。事实上,我们很少会遇到渐近区。是因为之前我所讨论的偏差-方差权衡问题,如果学习器A 在无限数据上比B 好,那么B在有限数据上一定比A好。

理论保证不是实际操作的准则,而是算法设计理解和驱动的源泉

就这方面来看,理论保证还是很有用的;实际上,理论和实践之间密切的相互作用是机器学习这些年能取得巨大成就的主要原因。但机器学习是一个复杂的现象,不能因为学习器有了理论证明,在现实中运作,就说着前者是后者的原因。

特征工程是关键

有的机器学习项目成功了,有的没有,是什么原因呢?最重要的原因就是其使用的特征。如果你有多个独立特征且每个都和类别相关,那么你的机器学习就很容易成功。另一方面,如果类别都是复杂的特征函数,那么就不容易学习。

通常,原始数据不是很好学习,但是你可以从数据中建构特征。这常常是机器学习项目中最费功夫的地方,也是最有趣的部分,在这部分直觉、创造力、“歪门邪道”和技术的东西同样重要。

初学者往往会很惊讶,在一个机器学习项目中,真正用在做机器学习这部分的时间很少,大部分都花在了数据收集、整合、清理和预处理,以及反复的特征设计。另外,机器学习不是建完数据库,运行学习器,一次就搞定的事情,而是要不断地运行学习器,分析结果,调整数据或者学习器,然后反复的一个迭代的过程。学习通常是这里面花时间最少的一部分。特征工程很复杂因为它是域特定的,而学习器则很大程度上是通用的。然而,这两者之间没有没有明显分界。这也就是为什么好的学习器是和知识相结合的。

当然,机器学习的圣杯之一就是使越来越多的特征工程过程自动化。现在常用的一种方法就是自动生成大量的候选特征,然后通过信息增益来选择最好的。但是要记住单独特征互相也许无关,但合并在一起就会关系了。例如,如果这个分类是输入特征为k的XOR,每个特征都没有类别相关信息,另一方面,运行大量特征的学习器来寻找哪些在合并时有用会花费大量的时间,导致过拟合。所以,说到底在特征工程上,还得靠人的能力。

数据多比算法聪明更好

假设你建了最好的特征集,但是你拿到的分类器并不完全准确。你要怎么办呢?

有两种选择:设计一个更好的算法,或者收集更多的数据(更多样本、更多原始特征,受制于高维诅咒)机器学习研究者常常更关心前者,但实际上收集数据这个办法更容易成功。根据经验,一个一般的算法,如果数据多,会优于数据较少的高深算法。(毕竟,机器学习就是让数据来干活的。)

但这就会带来另一个问题:可扩展性

在大部分电脑科学中,两大受限资源是时间和内存。而在机器学习中,还有第三个:训练数据。不同时期的技术瓶颈就在这三大限制中变换。20世纪80年代,数据是瓶颈,而今天,是时间。大量的数据是有的,但是没有足够的时间去处理。这就会导致一个悖论:理论上数据越多意味着可以学习更复杂的分类器,但实际上,最后还是用的更简单的分类器,因为复杂分类器学习时间更长。一个解决方法是想出更快的方式来学习复杂的分类器,在这方面也的确有显著的成果(比如,Hulten and Domingos)。

使用高深的算法没有预期那么理想的原因是,大部分算法都差不多。如果你认为规则集神经网不同的话,你可能会对此感到很惊讶。但实际上,命题规则很容易编为神经网络,其他表示之间也有类似关系。所有学习器都是把近邻样本放进一个类别,而关键是什么叫“近邻”。在数据分布不均时,学习器尽管产生不同界面,却依然可以做出相同预测(训练样本多的,通常测试样本也会大量出现)。这也能解释为什么好的学习器不稳定,但还是很准确。图3为二维展示,在高维度效果越明显。

图3所示,不同边界会产生相同预测(+和-是两个类别的训练样本)

所以规则就是首先使用简单的学习器(比如,先用贝叶斯而非罗辑回归,先用K近邻算法而不是支持向量机)。越复杂的学习器越吸引人,但用起来却很难,因为它们需要调节的按钮太多才能得到想要的结果,也因为它们的内部不够透明。

学习器可以分成两大类:一是表示有固定大小的,比如线性分类器,还有表示随数据增加的,比如决策树(后者有时被称做非参数学习器。但很不幸,它们常常比参数学习器学的参数更多。)大小固定的学习器只能从大量数据中获益(注意一下图2中贝叶斯算法的渐近线约在70%左右)。

大小变化的学习器理论上只要数据足够,可以学习任何函数,但实际上不行,因为算法有限(比如,贪婪搜索会陷入局部最优)或者计算开销不足。而且,因为高维诅咒,现有数据可能不够。基于这些原因,高深算法—充分利用数据和计算资源的—最后常常会成功。设计学习器和学习分类器之间没有太大差别,任何知识可以在编码进学习器中或从数据中学习。所以机器学习项目的学习器设计最后成为最重要的部分,从业者们需要具备一定的专业知识。

到最后,最大的瓶颈不再是数据或者CPU周期,而是。很多论文中,学习器基本都在精准度和计算预算方面做比较。人为努力和洞察力很难测量,但往往更重要。这会帮助学习器创建人们可以理解的输出(比如,规则集)。充分利用机器学习的机构已经准备好基础设施使用各种学习器、数据资源和简单有效的学习问题来进行实验,并且在那些机构中机器学习专家和应用领域专家合作密切。

学习更多的模型

在机器学习的早期,每个人都有自己喜欢的学习器,相信它的优越性。我们花了大量的时间来尝试其变体,然后选择最好的一个。后来系统实证比较发现学习器的好坏是随应用不同而改变的,所以搭载不同学习器的系统就开始出现了。人们就开始努力尝试多个学习器的变体,然后还是选择最好的那个。但后来研究者们发现,如果把多个学习器合在一起,结果会更好,使用者也不费什么功夫。

现在创建这样的集成模型已经成为一种标准了。最简单的一种技术,叫做bagging.我们通过重采样的方式生成随机训练集,每个训练集学习一个分类器,最后通过投票合成结果。这样的方式能成功的原因在于其大大减少方差的同时,只稍提高了偏差。在boosting中,训练样本有权重,而这些权重各不相同,所以每个新的分类器都会关注之前分类器分错的样本。在stacking中,独立分类器输出变成了“更高级”学习器的输入,并且stacking在想办法进行最优组合.

现存的技术有很多,集成越做越大已经成为了一种趋势。

在Netflix prize大赛上,来自全世界的团队互相竞争,创建最好的视频推荐系统(http://netflixprize.com)。随着比赛的进程,团队发现通过合并其他团队的学习器可以得到最好的结果,然后团队之间互相合并,越来越大。冠、亚军都是上百个学习器的集成。当然,我们在未来还会看到更大的集成。

模型集合不应和贝叶斯模型平均(BMA)—理论上最优的学习方法—相混淆。在BMA中,新样本的预测是通过在假设空间中取所有分类器各个预测的平均值,由分类器解释训练数据的表现,和我们对其的期待来权衡。除了表面相似,其实集成和BMA非常不同。集成改变了假设空间(比如,从单个决策树变成了所有决策树的线性集合),可以呈现出各种形式。BMA根据固定公式将权重分配给原始空间的假设。BMA权重和bagging或者boosting产生的权重完全不同:后者非常平均,而前者非常倾斜,直到某单一最高权重分类器占主导地位使得BMA选择它。这样产生的结果就是,集成模型是机器学习包中关键的一部分,而BMA却没人选择。

简单不意味着准确

奥卡姆剃刀原理说:如无必要,勿增实体。在机器学习中,这常常意味着,如果两个分类器有同样的训练错误,简单的那个训练器测试错误率会更低。这种说法常常在文学中很常见,但实际上有很多反例,“免费午餐”定理就可以对此进行反驳。

我们在前面就看到了一个反例:模型集合。即使训练误差达到0之后,通过增加分类器也可以提升增强集成的泛化误差。另一个反例就是支持向量机,可以有效地拥有无限量的参数而不会过度拟合。相反,函数符号(sin(ax))可以区分任意大的,任意标记的x轴上的点,即使它只有一个参数。因此,和直觉相反,模型的参数量和过度拟合之间没有必然联系。

更复杂的视图反而使复杂度与假设空间的大小相等,因为较小的空间允许用更短的代码表示假设。理论保证部分的界限可能被视为表明较短的假设泛化得更好。这可以通过将更短的代码分配给我们有一些先验偏好的空间中的假设来进一步改进。但是将其视为在准确性与简单性之间权衡的“证明”是循环推理:我们假设我们更倾向于设计简单,如果它们是准确的,那是因为我们的偏好是准确的,而不是因为我们选择的表示中的假设是“简单”的。

这还会产生的另一个复杂情况是没有学习器会彻底搜索假设空间。假设空间更大的学习器如较少的假设比从较小空间中尝试更多假设的学习器过拟合的可能性低。正如Pearl所指出,真正影响训练和测试误差的是选择假设的过程,而假设空间的大小只是对此的一个粗略指导。Domingos调查了奥卡姆剃刀在机器学习问题上的主要论点和证据。结论是,更简单的假设应该是首选的,因为简单本身就是一种美德,而不是因为与准确性的假设联系。这也可能是奥卡姆的本意。

可表示不意味着可学习

基本上所有学习器的表示都和“所有函数都可以被表示,或者以无限接近的方式近似表示。”这样的理论相关。为了证明这个定理,表示的拥护者们常常会忽视其他东西。然而,函数可以被表示并不意味着可以被学习。比如,决策树学习器不能学习超过训练集的叶子节点。

在连续空间中,即使用固定基元集表示那怕最简单的函数也常常需要无穷的部分。如果假设空间有评价函数的局部最优,实际上也常常出现,那么即使可以被表示,学习器也许也找不到真正的函数。有了有限的数据、时间和内存,标准学习器只能学习所有函数的小部分子集,而这些子集对表示不同的学习器是不同的。所以关键问题不是“能不能被表示?”因为答案常常不重要,而是“能不能被学习?”这个问题值得去尝试不同的学习器(或者合并它们)。

对于某些函数,有些表示在会比其他函数指数上更紧凑。结果就是,它们可以需要成指数减少的数据来学习函数。有些学习器是通过简单基本函数的线性合成形成的。比如,支持向量机围绕一些训练样本(支持向量)形成内核合成。通过这种方式形成n位的奇偶校验性需要2n的基本函数,但是使用一个表示需要多层(就是在输入和输出之间有好几步),奇偶校验性可以编码在线性大小的分类器里。寻找这种深度表示是现在机器学习的重要前沿。

相关并非因果

相关性不是因果性这个观点可能常常被提到,不太值得在这里赘述。但是,只能用来学习相关性的学习器产生的结果常常被用来表示因果关系,这样错了吗?如果错了,为什么人们这么做呢?

学习预测模型就是用它们作为行动导向。如果我们发现啤酒和尿布常常是一并购买,那么也许把啤酒放在尿布旁边会增加销量。(这是数据挖掘世界的一个著名例子。)但没有实验,也很难判定是否正确。机器学习常常用来观测数据,预测变量常常不受学习器的控制,而实验数据受控。有些学习算法可以从观察数据中提取信息,但是这样的应用还是非常有限。另一方面,相关性是潜在因果联系的标志,所以我们把相关性作为进一步调查的导向(比如,尝试想弄清楚因果链是什么)。

很多研究者认为因果性是一种虚设。例如,在物理定律中就没有因果概念。因果性是不是真的存在是一个很深奥的哲学问题,眼下也没有答案。但在机器学习上还是有两点很实在,首先,不管我们是不是把它们称作“因果”,我们是要为行为做预测,而不是仅仅将观测变量相联系。第二,如果你可以获得实验数据(比如,随机将游客分到了一个网站的不同版本中),那么要一定竭尽全力。

结论

和所有的学科一样,机器学习很大量的“内功心法”难以获得.但是对成功很重要。本文总结了一些突出项目。当然,这也只是传统机器学习的补充。点击http://www. cs.washington.edu/homes/pedrod/class观看完整的在线机器学习课程。在http://www.videolectures.net你会找到机器学习课程的宝藏,还有,Weka是一个很棒的开源机器学习包。

最后,祝你学的开心!

  • Dec 26 / 2017
  • 0
Tech

锐眼洞察 | Hadoop 3.0已经发布,未来还有哪些规划?(翻译)

作者:Alex Woodie

原文:Hadoop 3.0 Ships, But What Does the Roadmap Reveal?

译者:TalkingData研发副总裁 闫志涛

本译文禁止商用,转载请注明来源与译者!

译者注:

大数据新技术近几年的飞速发展给Hadoop的发展带来了巨大挑战,不过Hadoop社区也在与时俱进的进行发展。等了几年,我们终于见到了Hadoop 3.0。在Hadoop 3.0当中,我们最期待的无疑就是Erasure Coding。考虑到存储的巨大代价,能够利用EC技术大幅度降低存储开销,无疑能够给大数据公司降低成本。3.0之后Hadoop还有哪些主要的特性呢?这篇文章就给出了答案,比如GPU的支持、FPGA的支持、S3 API兼容的KV存储等等。这些都很值得期待。

如承诺的那样,Apache软件基金会在今年结束前正式发布了Hadoop 3.0。现在Hadoop社区开始将注意力集中在3.1和3.2版本,这两个版本将会在2018年上半年带来更多非常棒的特性。

正如我们两周前所说的那样,Hadoop 3.0带来了两个重大的特性。这两个特性分别是支持EC(Erasure Coding),从而可以利用更有效的数据复制提高存储效率达到50%,以及YARN Federation,可以使得Hadoop集群的规模达到40,000个节点。

“Hadoop 3.0的发布体现了开源社区对于工业界的需求是非常负责任的”, Doug Cutting说。Doug Cutting是Apache Hadoop最初的联合缔造者同时也是Cloudera的首席架构师。“从11年前的原始的工具发展到今天的成熟的软件,这是个非常大的成就”,他在新闻发布会上说。“随着这个里程碑的发布,Hadoop在企业数据系统中作为日益重要的角色可以更好的满足企业的需求”。

但是在Hadoop 3.0中有些新的特性并不是为了马上给用户带来回报,而是为即将到来的3.1和3.2中提供更加引人注目的特性铺平了道路。Hortonworks的工程总监,同时也是Hadoop Apache项目的贡献者Vinod Kumar Vavilapalli认为。

“Hadoop 3.0实际上是一个构建模块,是一个基础,在3.1和3.1版本中将会有更加令人兴奋的事情发生”,他说。Vavilapalli最近给Datanami分享了一部分Hadoop的路线图,如下是这次对话中的一些亮点:

Hadoop 3.1

在3.1中将要支持的一个重要的针对3.0特性的改进,是YARN支持的资源类型。

在Hadoop 2.x时代,YARN仅仅能够识别两种资源:内存和CPU。随着在3.0资源类型的引入,社区已经能够为3.1版本中在Hadoop集群中支持GPU做好了准备。

在Hadoop中将GPU作为头等资源支持将让用户更容易运行亲GPU的工作,比如机器学习和深度学习,Vavilapalli说。

“这个想法是,YARN不需要人们为GPU任务设置独立的分区、独立的机器和独立的集群,YARN将GPU当作一等公民进行支持”, Vavilapalli说。“在YARN上我们已经解决了大量的sharding和多租户的问题。”

另外一个值得关注的特性是开发者们正在努力工作使得Hadoop 3.1的YARN支持Docker容器。Vavilapalli透露,Docker的YARN支持将会包含两个主要的能力,第一个是使得非大数据的任务可以运行在Hadoop上,例如一些容器化的应用。

r-Containers.png

在YARN上支持Docker将为Hadoop任务提供包隔离功能。这是在Hadoop上支持Docker之外的另一项努力。

“除了在YARN上运行MapReduce任务、Spark任务、Hive任务这些传统的大数据任务”,Hortonworks工程师说,“如果一个用户有一个在移动电脑上构建的容器应用,可以在YARN集群上指令,现在运行它的一百份、一千份拷贝,然后YARN就能够完成这些”。

Hadoop 3.1带来的第二个YARN支持Docker的优势是获得包的隔离。一个非常重要的应用场景是保证R和Python库能够在一起工作并且不会引起相互间的兼容性问题。”利用包隔离,你可以创建你自己的包含你的所有的R或者Python库的Docker容器,然后将它交给YARN,YARN就会像在你的便携电脑上运行一样去运行它们”。 Vavilapalli说。

Hadoop 3.1的另外一个主要的特性是被称为YARN Service的功能。利用这个新的特性,YARN将会具备管理在Hadoop上运行长时间的服务的能力,例如输入的Kafka数据流或者一个HBase服务任务。

“运行长时间的服务的目标是,你可以来到YARN指令‘给我在YARN上与其他正在运行的任务并列运行这个长时间任务’,就像运行Spark与Hive,”Vavilapalli说。“我们称之为YARN Service。所以YARN Service是一个我们正在研究的重要特性。”

Hadoop 3.2

Apache Hadoop社区计划利用3.0支持的新的资源类型在3.1支持GPU,如果一切按照计划进行,Hadoop 3.2将会支持FPGA。

altera-fpga.png

FPGA是一种自定义代码处理器

FPGA,或者叫做现场可编程门阵列,是一种为了加速某些特定类型的任务而设计的特殊处理器。Intel在2015年并购了FGPA厂商Altera,在FPGA技术上加大投入以加速高性能计算、AI、数据和视频分析,以及在Xeon集群上的5G处理器。IBM将FGPA加入到了它的Power服务器以提高图数据库的性能和可扩展性。

Hadoop用户拥抱FGPA有两个原因,Vavilapalli说,“一个原因是GPU比较昂贵,一些用户寻求把FPGA作为一个解决他们问题的廉价解决方案“,他说,“另外,有些问题只能用FPGA来解决,这两个原因驱动了YARN支持FPGA。”

Hadoop社区正投身于支持FPGA的工作, Vavilapalli说,也有可能这个特性会在3.1中包含。”现在并不十分确定它会包含在3.1还是3.2中,但是YARN很久就能够支持FPGA了”,他说。

Hadoop 3.2支持的另外一个重要的特性是叫做OZone的kv存储。OZone将会包含S3兼容的API存储,并且会针对不适合存储在HDFS上的小文件做优化。

-MW-3D-balls.png

臭氧(Ozone),或者说O3,避免地球受到有害的紫外线辐射。

HDFS最初的设计是存储相对大的文件,文件一次写入,多次读取。Vavilappalli说。“随着时间的推进,我们发现新的任务需要存储小的对象,它可能是一个照片或者视频。这些不是典型的Hadoop任务,因此需要存储大量的小对象,并且人们只能使用HDFS去存储它们。

OZone将更适合存储这类对象。存储容器将会提供一个与S3兼容的存储API。S3-Simple Storage Service由Amazon开发,是在全球数百个数据中心的百万台机器上存储ZB级别数据的存储。

随着AWS的兴起,S3 API变成了事实的存储标准。SaaS软件提供商将他们的客户数据存储在S3上,在云上运行Hadoop或者类似于Hadoop的任务去处理这些数据。 “社区正在努力的将它变得像S3 API,因为S3 API是所有kv存储的标准”,Vavilaplli说。 “它看起来像S3,但是使用在本地部署的Hadoop集群”。

虽然基于云的Hadoop任务比如Amazon EMR和Qubole,甚至Hadoop发行商Cloudera和Hortonworks的云产品都使用S3, OZone被设计为既可以在云端部署也可以在企业私有部署。

“云是今天的主流力量,但是我们最终会使用包含云和私有部署的混合结构”,Vavilapalli说。“为了使得应用可以无缝地在私有部署和云端运行,我们需要在私有部署拥有类似的能力,而OZone就是解决这个鸿沟的解决方案。让这些应用写kv API并且使得它既可以运行在私有部署,也可以运行在云端。这无疑是非常强大的创举并且未来用户将会非常愿意使用它。”

Hadoop 3.2将会在第二个季度末交付,尽管具体交付日期可能会调整,Vavilapalli说。Apache社区正在努力加速项目的发布进度,并且希望能够每三个月就发布一个主要的升级,他说。

  • Dec 25 / 2017
  • 0
Tech

锐眼洞察 | 利用Apache Arrow来加速PySpark(翻译)

作者:Bryan Cutler

原文:Speeding up PySpark with Apache Arrow

译者:TalkingData首席架构师 黄洋成(YC)

本译文禁止商用,转载请注明来源与译者!

 

Apache Spark 2.3版本开始,Apache Arrow成为一个被支持的依赖组件,可以为列式数据传输提供更好的性能。如果你是一个Spark用户,但是偏好利用Python和Pandas,那你应该有理由兴奋!目前初步的工作(下面会介绍到)还局限于加速 toPandas() 里从Spark的DataFrame中传递数据;但有一大波其他的改进正在路上

优化从Spark到Pandas的数据转换

以前在PySpark里利用 DataFrame.toPandas() 将数据从Spark DataFrame转换到Pandas是非常低效的。基本上其工作机制是:首先从Spark driver把所有的行汇集起来,然后每一行都会被序列化为Python的pickle格式,发给Python的worker进程;这个子进程会反序列化每一行,拼成一个大list;最后利用 pandas.DataFrame.from_records() 从这个list来创建一个Pandas DataFrame。

这听起来像是一个标准过程,但有两个明显问题:1)即使使用CPickle,Python的序列化也是一个很慢的过程;2)利用 from_records 来创建一个 pandas.DataFrame 需要遍历Python list,将每个value转换成Pandas格式,这里有对这个过程的详细分析。

Arrow可以优化这几个步骤:1)一旦数据变成了Arrow的内存格式,就不再有序列化的需要,因为Arrow数据可以直接发送到Python进程;2)当在Python里接收到Arrow数据后,pyarrow可以利用zero-copy技术,一次性的从整片数据来创建 pandas.DataFrame,而不需要轮询去处理每一行记录。另外转换成Arrow数据的过程可以在JVM里并行完成,这样可以显著降低driver的压力。

在SPARK-13534的归并中,要在 toPandas() 里打开使用Arrow的功能,需要将SQLConf里的设置“spark.sql.execution.arrow.enabled” 设为 “true”。下面让我们来看一个简单的例子:

图片 1

 

这是在笔记本电脑上面跑的,所以显示的执行时间未必精确;但是可以看出使用Arrow后性能有了巨大的提升(从20.7s降低到737ms)。

使用的注意事项

下边是使用这个feature时候需要注意的地方:目前pyarrow还不会随着安装pyspark自动安装,而是需要手动安装(参考安装指南)。计划会把pyarrow作为pyspark的一个依赖组件,那样 > pip install pyspark 就会自动把pyarrow也装上了。

目前SQLConf里的enable Arrow的设置缺省是关闭的,需要在程序里手动打开(如上边例子所示),或者也可以收到修改 SPARK_HOME/conf/spark-defaults.conf,加上一行“spark.sql.execution.arrow.enabled=true”。

另外不是所有Spark的数据类型都是支持的,目前只支持基础数据类型。扩展的数据类型支持正在开发中,预期能包含在Spark 2.3版本的发布里。

将来的改进计划

记住这只是利用Arrow来让提升Spark Python的用户体验的一小步。一些激动人心的提议包括UDF的向量化执行(SPARK-21190SPARK-21404),可以apply一个function到Pandas DataFrame(SPARK-20396)。另外就像Arrow能帮到数据从Spark转换到Pandas一样,他也可以帮助从Pandas DataFrame转换为Spark DataFrame(SPARK-20791)。

  • Dec 25 / 2017
  • 0
Tech

锐眼发现 | 前途光明的机器学习将走向何方?这里有 5 个关于它的未来预测

作者:Stefan Franczuk

原文:5 Predictions About the Future of Machine Learning

转载自:开源中国

 

机器学习目前是 IT 领域最热门的话题之一,这是因为它在看似无限的应用场景中都能发挥自身的作用。从检测欺诈网站到自动驾驶汽车,再到识别你的“金牌会员”身份以进行价格预测等等。

但这个如此有吸引力的领域未来将如何发展?会走向何处?下一个最好的东西又将是什么?未来十年我们将处于什么样的位置?无论下一个巨大的改变是否会给我们所有人带来惊喜,本文将对机器学习将发挥作用的领域和用例做出五个预测。

1. 量子计算(Quantum Computing)

机器学习任务涉及到诸如在高维空间中对大量向量进行处理和分类的问题。我们目前用来解决这些问题的经典算法都需要耗费相当的时间。而量子计算机在处理巨大张量积(tensor product)空间中的高维向量时,可能会处理得更好。无论是有监督还是无监督的量子机器学习算法发展,都能比经典算法更快速地以指数方式增加向量数和维数,这将使得机器学习算法运行速度的大幅增加。

相关开源项目推荐:

OpenFermion — 谷歌与量子计算机创企 Rigetti 合作开发的开源量子软件

这是一个用于编译和分析量子算法来模拟费米子系统,包括量子化学,其他功能方面,当前版本的特征是用数据结构和工具获取和操纵费米子和量子位哈密顿算子的表示。

这款软件内包含了一个算法库,可以在量子计算机上模拟电子相互作用,非常适于化学、材料学方面的研究。 有关更多信息,请参阅论文连接

2. 更好的无监督学习算法(Unsupervised Algorithms)

当给学习算法输入的数据没有赋予标签时,就可以认为是无监督学习,它自己会在输入的数据中找到结构。事实上,无监督学习本身就是一个目标,比如发现数据中隐藏的模式,或者实现目的的手段,通常也会把无监督学习称为特征学习。构建更智能的无监督学习算法的进步,将会带来更快、更准确的结果。

相关开源项目推荐:

CycleGAN — 生成对抗网络图像处理工具

生成对抗网络(GAN)可以实现能解决无监督学习问题的模型,GAN 的网络结构是具有颠覆性的,Yann LeCun 在一次关于这个研究的演讲中如此评论:「GAN 是机器学习过去的 20 年里最重要的思想之一。」

CycleGAN 这个项目与其它人工智能绘画不同,CycleGAN 的研究团队试图建立一个可双向转化不丢失信息的双向算法。研究团队必须以机器可以理解的方式去描述每种风格之间的关系,并给机器 “吃下” 大量来自 Flicker 的照片进行训练。

3. 协同学习(Collaborative Learning)

协同学习简单来说就是利用不同的计算实体,使它们共同协作,以产生比自己所取得的更好的学习成果。一个典型的例子就是利用物联网传感器网络的节点进行分析,或称为边缘分析。随着物联网的发展,将会有越来越多单独的实体被用来以多种方式进行协同学习。

4. 深度个性化推荐(Deeper Personalization)

个性化推荐既是伟大的,但它同样也会令用户感到厌烦。我们经常会收到一些没有什么价值的建议,而那些个性化推荐似乎与我们实际上可能感兴趣的任何东西没有任何实际的关系。但将来,凭着机器学习技术的发展,相信用户将会收到更精确的建议,推送的广告也变得更有效,准确性也更高。用户体验也将大大提升。

相关开源项目推荐:

Apache PredictionIO — 面向开发者和数据科学家的开源机器学习服务器

PredictionIO  不久前从 Apache 孵化项目中脱胎而出,宣布成为 Apache 顶级项目。

PredictionIO 是面向开发者和数据科学家的开源机器学习服务器。它支持事件采集、算法调度、评估,以及经由 REST APIs 的预测结果查询。使用者可以通过 PredictionIO 做一些预测,比如个性化推荐、发现内容等。PredictionIO 提供 20 个预设算法,开发者可以直接将它们运行于自己的数据上。几乎任何应用与 PredictionIO 集成都可以变得更“聪明”。其主要特点如下所示:

  • 基于已有数据可预测用户行为
  • 使用者可选择自己的机器学习算法
  • 无需担心可扩展性,扩展性好
  • 提供个性化视频、新闻、交易、广告或职位信息
  • 帮助用户发现有趣的事、文件、App 和资源等

PredictionIO 基于 REST API(应用程序接口)标准,不过它还包含 Ruby、Python、Scala、Java 等编程语言的 SDK(软件开发工具包)。其开发语言是Scala语言,数据库方面使用的是MongoDB数据库,计算系统采用 Hadoop 系统架构。

5. 认知服务(Cognitive Service)

这项技术包括类似 API 和服务的工具包,开发者可以通过这些工具创建更多可发现而且是智能的应用程序。机器学习 API 将允许开发者引入智能功能,如情感检测分析;声音、面部和视觉识别;并将语言和声音理解融入其应用程序中。这个领域的未来将是为所有人推出深度个性化的计算体验。

简单来说,认知服务可向应用、网站和机器人注入智能算法,以自然的沟通方式来观察、倾听、谈话、了解和解释用户需求。

关于认知服务的一些假设:

当我们谈及人工智能时不可回避的一个问题是,人工智能究竟是天使还是魔鬼。而认知服务的主要任务是让机器理解人类世界,并能按照人类的思维方式或者超出普通人的思考能力去替代人类完成某些的判断或决策,以替代人类大脑。一旦人工智能拥有“思考能力”之后,人类很难预测她的行为究竟是善意的行为,还是恶意的陷阱。目前的认知服务是否开启了人工智能的潘多拉魔盒我们还未尝可知,未来的一切还有待我们来探索。

在机器学习的光明未来中,我们认为这些都是会发生的事情,不过同样的,引入一些新的未知的颠覆性技术将会使得我们永远无法预测未来。

  • Dec 18 / 2017
  • 0
Tech

锐眼洞察 | 用新的CARTO.js 4.0库制作的15个创意地图(翻译)

作者:Devon Hopkins

原文:15 Creative Maps Made with the New CARTO.js 4.0

译者:TalkingData产品副总裁 闫辉

本译文禁止商用,转载请注明作者与来源!

开发人员需要开源工具才能创建视觉效果好且功能强大的应用。CARTO和“位置智能社区”长期以来一直支持开源项目,为现代的地理空间技术的发展做出贡献,让所有公司都能利用他们的位置数据。

如今,我们很高兴地宣布CARTO.js发布4.0 beta版本。

CARTO.js是一个开源的JavaScript库,与CARTO引擎生态系统中的各种API进行交互。新版本CARTO.js 4.0提供了额外的功能来提取和过滤CARTO内的数据,以便您可以创建自定义的UI组件,例如小部件、弹出窗口、图例等等。

如果您使用的是以前版本的CARTO.js,请参阅Beta版本的文档,来了解更多关于新旧库的基本概念和工作流程变更的信息。
CARTO.js的当前测试版仅包含对JavaScript库所做的更改。未来的增强将包括对核心应用程序功能的维护。

一次黑客马拉松

我们举办了一次内部黑客马拉松展示这次Javascript库更新的功能(比如在CUBE和Google Maps上显示CARTO数据并创建完全自定义的Web应用程序),并收集来自我们内部专家的反馈。

团队有3个小时的时间来创建一个体现CARTO.js 4.0的强大功能的地图或Web应用程序。

为了给您提供一些启发,下面是他们在不到3个小时内完成的一些最酷的内容(点击图片查看浏览器中的完整地图并与之互动):

美国2006至今发生的野外火灾

fires-by-category.77819ead_.png

这个令人惊叹的地图显示了按类别颜色编码的美国野外火灾。该地图描绘了全国各地火灾密度的惊人图景,以及火灾如何按照分类和记录的有趣视角。

7只红背伯劳的季节迁徙运动

redbacked-shrike.730682a3_.png

迁移模式

这个应用漂亮地映射“红背伯劳”每年穿越大陆的鸟类迁移模式。提供七只鸟的独立路径并追踪它们在每个季节的运动情况,这张地图提供了一个动物保护地图模板,可以跟随全球不同物种。

美国地名密度图

name-map-identity.f71d374f_.png

地名可以有很大的区域图案。这张地图让用户可以探索和发现新的、意想不到的模式,在全国各地如何命名。

一个地理小游戏

trivia-game.d3d6a0a0_.png

地名冷知识游戏

在这个快速的问答游戏中,突出了CARTO可以作为教学工具的方式之一,玩家需要使用他们的世界地理知识和地图上提供的一些提示来定位给定的城市。

新骑行地图窗口小部件

bike-suffering.380f8002_.png

骑行地图

这张地图通过使用一些新的小部件来绘制图片,可视化出特定骑行的强度。饼图和折线图可以让潜在的骑手感受到旅行的难度,并且可以将这些数据聚合起来创建一个索引,就像图中每个部分遭遇分数一样。

FBS大学橄榄球运动员的家乡和学校

fbs-college-football.98395732_.png

FBS大学橄榄球

查看FBS(Bowl Division)每个队伍的大学生橄榄球运动员的家乡情况。这张地图还可以提供每个特定运动员的信息,可以让你深入了解你最喜爱的团队的招募工作。

“权利的游戏”的距离计算器

game-of-thrones-calculator.7a4b156c_.png

“权利的游戏”的距离

凛冬将至?小指头还使用远距传物吗?乌鸦比龙还快吗?为了回答这个问题,我们的团队使用CARTO.js和我们的“权力的游戏”底图来构建GoT距离计算器。根据季节发现哪个角色路途最多。

乡村旅游促活地图

tourism.486277a6_.png

旅游推广地图

这张地图旨在促进当地旅游业。这张地图有几个层次,突出住宿、餐厅和酒吧,这个地图可以为造访Moralzarzal镇的游客指明正确的路线。该地图还提供了来自当地名胜的Mapillary街景图像。

套索工具

lasso-tool.e72d9298_.png

套索工具

该地图使用套索功能来绘制形状,并专注查看自定义地理区域中的数据点。

喜欢地震的人应该住在哪里

earthquake.cba63fca_.png

你喜欢搬到爱地震的地区吗?你可能想,这个爱好可能太危险了?别担心,在这张地图上你可以找到所有美国的县,周边至少邻近最近有地震的地区。所以你可以选择一个安全的地方居住,同时接近你最喜欢的爱好。

二战后的国家演进

animated-time-border-history.b4c7b189_.png

国家演进

这个时间序列图创造性地呈现了二战后半个世纪以来的国际不稳定。通过强调国家边界线的变化,以及改变的国名,地图描绘了这个动荡时代的画面。

爆炸的动态图

giphy-explosion.89de6ebf_.png

这个有趣的用来自Giphy工具的动态GIF图做的爆炸效果试验,当你鼠标滑过地图,可以看到世界各地流行地的名字。

一支特殊力量带来的犯罪报道

london-crime.283ca384_.png

伦敦犯罪

这个地图将HighCharts图表库与CARTO.js 4.0结合在一起,创建了一个交互式小部件,用于对伦敦及周边地区对犯罪(按类型)进行映射和可视化。

冷知识游戏

trivia-game.d3d6a0a0_.png

冷知识游戏2

另一个使用CARTO.js创建的快速地理游戏,要求您输入国家/地区名称。 如果你点击正确,你赢了! 3次尝试失败后,显示正确的答案。

美国自2000年以来的污染

pollution-in-the-us.1cb9d7a7

美国的污染

这幅美丽的地图显示了过去16年来美国几个城市的污染水平。在小部件中用图表形式显示所选年限里有明显污染的地区,使用户能够根据四种不同类型的空气污染状况来细分他们的视图。

 

  • Dec 18 / 2017
  • 0
Tech

锐眼发现 | 促进新一代人工智能产业发展三年行动计划

原文:工业和信息化部关于印发《促进新一代人工智能产业发展三年行动计划(2018-2020年)》的通知

 

促进新一代人工智能产业发展三年行动计划

(2018-2020年)

当前,新一轮科技革命和产业变革正在萌发,大数据的形成、理论算法的革新、计算能力的提升及网络设施的演进驱动人工智能发展进入新阶段,智能化成为技术和产业发展的重要方向。人工智能具有显著的溢出效应,将进一步带动其他技术的进步,推动战略性新兴产业总体突破,正在成为推进供给侧结构性改革的新动能、振兴实体经济的新机遇、建设制造强国和网络强国的新引擎。为落实《新一代人工智能发展规划》,深入实施“中国制造2025”,抓住历史机遇,突破重点领域,促进人工智能产业发展,提升制造业智能化水平,推动人工智能和实体经济深度融合,制订本行动计划。

一、总体要求

(一)指导思想

全面贯彻落实党的十九大精神,以习近平新时代中国特色社会主义思想为指导,按照“五位一体”总体布局和“四个全面”战略布局,认真落实党中央、国务院决策部署,以信息技术与制造技术深度融合为主线,推动新一代人工智能技术的产业化与集成应用,发展高端智能产品,夯实核心基础,提升智能制造水平,完善公共支撑体系,促进新一代人工智能产业发展,推动制造强国和网络强国建设,助力实体经济转型升级。

(二)基本原则

系统布局。把握人工智能发展趋势,立足国情和各地区的产业现实基础,顶层引导和区域协作相结合,加强体系化部署,做好分阶段实施,构建完善新一代人工智能产业体系。

重点突破。针对产业发展的关键薄弱环节,集中优势力量和创新资源,支持重点领域人工智能产品研发,加快产业化与应用部署,带动产业整体提升。

协同创新。发挥政策引导作用,促进产学研用相结合,支持龙头企业与上下游中小企业加强协作,构建良好的产业生态。

开放有序。加强国际合作,推动人工智能共性技术、资源和服务的开放共享。完善发展环境,提升安全保障能力,实现产业健康有序发展。

(三)行动目标

通过实施四项重点任务,力争到2020年,一系列人工智能标志性产品取得重要突破,在若干重点领域形成国际竞争优势,人工智能和实体经济融合进一步深化,产业发展环境进一步优化。

——人工智能重点产品规模化发展,智能网联汽车技术水平大幅提升,智能服务机器人实现规模化应用,智能无人机等产品具有较强全球竞争力,医疗影像辅助诊断系统等扩大临床应用,视频图像识别、智能语音、智能翻译等产品达到国际先进水平。

——人工智能整体核心基础能力显著增强,智能传感器技术产品实现突破,设计、代工、封测技术达到国际水平,神经网络芯片实现量产并在重点领域实现规模化应用,开源开发平台初步具备支撑产业快速发展的能力。

——智能制造深化发展,复杂环境识别、新型人机交互等人工智能技术在关键技术装备中加快集成应用,智能化生产、大规模个性化定制、预测性维护等新模式的应用水平明显提升。重点工业领域智能化水平显著提高。

——人工智能产业支撑体系基本建立,具备一定规模的高质量标注数据资源库、标准测试数据集建成并开放,人工智能标准体系、测试评估体系及安全保障体系框架初步建立,智能化网络基础设施体系逐步形成,产业发展环境更加完善。

二、培育智能产品

以市场需求为牵引,积极培育人工智能创新产品和服务,促进人工智能技术的产业化,推动智能产品在工业、医疗、交通、农业、金融、物流、教育、文化、旅游等领域的集成应用。发展智能控制产品,加快突破关键技术,研发并应用一批具备复杂环境感知、智能人机交互、灵活精准控制、群体实时协同等特征的智能化设备,满足高可用、高可靠、安全等要求,提升设备处理复杂、突发、极端情况的能力。培育智能理解产品,加快模式识别、智能语义理解、智能分析决策等核心技术研发和产业化,支持设计一批智能化水平和可靠性较高的智能理解产品或模块,优化智能系统与服务的供给结构。推动智能硬件普及,深化人工智能技术在智能家居、健康管理、移动智能终端和车载产品等领域的应用,丰富终端产品的智能化功能,推动信息消费升级。着重在以下领域率先取得突破:

(一)智能网联汽车。支持车辆智能计算平台体系架构、车载智能芯片、自动驾驶操作系统、车辆智能算法等关键技术、产品研发,构建软件、硬件、算法一体化的车辆智能化平台。到2020年,建立可靠、安全、实时性强的智能网联汽车智能化平台,形成平台相关标准,支撑高度自动驾驶(HA级)。

(二)智能服务机器人。支持智能交互、智能操作、多机协作等关键技术研发,提升清洁、老年陪护、康复、助残、儿童教育等家庭服务机器人的智能化水平,推动巡检、导览等公共服务机器人以及消防救援机器人等的创新应用。发展三维成像定位、智能精准安全操控、人机协作接口等关键技术,支持手术机器人操作系统研发,推动手术机器人在临床医疗中的应用。到2020年,智能服务机器人环境感知、自然交互、自主学习、人机协作等关键技术取得突破,智能家庭服务机器人、智能公共服务机器人实现批量生产及应用,医疗康复、助老助残、消防救灾等机器人实现样机生产,完成技术与功能验证,实现20家以上应用示范。

(三)智能无人机。支持智能避障、自动巡航、面向复杂环境的自主飞行、群体作业等关键技术研发与应用,推动新一代通信及定位导航技术在无人机数据传输、链路控制、监控管理等方面的应用,开展智能飞控系统、高集成度专用芯片等关键部件研制。到2020年,智能消费级无人机三轴机械增稳云台精度达到0.005 度,实现 360 度全向感知避障,实现自动智能强制避让航空管制区域。

(四)医疗影像辅助诊断系统。推动医学影像数据采集标准化与规范化,支持脑、肺、眼、骨、心脑血管、乳腺等典型疾病领域的医学影像辅助诊断技术研发,加快医疗影像辅助诊断系统的产品化及临床辅助应用。到2020年,国内先进的多模态医学影像辅助诊断系统对以上典型疾病的检出率超过95%,假阴性率低于1%,假阳性率低于5%。

(五)视频图像身份识别系统。支持生物特征识别、视频理解、跨媒体融合等技术创新,发展人证合一、视频监控、图像搜索、视频摘要等典型应用,拓展在安防、金融等重点领域的应用。到2020年,复杂动态场景下人脸识别有效检出率超过97%,正确识别率超过90%,支持不同地域人脸特征识别。

(六)智能语音交互系统。支持新一代语音识别框架、口语化语音识别、个性化语音识别、智能对话、音视频融合、语音合成等技术的创新应用,在智能制造、智能家居等重点领域开展推广应用。到2020年,实现多场景下中文语音识别平均准确率达到96%,5米远场识别率超过92%,用户对话意图识别准确率超过90%。

(七)智能翻译系统。推动高精准智能翻译系统应用,围绕多语言互译、同声传译等典型场景,利用机器学习技术提升准确度和实用性。到2020年,多语种智能互译取得明显突破,中译英、英译中场景下产品的翻译准确率超过85%,少数民族语言与汉语的智能互译准确率显著提升。

(八)智能家居产品。支持智能传感、物联网、机器学习等技术在智能家居产品中的应用,提升家电、智能网络设备、水电气仪表等产品的智能水平、实用性和安全性,发展智能安防、智能家具、智能照明、智能洁具等产品,建设一批智能家居测试评价、示范应用项目并推广。到2020年,智能家居产品类别明显丰富,智能电视市场渗透率达到90%以上,安防产品智能化水平显著提升。

三、突破核心基础

加快研发并应用高精度、低成本的智能传感器,突破面向云端训练、终端应用的神经网络芯片及配套工具,支持人工智能开发框架、算法库、工具集等的研发,支持开源开放平台建设,积极布局面向人工智能应用设计的智能软件,夯实人工智能产业发展的软硬件基础。着重在以下领域率先取得突破:

(一)智能传感器。支持微型化及可靠性设计、精密制造、集成开发工具、嵌入式算法等关键技术研发,支持基于新需求、新材料、新工艺、新原理设计的智能传感器研发及应用。发展市场前景广阔的新型生物、气体、压力、流量、惯性、距离、图像、声学等智能传感器,推动压电材料、磁性材料、红外辐射材料、金属氧化物等材料技术革新,支持基于微机电系统(MEMS)和互补金属氧化物半导体(CMOS)集成等工艺的新型智能传感器研发,发展面向新应用场景的基于磁感、超声波、非可见光、生物化学等新原理的智能传感器,推动智能传感器实现高精度、高可靠、低功耗、低成本。到2020年,压电传感器、磁传感器、红外传感器、气体传感器等的性能显著提高,信噪比达到70dB、声学过载点达到135dB的声学传感器实现量产,绝对精度100Pa以内、噪音水平0.6Pa以内的压力传感器实现商用,弱磁场分辨率达到1pT的磁传感器实现量产。在模拟仿真、设计、MEMS工艺、封装及个性化测试技术方面达到国际先进水平,具备在移动式可穿戴、互联网、汽车电子等重点领域的系统方案设计能力。

(二)神经网络芯片。面向机器学习训练应用,发展高性能、高扩展性、低功耗的云端神经网络芯片,面向终端应用发展适用于机器学习计算的低功耗、高性能的终端神经网络芯片,发展与神经网络芯片配套的编译器、驱动软件、开发环境等产业化支撑工具。到2020年,神经网络芯片技术取得突破进展,推出性能达到128TFLOPS(16位浮点)、能效比超过1TFLOPS/w的云端神经网络芯片,推出能效比超过1T OPS/w(以16位浮点为基准)的终端神经网络芯片,支持卷积神经网络(CNN)、递归神经网络(RNN)、长短期记忆网络(LSTM)等一种或几种主流神经网络算法;在智能终端、自动驾驶、智能安防、智能家居等重点领域实现神经网络芯片的规模化商用。

(三)开源开放平台。针对机器学习、模式识别、智能语义理解等共性技术和自动驾驶等重点行业应用,支持面向云端训练和终端执行的开发框架、算法库、工具集等的研发,支持开源开发平台、开放技术网络和开源社区建设,鼓励建设满足复杂训练需求的开放计算服务平台,鼓励骨干龙头企业构建基于开源开放技术的软件、硬件、数据、应用协同的新型产业生态。到2020年,面向云端训练的开源开发平台支持大规模分布式集群、多种硬件平台、多种算法,面向终端执行的开源开发平台具备轻量化、模块化和可靠性等特征。

四、深化发展智能制造

深入实施智能制造,鼓励新一代人工智能技术在工业领域各环节的探索应用,支持重点领域算法突破与应用创新,系统提升制造装备、制造过程、行业应用的智能化水平。着重在以下方面率先取得突破:

(一)智能制造关键技术装备。提升高档数控机床与工业机器人的自检测、自校正、自适应、自组织能力和智能化水平,利用人工智能技术提升增材制造装备的加工精度和产品质量,优化智能传感器与分散式控制系统(DCS)、可编程逻辑控制器(PLC)、数据采集系统(SCADA)、高性能高可靠嵌入式控制系统等控制装备在复杂工作环境的感知、认知和控制能力,提高数字化非接触精密测量、在线无损检测系统等智能检测装备的测量精度和效率,增强装配设备的柔性。提升高速分拣机、多层穿梭车、高密度存储穿梭板等物流装备的智能化水平,实现精准、柔性、高效的物料配送和无人化智能仓储。

到2020年,高档数控机床智能化水平进一步提升,具备人机协调、自然交互、自主学习功能的新一代工业机器人实现批量生产及应用;增材制造装备成形效率大于450cm3/h,连续工作时间大于240h;实现智能传感与控制装备在机床、机器人、石油化工、轨道交通等领域的集成应用;智能检测与装配装备的工业现场视觉识别准确率达到90%,测量精度及速度满足实际生产需求;开发10个以上智能物流与仓储装备。

(二)智能制造新模式。鼓励离散型制造业企业以生产设备网络化、智能化为基础,应用机器学习技术分析处理现场数据,实现设备在线诊断、产品质量实时控制等功能。鼓励流程型制造企业建设全流程、智能化生产管理和安防系统,实现连续性生产、安全生产的智能化管理。打造网络化协同制造平台,增强人工智能指引下的人机协作与企业间协作研发设计与生产能力。发展个性化定制服务平台,提高对用户需求特征的深度学习和分析能力,优化产品的模块化设计能力和个性化组合方式。搭建基于标准化信息采集的控制与自动诊断系统,加快对故障预测模型和用户使用习惯信息模型的训练和优化,提升对产品、核心配件的生命周期分析能力。

到2020年,数字化车间的运营成本降低20%,产品研制周期缩短20%;智能工厂产品不良品率降低10%,能源利用率提高10%;航空航天、汽车等领域加快推广企业内外并行组织和协同优化新模式;服装、家电等领域对大规模、小批量个性化订单全流程的柔性生产与协作优化能力普遍提升;在装备制造、零部件制造等领域推进开展智能装备健康状况监测预警等远程运维服务。

五、构建支撑体系

面向重点产品研发和行业应用需求,支持建设并开放多种类型的人工智能海量训练资源库、标准测试数据集和云服务平台,建立并完善人工智能标准和测试评估体系,建设知识产权等服务平台,加快构建智能化基础设施体系,建立人工智能网络安全保障体系。着重在以下领域率先取得突破:

(一)行业训练资源库。面向语音识别、视觉识别、自然语言处理等基础领域及工业、医疗、金融、交通等行业领域,支持建设高质量人工智能训练资源库、标准测试数据集并推动共享,鼓励建设提供知识图谱、算法训练、产品优化等共性服务的开放性云平台。到2020年,基础语音、视频图像、文本对话等公共训练数据量大幅提升,在工业、医疗、金融、交通等领域汇集一定规模的行业应用数据,用于支持创业创新。

(二)标准测试及知识产权服务平台。建设人工智能产业标准规范体系,建立并完善基础共性、互联互通、安全隐私、行业应用等技术标准,鼓励业界积极参与国际标准化工作。构建人工智能产品评估评测体系,对重点智能产品和服务的智能水平、可靠性、安全性等进行评估,提升人工智能产品和服务质量。研究建立人工智能技术专利协同运用机制,支持建设专利协同运营平台和知识产权服务平台。到2020年,初步建立人工智能产业标准体系,建成第三方试点测试平台并开展评估评测服务;在模式识别、语义理解、自动驾驶、智能机器人等领域建成具有基础支撑能力的知识产权服务平台。

(三)智能化网络基础设施。加快高度智能化的下一代互联网、高速率大容量低时延的第五代移动通信(5G)网、快速高精度定位的导航网、泛在融合高效互联的天地一体化信息网部署和建设,加快工业互联网、车联网建设,逐步形成智能化网络基础设施体系,提升支撑服务能力。到2020年,全国90%以上地区的宽带接入速率和时延满足人工智能行业应用需求,10家以上重点企业实现覆盖生产全流程的工业互联网示范建设,重点区域车联网网络设施初步建成。

(四)网络安全保障体系。针对智能网联汽车、智能家居等人工智能重点产品或行业应用,开展漏洞挖掘、安全测试、威胁预警、攻击检测、应急处置等安全技术攻关,推动人工智能先进技术在网络安全领域的深度应用,加快漏洞库、风险库、案例集等共享资源建设。到2020年,完善人工智能网络安全产业布局,形成人工智能安全防控体系框架,初步建成具备人工智能安全态势感知、测试评估、威胁信息共享以及应急处置等基本能力的安全保障平台。

六、保障措施

(一)加强组织实施

强化部门协同和上下联动,建立健全政府、企业、行业组织和产业联盟、智库等的协同推进机制,加强在技术攻关、标准制定等方面的协调配合。加强部省合作,依托国家新型工业化产业示范基地建设等工作,支持有条件的地区发挥自身资源优势,培育一批人工智能领军企业,探索建设人工智能产业集聚区,促进人工智能产业突破发展。面向重点行业和关键领域,推动人工智能标志性产品应用。建立人工智能产业统计体系,关键产品与服务目录,加强跟踪研究和督促指导,确保重点工作有序推进。

(二)加大支持力度

充分发挥工业转型升级(中国制造2025)等现有资金以及重大项目等国家科技计划(专项、基金)的引导作用,支持符合条件的人工智能标志性产品及基础软硬件研发、应用试点示范、支撑平台建设等,鼓励地方财政对相关领域加大投入力度。以重大需求和行业应用为牵引,搭建典型试验环境,建设产品可靠性和安全性验证平台,组织协同攻关,支持人工智能关键应用技术研发及适配,支持创新产品设计、系统集成和产业化。支持人工智能企业与金融机构加强对接合作,通过市场机制引导多方资本参与产业发展。在首台(套)重大技术装备保险保费补偿政策中,探索引入人工智能融合的技术装备、生产线等关键领域。

(三)鼓励创新创业

加快建设和不断完善智能网联汽车、智能语音、智能传感器、机器人等人工智能相关领域的制造业创新中心,设立人工智能领域的重点实验室。支持企业、科研院所与高校联合开展人工智能关键技术研发与产业化。鼓励开展人工智能创新创业和解决方案大赛,鼓励制造业大企业、互联网企业、基础电信企业建设“双创”平台,发挥骨干企业引领作用,加强技术研发与应用合作,提升产业发展创新力和国际竞争力。培育人工智能创新标杆企业,搭建人工智能企业创新交流平台。

(四)加快人才培养

贯彻落实《制造业人才发展规划指南》,深化人才体制机制改革。以多种方式吸引和培养人工智能高端人才和创新创业人才,支持一批领军人才和青年拔尖人才成长。依托重大工程项目,鼓励校企合作,支持高等学校加强人工智能相关学科专业建设,引导职业学校培养产业发展急需的技能型人才。鼓励领先企业、行业服务机构等培养高水平的人工智能人才队伍,面向重点行业提供行业解决方案,推广行业最佳应用实践。

(五)优化发展环境

开展人工智能相关政策和法律法规研究,为产业健康发展营造良好环境。加强行业对接,推动行业合理开放数据,积极应用新技术、新业务,促进人工智能与行业融合发展。鼓励政府部门率先运用人工智能提升业务效率和管理服务水平。充分利用双边、多边国际合作机制,抓住“一带一路”建设契机,鼓励国内外科研院所、企业、行业组织拓宽交流渠道,广泛开展合作,实现优势互补、合作共赢。

  • Dec 15 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ③(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第三篇

第一篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ①(翻译)

第二篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ②(翻译)

屏幕快照_2017-12-11_下午6.36_.00_.png

第三章:深度学习框架及生态系统探索

虽然令人印象深刻,但TensorFlow本身“仅仅”是一个使用数据流图进行数值计算的开源库。 如第2章所述,有许多开源竞争者可以用来构建,训练和运行复杂神经网络的推理; 未来甚至会出现更多。深度学习框架的生态系统是围绕着这个框架本身的,不仅由原作者创建,而且还由社区建立,在不断发展的空间中形成了一个长期的解决方案。 这是TensorFlow丰富而不断增长的生态系统,迫使许多人使用它。 对每个TensorFlow组件的详细使用将超出本报告的范围,但我们将努力介绍相关的部分,并提供一些更大的整体难题的视角。

Python是生态系统力量的一个很好的例子。该语言的卖点之一是其“能力内置”的理念; 它带有一个标准的库,使许多任务(如发出HTTP请求)变得简单。即使采用这种方法,Python也将其一些成功归功于其生态系统。 Numpy和Scipy图书馆为数字和科学计算奠定了坚实的基础,扩展了语言的核心功能和使用它的社区。像scikit-learn这样的库,几乎可以作为机器学习领域的算法的参考实现,而Pandas是基于Python的数据分析的事实标准,它们建立在Numpy和Scipy的基础之上,为了帮助Python争夺数据科学首选编程语言的宝座。像Enthought和Continuum Analytics这样的公司创建了Python的分发版本,其中包括许多外部依赖造成安装困难的关键库。这简化了Python的部署,拓宽了用户群体。 IPython Notebook已经发展成为Jupyter(Julia Python R)来支持Python以外的新语言。 Jupyter正在成为数据科学,深度学习和人工智能的标准IDE。支持基于Python的深度学习库,也不仅扩展了Python的生态系统,而且也因为这个生态系统而成为可能。

我们将TensorFlow生态系统划分为几个功能类别。 第一组通过使用TensorFlow设计,构建和训练神经网络更容易,从而增加了库的直接效用。 这方面的几个例子是预建的或预训练的深度神经网络,用于跟踪训练进度的图形界面(TensorBoard)以及TensorFlow(Keras)的更高级别API。 第二类包含可以预判行为并易于管理的工具。下一个类别是用于连接到其他流行的开源项目(如Hadoop、Spark、Docker和Kubernetes)并与之交互的组件。 最后一类是减少训练深度神经网络的时间和成本的技术,因为这通常是需要进一步发展的部分。

这个部分大致上遵循TensorFlow工作流程的三个阶段:(1)数据准备、(2)训练、(3)推理和模型服务。 我们不会把太多的精力放在准备用于TensorFlow的数据上;假设从其他类型的机器学习过渡到现在的企业已经有了清理,准备训练数据的机制。 图3-1显示了生态系统如何与整个工作流程保持一致。

3-1.png

图3-1 TensorFlow生态系统各个部分与整个工作流程之间的一致性

1. 改进网络设计和训练

以下工具和开源项目能够帮助软件工程师和数据科学家设计、构建和训练深度学习模型,力求为TensorFlow用户创造即时的价值。如果您是新手,我们建议您以相关的预建神经网络为出发点,然后仔细研究Keras,这可以简化复杂网络的创建并为模型提供一些便捷性。 如果您的应用程序涉及序列数据(文本、音频、时间序列等),请不要跳过Tensor2Tensor。 无论你的经验水平如何,期望你使用TensorBoard。

估计

TensorFlow为机器学习(tf.estimator)提供了一个更高级别的API。 它包含许多内置的模型——线性分类、线性回归、神经网络分类、神经网络回归以及组合模型,并支持更快速地配置、训练、预测和评估。

预建神经网络

深度神经网络设计仍然是一种学术追求和艺术形式。 为了加速DL的使用,TensorFlow附带了许多可供即时使用的示例神经网络。 在开始任何项目之前,请检查此目录以查看是否有可用的跳转启动。 特别值得一提的是Inception网络,这是一种卷积神经网络,在2014年的ImageNet大规模视觉识别挑战中,在分类和检测方面都表现出最好的效果。

Keras

Keras是一个用Python编写的高级API,专为人类在尽可能短的时间内构建和实验复杂的神经网络而设计。 您可以使用Keras作为TensorFlow的模型定义抽象层,也可以与其他TF相关的工具兼容。 有趣的是,Keras提供了一个将网络从一个深度学习库转移到另一个深度学习库的潜在可移植性途径,与实现标准模型抽象最接近。 目前它不仅能够在TensorFlow上运行,还能在Theano、Microsoft Cognitive Toolkit以及最近的MXNet上运行。 此外,Keras是Deeplearning4J的Python API。

用于TensorFlow的机器学习工具包

该工具包提供了开箱即用的高级机器学习算法(参见下面的列表),该算法受流行的scikit-learn库的启发,可立即使用,优于使用TF的低级API重写算法。

  • 神经网络(DNN,RNN,LSTM等)
  • 线性和逻辑回归
  • K-means聚类
  • 高斯混合模型
  • WALS矩阵分解
  • 支持向量机(L1和L2正则化)
  • 用于上下文优化的随机双重坐标上升
  • 随机森林
  • 决策树

重要的是,所有这些算法都具有分布式实现,并且可以并行执行跨机器,与非并行实现相比,性能显著提高。

Tensor2Tensor(T2T)

T2T是一个建立在TensorFlow之上的开源系统,用于支持最先进的深度学习网络的开发和训练,特别关注sequence-to-sequence模型(用于翻译文本或为图像提供说明)。这个在2017年发布的库正在被Google Brain团队积极使用、开发、维护和支持。 它还包括以下内容:

  • 许多包含不同类型的数据的数据集(文本,音频和图像)
  • 超参数配置
  • 最近的一些学术论文中的最佳模型,包括:

– “Attention Is All You Need”

– “Depthwise Separable Convolutions for Neural Machine Translation”

– “One Model to Learn Them All”

该软件的目标是提供比基本TensorFlow API更高的抽象级别,并将许多最佳实践和交易中的难学“技巧”封装到软件中,在所有软件之间实施标准化接口。

TensorBoard

机器学习通常很难形象化,神经网络一直被批评为黑盒子,几乎没有透明的内部工作。 深度网络图可能难以可视化。 很多图层中的数据流很难原位观察甚至后验。 从实践者的角度来看,了解和调试神经网络可能是非常困难的。

TensorBoard是一个可视化工具的集合,提供对TensorFlow图形的洞察,并允许开发人员或分析人员了解、调试和优化网络。 这些工具的用户界面是基于浏览器的。 它提供了三个核心功能:

图表结构的可视化

理解一个神经网络的第一步,可以由几十层,几十万个节点或更多的网络组成,从视觉上检查和验证网络的结构。

摘要的可视化

TensorBoard允许您附加总结,以捕获在训练和执行过程中流过图表的各种张量。 这些张量可以表示输入数据或网络权重,直方图显示网络权重或网络中其他张量如何随时间变化。

嵌入式可视化器

TensorBoard还允许您在三维界面中显示机器学习结果。

通用的功能是很方便使用的,例如学习期间的图表汇总统计。 您还可以深入了解特定图层的输出以运行您自己的分析。 这使得可以在这些值作为下一层的输入之前审查来自一层的输出分布。 TensorBoard读取序列化的TensorFlow事件数据。 尽管某些功能和可视化功能是在没有设置的情况下自动提供的,但其他功能和可视化功能需要更改代码才能捕捉要显示的数据,并且您可以选择收集摘要信息的节点或对象。

谷歌有持续的TensorBoard发展的大目标。 首先,TensorFlow调试器将与TensorBoard集成在一起,以便您可以通过此工具可视化调试信息。 接下来,TensorBoard即将支持允许复杂和定制可视化的插件,这些插件可用于在各种问题领域中查询具有独特可视化需求的特定神经网络类型。 最后,Google计划发布一个“组织级”的TensorBoard,不仅为个人而且为团队设计,以便结果可以迅速传播,共享的发展历史可以继续保持。

TensorFlow调试器

TensorFlow带有一个专门的调试器(tfdbg),它可以在通过TensorFlow图形进行训练和推理时自动检测任何数据。 TensorFlow(tdb)有一个有趣的第三方开源调试器,具有强大的可视化功能。 这被作者描述为:“TDB之于TensorBoard,就像GDB之于printf。 两者在不同的情况下都是有用的。”然而,作者Eric Jang显然是被Google Brain聘用的,外部的努力已经被放弃了。

2. 部署网络用于预测

由于需要大量的计算需求,深度学习训练通常会承担大部分压力。 但是,如果没有人使用深度神经网络,那么最新的深度神经网络是没有价值的。 以强大、可扩展和高效的方式提供预测功能对于深度学习库和生态系统的成功至关重要。

TensorFlow Serving

训练结束后,企业将面临如何运行深度学习网络和机器学习模型的决策。 将会有一些用例,例如在研究、实验或者异步预测/分类活动中,交互性是不需要的。 然而,在许多情况下,企业将希望为面向用户的应用程序提供实时预测(如移动应用程序中的对象检测,例如HBO硅谷的“Not Hotdog”应用程序),人为决策支持或自动化指挥和控制系统;这就要求将先前训练过的网络投入生产进行预测。

部署机器学习模型带来的需求在设计生产系统方面打开了潘多拉盒子。 我们如何提供最高水平的表现? 如果我们需要为不同的操作公开多个模型呢? 我们如何管理部署过程或处理多个模型版本的配置管理?

TensorFlow Serving提供了一个面向生产的高性能系统来解决这个模型部署的问题;它托管TensorFlow模型并允许远程访问它们以满足客户端请求。 重要的是,所提供的模型是可版本化的,使得用新的权重或迭代更新网络变得容易,同时维护独立的研究和生产分支。 您无法通过浏览器发出HTTP请求来与TensorFlow服务进行通信。 相反,构建在C++上的性能的服务器实现了gRPC接口。 gRPC是Google的远程过程调用框架,旨在以可扩展的方式高效地连接数据中心内的服务。 因此,需要建立一个客户端来与服务器通信。 深度学习和机器学习模型必须以Google的protobuf格式保存。 TensorFlow服务可以在CloudML中或通过使用Docker / Kubernetes进行(自动)扩展。

进程内服务

在某些情况下,组织可能不想部署TensorFlow Serving或不能使用TensorFlow Serving RPC服务器来为模型提供服务。在这些情况下,通过在应用程序中包含核心TensorFlow库,您仍然可以直接使用保存的模型。进程内服务提供了一种非常轻量级的机制来提供预测功能,但TensorFlow Serving所提供的好处却没有,比如自动请求批处理或模型版本控制。

举个例子,我们来考虑一个用Python库Flask构建的基本网站。该网站将允许用户使用深度卷积神经网络来上传图像并识别图像内的对象。从我们的角度来看,有趣的部分发生在用户上传照片之后,并且经过训练的卷积神经网络被加载之后。一旦收到照片,Flask服务器将显示网络输入照片,执行预测,并返回结果。所有的预测能力都将由TensorFlow库提供,这些库很容易被基于Flask的Web服务器调用。类似的方式也可以用在移动设备上(请参阅http://tensorflow.org/mobile)

3. 与其他系统集成

企业正在考虑采用的新技术的一个重要方面是如何适应现有的企业基础架构。 尽管当今的大数据格局非常拥挤和复杂,但是有一些明显的技术在许多行业的大数据栈中发挥作用。

数据摄取选项

深度学习的关键是大量的数据,必须清理、调整,然后用于训练神经网络。为了达到这个目的,数据集是必须事先准备的。 幸运的是,我们有很多选择。 首先,TensorFlow支持在TFRecords中的协议缓冲区上建立自己的本地TensorFlow格式(tf.Example和tf.SequenceExample)。 请注意,Apache Beam对TFRecords有本地支持。 其次,稍微慢一些,TensorFlow内置了读取JSON,逗号分隔值(CSV)和Avro数据文件的功能。 最后,最终用户可以使用Python来读取数据,包括Pandas数据表中的数据。 因为最后一个选项最慢,所以最好进行测试和实验。 最后,TensorFlow支持几种不同的分布式存储选项,包括Apache Hadoop HDFS、Google Cloud Storage和Amazon Elastic File System。

TensorFlowOnSpark

雅虎非常友好地开放源代码,允许分布式TensorFlow训练和预测运行在为Apache Spark构建的集群上。 从企业角度来看,这可能非常强大,因为许多希望使用TensorFlow的公司可能已经在使用Spark进行数据分析和机器学习 。 因此,组织可以重新使用现有的集群资产,而不是单独设置单独的基础设施来进行深入学习,从而使转换变得更加容易。 此外,这可以减轻将数据从一个集群转移到另一个集群的需求——这是常常一个痛苦且耗时的过程。

从策略的角度来看,TensorFlowOnSpark与TensorBoard兼容,甚至在集群设置训练期间配置Spark执行器来运行Tensorboard。 该API是最小的,使其快速学习和使用,只需要很少的变化便能通过现有的TensorFlow代码运行。

TensorFlowOnSpark提供了三个方面的手段:

  • 在spark中启动/配置TensorFlow群集
  • 通过将Spark的弹性分布式数据集(RDD)转换为feed_dict将数据馈送到TensforFlow图
  • 完成后关闭TensorFlow群集

为了最大限度地利用Spark,你需要运行TensorFlow程序,这个程序将完全饱和资源;否则,性能不会像任何分布式应用那样线性扩展。 在缺点方面,TensorFlowOnSpark并不完全符合所有的社区项目(如Keras)。 此外,在Java虚拟机(JVM)中运行的Spark可能会在失败时提供一些相对难以理解的错误消息。 无论如何,如果您的企业已经在使用Spark群集,这可能是运行分布式TensorFlow进行训练的最简单方法。

“Ecosystem” Repo

“Ecosystem” Repo是Google公司在GitHub上的一个Apache 2.0许可的开放源代码存储库,其中包含将TensorFlow与众多开源软件集成在一起的示例:

Docker:

Dockerfiles中的一组示例,用于构建具有各种TensorFlow配置的容器。

Kubernetes:

用于在Kubernetes上运行分布式TensorFlow的YAML模板文件。

Marathon (on top of Mesos):

在Marathon中运行的TensorFlow的配置文件,Mesos的容器流程,它是一个集群管理器。

Hadoop:

使用TRRecords格式实现Apache Hadoop MapReduce的InputFormat / OutputFormat。

Spark-tensorflow-connector:

用于读取和写入Spark 2.0+ SQL DataFrame中的TensorFlow记录(TFRecords)的库。

考虑“生态系统”回购的一个起点,探索如何将TensorFlow与其他软件集成在一起。

4. 加速训练和预测

训练深度神经网络需要大量的计算能力,通常超过了通用微处理器集群可以提供的功能。 然而,随着深度学习的价值越来越明显,寻求更高性能的硬件变得至关重要。 GPU很快就被用于这个任务,后来,为这个用例专门设计的定制硬件也在开发中。 需要注意的是,如果没有足够的训练数据和足够的计算能力,深度学习将是无关紧要的,并且如今也不会取得的如此令人印象深刻的成功。

GPU和CUDA

使用图形处理单元(GPU)以大规模并行方式执行浮点计算已经引起了近二十年来重视性能的程序员的兴趣。 实际上,GPU上的通用计算(GPGPU)这个术语是在2002年创造的。NVIDIA一直是这个用例的一个长期推动者,并为公司的GPU开发了其专有的计算统一设备架构(CUDA)作为并行计算平台和编程模型。

训练深度学习网络已经成为这个领域的杀手级应用,NVIDIA借助NVIDIA深度学习软件开发套件(NVIDIA Deep Learning Software Development Kit)增强了其CUDA产品,该套件包含一个GPU加速的神经网络(称为cuDNN)所需的关键原语库。训练深度网络,与英特尔最快的CPU相比,使用NVIDIA提供的最快的GPU可以提供10到100倍的加速。

张量处理单元

在2016年5月世界了解Google IO的谷歌张量处理单元(TPU)之前,GPU被用于加速深度神经网络的基准。第一代TPU于2016年5月在Google I / O会议上宣布, 加速预测工作量(不是训练)使用量化的整数算术,而不是浮点。 第一个第一代TPU的优秀技术概况在网上发布,过去一年中提供了一篇非常全面的技术文章,可在线获得。重要的是,这个第一代TPU已经在Google的数据中心 一年多的时间,并帮助谷歌的AlphaGo赢下了世界冠军李世乭。

第二代TPU于2017年发布,可进行预测和训练,并进行浮点运算。 每个单独的处理器提供45 teraflops的性能,并被安排到一个四芯片,180 个teraflop的设备。 64个这样的设备组装成一个容器,提供了11.5千万亿次的深度学习性能。对于任何面向服务器的处理器来说,这两个芯片的关键在于它们不仅提供令人印象深刻的浮点性能,而且 比传统处理器消耗更少的电力。

为什么这对企业来说很重要? 因为TPU降低了模型训练所需的成本和时间。 尽管Google没有出售TPU的计划,但通过Google的云产品可以提供这种功能。 此外,考虑到公司控制整个堆栈,Google有一些有趣的选择可以在软件和硬件上进行优化。 Google并不是这个领域唯一的公司。 英特尔于2016年8月收购了一家定制芯片加速深度学习的小公司Nervana。

Google Cloud TPU和CloudML

Cloud TPU是目前提供alpha版本的Google Cloud服务,使用户能够使用第二代TPU对机器学习模型进行训练和预测。 您可以使用标准虚拟机和自定义虚拟机类型连接到Cloud TPU,该产品还与其他Google云端平台产品(包括Google Compute Engine和BigQuery)完全集成。这是企业利用Google TPU的最直接方式。Google还通过云计算机学习引擎(Cloud ML)的一些功能间接公开TPU。

5. 本章小结

对于任何采用深度学习的企业来说,面临的问题是如何融入组织现有的工作流程和数据通道。 TensorFlow数据流水线由三个阶段组成:(1)数据准备、(2)模型训练、(3)模型服务和预测。 这三个都直接从TensorFlow库和新兴的生态系统获得了大量的支持。 这个数据流水线与企业中的传统机器学习流水线非常相似,但有一个显着的区别。 对于深度学习模式,模型训练会花费更多的时间和资源。 生态系统试图通过支持多个GPU甚至Google自己的TPU来弥补这种情况。

参考资料:

  • Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich, “Going Deeper with Convolutions”, Computer Vision and Pattern Recognition (2015).
  • N.P. Jouppi et al., “In-Datacenter Performance Analysis of a Tensor Processing Unit”, Proceedings of the 44th Annual International Symposium on Computer Architecture (June 2017): 1-12.
  • Patrick Kennedy, “Google Cloud TPU Details Revealed,” STH, May 17, 2017, https:// www.servethehome.com/google-cloud-tpu-details-revealed/.
  • Cloud TPUs – ML accelerators for TensorFlow | Google Cloud Platform.

结论

本报告试图介绍深度学习,以及它的使用和使用TensorFlow的企业会遇到的核心问题。我们首先介绍了深度学习的情况,特别是与更传统的机器学习技术相比较,并且盘点了一些使用了深度学习技术的最新应用。如果您的组织对使用音频、视频、图像或自由文本数据感兴趣,深入学习是值得探索的。接下来,我们盘点了深度学习的各种框架,特别关注以企业为中心的库,包括微软的Cognitive Toolkit、MXNet和Deeplearning4J。最后,我们讨论了TensorFlow库和现有的生态系统,以了解各种组件如何补充图书馆的核心功能,并协助网络训练和预测。我们希望这个概述能够帮助企业内的决策者和技术领导者驾驭不断发展的深度学习世界。

关于作者

Sean Murphy是PingThings Inc.的联合首席执行官,这是一家以人工智能为核心的创业公司,将先进的数据科学和机器学习带入全国的电网。在获得马里兰大学数学与电子工程双学士学位后,Sean在约翰·霍普金斯大学(Johns Hopkins University)的生物医学工程专业毕业,获得荣誉学位。他在约翰霍普金斯大学应用物理实验室担任高级科学家十多年,主要从事机器学习、高性能、云计算、图像分析和异常检测。从科学转向MBA课程,他毕业于牛津大学。他利用自己的商业头脑创建了一家电子邮件分析公司和一家数据科学咨询公司。 Sean还曾担任A系列资助的医疗保健分析公司的首席数据科学家,以及精品研究生教育公司Manhattan Prep的研究和指导主任。他是多个学术领域的多本书和数十篇论文的作者。

Allen Leis是一位经验丰富的数据工程师,有时也是一名数据科学家,位于华盛顿。他以前的工作需要为美国海军、美国参议院和非营利组织开发网络系统,他目前致力于数据分析的技术“狂野西部”以及机器学习。 Allen目前担任各种数据科学初创公司的顾问和软件工程师,以引导他们的数据摄入、清洗和机器学习。 除了投身于解决大数据工程和分布式计算问题,他平常会参与乔治敦大学数据科学证书课程的教学,或沉迷于马里兰大学计算机科学研究生的课程。

(全文完,感谢阅读)

  • Dec 15 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ②(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第二篇

第一篇回顾:锐眼洞察 | TensorFlow在企业中的应用——深度学习生态概述 ①(翻译)

屏幕快照_2017-12-11_下午6.36_.00_.png

第二章:选择一个深度学习框架

当决定采用深度学习时,第一个问题就是你应该选择哪个深度学习库(以及为什么)?深度学习已经成为许多大型科技公司的重要差异化因素,每一个都已经发展或正在倡导一个特定的选择。如谷歌的TensorFlow,微软的认知工具包(又名CNTK)。亚马逊正在支持学术界建造的MXNet,这导致有人质疑其内部开发的DSSTNE(Deep Scalable Sparse Tensor Network Engineer)的寿命。百度拥有并列分布式深度学习(PADDLE)库。 Facebook有Torch和PyTorch。英特尔拥有BigD等等。毫无疑问未来还会有更多选择出现。

我们可以对各种深度学习库进行评估,包括性能,支持的神经网络类型,易用性,支持的编程语言,作者,社区的支持等等。为了提高竞争力,每个库应该支持使用图形处理单元(GPU),最好是多个GPU和分布式计算集群。表2-1总结了十几种可用的顶级开源深度学习库。

图2-1.png

表2-1 12个选定深度学习框架的一般信息和GitHub统计信息(每个适用列中的“最佳”值以粗体突出显示)

支持的编程语言

几乎所有表内列出的框架都是用C ++实现的(可以使用Nvidia的CUDA进行GPU加速),但是在Lua中有后端的Torch和为Java虚拟机(JVM)写了后端的Deeplearning4J。使用这些框架的一个重要问题是他们支持哪些编程语言进行魔性训练,允许神经网络从数据中学习并更新内部权重的计算密集型任务,以及支持哪种语言进行推断,通过之前训练得到模型和新数据获得预测值。

由于推断是生产中比较常见的任务,人们可能会争辩说,库支持推理的语言越多,插入现有企业基础架构就越容易。一般来说训练过程需要专业技术,支持的语言可能会比较有限。理想情况下,一个框架需要可以支持这两个任务的同一套语言。

不同类型的网络

有许多不同类型的神经网络,学术界和工业界的研究人员几乎每天都在开发具有相应新缩写词的新网络类型。例如前馈网络、全连接网络、卷积神经网络(CNN)、受限玻耳兹曼机器(RBM)、深度信念网络(DBN)、自动去噪编码器、堆叠去噪自动编码器、生成对抗网络(GAN) 、循环神经网络(RNN)等等。如果要用图形或列表来表示不同的神经网络类型/结构,神经网络俱乐部是一种初步的选择。

已经受到广泛关注的两种网络类型是卷积神经网络,其能够处理图像作为输入,以及可以处理时序数据的循环神经网络及其变体(例如LSTM),支持将句子中的文本、时间序列数据、音频流等等作为输入。企业选择的深度学习库应该支持最广泛的网络,至少需要尽量与业务需求相关。

部署和操作选项

尽管机器学习和深度学习通常需要大量的训练数据,但深度学习确实预示着从大数据向大型计算的过渡。 对于企业来说,这可能是最大的问题和潜在的障碍,从更传统的机器学习技术过渡到深度学习。训练大规模的神经网络可能需要几周甚至几个月的时间;因此即使是50%的性能增益也能带来巨大的收益。 为了使这个过程变得可行,训练网络需要大量的原始计算能力,这些计算能力通常以一个到多个GPU,或专用处理器的形式出现。 理想情况下,一个框架将支持单CPU、多CPU、GPU环境以及他们的异构组合。

无障碍的帮助

提供帮助的程度对于库的实用性和成功性而言是非常重要的组成部分。 文档量是衡量平台是否成功(及其潜在寿命)的有力指标。大量的文档促使用户容易选择和使用库。 随着生态系统的不断发展,在线教程、电子书籍和在线图书、视频、在线和离线课程,甚至会议等多种形式的文档都是需要的。特别要注意的是企业商业支持的问题。尽管上述所有库都是开源的,但只有一个库提供直接的商业支持:Deeplearning4J。 第三方很可能会更愿意提供咨询服务来支持每个库的使用。

1. 企业级的深度学习

从十几个深度学习框架中进行选择,我们对其中四个更适合企业生产环境部署的库进行了深入研究:TensorFlow、MXNet、Microsoft Cognitive Toolkit和Deeplearning4J。 为了大致估算受欢迎程度,图2-1显示了按Google搜索量衡量的搜索词相对全球范围内的兴趣。

图2-2.png

图2-1 在深度学习开源框架中,全球搜索“随时间推移的兴趣” 最大相对值(100)出现在在2017年5月14日这周

TensorFlow

Google在处理大规模数据方面有着丰富的历史经验,运用机器学习和深度学习为消费者和企业创造有价值的服务。 当Google发布开源软件时,业界都会比较关注,特别是有新版本发布时。 2011年,Google内部使用名为DistBelief的系统进行深度学习,该系统能够使用“大规模机器集群在深度网络中分发训练和推理”。凭借多年运营这个平台的经验, Google最终于2015年11月发布了 TensorFlow。

TensorFlow是用于表达机器学习算法的界面,以及用于执行这种算法的实现。 使用TensorFlow表达的计算可以在各种各样的异构系统上执行,从移动设备(例如手机和平板电脑)到大型分布式系统(数百台机器)以及数千个计算设备(如GPU)。 该系统是灵活的,可以用来表达各种各样的算法,包括深度神经网络模型的训练和推理算法,它已经被应用在十几个计算机科学等研究领域,进行机器学习系统部署和投产, 例如语音识别,计算机视觉,机器人学,信息检索,自然语言处理,地理信息提取和计算药物成分等。

有些人认为这是一个赢家通吃的领域,可以说TensorFlow已经赢得了开发者的心。 虽然这个声明可能还为时过早,但TensorFlow目前拥有令人印象深刻的源动力。 几乎所有的指标都显示,TensorFlow都是深度学习领域最活跃的开源项目。 现在已经产生了相当多有关TensorFlow的书籍和高端会议。以Google搜索量衡量,已经获得了全球范围内广泛的关注和兴趣,并且具有最多的有关活动聚会。 对竞争对手来说,这种领先将很难被超越。

MXNet

MXNet是我们将深入研究的最新的深度学习框架。 它于2017年1月进入Apache孵化,截至2017年10月的最新版本是目前已经发布 1.0 正式版。 问题是,由于其比较新而且竞争对手很强大,企业是否应该考虑到这种替代性的深度学习框架呢? 亚马逊在2016年11月宣布:“Apache MXNet是AWS 选择的深度学习框架”。 MXNet背后的创始机构之一,卡内基梅隆大学和CMU机器学习系教授Alexander Smola博士,2017年7月加入亚马逊可能并非巧合。

为了进一步证明MXNet 的竞争力,最新的框架版本允许开发人员将MXNet深度学习模型转换为Apple的CoreML格式,这意味着数十亿iOS设备现在可以为使用MXNet的应用程序提供推理功能。 另外请注意,苹果公司是与上述任何一个深度学习框架都没有关联的大型科技公司。

什么是MXNet,它是如何改进现有的库的?

MXNet是一个多语言机器学习库,用于简化机器学习算法的开发,特别是深度神经网络。 嵌入在宿主语言中,它将声明性符号表达式与命令张量计算相结合。它提供了自动分化来推导梯度。 MXNet具有计算和内存的高效性,可运行在各种异构系统上,从移动设备到分布式GPU集群。

MXNet是由许多顶尖大学(包括CMU,麻省理工学院,斯坦福大学,纽约大学,华盛顿大学和阿尔伯塔大学)合作而成的。从其最近的开发情况看,作者有机会已有的深度学习框架中学习并改进。 框架努力提供灵活性能。 开发人员可以混合使用符号和命令式编程模型,并且可以通过动态依赖调度程序来并行化两者。 开发人员还可以利用预定义的神经网络层来构建复杂的网络,代码很少。 重要的是,MXNet远不止支持Python。 它也具有完整的Scala、R、Julia,C ++、甚至Perl的API。 最后,MXNet代码库很小,专为在GPU和CPU上进行高效扩展而设计。

微软认知工具包(CNTK)

尽管互联网崛起,微软仍然是企业领域的主要厂商之一。 因此,微软研究院推出深度学习框架应该是不足为奇的。 以前称为“计算神经工具包”(CNTK),该工具包显然是从微软研究院的世界级语音识别团队中涌现出来的,然后推广到其他问题集。 2014年出现了第一篇综合报告,2016年1月在Github上发布了该软件。2016年,该软件在会话语音识别领域取得了人类的表现。 与竞争对手相比,该工具包有望实现高效的可扩展性和令人印象深刻的性能。

Deeplearning4J

Deeplearning4J在这个列表中有些奇怪的框架。 尽管Python已经成为深度学习的近乎事实上的首选语言,但Deeplearning4J是在Java中开发的,旨在使用JVM并与基于JVM的语言(如Scala、Clojure、Groovy、Kotlin和JRuby)兼容。 请注意,底层计算采用C / C ++和CUDA编码。 这也意味着Deeplearning4J可以同时支持Hadoop和Spark。 其次,许多早期的深度学习框架是由学术界出现的,而第二波则是由大型科技公司兴起的。 Deeplearning4J是不同的,因为它是由一个位于旧金山的小型科技创业公司(Skymind)在2014年创建的。尽管Deeplearning4J是开源的,但还是有一家公司愿意为使用该框架的客户提供付费支持。

2. 行业观点

Jet.com提供了深度学习库选择的一个有趣的例子。 Jet.com是一家从上到下采用微软技术栈的公司,是美国为数不多的专注于F#编程语言的商店之一(他们也使用C#和.NET框架)。 对于云服务,该公司使用Microsoft Azure。 尽管重度依赖微软,Jet.com还是使用TensorFlow进行深度学习。 该公司最初是从Theano开始的,但在TensorFlow 发布之后迅速转换到了TensorFlow。

TensorFlow运行在具有在Microsoft Azure云中运行的GPU的虚拟实例上。

作为一家技术创业公司,PingThings在选择不同的技术方面有很大的余地。 Google在这个领域的突出地位以及大量的文档和教程都是选择TensorFlow的强大动力。 然而,PingThings正在与国家科学基金会(NSF)和高级研究计划署能源(ARPA-E)资助的项目与多个研究机构的合作者合作,同时在公用事业部门内部署硬件。 因此,Google设计TensorFlow来平衡研究和大规模运营的需求是非常重要的事实。 Tensor2Tensor(我们稍后讨论的生态系统的一部分)特别吸引人,因为它专注于序列数据。 MXNet是一个有趣的新选项,未来的发展将受到关注,特别是考虑到其卓越的性能和亚马逊的支持。

3. 本章小结

TensorFlow做得非常好:有竞争力的性能,对不同神经网络类型的强大支持,大量的硬件部署选项,支持多GPU、多种编程语言选项等等。然而,库的魅力超越了这个功能集。Google通过分布式文件系统和Map-Reduce计算框架的结合,在帮助启动大数据革命方面发挥了重要作用,并在今天继续领跑业界。 此外,谷歌内部有许多成功的技术迭代,然后看到广泛的发布。受欢迎的容器编排系统Kubernetes就是这样一个例子,它是早期内部系统(如Borg和Omega)的多年经验和教训的结果。谷歌在网络技术和软件工程方面的推进规模,学术界和工业界之间的平衡,似乎特别适合于深度学习的淘金热。

TensorFlow继承了这种合理性,目的是充分灵活地进行深入的研究,同时也足够强大,以允许其模型的生产部署。未来可能会出现更新的框架,可以借鉴TensorFlow的经验教训,改进库的各个方面,提供多种编程方法,或提供更高的性能。上述许多库都试图做一个或多个这样的事情。 然而,TensorFlow正在不断应用这些教训,努力提高性能并探索新的方法。 只要Google的重量和努力落在TensorFlow后面,它将继续成为深度学习库的一个强大、安全、实际上默认的选择,特别是考虑到我们在第3章中描述的生态系统。

参考资料:

  1. J. Dean et al., “Large Scale Distributed Deep Networks,” Advances in Neural Information Processing Systems 25 (2012).
  2. M. Abadi, A. Agarwal, P. Barham, E. Brevdo, Z. Chen, C. Citro, G.S. Corrado et al., “TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems”, preliminary white paper (2015).
  3. T. Chen et al., “MXNet: A Flexible and Efficient Machine Learning Library for Hetero‐ geneous Distributed Systems”, NIPS Machine Learning Systems Workshop (2016).
  4. A. Agarwal et al. (2014). “An Introduction to Computational Networks and the Com‐ putational Network Toolkit”, Microsoft Technical Report MSR-TR-2014-112 (2014).

(未完待续)

  • Dec 13 / 2017
  • 0
Tech

锐眼洞察 | TensorFlow在企业中的应用 ——深度学习生态概述 ①(翻译)

作者:Sean Murphy & Allen Leis

原文:Considering TensorFlow for the Enterprise

译者:TalkingData Heisatis

本译文禁止商用,转载请注明来源与译者!

导语:本文翻译自 O’Reilly 的一篇报告,介绍了 TensorFlow 在企业中的应用,对深度学习生态进行了概述。报告篇幅较长,译文将分为三篇发布,本文为第一篇

屏幕快照_2017-12-11_下午6.36_.00_.png

简介

很多企业考虑在自己的业务场景中应用通常所说的深度学习特别是TensorFlow框架,本报告就从这些企业的角度分析TensorFlow深度学习框架及其生态系统。许多企业对深度学习不是很感冒,而是将技术视为对现有数据分析流水线的扩充或替换。 我们发现,使用深度学习的决定引发了复合决策的分支连锁反应。 在考虑这个转变时,我们强调这些分支,并提供可用的选项,希望为考虑旅程的人们指明方向。 更具体地说,我们考察采用深度学习的潜在理由,研究各种可用的深度学习框架,最后从特定方面分析TensorFlow及深度学习生态。

由于TensorFlow的流行,这个框架不乏教程、报告、概述、演练,甚至还有书籍(如O’Reilly自己的Learning TensorFlow或TensorFlow深度学习)。 我们不会深入研究神经网络的基础知识、线性代数、神经元类型、深度学习网络类型,甚至如何用TensorFlow来启动和运行。本报告旨在帮助企业学习和决策。

我们从高层观点和两个不同的企业角度提供这些信息。其中一个观点来自与沃尔玛有限公司(Walmart,Inc.)2016年秋季收购的大型网上购物平台Jet.com的关键技术人员的讨论Jet.com使用深度学习和TensorFlow来改进目前由其他算法实现的诸多工作。第二个来自工业物联网(IIoT)创业公司PingThings,它将包括机器学习和人工智能(AI)在内的以时间序列为中心的数据平台,从发电到电力分配。虽然PingThings是一家创业公司,但公司与来自电网传输和分配部分的传感器的流式时间序列数据交互。这需要与公共事务部门、大型的传统企业进行广泛的合作;因此,PingThings面临着一家大公司相应的信息技术关注和需求。

第一章:选择使用深度学习

在采用深度学习这项新技术之前,企业首先需要明确的问题是,什么是深度学习?为什么要用这项技术?对于第一个问题,微软研究院李登做出了如下简要回答:

深度学习是一类机器学习技术,从2006年开始大量开发,其分层体系结构中的非线性信息处理的许多阶段被用于模式识别和特征学习。

术语“深度”是指网络中隐藏层的数量,通常大于一些相对较少的数目(例如5或7)。

我们不纠结于这个问题,因为有很多关于深度学习的书籍和文章可以参考。 但是,第二个问题仍然存在:如果现有的数据科学手段已经不但有效而且具备相当的操作性,为什么要费时费力,并且消耗组织资源来进行实现这项技术转换。

1. 一般原理

从一般角度来看,投资深度学习有很大的理由。真正的技术革命,即影响社会多个部分的革命,都是通过从根本上改变特定能力或任务的成本曲线来实现。以传统的微处理器为例,在计算机出现之前,执行数学计算(加法、乘法、平方根等)对于人们来说是昂贵且耗时的。随着数字计算机的出现,算术成本急剧下降,这产生了两个重要影响。第一,所有依靠计算的东西,最终都会被降低成本并广泛使用。第二,许多以前限制问题解决方案的的假设不再有效(一个关键的假设就是数学计算成本很高)。出现了很多新机会,用曾经被认为不可能或财务上不可行的新方法来回顾旧问题。因此,计算机的普及让许多问题可以被重新定义为数学问题

可以说这种由深度学习所代表的“人工智能”的最新浪潮是技术上的一个阶段性变化。人工智能并不是永远改变计算的成本,而是不可逆转地降低了做出预测的成本。由于预测的成本下降以及预测的准确性提高,基于预测的商品和服务的价格会下降(同时质量可能会提高)。 一些现代服务,如天气预报,显然是基于预测。 其他如企业物流和运营等将继续沿着这个方向发展。 亚马逊根据本地客户下周订单确定本地仓库库存的能力将不再是例外,而是新常态。

此外,其他问题也将转化为预测问题。 拿自动驾驶汽车这个非常不受约束的问题来说吧。软件需要考虑的路况情况数几乎是无限的,并且永远不能在软件中明确列举。 然而,如果把问题重新定义为预测人类驾驶员在特定情况下会做什么,那么这一挑战性的问题就更容易处理。根据当今企业运营对预测的依赖程度,无论企业的实力依赖于企业内部还是外部,深度学习都将成为下一代成功企业的推动因素。

2. 特定的激励措施

采用深度学习可以提供显著的优势。深度学习和人工智能这么受关注,是因为它们可以提供可重复的优秀结果。深度学习是机器学习的一个子集,也可以被认为是AI的一个子集(图1-1)。

图1-1.png

图1-1 时变维恩图:人工智能,机器学习和深度学习间的关系

基于深度学习的解决方案不仅在某些任务中的性能超过了其他机器学习技术,与人类的能力相近,甚至在某些情况下超过了人的能力。例如,我们来看看自动机器翻译(从一种语言到另一种语言的文本翻译)性能改进的意义。早期,这种类型的软件比较新颖的,只在有限的少数情况下可能有用。随着翻译准确性的提高,翻译的经济性开始发生变化,适合自动翻译的案例也随之增多。由于翻译的准确性接近人工翻译,潜在的经济影响大了很多。一个翻译人员可以快速查看软件翻译的输出,从而增加翻译输出。 可以减少给定翻译任务量所需的翻译人数。最终,由于基于软件的方法超出了人工翻译的性能,翻译人员完全被软件所取代,软件可​​以每周七天,每天24小时按需运行。截至2016年底,Google翻译服务完全转移到了Google神经机器翻译系统——一种深度长短期记忆网络(LSTM)。

让我们再来看一些其他可以证明深度学习技术给企业带来潜在影响的例子。

3. 使用序列数据库

音频和文本是两种典型的序列数据库,这类数据相邻字母/音频片段之间距离越近,关系越紧密。格式自由、非结构化的文本对于传统算法处理方法来说是一个具有挑战性的数据类型。其他结构化数据的例子包括作为时间序列的浮点值捕获的传感器数据流。 如果企业拥有传统工程学或足够的科学背景,可以将序列数据库视为一维信号或时间序列。

自动语音识别

高斯混合模型(GMM)一直用于将语音转录成文本,直到深度神经网络和递归神经网相继出现,并且在过去近五年的时间内收到最好的效果。任何在Android手机上使用过Google智能助理的人都会亲身体验到这项技术的功能,它的业务影响是巨大的。

4. 使用图像和视频

图像是在二维空间数据关系密切的数据源。它的固有性质即假设图像中彼此相邻的点比相隔更远的点具有更强的关系。视频数据可以被看作一系列图像,且元素的空间关系在每个帧内保持,并且常常在后续帧中继续保持。

图像分类

图像分类是计算机科学和计算机视觉领域的一个经典问题。 为了对输入图像进行分类,算法从一组有限的预定义类别中为图像分配一个标签。 请注意,图像分类假定每个图像中都有一种物体。

图像分类一直被认为是计算机科学中一个非常具有挑战性的问题,因此每年都要进行视觉识别竞赛。在ImageNet大规模视觉识别挑战赛LSVRC-2010中,多伦多大学的深度卷积神经网络以6000万个参数和65万个神经元取胜。在2012年的比赛中,同一个网络的变体赢得了15.3%的错误率, 显着超过了第二名竞争对手的26.2%的错误率。 这种性能的飞跃是非常罕见的,有助于建立以卷积神经网络为主的技术方法。

自动游戏

Google的DeepMind团队表明,一个神经网络可以学习从古老的Atari 2600游戏机上玩七种不同的视频游戏,表现比以前的所有算法都要好,甚至胜过三个人类游戏专家。这个卷积神经网络是使用控制台直接馈送(基本上和人类玩家视角相同)和一个强化学习的变体Q- learning进行训练的。用视频反馈训练人工智能来执行有目标的复杂任务对企业有重大的意义。

自动黑白图片/视频着色

卷积神经网络已被用来对黑白照片进行着色,以前这种时间密集型操作过程有专家完成。加利福尼亚大学伯克利分校的研究人员用“全自动系统”和“人工辅助”两种方式“攻克了幻化彩色照片的幻觉问题”。尽管大多数企业没有对老电影着色的需求,但这一研究方法不仅证明了以深度学习技术为基础如何自动化地完成以前需要创造性专业知识才能完成的任务,也证明了人工智能和人类能够协作加速时间密集型任务的完成。

模仿毕加索

生成对抗网络(GANs)在深度学习领域中引起了相当大的轰动,并基于两种模式竞争来改善整体效果。 用原文的话说:

“生成模式可被看作造假者团队,试图生产假币同时避免被检测,而鉴别模型类似于警察,试图检测假币。两种模式间的竞争促使两边同时改进他们的方法,直到伪造品与真品无法区分。”

GANs被用来“学习”毕加索等著名画家的风格,然后把照片转换成模仿画家风格的画作。

5. 企业举例

为了更好地了解如何使用深度学习,让我们来看看行业内的几个例子。

Jet.com

Jet.com为这些新技术和能力如何转化为企业利益提供了一个很好的创新的例子。 Jet.com提供数百万种待售产品,其中许多是由第三方合作伙伴提供的。每个新产品都属于上千类别中的一类。过去,这种分类依赖文本描述和合作伙伴提供的信息。有时候这些信息是不正确、不准确或不一致的。 但是,通过使用TensorFlow和深度学习,Jet.com将产品的照片集成到分类通道中,显著提高了分类的准确性。因此,深度学习允许将新的数据类型(图像)快速集成到传统的数据分析流程中,以改善业务运营。

Jet.com使用深度学习解决的另一个问题是在搜索框中处理文本输入。例如,如果客户在搜索框中键入“矮脚电视柜”,则系统必须精确地解析这种自然语言来定位该客户意图的项目。

6. 潜在的缺点

和其他新技术一样,深度学习也有其缺点,特别是从企业角度来看。每一种新技术都存在一个共同的最首要的问题,其中有少数新技术尤其如此。例如大量的报道表明,数据科学家的数量急剧减少,深度学习专家更是极端缺乏。此外,大多数技术公司,谷歌、Facebook、微软、亚马逊、Twitter等,正在为这个稀缺人才而战,这既增加了人力成本,也增加了薪水成本。

从技术的角度来看,深度学习有几个潜在的缺点。首先,用最简单的技术解决问题几乎总是最好的。如果线性回归是有效的,那就用它来代替更为复杂的深度学习方法。其次,在需要时,深度学习需要大量的资源。训练神经网络不仅需要大数据集(精通机器学习的企业都会具备),而且还需要更大的计算力来训练网络。这意味着要么有多个图形处理单元(GPU),或者GPU的云资源。如果企业的理想用例在深度学习的范围之内,那么回报可能会很大。但是,取决于外部需求是多远,深度学习本身不会为产品和项目的成功与否提供保证。

最后,更广泛的领域被称为数据科学的原因。尽管有一些与预建网络直接支持的企业相关的用例(例如图像分类),但是很多企业都有兴趣通过深入的学习网络来扩展这些想法并开发相邻的功能。这应该被认为更多的是研究和开发工作,而不是一个伴随风险的工程计划。

7. 本章小结

深度学习代表了涉及许多不同数据模式(包括文本、图像、视频和声音)的许多任务的机器学习领域,或者具有可被利用的结构或空间构建特征的任何数据。而且,深度学习已经在一定程度上取代了特征提取和特征工程的重要问题,并选择了合适的神经网络结构。随着深度学习的不断发展,对网络和网络组件的性能和性能属性的更好的理解将会出现。深度学习的使用将转向更多的工程问题,以解决以下问题:我们如何将所需的神经元类型,网络层和整个网络组合成一个能够处理业务挑战的系统。

最终,问题不在于企业是否会使用深度学习,而在于每个组织如何参与到技术发展过程中来。许多公司可能已经使用了深度学习的服务。对于那些可以直接受益于深度学习产品和服务的公司来说,一个现实的问题是“我们要购买技术/服务”还是“我们要发明创造技术/服务”?如果存在提供满足性能要求的必要功能的高级API,企业可以应该使用它。但是,如果这是不可能的,企业必须发展内部的核心能力。如果选择后一种方法,那么下一个问题是,我们可以简单地通过微调来在已有技术成果来实现,还是我们需要发明全新的系统、架构、图层或者神经元类型来推进现有技术?这个问题的答案决定了企业需要准备何种人力资源。

参考资料:

  1. Li Deng, “Three Classes of Deep Learning Architectures and Their Applications: A Tutorial Survey”, APSIPA Transactions on Signal and Information Processing (January 2012).
  2. Ajay Agrawal, Joshua S. Gans, and Avi Goldfarb, “What to Expect from Artificial Intel‐ ligence,” MIT Sloan Management Review Magazine (Spring 2017).
  3. Yonghui Wu et al., “Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation”, technical report (October 2016).
  4. A. Krizhevsky, I. Sutskever, and G. Hinton, “ImageNet Classification with Deep Convo‐ lutional Neural Networks”, Advances in Neural Information Processing Systems 25 (2012).
  5. V. Mnih, K. Kavukcuoglu, D. Silver et al, “Playing Atari with Deep Reinforcement Learning”, NIPS Deep Learning Workshop (2013).
  6. R. Zhang, P. Isola, and A. Efros. “Colorful Image Colorization”, in ECCV 2016 (oral), October 2016.
  7. I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair et al., “Gen‐ erative Adversarial Nets”, Advances in Neural Information Processing Systems 27 (2014).

(未完待续)

页面:123456789
随时欢迎您 联系我们