:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Categorized / Tech

  • 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).

(未完待续)

  • Dec 05 / 2017
  • 0
Tech

锐眼洞察 | 关于机器学习移动端训练的思考

作者:TalkingData 研发工程师  张永超

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

毫无疑问,目前在移动设备上,机器学习以及机器学习应用正在强力发酵。苹果在WWDC 2017 的各类主题演讲中,大概提到了机器学习百次左右。所有的关于机器学习的框架、架构层出不穷,各个开发者也正在争先恐后地将机器学习添加到他们的应用程序中。

然而事实却并不像我们想象的那样?目前,大多数这些将机器学习添加到应用中的情况,却仅仅是用于机器学习中的最后一个阶段——预测、推理,而这个阶段只是使用一套固有的知识进行预测。尽管各处都宣扬使用了“机器学习”这个专业名词,但是实际上这些都没有将机器学习的核心——模型内部的知识——直接在设备上进行学习

可能有一个很大的原因是,训练一个机器学习模型需要大量的计算资源和计算能力,而对于移动设备来说,资源有限,而且速度并不理想。对比服务端进行离线的模型学习、训练,并在每次应用更新中更新其所包含的模型更为实用。

但是这种方式却有一个致命的弱点:模型的学习训练需要时间、应用的开发测试需要时间、应用的上架审核需要时间等等,诸如此类耗时的任务直接导致了应用更新的滞后,甚至失去一些用户(例如由于模型有误,导致识别结果大相径庭,但是需要更新修复这个模型,需要经历上述几个耗时的任务流程)。

也就是说,对于那些包含了机器学习的应用来说,在设备上直接进行模型的学习训练的确有意义,而且意义重大。相信在设备上直接训练机器学习模型与在设备上使用模型进行推理预测相同,仅仅是时间问题。从无到有、从有能力到能力强势等。

Now. Just 推理&预测

如今的iPhone已经不同于以往任何时期的移动智能设备,硬件上,苹果有自研的处理器和协处理器等,软件上,iOS 系统已经更新迭代到了 iOS 11,iPhone的每次版本升级都带来了业界无与伦比的惊叹和体验。日前,iPhone X的问世,更是吸引眼球无数,从全面屏的设计开始,各种技术的革新也让业界惊叹,从指纹识别到面部识别、从普通相机到高效智能颜值相机,无不体现了苹果的设计理念等。而吸引所有开发者的是应用在相机、照片、视频中的机器学习技术,这一技术被称为计算机视觉

但是机器学习并不仅仅使用与图像和视频,还可用于音频、语言、时间序列和其他许许多多类型的数据。当下的智能手机,附带着少则好几个,多则十几个不同的传感器设备,已经更加快速的互联网接入能力,使得大量的数据源源不断地产生,机器学习所要处理的数据也时刻在变化。例如 iOS 设备上,相机和照片应用中的人脸检测Hey Siri汉字手写识别等,都使用了机器学习技术来实现。

但是,需要注意的是,这些机器学习技术也只是使用了机器学习最后的一个阶段 — 预测、推理,模型并没有在设备上实时的对用户的使用情况进行学习。

目前,大多数开源的移动端机器学习框架,例如 MPSCNN、TensorFlow Lite、Caffe2等也都只支持推理预测,也就说,开发者可以使用这些模型,并根据用户的数据或者行为进行预测,但不能让这些模型在设备上从用户的数据或者行为中学习新的东西。

目前,在机器学习模型构建的过程中,通常会使用拥有大量GPU的服务器群进行训练,并且需要大量的数据。例如CNN,要使用数千万的图像进行训练,从开始训练到一个模型输出,在拥有多个GPU资源的服务器上可能要花费数天,在一台PC上,可能要花费数周,在移动设备上可能就不仅仅是时间和电量的问题了。

另外,在高端服务器中进行模型训练并不是每个人、每个公司都能够hold住的,不仅是money的投入,还需要专业人员,当下最常使用的方式是,每个应用程序中都会有一个模型存在,并且模型是完全一样的,当需要模型进行版本更新时,就重新发布该应用程序的版本,或者由应用程序从云端下载新的模型或者参数等。

今天看来,在移动端进行模型的训练时不可行的,但是并不意味着永远不可能。当模型的体量有现在普遍的几十兆甚至上百兆压缩到只有几兆,模型的训练不需要大量的计算资源,仅仅小部分的资源就可以进行的时候,在设备上进行模型训练就不是难事了。

为什么要在设备上训练?

在设备上进行模型训练,有一下几个好处:

  • 应用程序可以直接从用户的数据或者行为中学习;
  • 数据永远不会离开设备,利于隐私保护;
  • 在设备上直接训练模型,也省去了租用或者购买大型服务器的费用;
  • 可以随时进行学习和更新模型

以上好处虽然并不适用于所有开发的情况,但是在设备上训练无疑是受用的。另外在设备上直接训练学习还有一个更重要的好处:每个模型对于用户来说都是独特的,也就说是用户定制的模型

说了这么多,难道就没有在设备上直接进行学习的应用么?搜集到如下的iOS应用程序已经在设备上进行学习训练了:

  • 键盘:手机上的键盘从你的历史输入中进行学习,并对句子的下一个单词提出建议。这就属于一个个人定制模型,模型是专为你训练的,并不适用于其他人。由于学习训练是在设备上直接进行的,因此无论你输入什么内容,都不会发送到服务端,保护了你的隐私。
  • 照片:照片应用会自动将图像进行归类。这个应用使用了人脸检测API来检测照片中的人脸,然后将相似的人脸组合在一起,另外你可能已经发现,你可以人为的对归类的照片进行纠正,有相同的照片出现时,照片会归类到你纠正的那类中去。猜想这里使用了无监督学习方式,但是无论算法是什么?以及算法是如何工作的?照片应用会根据用户的数据再次进行学习训练。
  • 指纹识别、面部识别:这两类都会根据你输入的指纹、人脸不断的进行学习。例如指纹识别,加入某次我们进行指纹识别失败了,iPhone会让你通过密码解锁,而同样的指纹在下次进行解锁时,就顺利通过了,同样的面部识别也是这样。

或许还有一些应用有在设备上直接进行学习训练,但是不管是那种应用,这都是一种全新的尝试,相信会有越来越多类似的应用程序,具备直接在设备上进行学习的能力。

我们能走多远?

如果在设备上进行学习训练的目标是使得机器学习模型能够适应特定用户的需求或者使用模式,那么我们可以使用这种方式做什么呢?

GitHub上有一个有意思的例子,是一个简单的神经网络, 把手势变成表情符号,它可以通过你画出的几个不同的形状,学习训练模型来检测形状的神似表情符号:

Screen_Shot_2017-12-03_at_3.02_.05_PM_.png

如果对这个项目感兴趣,你可以参考 Understanding How Machines Learn, Through Prototyping,对此神经网络是如何工作的,进行了描述。

这个神经网络是一个简单的2层圣经网络,并且实现了在设备上训练。这个项目很像iPhone X上Animoji,通过面部识别构建用户的面部3D模型,然后根据用户的面部表情来选择一个面部符号,并会同步你的动作。

那么还有那些机器学习模型可以类似这样的方式呢?

  • 智能回复:Google日前推出了一个Smart Reply模型,用于分析传入的文本或者邮件,并提供一个适当的回复内容。这个模型目前还不能在设备上学习训练,因此不同用户如果有类似的输入,它会为每个用户推荐相同类型的回复。假设这个模型可以在设备上直接学习,那么每个人得到的回复就会根据这个人的语言习惯而定了。
  • 手写检测:将书写的内容转化为文字,可能并不是新鲜事,但是几乎没有那两个人书写的方式是相同的,如果在同一个设备上,两个用户的书写方式不同,那么这个模型或者叫标准模型的输出就可能会犯错。假设手写检测模型是一个由用户自定义的模型,可以从你的书写风格中进行学习,识别特定的细微差别,那么两个不同书写风格的书写,就不会简单的由标准模型去输入了(重新学习或者再次学习)。
  • 语音识别:常规的语言识别要求输入都是标准普通话,但是中国地大人广,各个地方的方言不尽相同,对于不同的输入,标准模型往往错误连连。假设能够针对每个人进行模型的学习训练,该模型就成为了个人的定制模型,对你的输入敏感,识别命中率也会提升了。
  • 睡眠跟踪、健身:这类应用目前是需要将数据上传到服务端进行分析,然后再给出建议的。假设这些数据不需要上传到服务端,直接在设备上进行学习训练,然后给出建议结果,你的数据就不会离开设备,保护了你的隐私。
  • 个性化的会话:聊天机器人的发展如今已是如火如荼,但是我们在和聊天机器人交谈的时候,希望机器人能够适应我们,包括语言风格、个性等。假设聊天机器人能够不断的学习你如何说话以及说话的风格,并且能够定制机器人的反应,那么聊天机器人就能够适应你的个性和说话风格了。
  • 更好的广告:没有人喜欢广告,但是机器学习可以减少这个烦扰和干扰,但是广告商却更有利可图。假设广告SDK可以了解你经常点击和关注的广告,并在本地进行学习训练,得到你喜欢哪些广告,然后请求只适合你这个特定用户的广告来展示。
  • 推荐:推荐系统一直是机器学习中重要的体系。例如电商、博客、新闻等等,会根据你的历史收听进行学习训练,并推荐接下来的内容,但是目前这些都是基于云的。假设没有云,那么这样的应用程序该怎么办呢?可能只有本地模型能够解决这个问题。
  • 助残类应用:假设应用程序可以了解残障人士的环境,以帮助他们进行导航,这对于此类人群来说可谓帮助巨大。

在使用机器学习模型上,每个人可能都是不同的,所以我们使用机器学习模型经常是与场景想联系的,以便适应我们特定的需求,而不是去构建一个万能的模型。

不同场景下的模型训练

在对机器学习模型进行部署使用前,往往需要先进行学习训练。之后,会不断的完善模型,相信在设备上进行训练的最大好处就是为每个用户定制模型,而关键的是在特定用户的数据上进行训练,而不是使用通用的数据集。

以下是集中模型训练的不同场景:

  • 直接不使用用户的数据:收集自己的数据或者使用公开的数据集来构建一个通用模型。无论何时改进模型,都需要发布新的应用或者下载新的参数。这就是目前机器学习功能应用的现状:离线训练,只使用模型进行推理预测。
  • 进行中央化学习:假设你的应用程序或者服务已经收集到了用户的数据,那么你就可以在服务器上进行学习训练,这些是可以的。将用户的数据发送到服务器,并保存在服务器上,之后从这些数据中挖掘信息进行学习训练,得到模型,可能改模型是一个标准模型,也可能是一个定制模型。Facebook目前就采用的是这种方式。但是这个方法都有一个缺点:需要不断扩展的存储空间,以确保数据有地可存。我想这也是在设备上学习训练的意义所在。
  • 联合学习:这一概念是Google在Federated Learning: Collaborative Machine Learning without Centralized Training Data一文中提出的方式,每个用户训练模型中的一小部分,然后共享给其他用户,以便其他人也能够从你的数据中进行学习。更详细的说明,可参考 《分布式机器学习时代即将来临?谷歌推出“Federated Learning”》一文。
  • 每个用户都训练他们自己的模型:每个用户在自己的设备上进行模型训练,模型可以从零开始训练,也可以使用一个预先训练好的模型,然后根据自己的数据进行微调,不断的改进模型。例如键盘的预测,以一种特定的语言训练的通用模型开始,然后根据用户的输入进行模型改进,以适应用户的输入习惯等。但是这种方式的缺点是,其他用户无法从你的学习训练过程中受益。另外还有一个问题是你可能拥有不止一台设备,如何在这些设备之间进行模型共享以及训练也是个挑战。

最后

以上内容只是一些对现状的描述和思考,在不断的技术革新过程中,说不准还会出现另一种更加友好的机器学习移动化方案,因此在软件设计的过程中,我们要不断的进行技术学习,以及时刻准备着革新。

参考资料

 

  • Dec 05 / 2017
  • 0
Tech

锐眼发现 | DeepMind 16篇NIPS 2017论文,全部信息都在这里了

作者:岑大师

转载于:雷锋网

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

 

雷锋网按:作为人工智能领域的“领头羊”,DeepMind的最新研究总是能引起大家的关注。那么在即将在加州长滩召开的机器学习领域顶级会议NIPS 2017上,DeepMind又会给我们带来什么样的先知卓见呢?雷锋网为你整理了DeepMind在NIPS 2017上的论文,便于大家按自己感兴趣的内容按图索骥。一起来看一下:

第1天 12月4日 2Poster

论文1:《Robust imitation of diverse behaviours

作者:Ziyu Wang,Josh Merel,Greg Wayne,Nando de Freitas,Scott Reed,Nicolas Heess

摘要:我们提出了一个建立在最先进的生成模型上的神经网络架构,该架构能够学习不同行为之间的关系,并模仿它所显示的具体行为。训练结束后,我们的系统可以编码一个单一的观察动作,并根据这个演示创建一个新的小动作。它也可以在不同类型的行为(如步行的不同风格)之间切换,尽管之前并没有看到过这种切换。

DeepMind 16篇NIPS 2017论文,全部信息都在这里了  | NIPS 2017

(上面的小人切换步行风格像不像在跳舞?)

展示时间/地点:Pacific Ballroom #143,Poster环节,6:30-22:30

论文2:《Sobolev training for neural networks

作者:Wojtek Czarnecki,Simon Osindero,Max Jaderberg,GrzegorzŚwirszcz,Razvan Pascanu

摘要:本文给出了一种将目标函数导数的知识纳入深度神经网络训练的简单方法。我们证明最近的基于ReLU的体系结构非常适合这样的任务,并评估它们在三个问题即低维回归,政策蒸馏和合成梯度训练上的有效性。我们观察到训练的效率尤其是在低数据情况下显著提高,并且以接近最新的准确度训练了第一个基于梯度的合成的ImageNet模型。

展示时间/地点:Pacific Ballroom #139,Poster环节,6:30-22:30

第2天 12月5日 4Poster

论文3:《Filtering variational objectives

作者:Chris J. Maddison,Dieterich Lawson,George Tucker,Nicolas Heess,Mohammad Norouzi,Andriy Mnih,Arnaud Doucet,Yee Whye Teh

摘要:我们考虑将变分的下界扩展到基于粒子滤波的边界似然估计器(雷锋网注:主要特指估算概率分布)定义的下界族群。这些过滤目标可以利用模型的顺序结构在深生成模型中形成更紧密的界限和更好的模型学习目标。在我们的实验中,我们发现用滤波目标进行训练比使用变分下限训练相同的模型体系结构有了实质性的改进。

展示时间/地点:Pacific Ballroom #114,Poster环节,6:30-22:30

论文4:《Visual interaction networks: Learning a physics simulator from video

作者:Nicholas Watters,Andrea Tacchetti,Theophane Weber,Razvan Pascanu,Peter Battaglia,Daniel Zoran

