:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Categorized / Tech

  • 十二 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年来美国几个城市的污染水平。在小部件中用图表形式显示所选年限里有明显污染的地区,使用户能够根据四种不同类型的空气污染状况来细分他们的视图。

 

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

(三)鼓励创新创业

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

(四)加快人才培养

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

(五)优化发展环境

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

  • 十二 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目前担任各种数据科学初创公司的顾问和软件工程师,以引导他们的数据摄入、清洗和机器学习。 除了投身于解决大数据工程和分布式计算问题,他平常会参与乔治敦大学数据科学证书课程的教学,或沉迷于马里兰大学计算机科学研究生的课程。

(全文完,感谢阅读)

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

(未完待续)

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

(未完待续)

  • 十二 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”》一文。
  • 每个用户都训练他们自己的模型:每个用户在自己的设备上进行模型训练,模型可以从零开始训练,也可以使用一个预先训练好的模型,然后根据自己的数据进行微调,不断的改进模型。例如键盘的预测,以一种特定的语言训练的通用模型开始,然后根据用户的输入进行模型改进,以适应用户的输入习惯等。但是这种方式的缺点是,其他用户无法从你的学习训练过程中受益。另外还有一个问题是你可能拥有不止一台设备,如何在这些设备之间进行模型共享以及训练也是个挑战。

最后

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

参考资料

 

  • 十二 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

  • 十二 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应用程序的操作信息,以帮助推动渐进式改进和新的平台功能,立即使现有和新应用程序受益。

  • 十二 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方式的技术优势

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

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

小结

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

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

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

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