摘要:在这项研究中我们提出了一种基于神经网络的模型”视觉交互网络“(VIN),在没有先验知识的情况下学习物理动力学。 VIN能够从几帧视频中推断出多个物理对象的状态,然后用这些来预测对象位置。它还能够推断隐形物体的位置,并学习依赖于物体属性(如质量)的动力原理。

DeepMind 16篇NIPS 2017论文,全部信息都在这里了  | NIPS 2017

由VIN(右)预测的动力学与真实模拟(左)相比较

展示时间/地点:Pacific Ballroom #123,Poster环节,6:30-22:30

论文5:《Neural discrete representation learning

作者:Aäronvan den Oord,Oriol Vinyals,Koray Kavukcuoglu

摘要:在没有监督的情况下学习有用的陈述仍然是机器学习中的关键挑战。这项研究中,我们提出了一个简单而强大的生成模型,该模型被称为矢量量化变分自动换能器(VQ-VAE)以学习这种离散表征。当这些表征与先前的自回归配对时,该模型能够生成高质量的图像,视频和语音以及进行高质量的扬声器转换。

展示时间/地点:Pacific Ballroom #116,Poster环节,6:30-22:30

论文6:《Variational memory addressing in generative models

作者:JörgBornschein,Andriy Mnih,Daniel Zoran,Danilo Jimenez Rezende

摘要:基于注意力的记忆可用于增强神经网络,并被用于Few-shot learning、快速适应性、更普遍地支持非参数扩展等领域。不同于目前流行的可区分的软注意机制,我们使用随机的硬注意力来生成模型中的记忆内容,这使得我们可以将变分推理应用于内存寻址,使用目标信息获得更精确的内存查找,尤其是在内存缓冲区大且内存条目混杂的模型中。

展示时间/地点:Pacific Ballroom #117,Poster环节,6:30-22:30

第3天 12月6日 2 Oral/4 Spotlight/4Poster

论文7:《REBAR: Low-variance, unbiased gradient estimates for discrete latent variable models

作者:George Tucker, Andriy Mnih, Chris J Maddison, Dieterich Lawson, Jascha Sohl-Dickstein

摘要:由于具有高方差梯度估计量,对具有离散潜变量的模型进行学习具有挑战性。 之前的方法要么产生高方差/无偏梯度,或低方差/有偏差的梯度。 REBAR使用控制变量和重新参数化技巧来获得两者中最好的结果:低方差/无偏差的梯度,使得收敛更快,效果更好。

展示时间/地点:Hall A,10:35-10:50,Oral讲解;

Pacific Ballroom #178,Poster环节,6:30-22:30

论文8:《Imagination-augmented agents for deep reinforcement learning

作者:Sébastien Racanière, Théophane Weber, David P. Reichert, Lars Buesing, Arthur Guez, Danilo Rezende, Adria Puigdomènech Badia, Oriol Vinyals, Nicolas Heess, Yujia Li, Razvan Pascanu, Peter Battaglia, Demis Hassabis, David Silver, Daan Wierstra.

摘要:我们描述了一个基于想象力的规划方法的新族类,并介绍了为智能体学习和构建计划,从而最大化任务效率提供新方法的架构。 这些架构对于复杂和不完善的模型是有效的,稳健的,并且可以采取灵活的策略来扩展他们的想象力。 我们介绍的智能体受益于一个“想象编码器”,这是一个神经网络,它学习提取任何对未来决策有用的信息,但忽略那些不相关的信息。

DeepMind 16篇NIPS 2017论文,全部信息都在这里了  | NIPS 2017

图为智能体进行飞船任务游戏。该游戏必须激活一定次数的推进器以稳定飞行器。红色表示执行的轨迹,蓝色和绿色表示想象的轨迹。

展示时间/地点:Hall A,15:05-15:20,Oral讲解;

Pacific Ballroom #139,Poster环节,6:30-22:30

论文9:《A simple neural network module for relational reasoning

作者:Adam Santoro, David Raposo, David Barrett, Mateusz Malinowski, Razvan Pascanu, Peter Battaglia, Timothy Lillicrap

摘要:我们演示了使用简单的即插即用神经网络模块来解决需要复杂关系推理的任务。 这个称为“关系网络”的模块可以接收非结构化的输入,比如图像或故事,并隐含地推理其中包含的关系。

展示时间/地点:Hall A,15:25-15:30,Spotlight讲解;

Pacific Ballroom #139,Poster环节,6:30-22:30

论文10:《Simple and scalable predictive uncertainty estimation using deep ensembles

作者:Balaji Lakshminarayanan, Alexander Pritzel, Charles Blundell

摘要:量化神经网络(NN)中的预测不确定性是一个具有挑战性但尚未解决的问题。 大部分工作集中在贝叶斯解决方案上,但这些方案都是计算密集型的,需要对训练管道进行重大修改。我们提出了一种贝叶斯神经网络的替代方案,该方案易于实现和并行,只需要很少的超参数调整,并产生高质量的预测不确定性估计。 通过一系列关于分类和回归基准的实验,我们证明了我们的方法可产生良好校准的不确定性估计,其与近似贝叶斯神经网络一样好或更好。

展示时间/地点:Hall A,15:45-15:50,Spotlight讲解;

Pacific Ballroom #133,Poster环节,6:30-22:30

论文11:《Natural value approximators: learning when to trust past estimates

作者:Zhongwen Xu, Joseph Modayil, Hado van Hasselt, Andre Barreto, David Silver, Tom Schaul

摘要:基于随输入而平滑变化观察的典型近似值,我们重新回顾了RL的价值逼近器的结构,但是当到达奖励值时真值会突然发生变化。 我们提出的方法使用插值与预测值估计,用于适应这种不对称的不连续性。

展示时间/地点:Hall A,17:25-17:30,Spotlight讲解;

Pacific Ballroom #6,Poster环节,6:30-22:30

论文12: 《Successor features for transfer in reinforcement learning

作者:Andre Barreto, Will Dabney, Remi Munos, Jonathan Hunt, Tom Schaul, David Silver, Hado van Hasselt

摘要:我们提出了一个强化学习的转移框架。 我们的方法取决于两个关键的观点:1)“继承者特征”,这是一种价值函数表示,将环境的动态与回报分离开来;2)“广义的政策改进”,一种考虑了一整套策略的一般化的动态规划策略改进步骤。 综合起来,这两个想法导致了一种无缝集成在强化学习框架内的方法,并允许在任务之间不受任何限制地进行转移。

展示时间/地点:Hall A,17:40-17:45,Spotlight讲解;

Pacific Ballroom #9,Poster环节,6:30-22:30

论文13:《Deep reinforcement learning from human preferences

作者:Paul Christiano (Open AI), Jan Leike, Tom B. Brown, Miljan Martic, Shane Legg, Dario Amodei (Open AI)

摘要:人工智能安全的一个核心问题是如何告诉一个算法我们希望它做什么。 OpenAI展示了一个全新的系统,允许没有技术经验的人员教AI如何执行一个复杂的任务,如操纵模拟机器人手臂。

DeepMind 16篇NIPS 2017论文,全部信息都在这里了  | NIPS 2017

通过900个人的反馈教会了这个算法后空翻。

展示时间/地点:Pacific Ballroom #1,Poster环节,6:30-22:30

论文14:《A multi-agent reinforcement learning model of common-pool resource appropriation

作者:Julien Perolat, Joel Z Leibo, Vinicius Zambaldi, Charles Beattie, Karl Tuyls, Thore Graepel

摘要:本文考察了共同资源占用问题的复杂性。 如渔业,放牧牧场或淡水的系统,许多人或行为者可以获得相同的资源。 社会科学的传统模式往往表明,获得资源的各方以自利的方式行事,最终导致不可持续的资源枯竭。 但我们在人类社会的实际经验知道可能会产生很多中可能的结果。 像渔业这样的资源,有时候会被过度开发,有时可以可持续地收获。 在这项研究中,我们提出了可用于研究的新建模技术,旨在解释我们在现实世界中观察到的与传统模型预测的差距。

展示时间/地点:Pacific Ballroom #86,Poster环节,6:30-22:30

论文15:《DisTraL: Robust multitask reinforcement learning

作者:Yee Whye Teh, Victor Bapst, Wojciech Czarnecki, John Quan, James Kirkpatrick, Raia Hadsell, Nicholas Heess, Razvan Pascanu

摘要:我们开发了一个强化多任务学习的方法。 我们的假设是,任务是彼此相关的(例如处于相同的环境或具有相同的物理特性),好的动作序列倾向于在任务中重复出现。 我们的方法通过将特定于任务的策略同时提炼为一个通用的默认策略,并通过将所有特定于任务的策略规则化为违约策略来跨这些任务转移这些常识。 我们的研究表明,这会导致更快、更强大的学习。

展示时间/地点:Pacific Ballroom #138,Poster环节,6:30-22:30

论文16:《A unified game-theoretic approach to multiagent reinforcement learning

作者:Marc Lanctot, Vinicius Zambaldi, Audrunas Gruslys, Angeliki Lazaridou, Karl Tuyls, Julien Perolat, David Silver, Thore Graepel

摘要:在这项研究中,我们首先观察到独立强化学习者产生可以共同关联但在执行过程中未能与其他主体进行良好的概括的策略。 我们通过提出一个称为联合策略关联的新度量来量化这种影响,然后我们提出了一个由博弈论基础所推动的算法,该算法概括了虚拟游戏,迭代最佳响应,独立RL和双重预言等几种方法。 我们的研究表明,我们的算法可以在第一人称协调游戏中显着降低联合策略的相关性,并在普通的扑克基准游戏中找到稳健的反策略。

展示时间/地点:Pacific Ballroom #203,Poster环节,6:30-22:30

  • Dec 04 / 2017
  • 0
Data, Tech

锐眼洞察 | Salesforce的二次开发平台的多租户架构(翻译)

原文:The Force.com Multitenant Architecture

译者:TalkingData研发副总裁 孔元明

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

译者点评:

Force.com是十分优秀的多租户二次开发平台,本文详细讲述了它的高层设计。有很强的参考意义,但不建议简单模仿。

概要

Force.com是今天的卓越的按需应用程序开发平台,支持大约47,000多个组织。 企业和商业SaaS供应商都相信该平台能够提供健壮,可靠的互联网级应用程序。 为了满足其庞大用户群的极端需求,Force.com的基础是支持多租户应用的元数据驱动的软件架构。 本文解释了使Force.com平台快速,可扩展且安全的专利技术,适用于任何类型的应用程序。

介绍

历史表明,每隔一段时间,技术的不断进步和商业模式的变化就会在软件应用程序的设计,构建和交付给最终用户的方式上产生重大的范式转变。个人计算机(PC),计算机网络和图形用户界面(UI)的发明使得客户机/服务器应用程序替换昂贵的,不灵活的字符模式大型机应用程序成为可能。而今天,可靠的宽带互联网接入,面向服务的体系结构(SOA)以及管理专用本地应用程序的成本效率低下正在推动向可交付,可管理,共享的基于Web的服务(称为SaaS)。随着每一个模式的转变都带来了一系列新的技术挑战,SaaS也不例外。然而,现有的应用程序框架并不是为满足SaaS的特殊需求而设计的。这种空白导致了另一种新的范式转变,即平台即服务(PaaS)。托管应用程序平台是专为满足构建SaaS应用程序的独特挑战而设计的托管环境,并比以往更具成本效益。

本文的重点是多租户,这是一个基本的设计方法,可以显着帮助提高SaaS应用程序的可管理性。 本文定义了多租户,解释了多租户的优势,并说明了为什么元数据驱动架构是实现多租户的首要选择。 在这些大致介绍之后,本文的大部分内容解释了Force.com的技术设计,这是世界上第一个为互联网级应用程序提供交钥匙多服务的PaaS。 本文详细介绍了Force.com的专利元数据驱动架构组件,以便了解用于提供可靠,安全和可扩展的多租户应用程序的功能。

多租户应用

为了降低向多个不同的用户提供相同的应用程序的实施成本,越来越多的应用程序是多租户的,而不是单租户。 传统的单租户应用需要专门的资源来满足一个组织的需求,而多租户应用则可以满足多个租户(公司或公司内部的部门等)而只需要管理一个软件实例所需的硬件资源和人员的需求(图1)。

p1.png

多租户是一种向应用程序提供商和用户带来巨大收益的架构方法。 仅为多个组织运行一个应用程序实例会为提供商带来巨大的规模经济效益。 只需要一套硬件资源来满足所有用户的需求,一个经验丰富的管理人员就可以高效地管理一堆软硬件,开发人员只需在一个平台(操作系统,数据库等)上构建和支持一个代码库而不是许多平台。 多租户的经济性使应用程序提供商能够以较低的成本向客户提供服务。 每个参与的人都赢了。

多租户的一些有趣的优点是提高了质量,用户满意度和客户保留率。 与单租户应用程序(应用程序提供商无法使用的孤立孤岛)不同,多租户应用程序是由供应商自己托管的一个大型社区。 这种设计转变使供应商可以从集体用户群体(查询响应缓慢,发生什么错误等)收集操作信息,并对服务进行频繁,渐进式的改进,从而使整个用户群体受益匪浅。

多租户基于平台的方法的另外两个好处是协作和集成。 由于所有用户都在一个空间中运行所有应用程序,因此任何应用程序的任何用户都可以轻松访问特定的数据集。 此功能大大简化了集成相关应用程序及其管理的数据所需的工作。

比较原始云计算和PaaS

原始计算云是以机器为中心的服务,为应用程序的部署按需提供IaaS。 这样的云只提供了执行应用程序的虚拟服务器所需的计算能力和存储容量。 一些寻求快速上市策略的SaaS供应商避免了开发真正的多租户解决方案以及选择通过IaaS交付单租户实例的挑战。

像Force.com这样的平台即服务(PaaS)是一种以应用程序为中心的方法,它将服务器的概念完全抽象出来。 PaaS让开发人员从一开始就专注于核心应用程序开发,并通过按钮来部署应用程序。 提供商从不需要担心多租户,高可用性,负载平衡,可扩展性,系统备份,操作系统补丁和安全性以及其他类似的基础设施相关问题,所有这些服务都以PaaS中的“S”形式提供。

元数据驱动的架构

只有当它支持可靠,可定制,可升级,安全和快速的应用程序时,多租户才是实用的。 但是,多租户应用程序如何允许每个租户为标准数据对象和全新的自定义数据对象创建自定义扩展? 租户特定数据如何在共享数据库中保持安全,保证一个租户不能看到另一个租户的数据? 一个租户如何实时定制应用程序的界面和业务逻辑,而不影响所有其他租户的应用程序的功能或可用性? 如何修补或升级应用程序的代码库而不破坏特定于租户的定制? 随着成千上万的租户订阅服务,应用程序的响应时间如何呢?

创建静态编译的应用程序可执行文件是很难满足多租户的这些独特挑战。 本质上,多租户应用程序必须是动态的,或多态的,以满足各种租户和用户的个人期望。

由于这些原因,多租户应用程序设计已经发展到使用运行时引擎从元数据(应用程序本身的数据)生成应用程序组件 。 在一个定义良好的元数据驱动架构(图2)中,编译后的运行时引擎(内核),应用程序数据,描述应用程序基本功能的元数据,每个租户数据和定制化表的元数据,这四者之间有清晰的边界。 这些独特的边界使独立更新系统内核,独立修改核心应用程序,独立定制特定于租户的组件成为可能,而几乎不存在影响其他组件的风险。

p2.png

新的挑战和新的解决方案

尝试在应用程序的核心逻辑及其底层基础架构中编织多租户是一项复杂的任务。 从零开始构建元数据驱动的多租户应用程序,没有任何先前的经验,注定是一个耗时且易出错的工作。 最终,许多想成为SaaS的提供商将难以成功地构建多租户应用程序,并最终浪费宝贵的时间,而这些宝贵的时间本可以用在核心应用程序功能和特性的创新上。

一个问题是,传统的应用程序开发框架和平台没有适应现代Internet应用程序的特殊需求。 因此,新类型的平台正在形成,以帮助简化多租户应用程序的开发和部署。

Force.com是当今第一个也是最成熟的通用多租户互联网应用开发平台。 本文的其余部分解释了有关Force.com技术设计的具体细节,以便您更好地了解其功能。

Force.com平台体系结构概述

Force.com优化的元数据驱动架构可为按需多租户应用程序提供出色的性能,可扩展性和定制性(图3)。

p3.png

在Force.com中,暴露给开发人员和应用程序用户的所有内容均在内部表示为元数据。表单,报表,工作流程,用户访问权限,特定于租户的自定义和业务逻辑,甚至是底层数据表和索引的定义,都是抽象结构,仅仅作为Force.com的通用数据字典(UDD)中的元数据存在。 例如,当一个开发人员构建一个新的自定义应用程序并定义一个自定义表格,编写一个表单或编写一些程序代码时,Force.com不会在数据库中创建“实际”表格或编译任何代码。 相反,Force.com只是存储元数据,平台引擎可用这些元数据在运行时生成“虚拟”应用程序组件。 当有人想要修改或自定义应用程序的某些内容时,只需对相应的元数据进行简单的非阻塞更新即可。

由于元数据是Force.com应用程序的关键组成部分,因此平台的运行时引擎必须优化对元数据的访问; 否则,频繁的元数据访问会阻止平台扩展。 考虑到这个潜在的瓶颈,Force.com使用元数据高速缓存来维护内存中最近使用的元数据,避免性能降低磁盘I / O和代码重新编译,并改善应用程序响应时间。

Force.com将所有虚拟表的应用程序数据存储在几个用作堆存储的大型数据库表中。 然后平台的引擎通过考虑相应的元数据在运行时实现虚拟表数据。

为了优化对系统大型表中数据的访问,Force.com的引擎依赖于一组专门的数据透视表,这些数据透视表维护了非范式化的数据用于不同的目的,如索引,唯一性,关系等。

Force.com的数据处理引擎通过批量透明地执行数据修改操作,有助于简化大型数据加载和联机事务处理应用程序的开销。 该引擎具有内置的故障恢复机制,可以在找出导致错误的记录之后自动重试批量保存操作。

为了进一步优化应用程序响应时间,该平台采用了一种外部搜索服务,可以优化全文索引和搜索。 随着应用程序更新数据,搜索服务的后台进程几乎实时地异步更新租户和用户特定的索引。 应用程序引擎和搜索服务之间的职责分离使平台应用程序能够高效地处理事务处理,而无需文本索引更新的开销,同时快速为用户提供准确的搜索结果。

由于Force.com的运行时应用程序生成器动态构建应用程序以响应特定的用户请求,因此引擎严重依赖于其“多租户感知”查询优化器来尽可能高效地执行内部操作。 查询优化器考虑哪个用户正在执行给定的应用程序功能,然后使用UDD中维护的相关租户特定元数据以及内部系统数据透视表,构建并执行数据访问操作作为优化的数据库查询。

现在您已经对构成Force.com基础机制的关键体系结构组件有了一个大概的概念,下面的章节更详细地解释了各种内部系统元素的结构和目的。

Force.com数据定义和存储

Force.com存储模型并不是试图代表每个应用程序和租户来管理大量的,不断变化的实际数据库结构,而是使用一组元数据,数据和数据透视表来管理“虚拟”数据库结构,如图4。

p4.png

当组织创建自定义应用程序对象(即自定义表)时,UDD会跟踪有关对象,其字段,关系和其他对象定义特征的元数据。 同时,一些大型数据库表存储所有虚拟表的结构化和非结构化数据,一组相关的专用数据透视表维护非范式化的数据,使组合的数据集非常有用。

图5是三种核心Force.com元数据和数据结构的简化实体关系(ER)图,这些元数据和数据结构实现了这种方法:对象,字段和数据表。

注:为了简明扼要,Force.com系统表和列的实际名称没有在本文中引用。

Objects Metadata Table:

Objects Metadata Table存储组织为应用程序定义的自定义对象(又名表或实体)的信息,包括对象(ObjID)的唯一标识符,拥有该对象的组织(OrgID)以及给予该对象的名字(ObjName)。

Fields Metadata Table:

Fields Metadata Table存储组织为自定义对象定义的自定义字段(又名列或属性)的信息,包括字段的唯一标识符(FieldID),拥有该包含对象的组织(OrgID),包含 字段(FieldName),字段的数据类型,指示字段是否需要索引(IsIndexed)的布尔值,以及对象中的字段相对于其他字段(FieldNum)的位置。

p5.png

Data Table:

数据表存储映射到所有自定义对象及其字段的应用程序可访问数据,如对象和字段中的元数据所定义。 每行包括标识字段,如全球唯一标识符(GUID),拥有该行(OrgID)的组织和包含对象标识符(ObjID)。 数据表中的每一行还有一个名称字段,用于存储相应对象实例的“自然名称”; 例如,一个Account对象可能使用“Account Name”,Case对象可能使用“Case Number”,等等。 Value0 … Value500列存储映射到Objects和Fields表中声明的对象和字段的应用程序数据; 所有“flex”列都使用可变长度字符串数据类型,以便可以存储任何结构化类型的应用程序数据(字符串,数字,日期等)。

自定义字段可以使用多种标准结构化数据类型中的任何一种,例如文本,数字,日期和日期/时间以及特殊用途的结构化数据类型,如选项列表(列举字段),自动编号(自动增量,系统生成的序列号) ,公式(只读派生值),主从关系(外键),复选框(布尔),电子邮件,URL等。 自定义字段也可以是必需的(非空),并具有自定义验证规则(例如,一个字段必须大于另一个字段),这两者都由平台的应用程序服务器强制执行。

当组织声明或修改自定义应用程序对象时,Force.com在定义该对象的Objects表中管理一行元数据。 同样,对于每个自定义字段,Force.com管理Fields表中的一行,包括将该字段映射到Data表中的特定Flex列以存储相应字段数据的元数据。 由于Force.com将对象和字段定义作为元数据而不是实际的数据库结构进行管理,因此平台可以容忍多租户应用程序模式维护活动,而不会阻塞其他租户和用户的并发活动。

同一对象的两个字段不能映射到Data表中的同一个Flex列(槽)进行存储; 然而,只要每个字段来自不同的对象,单个Flex列就可以管理多个字段的信息。

p6.png

如图6中Data表的简化表示所示,flex列是通用数据类型(可变长度字符串),它允许Force.com在一个flex列中使用多个不同结构化数据类型(字符串,数字 ,日期等)。

Force.com使用统一的规范格式存储所有Flex列数据,当应用程序从Flex列中读写数据时,根据需要使用基础数据库系统的数据类型转换函数来转换数据类型(例如TO_NUMBER,TO_DATE,TO_CHAR)。

尽管图5中未显示,但数据表还包含其他列。 例如,有四列来管理审计数据,包括何时和谁创建对象实例(行),以及何时和谁上次修改对象实例。 数据表还包含一个IsDeleted列。Force.com用来指示对象实例何时被删除。

Clobs Table:

Force.com支持将字段声明为字符大对象(CLOB),以允许存储长达32,000个字符的长文本字段。 对于具有CLOB的Data表中的每一行,Force.com都将CLOB存储在名为Clobs的数据透视表中,系统可以根据需要将其与Data表中的对应行进行连接。

注意:Force.com还将索引形式的CLOB存储在数据库外部以进行快速文本搜索。 有关Force.com文本搜索引擎的更多信息,请参阅第9节。

Indexes Pivot Table:

传统的数据库系统依靠索引来快速定位数据库表中具有匹配特定条件的字段的特定行。 但是,为Data表的flex列创建本地数据库索引是不现实的,因为Force.com可能使用单个flex列来存储具有不同结构化数据类型的多个字段的数据。 相反,Force.com通过将标记为索引的字段数据同步复制到名为Indexes的数据透视表中的相应列,来管理Data表的索引,如简化的ER图(图7)所示。

Indexes表包含强类型的索引列,如StringValue,NumValue和DateValue,Force.com用来定位相应数据类型的字段数据。 例如,Force.com会将数据表flex列中的字符串值复制到Indexes中的StringValue字段,DateValue字段的日期值等。Indexes表的基础索引是标准的非唯一数据库索引。 当内部系统查询包含引用自定义对象中的结构化字段的搜索参数时,平台的查询优化程序将使用索引表来帮助优化关联的数据访问操作。

p7.png

注意:Force.com可以处理跨多种语言的搜索,因为平台的应用程序服务器使用了一种将字符串值转换为通用的,不区分大小写的格式的大小写折叠算法。 Indexes表的StringValue列以这种格式存储字符串值。 在运行时,查询优化器会自动构建数据访问操作,以便优化的SQL语句过滤对应于搜索请求中提供的文字的相应大小写的StringValue。

UniqueFields Pivot Table:

Force.com允许组织指示对象中的字段何时必须包含唯一值(区分大小写或不区分大小写)。 考虑到数据表的安排以及自定义字段数据的值列的共享使用情况,为表创建唯一的数据库索引(类似于上一节讨论的非唯一索引的问题)是不实际的。

为了支持自定义字段的唯一性,Force.com使用名为UniqueFields的数据透视表; 除了UniqueFields表的底层数据库索引强制唯一性以外,此表与Indexes数据透视表非常相似。 当应用程序尝试将重复值插入到需要唯一性的字段中,或者管理员尝试在包含重复值的现有字段上强制执行唯一性时,Force.com会将相应的错误消息转发给应用程序。

Relationships Pivot Table:

Force.com提供了“关系”数据类型,组织可以用它来声明应用程序对象之间的关系(参照完整性)。 当组织使用关系类型声明对象的字段时,平台将该字段映射到数据表中的值字段,然后使用此字段存储相关对象的ObjID。

为了优化连接操作,Force.com维护一个名为Relationships的数据透视表,如图8所示。

p8.png

关系索引表具有两个底层数据库唯一的复合索引(OrgID + GUID和OrgID + ObjID + RelationI D + TargetObjID),可根据需要在任一方向进行高效的对象遍历。

FallbackIndex Table:

在极少数情况下,平台的外部搜索引擎可能变得过载或不可用,并且可能无法及时响应搜索请求。 平台的应用程序服务器并没有将一个令人失望的错误返回给请求搜索的用户,而是回退到二级搜索机制来提供合理的搜索结果。

回退搜索是作为直接数据库查询实现的,搜索条件引用了目标应用程序对象的名称字段。 要优化全局对象搜索(跨越对象的搜索),而不必执行潜在的昂贵的联合查询,Force.com将维护一个名为FallbackIndex的数据透视表,记录所有对象的名称。 事务修改对象对于Fallback Index的更新是同步发生的,所以回退搜索总是可以访问最新的数据库信息。

NameDenorm Table:

NameDenorm表是一个精简数据表,它存储数据表中每个对象实例的ObjID和Name。 当应用程序需要提供超链接到父/子关系中涉及的对象实例的列表时,Force.com使用NameDenorm表执行一个相对简单的查询,该查询检索每个引用的对象实例的名称作为超链接的一部分显示。

History Tracking Table:

Force.com可轻松为任何字段提供历史记录。 当组织为特定字段启用审计时,系统将使用内部数据透视表作为审计跟踪异步记录有关对字段所做更改的信息(旧值和新值,更改日期等)。

数据和元数据的分区:

所有Force.com数据,元数据和数据透视表结构(包括基础数据库索引)均由OrgID(租户)使用本机数据库分区机制进行物理分区。 数据分区是数据库系统提供的一种经过验证的技术,可将大型逻辑数据结构物理划分为更小,更易管理的部分。 分区还可以帮助提高大型数据库系统(如多租户环境)的性能,可伸缩性和可用性。 例如,根据定义,每个Force.com应用程序查询都以特定租户的信息为目标,因此查询优化器只需要考虑访问包含租户数据的数据分区,而不是整个表或索引,这种常见的优化有时被称为“ 分区修剪“。

应用程序开发,逻辑和处理

Force.com支持两种不同的方式来创建自定义应用程序及其各个组件:声明式地使用本地平台应用程序框架,并使用应用程序编程接口(API)以编程方式进行创建。 以下部分将更详细地介绍每种方法和相关的应用程序开发主题。

Application Framework:

开发人员可以使用“原生”Force.com应用程序框架声明性地构建自定义的Force.com应用程序。 该平台的本地点击式界面支持应用程序开发过程的所有方面,包括创建应用程序的数据模型(自定义对象及其字段,关系等),安全性和共享模型(用户,组织层次结构,配置文件 等),用户界面(屏幕布局,数据输入表格,报告等)以及逻辑和工作流程。

Force.com应用程序框架用户界面很容易构建,因为不需要编码。 在幕后,他们支持所有通常的数据访问操作,包括查询,插入,更新和删除。 本地平台应用程序执行的每个数据操作操作可以一次修改一个对象,并自动提交单独事务中的每个更改。

Force.com的本地集成开发环境(IDE)提供了对许多内置平台功能的轻松访问,从而可以轻松实现通用应用程序功能,而无需编写复杂且易于出错的代码。 这些功能包括声明式工作流程,加密/屏蔽字段,验证规则,公式字段,汇总摘要字段和交叉对象验证规则。

工作流是由插入或更新对象实例(行)触发的预定义操作。 工作流可以触发任务,电子邮件警报,更新数据字段或发送消息。 工作流规则指定确定何时触发工作流操作的条件。 可以将工作流程设置为立即触发,或设置为在触发事件之后的后续间隔内进行操作。 例如,开发人员可能会声明一个工作流,在更新记录后立即自动将该行的“状态”字段更新为“已修改”,然后将模板电子邮件警报发送给主管。 所有工作流程操作都发生在触发工作流程的事务上下文中。 如果系统回滚事务,则执行的所有相关工作流操作也会回滚。

为包含敏感数据的对象定义文本字段时,开发人员可以轻松配置该字段,以便Force.com加密相应的数据,并可选择使用输入掩码来隐藏屏幕信息。 Force.com使用AES(高级加密标准)算法128位密钥来加密字段。

声明式验证规则是组织无需任何编程即可执行域完整性规则的简单方法。 例如,图9中的第一个屏幕截图说明了使用Force.com IDE声明确保LineItem对象的Quantity字段总是大于零的验证规则是多么容易。

公式字段是Force.com应用程序框架的声明性功能,可以轻松地将计算的字段添加到对象。 例如,图9中的第二个屏幕截图也显示了开发人员如何使用一个简单的IDE窗体向LineItem对象添加一个字段来计算LineTotal值。

汇总摘要字段是一个跨对象字段,可以很容易地在父对象中聚合子字段信息。 例如,图9中的最终屏幕截图显示了如何使用IDE根据LineItem对象的LineTotal字段在SalesOrder对象中创建OrderTotal摘要字段。

注意:在内部,Force.com使用本地数据库功能实现公式和汇总摘要字段,并有效地重新计算值作为正在进行的事务的一部分。

p9.png

Metadata and Web Services APIs:

Force.com还为构建应用程序提供了编程API。 这些API与基于SOAP的开发环境(包括Visual Studio .NET(C#)和Apache Axis(Java和C ++))兼容。

应用程序可以利用Force.com API与其他环境集成。 例如,应用程序可以利用API来访问其他系统中的数据,构建混合来源于多个数据源的混搭,将外部系统作为应用程序进程的一部分,或者构建胖客户端以连接Force.com Platform数据库管理系统。

Force.com元数据API对管理应用程序组件非常有用 – 创建和修改与自定义对象定义,页面布局,工作流等相对应的元数据。创建,检索,更新或删除对象实例(数据行) ,应用程序可以使用Force.com Web服务API。

要访问Force.com Web服务,开发人员首先下载一个Web服务描述语言(WSDL)文件。 开发平台然后使用WSDL文件生成一个API来访问组织的相应Force.com Web服务(数据模型)。

有两种类型的Force.com WSDL文件。 企业WSDL文件适用于构建组织特定应用程序的开发人员。 企业WSDL文件是组织数据模型的强类型表示。 它向开发环境提供有关组织架构,数据类型和字段的信息,从而使其与Force.com Web服务之间的集成更紧密。 如果将自定义字段或自定义对象添加到组织的应用程序模式,或者从组织的应用程序模式中删除自定义对象,企业WSDL也会发生变化 相反,合作伙伴WSDL文件适用于为多个组织开发客户端应用程序的salesforce.com合作伙伴。 作为Force.com对象模型的松散类型表示形式,合作伙伴WSDL提供了一个API,可用于访问任何组织内的数据。

Bulk Processing with API Calls:

事务密集型应用程序产生的开销较小,并且在批量组合和执行重复操作时性能会更好。 例如,对比应用程序可能加载对象的许多新实例的两种方式。 一个低效率的方法是使用一个循环插入单个对象实例的例程,为每个插入操作进行一次API调用。 更有效的方法是创建一个对象实例的数组,并让这个例程通过一个API调用来插入所有的对象。

适用的Force.com Web Services API调用(如create(),update()和delete()支持批量操作。 为了获得最大的效率,平台隐式地批量处理与显式批量操作相关的所有内部步骤,如图10所示。

p10.png

图10还说明了Force.com的批量处理引擎的独特机制,可以解决在任何一步中遇到的孤立故障。 当批量操作在部分保存模式下启动时,引擎会识别已知的启动状态,然后尝试执行过程中的每个步骤(批量验证字段数据,批量预触发器,批量保存记录等)。 如果引擎在任何步骤中检测到错误,则引擎将回滚违规操作和所有副作用,删除引发故障的行,并继续尝试批量处理剩余的行子集。 这个过程遍历整个过程的每个阶段,直到引擎可以提交行的一个子集而没有任何错误。 应用程序可以检查返回对象,以确定哪些行失败以及引发了哪些异常。

注意:根据应用程序的判断,批量操作也可以使用“要么全成功或要么全不成功”模式。 此外,批量操作期间触发器的执行受制于限制工作量的内部调节器。

Deletes, Undeletes, and The Recycle Bin:

当某人从自定义对象中删除单个对象实例(记录)时,Force.com只需通过修改对象实例的IsDeleted字段(在数据表中)将其标记为要删除的对象实例。 这有效地将对象放置在所谓的平台回收站中。 通过Force.com,用户可以从回收站中查看并恢复选定的对象实例长达30天,然后将其从内部数据表中永久删除。 该平台根据组织的用户许可总数限制其为组织维护的记录总数。

当某人删除涉及主从关系的父记录时,Force.com会自动删除所有相关的子记录,只要这样做不会违反任何参照完整性规则。 例如,当用户删除SalesOrder时,Force.com自动将删除级联到相关的LineItems。 如果有人随后从回收站还原父记录,平台也会自动恢复所有子对象实例。

相比之下,当某人删除涉及查找关系的引用父记录时,Force.com会自动将所有相关主键设置为空。 如果某个人随后恢复父记录,Force.com将自动恢复以前的空值关联关系,除非在删除操作和还原操作之间这些关联关系被重新分配了。

回收站还会存储丢失的字段及其数据,直到组织永久删除它们,或者已经过了45天,以先发生者为准。 直到那个时候之前,整个领域和所有的数据可用于恢复。

Data Definition Processing:

某些类型的对象定义修改需要的不仅仅是简单的UDD元数据更新。 在这种情况下,Force.com使用有效的机制来帮助降低平台多租户应用程序的总体性能影响。

例如,考虑当某人将列的数据类型从选取列表修改为文本时发生的情况。 Force.com首先为列的数据分配一个新插槽,批量复制与当前值关联的选取列表标签,然后更新列的元数据以使其指向新插槽。 发生这一切时,访问数据是正常的,应用程序继续运行,没有任何明显的影响。

作为另一个例子,考虑当某人向表中添加汇总摘要字段时会发生什么情况。 在这种情况下,Force.com使用高效批量操作在后台异步计算初始摘要。 在进行后台计算时,查看新字段的用户会收到Force.com平台当前正在计算字段值的指示。

内部查询优化

大多数现代数据库系统通过采用基于成本的查询优化器来确定最佳的查询执行计划,该优化器考虑有关目标表和索引数据的相关统计信息 但是,传统的基于成本的优化器统计信息是为单租户应用程序设计的,无法说明在多租户环境中执行查询的任何给定用户的数据访问特性。 例如,针对具有大量数据的对象(表)的给定查询对具有高可见性的用户(可以看到所有对象实例的管理员)与具有低可见性的用户( 销售人员只能看到与自己相关的行)使用不同执行计划,这样会更加高效。

为了提供足够的统计信息来确定多租户平台中的最佳查询执行计划,Force.com为每个虚拟多租户对象维护一组完整的优化程序统计信息(租户,组和用户级别)。 统计信息反映了特定查询可能访问的行数,仔细考虑了整个租户特定的对象统计信息(整个租户拥有的总行数等)以及更细化的统计信息(行数 特定的特权组或最终用户可能访问等)。

Force.com还维护其他类型的统计信息,证明对特定查询有帮助。 例如,该平台维护所有自定义索引的统计信息,以显示相应字段中的非空值和唯一值的总数,以及显示每个列表值的基数的选项列表字段的直方图。

当现有的统计数据不存在或不被认为有帮助时,Force.com的优化器会使用一些不同的策略来帮助构建合理的最佳查询。 例如,当查询过滤对象的Name字段时,优化器可以使用FallbackIndex数据透视表高效地查找请求的对象实例。 在其他情况下,优化器将在运行时动态生成缺少的统计信息。

与优化器统计结合使用时,Force.com的优化器还依赖与内部安全相关的表(Groups,Members,GroupBlowout和CustomShare),这些表维护有关平台用户安全域的信息,包括给定用户的组成员身份和自定义访问权限对象。

p11.png

图11中的流程图说明了当Force.com拦截对诸如Data之类的大型堆表之一中的数据的请求时发生的情况。 请求可能来自任何数量的来源,例如来自应用程序框架应用程序的页面请求,Web服务API调用或Apex脚本。 首先,平台执行考虑多租户感知统计的“预查询”。 然后,考虑预查询返回的结果,平台在特定的设置中建立一个最佳的数据库查询执行。

如表1所示,Force.com可以通过四种不同的方式执行相同的查询,具体取决于提交查询的人员和查询过滤条件的选择性。

Force.com全文搜索引擎

基于Web的应用程序用户期望具有交互式搜索功能,可以扫描应用程序数据的整个或选定范围,返回最新的排名结果,并在亚秒级响应时间内完成所有这些工作。 为了为平台应用程序提供强大的功能,Force.com使用基于外部搜索引擎的架构,如图12所示。

当应用程序更新文本字段(CLOB,Name等)中的数据时,称为索引服务器的平台后台进程池负责异步更新搜索引擎在核心数据库之外维护的相应索引。 为了优化索引过程,Force.com将修改过的文本数据块同步复制到一个内部的“待索引”表中,从而提供一个相对较小的数据源,以最小化索引服务器必须读取的数据量磁盘。 搜索引擎为每个组织(租户)自动维护单独的索引。

根据当前的索引服务器的负载和利用率,文本索引更新可能明显落后于实际的事务。 为了避免源自陈旧索引的意外搜索结果,Force.com还维护最近更新对象的MRU缓存,平台的应用程序服务器在实现全文搜索结果时会考虑这些对象。 该平台在每个用户和每个组织的基础上维护MRU缓存,以有效地支持可能的搜索范围。

p12.png

Force.com使用几种不同的方法来优化搜索结果中记录的排名。 例如,系统考虑执行搜索的用户的安全域并且权衡当前用户有权访问的那些对象。 系统还可以考虑特定对象的修改历史记录,并在比较静态的对象之前排列最新更新的对象。 用户可以根据需要选择权重搜索结果,例如,更加强调最近修改的对象。

APEX

Apex是一种强类型,面向对象的过程式编程语言,开发人员可以用它来声明程序变量和常量,并执行传统的流程控制语句(if-else,loops等),数据操作操作(insert,update,upsert,delete )以及代表Force.com应用程序的事务控制操作(setSavepoint,回滚)。 Apex在很多方面与Java相似。 开发人员可以构建Apex例程,为大多数应用程序事件添加自定义业务逻辑,包括按钮点击,数据更新,Web服务请求,自定义批处理服务等。

开发人员可以以两种不同的形式构建Apex程序:作为匿名独立脚本,可以根据需要执行,也可以作为在发生特定数据库操作事件(插入,更新,删除或取消删除)之前或之后自动执行的触发器。 无论哪种形式,Force.com都会编译Apex代码并将其作为元数据存储在UDD中。 当组织中的某个人第一次调用Apex例程时,Force.com的运行时解释程序会将编译后的程序版本加载到该组织的MRU缓存中。 此后,当来自同一组织的任何用户需要使用相同的例程时,Force.com可以节省内存并避免重新编译程序的开销,这是通过共享已经在内存中的准备运行的程序来实现的。

Apex不仅仅是“另一种程序语言”.Apex是一个完整的Force.com组件,可帮助平台提供可靠的多租户应用程序。 例如,Force.com自动验证Apex类中的所有嵌入式Sforce对象查询语言(SOQL)和Sforce对象搜索语言(SOSL)语句,以防止在运行时失败的代码。 然后,平台为有效的Apex类维护相应的对象相关性信息,并使用这些信息来防止元数据的更改,否则这些元数据会破坏相关的应用程序。

许多Apex标准类和系统静态方法为底层平台特性提供了简单的接口。 例如,插入,更新和删除等系统静态DML方法有一个简单的布尔参数,开发人员可以使用它来指示所需的批量处理选项(全部或全部或部分保存); 这些方法还会返回调用例程可以读取的结果对象,以确定哪些记录未成功处理以及为什么。 Apex和Force.com平台功能之间的直接联系的其他示例包括内置的Apex电子邮件类,HTTP(RESTful)服务类和XmlStream类,仅举几例。

为了防止共享的多租户平台资源遭到恶意或无意的垄断,Force.com拥有一系列与Apex代码执行相关的管理员和资源限制。例如,Force.com密切监视Apex脚本的执行情况,并限制它可以使用多少CPU时间,可以使用多少内存,可以执行多少个查询和DML语句,可以执行多少个数学计算,以及如何执行很多出站的Web服务调用,以及更多。平台优化器认为执行代价过高的个别查询会向调用方抛出运行时异常。虽然这样的限制听起来可能有些限制,但它们对于保护所有相关应用程序的共享平台的整体可扩展性和性能是必要的。从长远来看,这些措施有助于推动平台开发人员更好的编码技术,为每个人创造更好的体验。例如,最初试图编写循环的开发人员会因为资源限制而无效地一次更新一千行,将会收到运行时异常,然后开始使用Force.com的高效批量处理API调用。

为了进一步避免由编写不佳的应用程序引起的潜在平台问题,部署新的生产应用程序是一个严格管理的过程。 在组织可以将新的自定义应用程序从开发转换到生产状态之前,salesforce.com需要单元测试来验证应用程序的Apex例程的功能。 提交的单元测试必须覆盖不少于应用程序源代码的75%。 Salesforce.com会在Force.com沙箱环境中执行提交的单元测试,以确定应用程序是否会对整个多租户人群的性能和可伸缩性产生不利影响。 单个单元测试的结果表示基本信息,例如执行的总行数以及有关代码的特定信息,这些信息并不是由测试执行来获取的。

一旦应用程序通过salesforce.com进行生产认证,应用程序的部署过程由一个事务组成,该事务将所有应用程序的元数据复制到生产Force.com实例中,并重新执行相应的单元测试。 如果进程的任何部分失败,Force.com只是回滚事务并返回异常来帮助解决问题。

注意:Salesforce.com为每个应用程序的每个开发版本重新开始了单元测试,以主动了解新的平台功能和增强功能是否会打破现有的应用程序。

p13.png

历史统计

多年的经验已经将Force.com转变成一个极其快速,可扩展且可靠的多租户互联网应用平台。 作为说明Force.com支持Internet规模应用程序的成熟能力,请考虑图13.请注意,随着时间的推移,平均页面响应时间减少或保持稳定(性能的一种衡量),同时平均事务量同时增加 (可扩展性的一种衡量)。

对于更多的平台数据,如计划维护,交易量和速度的历史信息等,请访问信任。 salesforce.com是Force.com社区的实时系统性能和安全信息的家园。

总结

平台即服务(PaaS)和软件即服务(SaaS)是当代软件应用程序开发和交付模式,越来越多的组织正在使用这些模型来缩短上市时间,降低资本支出并提高全球竞争力 经济。 基于互联网的共享计算平台是有吸引力的,因为它们让企业能够根据需要快速访问托管的软件资产,并且完全避免了购买,安装,配置和持续维护本地数据中心相关的成本和复杂性, 以及硬件,软件和随行的管理人员。

在这些模式转变的最前沿,最成功的按需SaaS / PaaS公司是salesforce.com,它最近获得了成为标准普尔500指数中第一个按需软件供应商的地位。从极其成功的salesforce.com CRM SaaS应用程序中脱颖而出,Force.com是一个通用的互联网应用程序开发和交付平台,企业和服务提供商已经构建了所有类型的定制业务应用程序,包括供应链管理,计费,会计,合规跟踪,人力资源管理和理赔处理应用程序。该平台的元引擎架构使任何人都能够高效地构建和交付复杂的,可定制的任务关键的Internet规模多租户应用程序。使用基于标准的Web服务API和本地平台开发工具,Force.com开发人员可以轻松构建基于Web的应用程序的所有组件,包括应用程序的数据模型(表,关系等),用户界面(数据输入表单,报告等),业务逻辑(工作流,验证等),与其他应用程序的集成等等。

在过去的十年中,salesforce.com的工程师已经对Force.com平台的所有层进行了多租户优化,使平台能够提供前所未有的互联网可扩展性,达到每日1.7亿次交易的高峰。 诸如批量数据处理API,Apex编程语言,外部全文本搜索引擎以及其独特的查询优化器等平台功能有助于使多租户平台应用程序高效且可扩展,开发人员很少或根本没有在意。

Salesforce.com用于部署生产应用程序的托管方法确保了所有相关应用程序的一流性能,可扩展性和可靠性。 此外,salesforce.com持续监控并收集来自Force.com应用程序的操作信息,以帮助推动渐进式改进和新的平台功能,立即使现有和新应用程序受益。

  • Dec 04 / 2017
  • 0
Data, Tech

锐眼洞察 | 云端的数据科学-也就是所说的模型即服务(翻译)

作者:Vamsi Chemitiganti

原文:Data Science in the Cloud A.k.a. Models as a Service (MaaS)

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

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

译者点评: 数据从核心上来讲是要流动才能产生价值,但是数据又不能被交易,那如何让数据产生价值呢?这里就引出了一个新的模式Maas,也就是模型即服务。简单来讲,数据是各种实体以及其行为的数字化记录,利用这些数据,可以进行分析和预测,而分析和预测的过程,就是模型在起作用。做个类比,我们的人脑中实际上就是存在各种的模型,而我们的感官就是数据收集的部分,大脑中的模型通过对收集的数据进行处理,就指导了我们每天的各种决策。数据作为进行决策的原始材料,基本上很难通过交易来进行价值的变现,那如何变现数据的价值呢,答案就是——模型。我们不可能将大脑里存储的数据出售给别人,但是我们每个人售卖的都是我们大脑通过模型处理后产生的结果,而其价值则来自于我们大脑中模型的能力,而类似于爱因斯坦的牛人,他的大脑中的模型也超级牛,就能够改变人类对世界的认识。而我们芸芸众生,大脑中都是一些相对普通的模型,价值自然也就普通。对于大数据,模型即服务的模式无疑是让数据产生价值的一个可行路径。碰巧看到了这篇文章 http://www.vamsitalkstech.com/?p=5321 ,作者对模型即服务做了介绍,同时介绍了他对模型即服务的认识。这里翻译给大家,希望大家一起讨论。  

硬件即服务,软件即服务,数据库即服务,基础设施即服务,平台即服务,网络即服务,后端即服务,存储即服务。随着每个IT交付的模式向云端转移,难道数据科学会落后于这个趋势吗? 在这个云化的环境中,什么能够帮助数据科学家实现他们的模型能够持续利用高质量和大量的生产级别的数据进行持续的训练?答案是模型即服务。

预测分析工作流程

预测分析的工作流程总是从头脑中的一个业务问题开始的。例如:”一个营销项目去检测基于客户历史上和实时的对产品的使用模式,预测哪些客户更有可能在接下来的六个月购买新的产品或者服务”。

ence_Process.png

面向这一类用例,数据科学过程的目标是能够通过分区和过滤将客户放置到不同的分类中,从而方便排序。在完成这些后,企业可以设置简单直接的可视化来展示效果。很多时候,企业集团通常很难解释他们到底想要看到什么,无论是输入数据还是输出格式。在这种情况下,一个原型可以使得需求的收集变得更加容易。当问题被定义后,数据科学家/建模的人就会去识别与业务挑战相关联的原始的数据源(包含了内部数据源和外部数据源)。他们花费大量的时间在数据收集的过程当中(从类似于Oracle/SQL Server、DB2、主机系统、Greenplum、Excel、外部数据集等等不同的来源)。清洗过程包含了处理缺失值、处理残缺的数据单元、格式化字段使得格式一致等等。 数据清洗阶段包括利用代码将不同的数据元素关联在一起,从而使得从不同的原始的数据源来的数据可以以正确的颗粒度构成一个完备的数据集放置到数据湖当中。如果在开发过程进行中获取了新的数据,数据科学团队不得不回头重复这个过程从而能够利用新的数据。建模过程是复杂的算法开始起作用的过程,特征工程是接收业务概念和原始数据特征并从它们当中产生预测特征的过程。数据科学家得到原始的或者特征工程化之后的特征,使用不同的算法并且测试从而找到最好的算法来创建模型。当模型被完善,并且经过精度以及性能测试之后,理想情况下是被部署为一个服务。

现存方式的挑战

业务扩展性:前面提到的预测性分析通常来自于一个业务线或者创新。如果你不让多个应用和业务创新去访问构建的模型,带来的收益将会大大的降低。

缺乏数据丰富性:一个团队创建的模型并不能够总是被跨组织的来自于不同业务应用的持续产生的数据所增强。除此之外,绝大多数行业应用程序并没有在业务应用中利用所有的可能的非结构化数据以及第三方数据。使模型曝露在一系列的数据中(无论内部还是外部)只能丰富产生的洞察。

跨应用的适用性:这个挑战涉及如何从不同的应用程序(利用不同的模型)中得到业务智能洞察,去增强那些并不是创造那些模型的业务领域。这可以实现实时的以客户为中心的洞察。例如,考虑一个客户销售应用和一个呼叫中心应用,跨应用的洞察可以用来理解客户打电话到呼叫中心是因为利用网站下产品的订单非常困难吗?

数据变现:创建新的商业业务模型的一个至关重要的能力,是围绕现存的以及新的数据源进行敏捷分析的能力。如果随之而来的是企业越来越多的业务数据资产建立,那么自然而然的数据会当作商品可以进行交易,创造收入。例如,领先的支付服务商现在向零售商提供分析服务以帮助他们理解哪些产品业绩更好以及如何改善客户的微观目标。因此数据是任何数字驱动的措施的关键一环,这导致了通过创建支持生态能力的平台来进行数据变现的一些努力。我们将这个讨论简化一下,数据变现的能力需要两个方面——首先将其集中,然后进行大规模的预测建模,这要求系统需要持续的学习并且优化他们的交互、以及优化按照客户的需求和选择的响应和服务。因此模型集中化将带来传统企业想象不到的巨大收益。

MaaS 模型即服务

模型即服务接受业务变量(通常是几百个或者几千个输入)并且提供将可以预测的业务决策作为模型输出。还有可视化的用于增强和支持业务决策的支撑系统。如图所示,一旦建立、测试和验证了不同的预测模型,它们就可以在现实世界被生产部署。MaaS本质上是一种部署这些高级模型的方式,作为软件应用的一部分,他们可以被作为软件服务来订阅。

aS_Lifecycle.png

MaaS方式带来的业务价值

a. 将模型开放给不同的业务线可以提高它们的实用性,并且通过接收反馈来提高它们的准确度。

b. MaaS将模型开放给任何希望从它们当中获益的应用,这迫使数据科学家与比通常更广泛的业务团队进行合作。

c. 在整个组织中提供仪表盘和商业智能比采用孤立的方法要简单的多。

d. MaaS作为一种方法从根本上鼓励敏捷的方法来管理数据资产,并使其合理化。 对于任何MaaS的成功,都需要能及时访问组织中潜在的数百个数据源。 MaaS鼓励将数据视为整个组织的可重用资产。

MaaS方式的技术优势

  • Dec 01 / 2017
  • 0
Tech

锐眼发现 | 2017年中国各地政府有关支持区块链发展的政策文件梳理

作者:邱祥宇

转载于:巴比特

本文遵守CC授权,不得将本作品用于商业目的,转载请注明并注明出处。

 

自2016年10月工业和信息化部发布《中国区块链技术和应用发展白皮书(2016)》及2016年12月区块链首次被作为战略性前沿技术、颠覆性技术写入国务院发布的《国务院关于印发“十三五”国家信息化规划的通知》以来,区块链日益受到我国政府的重视和关注,各地政府纷纷出台有关区块链的政策指导意见及通知文件。

区块链政策汇总
据巴比特不完全统计,截至2017年11月底,国内共有浙江、江苏、贵州、福建、广东、山东、江西、内蒙古、重庆等9个省份、自治区和直辖市就区块链发布了指导意见,多个省份甚至将区块链列入本省“十三五”战略发展规划。另外,国务院在今年发布的4个文件中提及区块链。

各省出台区块链数量1

从文件发布的数量上看,浙江、江苏、贵州三省最多,数量分别是5、4、3。

从支持力度上看,贵州贵阳、浙江杭州、山东青岛、广东深圳、重庆四地将区块链放在较为重要的位置,并出台了专门的政策扶持文件。

另外值得注意的一点是,尽管大部分人将北京、上海列为中国区块链发展的第一梯队,但是二者却并未就区块链发展出台明确的政策文件。

区块链政策总文件

以下是我国各地区区块链政策文件梳理:

浙江

浙江是国内最早重视区块链技术的省份,2016年1月,浙江省委书记夏宝龙参加海归学子创新创业座谈会上指出,“希望浙江成为全国区块链技术开发应用高地”。2017年4月,杭州市人民政府联合主办了2017全球区块链金融(杭州)峰会,这是2017年国内政府层面联合主办的最高规格的区块链峰会。杭州市副市长陈新华在会上表示,“杭州作为全国第十个GDP总量超万亿元的城市,目前正在积极推进钱塘江金融港湾的规划建设,打造财富管理和新金融创新中心。钱塘江金融港湾的规划建设,必将为区块链产业提供养分丰厚的创新发展的土壤。”

区块链-浙江1

具体到政策文件,2016年12月,浙江省人民政府办公厅发布《关于推进钱塘江金融港湾建设的若干意见》(以下简称意见),这是浙江省政府较早提及区块链的政府文件,《意见》指出,为推进钱塘江金融港湾建设,构建财富管理产业链和新金融生态圈,打造财富管理和新金融创新中心,将加强产业和生活配套设施建设,积极引进区块链企业入驻。

在2017年,浙江省在多次政府文件中提及区块链,可见政府对区块链的重视程度。事实上浙江尤其是杭州市正在成为中国区块链创新的高地,万向集团在今年5月宣布启动万向创新聚能城建设,这个斥资2000亿元、建设面积8.42平方公里、预计可容纳7万人的智能城市将成为中国乃至世界最大的区块链应用项目。依托浙江大学的科研实力,这里走出一大批区块链创新者,如趣链科技创始人李伟、云象区块链创始人黄步添、秘猿科技创始人谢晗剑等。杭州本地的区块链产业较为完善,如从事区块链专用芯片研发的嘉楠耘智,提供媒体资讯及社区服务的巴比特、提供数字资产钱包的imToken,企业级区块链方案提供商趣链、云象、秘猿科技等以及公链项目比原链等。另外,央行旗下中钞区块链研究院也在2017年9月落户杭州,研究区块链和数字货币的技术和应用。

江苏

与浙江接壤的江苏是目前国内在政府文件中提及区块链最多的省份之一,2017年有4份政府文件提到了区块链。

2017年2月,南京市人民政府下发《市政府办公厅关于印发“十三五”智慧南京发展规划的通知》,在发展目标中,《通知》提到,“智慧城市与智慧产业融合发展水平大幅提升。公共数据资源开放对产业发展的带动作用显著增强,人工智能、生物识别、区块链等一批新技术形成突破并实际应用。智慧产业位列全国第一方阵。”这是南京市政府工作文件中较早提及区块链的一份文件。

区块链-江苏1

在此后的3月、6月和7月,南京市政府陆续下发了《市政府办公厅关于印发南京市“十三五”金融业发展规划的通知》、《市政府办公厅转发市经信委关于南京市加快推进制造业与互联网融合发展实施方案的通知》、《市政府关于加快科技金融体系建设促进科技创新创业的若干意见》,均有提及区块链技术。

然而需要指出的是目前江苏当地区块链企业匮乏,江苏省除了无锡井通网络科技有限公司(简称“井通科技”)及江苏华信区块链产业研究院有限公司(简称“华信区块链”),鲜有知名从事区块链的公司。

贵州

贵阳市是国内为数不多的在《政府工作报告》中提及区块链的地区,2017年2月,贵阳市市长刘文新作政府工作报告,其中区块链技术与政府数据共享开放、大数据安全一起被视为贵阳市未来五年抢占大数据发展制高点三个重点突出方向之一。

区块链-贵州1

贵州从2016年年底开始正式探索区块链技术,标志性事件是2016年12月31日贵阳市人民政府新闻办公室正式发布《贵阳区块链发展和应用》白皮书,涉及的重大理论创新包括提出主权区块链、“绳网结构理论”以及“块数据”与“绳网结构”理论的融合。前贵阳市委书记陈刚(目前陈刚已经离任,现担任河北省委常委、副省长,雄安新区党工委书记、管委会主任)、贵阳市市长刘文新担任编委会主任。

贵阳发展区块链可以看作是在发展大数据基础上的顺势而为。贵阳市人民政府副市长王玉祥此前在公开演讲中明确表示,贵阳大数据产业发展,贵阳大数据金融的发展,贵阳防控金融风险体系的完善,很大程度上仰仗区块链技术的成果。陈刚在《贵阳区块链发展和应用》白皮书也提到,区块链的“绳网结构”理论与贵阳提出的“块数据”理论高度契合,在加快大数据发展发展过程中,区块链的应用不仅仅局限在金融领域,它将与“块数据”一道在政用、商用、民用方面拥有广泛的应用前景和巨大应用价值。

2017年6月,贵阳市人民政府办公厅印发了《关于支持区块链发展和应用的若干政策措施(试行)的通知》(以下简称通知),《通知》是对《贵阳区块链发展和应用》白皮书总体布局中有关要求的落实,支持和鼓励区块链企业及其相关机构在贵阳入驻。《通知》共二十四条,从主体支持、平台支持、创新支持、金融支持、人才支持等方面详细列举了对符合要求的区块链企业、机构及个人的奖励政策。其中,在主板上市的区块链企业会获得1000万元的奖励。

根据《贵阳区块链发展和应用》白皮书总体架构和试点启动安排,在2017年,推进主权区块链在首批12个场景的试点应用。

政用领域包括:政府数据共享开放、数据铁笼监管、互联网金融监管3个场景;

民用领域包括:精准扶贫、个人数据服务中心、个人医疗健康数据、智慧出行4个场景;

商用领域包括:票据、小微企业信用认证、数据交易与数据资产流通、供应链管理与供应链金融、货运物流5个场景。

截至2017年11月底,上述12个领域已经付诸行动的有:

区块链-贵州2

广东

广东省政府对区块链开始重视可以追溯到2016年,2016年12月26日,广州市委书记任学锋在《中国共产党广州市第十一次代表大会上的报告》中关于部署广东今后五年的主要工作任务中提到,“积极承接建设重大科技项目,发展嵌入式技术和人工智能、云计算、大数据、集成电路、物联网、区块链、干细胞、基因工程等前沿技术。”

但是一直到2017年10月之前,广东并没有出台针对区块链产业发展的专项政策,缺乏明确的顶层政策指导,广东各地区政府对区块链发展一度呈现各自为战的态势。比如作为我国改革开放的“先行地”和“试验田”的深圳,比较重视金融创新,所以深圳发展区块链的思路是将其视为金融科技的一部分,比如在深圳市金融办2016年11月发布的《深圳市金融业发展“十三五”规划》中提到,“支持金融机构加强对区块链、数字货币等新兴技术的研究探索。”2017年9月,深圳市下发《深圳市人民政府关于印发扶持金融业发展若干措施的通知》,鼓励金融创新,设立金融科技(Fintech)专项奖,“重点奖励在区块链、数字货币、金融大数据运用等领域的优秀项目,年度奖励额度控制在600万元以内。”

区块链-广东1

作为广东省会的广州,主要以广州开发区为主要依托,先是在2017年7月成立了广州市区块链产业协会,拿下了广东省首家区块链协会的头牌。而后在2017年10月落地区块链创新基地,初步构建“一基地四平台”的区块链产业布局。另外,广州黄埔区、广州开发区正在加快制定《广州市黄埔区广州开发区促进区块链产业发展办法》,据多家媒体报道,该项产业发展办法针对培育、成长、应用以及技术、平台、金融等多个环节给予重点扶持,是目前国内支持力度最大、模式突破最强的区块链扶持政策,不过这一本应在10月底发布的政策文件截止到11月底仍未发布

广东部分区块链项目:

区块链-广东2

山东

2017年6月,山东省市北区人民政府印发了《关于加快区块链产业发展的意见(实行)》(以下简称意见),《意见》的出台是为了贯彻落实国家和省、市关于创新驱动发展战略的决策部署,目的是加强区块链理论研究和底层技术的突破创新,力争到2020年,形成一套区块链可视化标准,打造一批可复制推广的应用模板,引进和培育一批区块链创新企业,造就一支专业人才队伍,建立一套管理体制和运行机制,努力建设立足青岛、面向全国的区块链产业高地、区块链+创新应用基地——“链湾”。

在政策扶持力度上,设立区块链产业发展年度专项资金,连续执行五年。此外加强金融资本支持,建立引导基金、政策担保、区块链发展投资基金,完善和健全区块链发展的金融资本支持政策。《意见》同时提出,要在市北区建设区块链产业孵化平台、区块链应用测试平台、区块链专项教育培训平台和区块链资格认证平台。

江西

2017年9月,江西省人民政府下发《关于印发江西省“十三五”建设绿色金融体系规划的通知》,鼓励发展区块链技术、可信时间戳认定等互联网金融安全技术,应用于金融业务场景。

目前,南昌市成立了区块链技术与应用研发中心、赣州建立了区块链金融产业沙盒园。

内蒙古

“东林西铁,南粮北牧,遍地矿藏”是对内蒙古资源优势的集中概括,这一切看上去似乎和发展区块链没有什么关系。

其实不然,我们知道,比特币挖矿需要大量的电力资源支撑,而内蒙丰富的火电和风电资源正是很多矿工选择在这里建立矿场的重要原因。内蒙古鄂尔多斯达拉特旗经济开发区坐落着全球最大的比特币矿场,据报道,当地矿场一个小时的用电量是40MW,相当于1.2万个家庭同期的用电量。

2017年6月,内蒙古自治区人民政府办公厅发布了《关于印发2017年自治区大数据发展工作要点的通知》提到,“加强数据感知、数据传输、计算处理、基础软件、可视化展现、区块链及信息安全与隐私保护等领域技术和产品的研发,推动建设一批大数据企业技术中心、工程(技术)研究中心、重点实验室和应用中心。”这可以看作是当地政府对区块链的支持,但是目前内蒙古从事区块链的企业很多是以云计算的名义报批的,并不对外宣称是从事比特币挖矿的企业,如内蒙古毅航云计算科技有限公司(现已更名为内蒙古比银云计算科技有限公司)就是中国比较知名的比特币矿场。

重庆

2017年11月,重庆市经济和信息化委员会发布《关于加快区块链产业培育及创新应用的意见》提出,到2020年,重庆市将打造2-5个区块链产业基地,引进和培育区块链国内细分领域龙头企业10家以上、有核心技术或成长型的区块链企业50家以上,引进和培育区块链中高级人才500名以上,努力将重庆市建成国内重要的区块链产业高地和创新应用基地。

目前,渝中区成立了重庆市首个区块链产业创新基地。

北京

北京政府机构文件中较早提及区块链的是北京市金融工作局于2016年8月发布的《北京市金融工作局2016年度绩效任务》,文件中提到,“为推进北京市金融发展环境建设,推动设立了中关村区块链联盟。”2016年12月,北京市金融工作局与北京市发展和改革委员会联合下发《北京市“十三五”时期金融业发展规划》的通知,将区块链归为互联网金融的一项技术。如文件中第五条:规范发展互联网金融,发掘产业发展新业态,里面提到,“鼓励发展区块链技术、可信时间戳认定等互联网金融安全技术,保护消费者权益,提升互联网金融的安全性。”

2017年9月,由北京市金融工作局、北京市发展和改革委员会、北京市财政局、北京市环境保护局等联合下发《关于构建首都绿色金融体系的实施办法的通知》再次提到区块链,如第十条关于发展绿色金融科技中,“发展基于区块链的绿色金融信息基础设施,提高绿色金融项目安全保障水平。”

尽管北京迄今尚未出台针对区块链产业发展的专项政策,但是并不妨碍北京本地区块链技术的发展,据《乌镇智库》统计,北京目前是全国从事区块链技术创业公司最多的地方,超过40家,占全国总数的40%以上。

上海

作为中国金融业最发达的城市之一,上海市对金融业发展秉承友好的态度,政府有关部门对区块链技术也表达了积极的兴趣,如上海黄浦区区长杲云在“第七届上海新金融年会暨第四届金融科技外滩峰会”上表示,“将积极探索区块链等金融科技在政府服务方面的创新应用”。上海市政府金融服务办公室主任郑杨在中国区块链应用研究中心(上海)揭牌成立仪式上表示,“我们成立中国区块链应用研究中心,呼吁要法规先行。有可能上海金融界和法律界可以做一些尝试,我们先制定一些规则,看看能不能在这方面先行一步。”

上海市政府工作文件中较早提及区块链的是2017年3月上海市宝山区人民政府办公室关于转发区发展改革委制订的《2017年宝山区金融服务工作要点》的通知(以下简称通知),《通知》对于宝山区2017年金融服务工作要点中第一点:安排的强化金融服务实体功能,不断深化金融服务内涵,提到“跟踪服务庙行区块链孵化基地建设和淞南上海互联网金融评价中心建设”,这里的“庙行区块链孵化基地”指的是2016年11月,中关村区块链产业联盟与上海智力产业园达成合作,共同创建的中关村区块链产业联盟上海协同创新中心。

2017年4月,为引导、规范和促进互联网金融行业区块链技术更好服务实体经济、切实保护社会公众权益制定本规则,主管部门为上海市政府金融服务办公室的上海市互联网金融行业协会发布《互联网金融从业机构区块链技术应用自律规则》,这是国内首个互联网金融行业区块链自律规则。

目前上海成立的区块链企业数量居全国第二。

小结

从目前各省政府对区块链的态度看,贵州省发展区块链是经过深思熟虑的,依托大数据产业优势,制定了较为完善的纲领性文件,为其他地区制定政策提供了借鉴。不过陈刚被调任到河北雄安新区,贵阳还能否继续保持在区块链的先发优势值得进一步观察。

一些地区发布的相关文件中多次提及区块链技术,看起来事无巨细,但落实没有跟上,比如江苏省、福建省。一些地区虽然在文件并未提及区块链,但是区块链产业发展势头较好,比如北京和上海。

不可否认的是,区块链技术正受到越来越多地方政府的重视,更多的细化政策扶持文件料将会在接下来的几年间陆续下发,推动我国的区块链技术向前迈进。

  • Nov 30 / 2017
  • 0
Tech

锐眼发现 | 有没有必要把机器学习算法自己实现一遍?

作者:紫衫

原文:本文整理自作者在知乎的回答

转载于:雷锋网

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

作者按:哈哈哈哈,我觉得很多人都有这个疑问吧。机器学习好高大上,多么牛逼的东西,光是看公式就已经眼花缭乱了,总觉得自己该全部去实现一遍,有的时候太懒,有的时候觉得能力不够。道理虽然明白——任何事情自己亲手做一做还是更好的,但机器学习已经有了大量的库了,SVM-Light,R里面的glm()方程,自己实现一遍,最后又不敢用(因为不知道算法究竟是否正确),或者不能用(一是速度赶不上大神写的库那么快,二是精度没有专业库那么高),耗时耗力的写了一堆后究竟有什么用?

这里很多答案都提供了一些解释,但我想从另一个角度来聊聊这个问题。

我在1年半前(本科阶段)就开始接触计算心理学和机器学习方面的研究,在NAACL(自然语言处理排名第三的论坛)上发表了一篇文章,用的计算机教授写的算法库,跑的是经过AdaGrad优化的向量支持机(SVM)算法。在这种论坛发文章,你是必须去做海报展示的,站在自己的大幅海报面前傻傻的待4个小时,我的两位教授(一位是认知语言学教授,一位是计算机教授)都在那里。我的位置不太好,在最边缘的角落里,本来以为就可以赢得一份清净,Philip Resnik走了过来。直到那一刹那之前,我一直不知道他是谁。但经过教授介绍后,他是马里兰大学的机器学习和自然语言处理教授,在这个领域混了多年,在Google Schoar上的论文引用数高达12,853。

有没有必要把机器学习算法自己实现一遍?

他走过来的第一句话是:“假设我一点也不懂数学,告诉我你这篇论文做的是什么。”我解释后,看到我的计算机教授走了过来和Resnik聊天,Resnik问我的教授:“你用的是不是hinge loss(辛基损失函数)?”我的教授说:“是。但不是全局优化,所以我没有叫这玩意SVM……”(我凭回忆打出来的,可能不完全精确)。当时我站在一旁觉得这他们能这样大聊特聊数学,甚至是向量支持机(我当时认为这是最厉害的算法——除神经网络以外),简直是太厉害了,我一点也听不懂他们在讲什么。

直到现在,我才明白所谓的“辛基损失函数(Hinge loss)”其实就是Max(a,b)函数,就是比较 a 和 b 谁大谁小,然后选大的那个。这玩意究竟有什么难理解的?为什么要那么高大上?你让一个五岁的小孩,问他:“有一堆红球,一堆绿球,哪一堆的球更多啊?”这个小孩都能告诉你正确答案。

当然这说的有点偏题了。后来我非常幸运的考上了研究生,才终于开始了对“高档”算法的学习。第一个学期被Christopher Manning(克里斯多夫·曼宁)的CS224N自然语言处理虐了一番,这个学期开始上Andrej Karpathy(安杰·卡帕西)的神经网络(CS231N),该君是李菲菲教授(音译,Fei-Fei Li)的爱徒,在推特上有14.9K关注者,我越看他那张方块脸,越觉得他长得像贾斯丁·汀布莱克(Justin Timberlake)。

有没有必要把机器学习算法自己实现一遍?

我其实也是自控能力很差的人,在上安杰·卡帕西的课之前,也从没有萌生过自己去写机器学习算法的想法。原因在文章开头有提过:1. 我的代码运行速度肯定赶不上经过多次迭代的专业库的运行速度;2. 我咋知道我的代码写的就是对的呢?

我直到现在都这样认为:不考虑对方的环境和条件,知识与技能,就一味要求对方把机器学习算法都实现一遍,估计是最无理取闹的行为了吧。前天晚上,我跟另一个研究生Jason Freeman(杰森·弗里曼)聊天,他在微软的西雅图总部工作了4年,在目前越来越有名的TypeScript团队工作了3年(TypeScript是静态的JavaScript语言,正在国内和国外开始流行)——他告诉我他和安德斯·海尔斯伯格(Anders Hejlsberg)一起工作,他还经常顶撞安德斯。我的第一反应是:“他是谁……”(安德斯·海尔斯伯格是Delphi和C#之父,但我不熟悉这两门语言,所以不会崇拜他——小广告:Scala是我目前最喜欢的语言)。

我和杰森讨论的是3月份开始究竟要不要选吴恩达(Andrew Ng)的机器学习课(CS229)。我持的立场是我可能不打算上那门课,因为我已经看过大部分他的视频了,还读了他讲义的一部分(这里是讲义链接: CS 229: Machine Learning (Course handouts))。因为我已经确定以后要做神经网络方面的研究,所以觉得他课上的一些其他内容比如特征降维(PCA),对我而言用处不大,我只需要会用就行了。我不仅用过特征降维,还用过更好的降维可视化(tSNE算法)。这玩意和我的领域不搭,为什么我要浪费时间去学?

杰森的论点是,如果我学了它们的理论(甚至把它们实现一遍),就能更好的应用它们。我说:你把直觉(intuition)当什么了?在我看来,对算法进行“直观”上的了解,就已经很足够了。什么是向量支持机?就是拿一个平面去分隔一堆点。更术语一点的解释不外乎是拿一个超平面(Hyperplane)在高维空间里去分割。什么是特征降维?就是看如何把高维度的点阵降到两三个维度。什么是alpha值?就是看这个算法学得有多快。什么是正则化(regularization)?就是别让你的算法过度拟合数据(当然L1,L2等等都有区别,但这些区别都很简单,L1让你关注某个值,L2让你利用所有的值)。

为什么我谈这么多关于理论的问题?在我看来,学习机器学习的算法的进度是这样的:应用 -》理论 -》实现。就跟教小孩折射一样,你先让他看看筷子在水中如何弯折(应用),再告诉他光的折射原因(理论),再让他自己用其他物体来试试(实现)。实现,是这个漫长学习过程的最后一步。一开始就来谈实现,实在是很神奇的事情。

让我准确论述一下我的观点:如果你是学界精英,那么去学习那些你将要使用的算法的理论,最后再自己尝试着实现他们,是很有必要的,除非你是只做应用(比如社会科学,心理学,商学等等)。如果是普通的程序员/工程师,不需要强迫自己去实现这些算法。没人会给你一个小奖章,大公司招这类员工的时候,也是更看重学历,而不是看“哦,我把‘所有’的机器学习算法都实现了一遍”。

最后送上一点我觉得实现机器学习算法最好的路径:

最好用Python和Numpy库。这两样宝具会让你非常轻松。安杰·卡帕西(Andrej)推荐用ipython notebook(现在改名叫Jupyter了),来可视化数据,以及实验算法。昨天有一个下午茶会,我们系举办的,也邀请了安杰,我跑去凑热闹,跟安杰谈到了这个问题,他说就算是大公司做研究,也是这种路径,先从ipython notebook开始(这点让我很惊讶)。

机器学习算法最难的部分其实不是写出来,而是高效率的实现,让你的算法跑快一点。其中一个技巧叫做“矢量化”(Vectorization)。矢量化就是说,能做矩阵操作就矩阵操作,最好连一个外循环都不写。

这是我写的Softmax算法的测评:(在500个样本上跑的)

naive loss: 2.384533e+00 computed in 0.255952s
vectorized loss: 2.384533e+00 computed in 0.004148s

第一个是用普通的Python和循环写出来的,第二个是用矢量化操作写出来的,可以看到64倍速度的提升——侧面也可以看到Python有多垃圾(慢)。

这个是SVM(支持向量机)算法的测评:(同样500个样本)

Naive loss: 9.102322e+00 computed in 0.136226s
Vectorized loss: 9.102322e+00 computed in 0.005909s

这次的速度提升没有那么明显,但也是26倍的提速。

但我只想说:矢量化真是很难的事情。数学家随便就写公式,也不考虑考虑可怜的计算机科学孩子们。原初的公式几十分钟就搞定,矢量化要一两个小时的冥思苦想。

最后,对于那些读懂了理论,实在是闲得无聊,或者想要进军更高级的学术界的同志们,这里是安杰·卡帕西课代码的链接:CS231n Convolutional Neural Networks for Visual Recognition。如果你不属于这个类别,就不要瞎掺合啦,用用别人的库又怎么了?骇客精神(Hacker Code)中一条就是:“不要重复劳动,有库就要用库,不然就是对库写作者的不尊重。”

这篇文章有点接近“反智”文章的边缘,大意是实用主义至上,自己实现的必要性不大。这个观点还是有很多争议的,比如目前有一个答案就“实名”反对这个答案。机器学习是一个交叉学科,作为学生而言,从不同的部门学到的机器学习,必然是不一样的。在统计学部门学到的机器学习,和在计算机部门学的机器学习,肯定是两个样。我秋天的时候跟一位概率教授上了一节课,当我告诉他斯坦福计算机入门概率课要介绍MLE(最大拟然估值)和蒙特拉罗模拟(Monte Carlo Simulation)的时候,他沉重的摇摇头,说这么早就介绍这样深刻的概念,是很不应该的,在他的部门,要第三年的学生才接触这样的知识,因为直到那时,学生才有足够的知识框架去理解这些知识。

我写这篇文章是有一定的原因的。我认识一些国内的大学同学,都异常优秀,他们努力的程度是我一辈子都比不上的,他们中一部分人因为运气不好(高考),不幸去了一些相对不是那么优异的大学,但是他们用努力弥补这个缺陷,对数学和各种学科展开攻克,很多人的阅读量和数学解题技巧也是我不能企及的。还有一部分人,是处于业界转型边缘,本来已是成熟的程序员,或者数据分析师,但是想要进一步提升自己,亦或是转型。我把这两类人定做这篇回答的目标受众。我希望为他们写一篇回答,不让他们走我走过的弯路,不受太多的误导。

开复先生(李开复)最近说深度学习急缺人才。我非常的不赞同。深度学习领域是处于半饱和状态的,实际上就业情况就是一堆熠熠生辉(Scintillating)的博士们在学术界待腻了,想要去赚点钱玩玩,就跑去业界晃一圈的状况。这和大部分人的就业状况根本是不搭边的。深度学习,以及理论机器学习,除非是平台很高,起点很高,是很难得到广泛认可的。

我最近刚买了一本书:

有没有必要把机器学习算法自己实现一遍?

这本书很详细的在讲Lasso Loss(L1),写SVM的部分也非常不错,很神奇的是,三位作者,两位是斯坦福统计学系的,一位是伯克利的。如果我能读完这本书,会上来改进一下这个答案的。

最近我想提一提答案末尾写的,关于“实现”的问题。我过去几周一直在写我自己的Theano库(是的,放着牛逼的Lasagne不用,非要自己手写),终于把CNN写完后,现在在写RNN的部分。当我已经花费这么多的时间,然后意识到,我的代码暂时还只能在CPU上跑,因为我暂时还没有用Theano的CUDA库,又意识到,仅仅几周后,我的两门春季课已经开始教TensorFlow了,于是觉得自己是个傻子。

所以我自己都陷入了我回答中所写的那个陷阱:实现之后却不能使用,但又不愿意放弃自己的代码,于是只有投入更多的时间去改代码,而不是去理解数学。愿与各位共勉。

  • Nov 27 / 2017
  • 0
Data, Tech

锐眼洞察 | 利用你自己的数据资产库进行数字化转型(翻译)

作者:Gary Orenstein 

原文:Using Your Data Corpus to Further Digital Transformation

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

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

译者注: 这篇文章整体解读了数据资产库对于业务的重要性,尤其是支持实时操作的数据资产库。MemSQL本身是基于内存的数据库,因此其性能非常适合做实时的数据科学和建模。

简介

我们每天都会看到新产生的数据流,从新的移动应用到新连接的设施和汽车以及新的从全世界各个角落获取信息的业务应用。我们的世界已经充满了数据。

世界最具价值公司的估值飞涨和驱动他们业务增长的数据,是这一显著趋势的最好证明。我们见识了Apple与AppStore、Google与其搜索的历史、Facebook与其社交图谱以及Amazon和其每个客户的丰富购买历史。这几家公司都找到了产生和变现他们数据资产的有效的方法。  

在更广泛的行业领域,如何获取数据、决定哪些数据有用以及哪些数据是杂质并且使之具备可操作性,仍旧是我们这个时代典型的技术和业务挑战。 在不同的行业领域有很多公司已经具备数据收集和分析模型,但现在是时候去评估这些手段能够如何有效的影响业务。

开发一个数据资产库

一个企业的数据资产库可能来自于不同的来源:

  • 现存的内部数据资产: 可能是企业内部已经存储的数据,这些数据可能开放给全公司访问,可能仅限一些个人或者团队访问。今天很多公司寻求将历史数据放入到数据湖中,尤其是将历史数据放入到低成本的存储中,使得这些数据可以被公司内部更多的人访问。
  • 现存的外部数据资产:并不是每个数据资产库都仅有内部数据构成。比如Google最早是通过扫描web网站来建设自己的数据资产库。在金融领域的另外一个选择是购买相关的历史数据集。
  • 新的数据流:未实现和未开发的数据流比较容易获取。可以通过收集新的数据或者加速数据收集来得到。例如,一个大零售商把现存的web统计从隔夜批量处理改为实时流式处理,这使得商品经理可以即刻看到相关信息并且做出决策而不需要等一个晚上。

评估数据资产库的价值

保留数据并不是免费的,并且具有固定和边际成本。然而,保留数据的成本通常远远小于数据带来的业务价值。例如,在Amazon S3上存储用于日常访问的前50T数据每个月花费1150美元,对于不常访问的放在Glacier存储上的花费仅仅200美元。当然,上传和下载也有成本,并且会放大存储花销,但是一般认为存储是相对便宜的。 更大的问题是对数据的利用。在公司内进行一个数据用户与组成的快速调研可以帮助我们回答这个问题。

大部分大公司有几十个甚至几百个商业智能分析师。 他们能从更多数据、新的数据流以及更新鲜的数据中获益吗?答案通常都是肯定的。

从数据资产库产生价值

数据资产库的价值是通过新的洞察和应用来产生的。一个简单的例子是Google利用搜索给出的建议。当Google吸引了大量的web搜索用户时,便可以对最频繁的请求构建一个数据库,当你在Google进行搜索时,它可以自动的利用这些数据进行补全。

clipboard-4.png

图1:Google的“自动补全”功能

金融领域案例

每个大型的金融机构都需要追踪财产从而确保其操作遵循公司或者政府的合规要求。尤其关键的是,如果银行发现其在合规范围内,就可以做更具野心的投资,从而获取更高收益。如果它已经接近或者触碰合规底线时,银行则必须进行相对保守的投资,而获得较低的收益。

如果没有一个数据资产库能够产生这些报告,银行无疑是在闭着眼睛飞行。通过将不同的系统中的数据放到一个大的实时数据仓库,银行得到了能够实时观察所有操作的一组透镜,确保信息是当日最新的而不是隔夜的。

利用实时反馈来达到数字化转型

最成功的公司采用数据资产库,并且结合数据科学和机器学习来驱动对数据资产库的洞察,如图2:

clipboard-3.png

图2:将应用与数据科学结合用于实时机器学习。来源:MemSQL

 

将应用和数据科学结合在一起进行实时机器学习

最初从数据资产库获益的是应用——技术领域的“执行者”。这些应用会产生一定量数据,并且在数据和应用程序之间有固定的交互。 随着应用和设备产生更加大量的数据,我们让“操作者”将数据科学应用在从企业软件到移动应用的一切地方以提高体验。当操作者和执行者结合在一起时,可以利用实时机器学习去驱动新的知识回流到业务。但也只有在反馈闭环被开发出来用于丰富体验时才能起效。

clipboard-2.png

图3:为数据资产库构建一个反馈闭环来驱动数字化转型。来源:MemSQL

用数据资产库做更多的事情

毫无疑问数据是商业的新燃料。企业现在需要通过可以提供数据变现能力的解决方案来应对数据的挑战。考虑到这一点,企业架构师应该考察:可以存储大量的历史数据和实时数据的数据库和数据仓库、可以提供实时数据注入以及数据查询的数据存储 、可以结合实时机器学习评分和嵌入机器学习功能到数据存储的解决方案、具备捕捉事件的事务处理能力和实时洞察的分析能力的数据存储。这样可以用更少的系统来提供完整的解决方案。

我们会看到在未来一段时间数据资产库会备受关注。正如一位杰出数据科学家同时也是一家AI创业公司CEO指出的:“我们将需要一个更大的资产库。”  

 

clipboard.png
  • Nov 27 / 2017
  • 0
Tech

锐眼发现 | 十分钟看懂图像语义分割技术

作者:沈MM,微信公众号「沈MM的小喇叭」(ID:VoiceOfShenMM)

            本文参考了知乎专栏,部分图片来自

转载自:雷锋网

 

大多数人接触 “语义” 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复。嗯,看到这里你应该已经猜到了,图像领域也是存在 “语义” 的。

今天是 AI 大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品、宠物,那该多没意思。说近一些,假如扫地机器人能够机智地绕开你丢在地上的臭袜子而扫走旁边的纸屑,一定能为你的生活解决不少麻烦。

没错,图像语义分割是 AI 领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环,是不是听上去即重要又牛 X 闪闪的。

近年的自动驾驶技术中,也需要用到这种技术。车载摄像头探查到图像,后台计算机可以自动将图像分割归类,以避让行人和车辆等障碍。

十分钟看懂图像语义分割技术

十分钟看懂图像语义分割技术

图像语义分割

图像语义分割的意思就是机器自动分割并识别出图像中的内容,比如给出一个人骑摩托车的照片,机器判断后应当能够生成右侧图,红色标注为人,绿色是车(黑色表示 back ground)。

十分钟看懂图像语义分割技术

所以图像分割对图像理解的意义,就好比读古书首先要断句一样

在 Deeplearning 技术快速发展之前,就已经有了很多做图像分割的技术,其中比较著名的是一种叫做 “Normalized cut” 的图划分方法,简称 “N-cut”。

N-cut 的计算有一些连接权重的公式,这里就不提了,它的思想主要是通过像素和像素之间的关系权重来综合考虑,根据给出的阈值,将图像一分为二

下图是将像素间的关系信息简单描述成为距离,根据距离差距来划分图像的示例:

十分钟看懂图像语义分割技术

在实际运用中,每运行一次 N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要多次运行,下图示例了对原图 a 进行 7 次 N-cut 后,每次分割出的结果。

十分钟看懂图像语义分割技术

但是可以很明显的看到这种简单粗暴的分割方式并不准确,趴在地上的运动员肢体在 b 图中分割出来,而他的手臂则在 h 图中被分割,显然是错误的。

N-cut 技术的缺陷很明显,于是有了一种更新的优化方式,这种优化方式为了避免机器不能很好的分割类似上面例子中 “衣服和肢体颜色反查太大导致分割错误” 的情况,增加了人机交互,在分割过程中,需要人工干预参与完成。

这种需要人机交互的技术叫 Grab Cut

[敲黑板]~~ 注意,PS 里就使用了这种技术。

这种技术其实是这样的,给定一张图片,然后人工在想要抠图(也就是我们说的分割)的区域画一个红框,然后机器会对略小于这个框的内容进行 “主体计算”,嗯,这个 “主体计算” 是我起的名字,为了你们更好的理解背后复杂的设计和公式,因为机器会默认红框中部是用户期望得到的结果,所以将中部作为主体参考,然后剔除和主体差异较大的部分,留下结果。

十分钟看懂图像语义分割技术

此技术中,抠出来的部分叫 “前景”,剔除的部分叫 “背景”。

有时候还挺好用的,但是稍微复杂一点的时候问题就来了:比如要抠下面这个戴头盔的大兵,头盔颜色和背后岩石颜色很相近,结果机器就会把头盔部分剔除,同样脖子附近的山岩也被当做了前景而保留了进来。

十分钟看懂图像语义分割技术

此时又需要进行人工干预了,需要手动在图像上进行标注,画白色线表示是希望保留的前景,红色表示背景,指导辅助机器进行判断,再次运算后,得到了较好的期望结果。

虽然看上去 Grab Cut 给出的结果还不错,但缺点也很明显,首先,它同 N-cut 一样也只能做二类语义分割,说人话就是一次只能分割一类,非黑即白,多个目标图像就要多次运算。其次,它需要人工干预,这个弱点在将来批量化处理和智能时代简直就是死穴

OK,人类的智慧是无止境的,DeepLearning(深度学习)终于开始大行其道了。

深度学习

深度学习是机器学习的一个分支,主要指深度神经网络算法,深度神经网络比普通神经网络层次更多,能够更好地捕捉数据中的深层次关系,得到的模型较为准确,主要用来进行特征学习。

先别急着晕,我们先来看看神经网络是怎么工作的。

神经网络是模仿人的神经元而建立的人工神经元系统,多输入单输出,同时输出又作为下一个神经元的输入……(请自行脑补那张牙舞爪妖孽的神经元细胞~ 什么?没见过?文科生,拖出去~~)

下图表示的是一个单个神经元:

十分钟看懂图像语义分割技术

把这些单个神经元组织在一起,便形成了神经网络。下图便是一个三层神经网络结构:

十分钟看懂图像语义分割技术

上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层

深度神经网络系统中的层数比较多,达到 8-10 层(普通神经网络的层数通常 3-4 层)。

在此前使用的图像识别算法中,主流的技术是卷积神经网络算法(Convolutional Neural Networks),简称 CNN卷积神经网络就是一种深度神经网络

但是在 2015 年的 CVPR 上发表了一篇很牛 X 的论文(路人甲:请问 CVPR 是神马?答:CVPR 可以简单理解为这个领域的最重量级的会议:国际计算机视觉与模式识别会议),提出了 FCN 即 全卷积神经网络(Fully Convolutional Networks)。

为什么说这个 FCN 论文很牛叉呢?看起来只是多了一个字而已呀,有什么不得了的呢?

嗯,不得不说,真是 “差之毫厘,谬以千里” 啊。

我还是先来帮大家复习一下卷积。

我查了很多书,卷积有各种各样的公式,还有各种各样的推导算法,但是为了降低本文的难读指数,所以我直接跳到卷积的物理意义,不要太 care 那些公式,其实卷积的物理意义,就是 “加权叠加”。

在对图像处理进行卷积时,根据卷积核的大小,输入和输出之间也会有规模上的差异。

来看一张动图(仅做示例)

十分钟看懂图像语义分割技术

上图左边 5*5 的方块视为图像输入,黄色移动的 3*3 以及里面的数字(*1/*0)是卷积核,该卷积核按照步长为 1 的顺序依次从原始输入的左上角一直移动计算叠加到右下角,卷积核一共移动 9 次。

九次的位置对应到右侧的 3*3 的相应格内,格中的数字便是卷积值,(此处是卷积核所覆盖的面积内元素相乘再累加的结果)。

9 次移动计算完毕后,右侧 3*3 的新矩阵为此次卷积层的计算结果。

如果这么说还是不太好理解,没关系,我有更直观的办法 ^_^。

在实际计算过程中,输入是一张原始图片和滤波器 filter(一组固定的权重,也就是上面我们说的卷积核对应的实际意义)做内积后得到新的二维数据。

不同的滤波器 filter 会得到不同的输出数据,比如轮廓、颜色深浅,如果想提取图像的不同特征,需要用不同的滤波器 filter 提取想要的关于图像的特定信息。

十分钟看懂图像语义分割技术

上图为一个卷积层中的卷积处理过程,注意上下两次卷积核内容是不同的,所以得到两种处理结果。

等号右边的新的二维信息在 CNN 网络中,会作为下一个卷积层的输入,即在下一个卷积层计算时,右边的图像会作为输入的原始图像。

在 CNN 网络中,一共会进行 5 次卷积层计算。

路人甲:那最后会得到一个什么鬼?

沈 MM:咳咳,在连续的 5 个卷积层计算后,紧跟这的是 3 个全连接层。

路人甲:什么是全连接层?

沈 MM:全连接层,并不是一个二维图像,而是—— 一个一维向量

路人甲已哭晕在厕所。

这三个一维向量的前两个向量长度是 4096,最后一个向量长度是 1000.

为什么是 1000?

因为在 CNN 网络中,有 1000 个分类,最后的这个向量中的 1000 个元素表达的信息是:这张原始输入图片中的东西可能是这 1000 个分类中的物体的概率。

是的,一张图,算了半天,最后给出的是,这张图是个什么玩意的答案。

十分钟看懂图像语义分割技术

右侧绿色箭头指向的表示最后一个全连接层的向量中,表示各种物体的概率,上图被识别为一辆车。

好了,上面说的是卷积神经网络 CNN 的处理过程(相信我我已经很简化了)。

那么全卷积神经网络呢?

大家应该注意到,CNN 的输入是图像,输出是一个结果,或者说是一个值,一个概率值。

FCN 提出所追求的是,输入是一张图片是,输出也是一张图片,学习像素到像素的映射

十分钟看懂图像语义分割技术

上图上半部分是 CNN 网络,下半部分是 CN 网络

那么 “全卷积” 又体现在哪里呢?

CNN 网络中的后三层,都是一维的向量,计算方式不再采用卷积,所以丢失了二维信息,而 FCN 网络中,将这三层全部转化为 1*1 的卷积核所对应等同向量长度的多通道卷积层,使后三层也全部采用卷积计算,整个模型中,全部都是卷积层,没有向量,所以称为 “全卷积”。

FCN 将第 6 层和 7 层分别从 4096 长度的向量转化为 4096 通道的卷积层,第 8 层则是 21 通道的卷积层。之所以第 8 层从 1000 缩减到 21,是因为 FCN 使用的识别库是 PASCAL VOC,在 PASCAL VOC 中有 20 种物体分类,另外一个 background 分类。(关于 PASCAL VOC 参见附录

再多说一句,以下(甚至全文)所用到的分割图片中不同的颜色就表示不同的物体类别,一共有 21 种颜色:

十分钟看懂图像语义分割技术

CNN 的识别是图像级的识别,也就是从图像到结果,而 FCN 的识别是像素级的识别,对输入图像的每一个像素在输出上都有对应的判断标注,标明这个像素最可能是属于一个什么物体 / 类别。

在此处特别要指出的是,在实际的图像语义分割测试时,输入是一个 H*W*3 的三通道彩色图像,而输出是一个 H*W 的矩阵。

这就可以简单看做每一个像素所携带的信息是多维的,比如颜色,就分为 3 层,分别对应 R、G、B 三个值。(不知道什么是 RGB 的,鉴定为文科生,请迅速撤离,谢谢)

所以在进行卷积的时候,每一个通道都是要独立计算的,计算完之后再叠加,得到最终卷积层结果。

如果卷积核移动的步长为 1,那么卷积是按照像素排列去挨个计算的,计算量可想而知会有多么庞大。但是在实际中,相邻的像素往往都是一类,按照像素依次计算就显得冗余,所以在卷积之后会对输出进行一次池化(pooling)处理

那么什么又是池化呢?

来,我们再来看一张动图:

十分钟看懂图像语义分割技术

池化简单来说就是将输入图像切块,大部分时候我们选择不重叠的区域,假如池化的分割块大小为 h*h,分割的步长为 j,那么一般 h=j,就像上图,如果需要重叠,只需要 h>j 即可。

对完整图像切分,再取切分区域中所有值的均值或最大值作为代表该区域的新值,放入池化后的二维信息图中。得到的新图就是池化结果。

在 CNN 和 FCN 的网络模型中,每一个卷积层,都包含了 [卷积 + 池化] 处理,这就是传说中的 “下采样”,但这样处理之后的结果是:图像的像素信息变小了,每一层的像素信息都是前一层的 1/2 大小,到第五层的时候,图像大小为原始图像的 1/32

在 CNN 算法里,这并没有什么要紧的,因为 CNN 最终只输出一个结果:“这个图上是个啥”,但是 FCN 不同,FCN 是像素级别的识别,也就是输入有多少像素,输出就要多少像素,像素之间完全映射,并且在输出图像上有信息标注,指明每一个像素可能是什么物体 / 类别。

所以就必须对这 1/32 的图像进行还原

这里用到个纯数学技术,叫 “反卷积”,对第 5 层进行反卷积,可以将图像扩充至原来的大小(严格说是近似原始大小,一般会大一点,但是会裁剪掉,为什么会大的原理略复杂,这里先不提,以后写进阶版再放进来)。

——这个 “反卷积” 称为 “上采样”。(和下采样对应)

十分钟看懂图像语义分割技术

在技术上,我们可以对任一层卷积层做反卷积处理,得到最后的图像,比如用第三层 (8s-8 倍放大),第四层 (16s-16 倍放大),第五层 (32s-32 倍放大) 得到的分割结果。

十分钟看懂图像语义分割技术

来看一张各层还原后的对比图,分别是:

十分钟看懂图像语义分割技术

通过对比可以很明显看到:在 16 倍还原和 8 倍还原时,能够看到更好的细节,32 倍还原出来的图,在边缘分割和识别上,虽然大致的意思都出来了,但细节部分(边缘)真的很粗糙,甚至无法看出物体形状。

为什么会这样呢?

这里就涉及到一个感受域(receptive field)的概念。较浅的卷积层(靠前的)的感受域比较小,学习感知细节部分的能力强,较深的隐藏层 (靠后的),感受域相对较大,适合学习较为整体的、相对更宏观一些的特征

所以在较深的卷积层上进行反卷积还原,自然会丢失很多细节特征。

于是我们会在反卷积步骤时,考虑采用一部分较浅层的反卷积信息辅助叠加,更好的优化分割结果的精度:

十分钟看懂图像语义分割技术

尽管 FCN 的提出是一条很牛叉的路,但还是无法避免有很多问题,比如,精度问题,对细节不敏感,以及像素与像素之间的关系,忽略空间的一致性等问题。

于是更牛的大牛就出现了。

有牛人提出一种新的卷积计算方式,开始称为 “带 hole” 的卷积,也就是使用一种 “疏松的卷积核” 来计算,以此来取代池化的处理。

上面已经讲过,池化操作能够减少计算量,同时也能防止计算结果过拟合,那么单纯取消池化操作又会使单层网络的感受域缩小,但如果使用 “疏松的卷积核” 来处理卷积,可以达到在不增加计算量的情况下增加感受域,弥补不进行池化处理后的精度问题。

括弧:这种带洞的卷积方式后来起了一个高雅的名字叫做:“Dilated Convolutions”。

这种方式人为加大了卷积核内部元素之间的距离,可参考下图:

十分钟看懂图像语义分割技术

红点表示卷积核的元素,绿色表示感受域,黑线框表示输入图像。

a 为原始卷积核计算时覆盖的感受域,b 为当卷积核覆盖的元素间距离增大的情况,不再在连续的空间内去做卷积,跳着做,当这个距离增加的越大时,单次计算覆盖的感受域面积越大。

上图不太好理解的话再来看一张图:(个人觉得下面这个图非常好理解)

十分钟看懂图像语义分割技术

上层绿色点表示输入层像素点,下层黄色是输出层(单次计算时的层级关系),当卷积核元素间距为 0 时(相邻),123 对应输出 A,234 对应输出 B,345 对应输出 C,那么输出 ABC 三个元素结果的感受域只覆盖了 12345 这几个原始像素点。

如果采用稀疏的卷积核,假设间距为 1(相当于卷积计算时跳一个像素再取值计算),如图示,那么结果 A 对应的输入是 135,结果 B 对应的输入是 246,结果 C 对应的输入是 357,同样输出 ABC 三个结果,在原始图像上取的像素点的长度就多了。

这是水平 X 轴方向上的扩展,在 Y 轴上也会有同样的扩展,感受域在没有增加计算(相对于池化操作后)的情况下增大了,并且保留了足够多的细节信息,对图像还原后的精度有明显的提升。

看一下对比图:

十分钟看懂图像语义分割技术

第一列是原始图像,最后一列是手工标注的训练输入图像,第二列为 FCN 在 1/8 倍数下的还原,第三列则是采用了新的卷积算法的还原图像,可以很明显看到,第三列对细节的分割明显优于第二列 FCN 8 倍的图像。

刚才还提到了第二个问题,即像素与像素之间的逻辑关系的问题,毕竟前面再牛叉的算法也只是单纯的计算没有根据物理意义进行判断在输出的标注里这些结果是否合法(符合现实逻辑)。

很多以深度学习为框架的图像语义分割系统都使用了一种叫做 “条件随机场”( Conditional Random Field,简称 CRF)的技术作为输出结果的优化后处理手段。其实类似技术种类较多,比如还有马尔科夫随机场 (MRF) 和高斯条件随机场 (G-CRF) 用的也比较多,但原理都较为类似。

简单来介绍一下 “条件随机场” 的概念。

FCN 是像素到像素的影射,所以最终输出的图片上每一个像素都是标注了分类的,将这些分类简单地看成是不同的变量,每个像素都和其他像素之间建立一种连接,连接就是相互间的关系。

于是就会得到一个 “完全图”:

十分钟看懂图像语义分割技术

上图是以 4*6 大小的图像像素阵列表示的简易版。

那么在全链接的 CRF 模型中,有一个对应的能量函数:

十分钟看懂图像语义分割技术

嗯,不要问我这个公式里各种符号是啥,我看不懂。但是我知道这个公式是干嘛滴:

其中等号右边第一个一元项,表示像素对应的语义类别,其类别可以由 FCN 或者其他语义分割模型的预测结果得到;而第二项为二元项,二元项可将像素之间的语义联系 / 关系考虑进去。

这么说太抽象,举个简单的例子,“天空”和 “鸟” 这样的像素在物理空间是相邻的概率,应该要比 “天空” 和 “鱼” 这样像素相邻的概率大,那么天空的边缘就更应该判断为鸟而不是鱼(从概率的角度)。

通过对这个能量函数优化求解,把明显不符合事实识别判断剔除,替换成合理的解释,得到对 FCN 的图像语义预测结果的优化,生成最终的语义分割结果。

优化后的对比图:

十分钟看懂图像语义分割技术

上图第二列是 FCN 网络 8 倍还原分割结果,第三列是将 CRF 植入 FCN 处理后的结果。

可以很明显的看到,第三列的物体识别无论是轮廓细节分割还是物体识别,都优于第二列,特别是第二行的沙发中有奇怪的红色东西的识别,在进行 CRF 优化之后,还原成了绿色的沙发。

OK,说了这么多,终于快要讲完了(好累)。

以上就是目前较为前沿的图像语义分割技术。

目前的这种机器学习方式还属于监督性学习,牛叉闪闪的科学家们还是希望将来可以实现半监督或弱监督式学习,这样更类似人类的学习认知方式。

在这条道路上,还有很多有趣的东西,比如示例级别(instance level)的图像语义分割问题也同样热门。

该类问题不仅需要对不同语义物体进行图像分割,同时还要求对同一语义的不同个体进行分割(例如需要对图中出现的九把椅子的像素用不同颜色分别标示出来)。

十分钟看懂图像语义分割技术

另外,在目前的计算技术水平下(硬件软件),使用 FCN 训练建模的时间大约需要三周,这也说明在这个领域里还有很多值得探索和需要解决的问题。

对此有兴趣的同学们自己去继续研究吧,哈哈。

曾有一个业界大牛说过这样一段话,送给大家:

“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”

AI 的浪潮即将席卷而来,你,准备好了么?

—— 附录的分割线 —–

PASCAL VOC(patternanalysis,statistical modelling and computational learning visual objectclasses) 模式分析,统计建模,计算学习,视觉物体分类。

PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。从 2005 年至今,该组织每年都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算法,仅根据分析图片内容来将其分类,最终通过准确率、召回率、效率来一决高下。如今,挑战赛和其所使用的数据集已经成为了对象检测领域普遍接受的一种标准。

委员会所提供的图片集包括 20 个目录:人类;动物(鸟、猫、牛、狗、马、羊);交通工具(飞机、自行车、船、公共汽车、小轿车、摩托车、火车);室内(瓶子、椅子、餐桌、盆栽植物、沙发、电视)。都是一些日常中最常见的物体,为的就是能更好的体现算法的实用性。

后记 

很多人跟我说过,不要写那么长的文章,因为现在没人会看长文。

可是我却 “变本加厉” 写这么长的技术文章。

为了写这文章,中秋三天都在家里查资料,码字。除了图片在网上能找到现成的,其他没有从哪里照搬过原话,6 千 6 百多字全是基于自己的理解然后尽量浅显易懂滴写出来~

但还是太技术了,因为这本身就是技术。

18 号我做了一个关于此项技术非学术性非正式的小范围交流,会上大家也觉得偏技术流,于是我又根据交流过程中一些没有阐述清楚的点补全了这篇文章,即便不会有多少人看,却也还是要写,要发的。

因为什么呢? 执着吧。

其实我也想写诸如 “一张图看懂全卷积神经网络” 这样粗浅易读的东西,但是我对信息的精炼程度还达不到一张图就能讲清楚的水平,能力有限。

嗯,就酱。

 

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