锐眼洞察 | 重塑零售业的3项技术(翻译)

作者:Talitha Loftus  

原文:3 Technologies Reshaping Retail

译者:TalkingData解决方案架构师 韩铭扬

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

从自动购物车到3D足迹扫描,新的技术继续以意想不到的方式改变零售业。毫无疑问,零售业的瓦解有了新的方向。在过去的一年里,企业在零售领域的运作方式产生了巨大变革。实体店开始越来越多地运用技术来解锁更多的机会并为顾客提供无缝的购物体验。但是,由于突破性创新占有很强的市场份额,零售商需要集中精力创造一条途径,以便整合创新的场内技术来满足顾客的需求。 受华盛顿邮报的一篇“零售业的未来已经到来的5种途径”文章的启发,你将在下文中看到我认为的正在重塑零售业的前三项技术。

自动购物车

电影迷们长期以来着迷于虚拟机器人,但他们通常不太现实… …直到现在。得益于技术的进步,Five Elements Robotics推出了Dash Robotic Shopping Cart——一个允许顾客导入购物清单并通过在商店里操作的自动购物车。

设计时所考虑到的便捷理念,使顾客可以通过Dash上的结账系统使用信用卡、苹果支付或是谷歌钱包支付,省去了排队结账的麻烦。如果你嫌还车麻烦,当你把杂货都从车里拿出来后,Dash会自动找到回商店的路。Dash同时也可通过消费数据来学习顾客购物习惯,并投放定向广告。Five Elements Robotics 的CEO Wendy Roberts称之为零售业的游戏规则改写者:“Dash自动购物车必然将转变我们购物的方式。当这些机器人被投放进商店,我们甚至都无法回想没有它们之前我们是如何购物的”。 像沃尔玛这样的大零售商已经准备好在2018年部署这些自动购物车,这个领域将值得持续关注。

动态场内定价

在网上购物时,你是否发现有些你正要买的商品在几秒的时间内就降价了的经历?好消息是,这般的敏感度正在慢慢步入实体店中。商品的价格不再只依赖于供需关系以及地理位置,动态定价通过对商品的深入分析,以及更重要的,对顾客的分析,来为店铺经理确定最佳的定价。 依据Crealytics:“动态定价是一个运用多种定价方式而非典型的固定定价方式的电子商务和零售策略。随着更多的数据分析,商品或服务的最优价格被重新计算。价格变化的时间间隔取决于业务和商品本身,但可以做到像是每天或是每小时这样频繁。

零售商现在可以通过点击一个按钮,对数千个商店的价格进行大规模的更改。举例来说,如果某家商店有四瓶橙汁,店铺经理可以在下批货到店之前进行提价。或者,如果店里面包存货过多,商家可以通过推出秒杀活动以减少浪费并提高销量。

3D足部扫描

你知道你的鞋的准确尺寸是多少吗?很可能你并不清楚,你只是知道一个码数,通常你把这个数字告诉销售人员,希望他们可以给你拿来一双刚好合适的鞋。在现实中,一个人的两只脚并不是完全相同的大小,甚至可能相差一个码的大小。这就更不用说鞋子制造商,他们就像服装制造商一样,对鞋的大小有着非常不一致的看法。但是,一家瑞典公司Volumental开发的技术,可能使不合脚鞋子的困扰成为过去。

Volumental为零售商提供了一个设计精美的硬件和软件解决方案,使其可以通过3D技术扫描顾客的脚并通过由AI驱动的试衣引擎(Fit Engine)提供鞋类建议。扫描结果之后被送到Volumental平台以捕捉多个数据点,包括长度、高度以及顾客脚掌的宽度。一旦扫描结束,它们就被立即发送到一个连接的平板,便于销售人员为顾客找到最合适的鞋。此外,这个软件还可以检查库存并告知其他门店是否有货。

第一批Volumental足部扫描仪已经在多地部署,包括零售巨头新百伦(New Balance)。“Volumental的产品提供了一种与客户互动的全新方式。它把新百伦独特的试穿故事通过个性化、合适的方式带到了人们的生活中。顾客喜欢它,我们的员工也喜欢它,”新百伦国际零售总监Jonathan Clark说道。

零售商正在运用先进的技术解决方案,为消费者提供快捷个性化的购物体验。验证技术公司SheerID的CEO Jake Weatherly说道:“当我们步入新的一年,我们将看到多渠道零售的持续发展;但是,企业将同时在他们的用户体验和可帮助其更深入了解用户的技术上投入更多。”

聊完技术重新定义实体店的几种途径之后,我们需要知道还有上千种新技术正在应用于解决真正的零售问题。与此同时,自动购物车正在推动自动化体验,而动态定价模型既提高了消费者的价格感知能力,又提升了零售商的盈利能力。对于所有零售商来说,最关键的将是找到合适的技术来解决他们最大的摩擦点,以改善顾客在店内的体验。    

锐眼洞察 | 机器学习与行为生物识别:天作之合(翻译)

作者:Avi Turgeman

原文:Machine Learning And Behavioral Biometrics: A Match Made In Heaven

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

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

最近发布的市场研究报告显示,未来五年,机器学习市场规模将以44.1%的年复合增长率迅速增长,这一增长主要受金融服务业的驱动,而在金融服务业正是大数据可以产生关键和可行的业务洞察力的地方。

在行为生物识别技术的世界里,机器学习、深度学习和人工智能都是相辅相成的。行为生物识别技术通过他们如何与设备和在线应用进行交互来识别人们。行为生物识别技术是一种完全被动的,在后台工作的动态模式,使其不可能复制或窃取,而不是像某个设备、令牌或静态属性(如指纹或名称)。今天的行为生物识别技术可以从移动设备上捕获2000多个参数,包括人们持机、滚屏、屏幕间切换的方式,他们在输入时使用的压力以及他们如何响应在线应用程序中呈现的不同视图。行为生物识别技术主要用于防止在申请在线信用卡或者在线转账付款时使用被盗或合成身份,以及用户登录会话时防止账户被恶意接管等。 (注意:今天的大部分欺诈行为都发生在经过验证的会话中。)

数据科学家发现了一个有趣的事实:人们的工作方式是非常不可预测的,没有一套固定的行为参数可以用来区别个人,也没有一个通用的模型来衡量每个人以产生准确的结果,既在假阳性方面,关键这是防止欺诈和身份盗用,最重要的这是维护最佳的用户体验。这种方法被称为个别特征选择。它使得行为生物识别技术在长期以及不同的应用和使用情况下显着更加可塑,因为这意味着对于每个人来说哪个参数是好的,并没有事先做出假设,而是选择该用户的最佳设置。

静态 VS. 动态生物识别技术

物理生物识别技术(如脸部,手指和虹膜技术)主要基于静态图像中捕捉的测量点。如上所述,行为生物识别技术是由人工智能驱动的动态方法控制的。由于数据科学领域的进步,极大型数据集的合并和处理成为可能,这反过来又推动了机器学习,最近又推动了深度学习。

移动设备上的连续认证就是这种动态方法的一个很好的例子。使用四个主要设备传感器(触摸、加速度计、陀螺仪和方位),可以使用数百甚至数千行为模式来持续认证用户。这些参数包括点击持续时间、滑动速度、指纹区域、会话持续时间和设备加速度等。配置文件的建立是为了确定用户对整个人口集的行为,这些行为可能会随时间而改变。机器学习可以推动支持所分析的大量参数和数据集所需的决策过程。

机器学习被用于行为生物识别的所有方面。它能够从人类行为中学习,并不断改进可用于验证会话或事务的用户配置文件。以敲击键盘为例,行为生物识别技术以击键速度和手指的类型为基础,在10分钟内可以建立一个足够强大的配置文件来验证用户的银行转账。然而,随着时间的推移和一个人更多的使用这个设备,根据应用的定义,他们的行为会适应和变化。机器学习有助于突破各种信号的混乱,并随着时间的推移发现行为模式的一致性。

行为生物识别和人工智能的认证范式悬而未决

有关传统认证过程的缺点已经写了很多。今天的大部分欺诈来自于使用被盗或合成身份创建的初始账户,或者在经过认证的会话中,如通过恶意软件以合法用户登录、社交工程、机器人或其他类型的远程访问攻击,使得用户在登录后恶意接管等。

这时行为生物识别技术能够提供被动,无摩擦,持续认证的能力。事实上,根据墨卡托咨询集团的说法,“行为生物识别技术将在未来五到八年内重新构建认证领域”。

最初,人工智能驱动的行为生物识别技术主要用于金融服务行业的账户欺诈预防。最近,如上所述,该技术的应用已经扩展到身份验证,以提供用于根据海量数据泄露来检查在线应用的有效性的新维度,并且允许在支付应用中进行基于风险的验证。人工智能知识的进步将继续推动这项技术的更多功能,随着这种方法的不断采用和规模化,这将会进一步完善。

锐眼洞察 | 开源数据技术简史(翻译)

作者:Keith D. Foote 

原文:A Brief History of Open Source Data Technologies

译者:TalkingData数据工程师 孙强

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

自文明开始以来,公开分享信息一直是人类文化的一部分。 信息将与大众共享,实践对工具和机械的发展产生了强大的影响。 与这种做法相对应的是所有权和控制权的概念,也就是所谓的“知识产权”。例如,专利和版权是基于这样的信念:发明人应该在别人使用或模仿的时候得到报酬, 他们是原创。 尽管公开分享新的想法很难被滥用,但专利可以被滥用,并且有合理的计划。 例如,1879年,专利律师乔治•B•塞尔登(George B. Selden)申请了一项专利,声称对2冲程汽油发动机的“主意”拥有所有权,由于货币的原因,延迟了专利局的批准直到1895年。 在推迟专利审批的同时(但不是申请日期),汽车正在设计和建造之中。 1899年,电动汽车公司以每辆汽车15美元的价格购买了他的专利的专利权(按现在的通货膨胀标准,每辆汽车420美元),然后开始成功起诉汽油动力汽车制造商专利侵权。 到1904年,有30家汽车制造商向电动汽车公司支付了1.25%的汽车销售,其中五分之一用于塞尔登。 这一直持续到1911年,当时亨利•福特使用四缸“四循环”发动机,摆脱了专利的束缚,塞尔登的不道德专利突然变得毫无价值。 (拥有网站名称的人对使用权进行收费对网站拥有者也有类似的束缚)。 汽车贸易委员会(最终名为“汽车制造商协会”)于同年成立,并制定了美国所有汽车制造商共享的交叉使用许可协议。 每个公司都可以开发新的技术和申请专利,但是专利是公开分享的,制造商之间没有交换货币,也没有任何法律诉讼。 显然,汽车制造商不希望陷入类似的专利束缚。

自由软件运动

“自由软件”可以不需要付费,但就自由软件运动而言,这个词是指用户可以自由复制,更改,改进,运行和分发的软件。 自由软件运动更多的是行动自由,而不是价格。 自由软件的限制很少,没有“追求利润的意图”。为了达到这些目标,自由软件基金会于1985年成立。自由软件基金会的使命是:“保护,保护和促进使用,学习,复制,修改和重新分配计算机软件的自由,维护自由软件用户的权利”。

开源运动

虽然“自由软件”可以说是一个强调自由的社会运动,但是开源软件将被描述为通过以公众为资源来改善和开发软件的集体努力。 从某种意义上说,开源依靠人们的“善良天使”来开发软件和技术。 一般来说,开放源代码描述了源代码已经发布并公开的软件,允许任何人使用,复制,修改和重新发布,而无需支付使用费或费用。 这使得开源代码可以通过社区合作的方式进行有机的演变。 开放源代码计划作为一个官方组织,于1998年创建,作为开源活动的倡导者,教育者和管理者。 由多个独立程序员开发的开源软件(协同软件开发)提供比任何单个公司所希望提供的更“原始”设计。 对于一些商业软件供应商来说,这种情况被视为一种威胁。 2001年,微软前任高管吉姆•阿尔奇内(Jim Allchine)公开表示: “开源是一个知识产权驱逐舰。 我无法想象软件业务和知识产权业务可能会比这更糟糕。“微软此后已经扭转了在开源领域的地位,并且与谷歌,IBM,甲骨文一起,正在互联网上建立一个官方的开放源码存在。 不用说,这对资本主义模式转变的意义造成了重大混乱。 (知识产权的所有权和不道德使用可以被认为是极端的资本主义,而开放源代码倡议被认为是一种个人协同的形式)。

UNIX 共享代码 (IBM)

在现代计算的发展中扮演着重要的角色。 AT&T贝尔实验室于1969年开始开发一个名为UNIX的小型操作系统。 目标是设计一个便携式的多任务系统,为分时配置的多用户设计。 在1972年,UNIX被改写,使用程序语言C,它允许程序和数据从“原始硬件”传输,使数据变得可移植。 反托拉斯案阻止了AT&T进入电脑业务,并要求他们授权系统的源代码给所有的请求方。 这导致学术机构和企业很快利用UNIX程序。 加利福尼亚大学伯克利分校的程序员开发了他们自己的操作系统的进化版本,标题是伯克利软件分发,公众可以访问。 (整个故事要复杂得多)

Mozilla诞生于1998年的网景源代码

网景社区于1995年推出了第一款真正的商业网络浏览器Netscape Navigator,当时并没有真正的竞争。 然而,微软正在研究Internet Explorer,并于1996年推出了一款能够与Netscape竞争的浏览器。 新的竞争促使Netscape于1998年向公众发布源代码,目的是模仿UNIX并将公众作为开发资源。 不幸的是,这一步骤阻碍了他们最新的浏览器平台的发展,给微软带来了Internet Explorer成为“使用最多的浏览器”的必要优势。网景通讯从未恢复,并被AOL收购。 2008年3月1日,网景公司正式停产,终止了对所有网景客户(他们感到震惊和沮丧)产品和浏览器的支持。 但是,Netscape的开源版本的源代码促使Mozilla组织的创建。

Linux

Linux程序提供了计算历史上开源软件协作最典型的例子之一。 Linux是由Linus Torvalds于1991年发明的。他曾就读于赫尔辛基大学,曾在Minix这个类似Unix的系统工作,并开始设计自己的内核。 Torvalds从设计硬盘访问和设备驱动程序开始,展示了他所称的基本设计,即版本0.01。 内核,后来被称为Linux,后来与开源GNU系统(发音g’noo)结合起来,生产出一个完全免费的操作系统。 任何人都可以使用,修改和分发Linux源代码。 在Linux上完成的大部分工作由Linux社区执行,其中包括来自世界各地的数千名程序员,他们向维护人员发送改进建议。 公司也帮助开发了Linux内核,并开发了通常用于该程序的“额外”软件。 Apache软件基金会(ASF) Apache软件基金会的使命是为公共利益提供软件。 它成立于1999年,是一个慈善组织。 它从个人和企业赞助商那里获得资金,并使用全志愿董事会。 该组织监督350多个开源项目。

Apache Hadoop

Apache Hadoop最初被称为Nutch,由Doug Cutting和Mike Cafarella两个人设计。 他们正在设计一个能够索引10亿个页面的搜索引擎系统,后来他们与MapReduce相结合。 Hadoop的成本效益来自使用基于商用硬件构建的计算机集群。 大数据集被分解,然后存储在本地磁盘上。 任何故障都通过软件来纠正,而不是昂贵的服务器。 Hadoop的成功,因为它是: 免费

  • 非常可扩展性:它在数百台低成本服务器上存储大型数据集
  • 灵活:提供对新数据源的访问,并可以访问不同类型的数据
  • 非常快速:可以在几分钟内有效处理TB级数据,在几小时内可以高达PB级数据
  • 备份:将数据发送到单个节点,然后复制到其他节点作为备份

Apache Spark

Apache Spark自发布以来迅速普及。 它比Apache Hadoop更快,可扩展性更强。 雅虎,Netflix和eBay等企业已经开始大规模使用它。 Spark与Hadoop相结合,已经迅速成为使用大数据的最大的开源社区之一。 (Spark不带文件管理,但可以使用Hadoop的分布式文件系统管理文件。)

Apache Storm

Apache Storm免费,是一个开源的实时计算系统。 它可以基本上实时处理大量的大数据,具有可扩展性,易于操作。Storm可以用于:

  • 实时分析
  • 在线机器学习
  • 连续计算
  • 分布式远程过程调用(RPC)

Apache Hive

Apache Hive是一个开源系统,用于使用基于SQL的语言查询数据。 它将总结和分析数据,将其转化为有用的业务见解。 Hive与传统的数据集成和数据分析工具兼容。许多数据仓库应用程序与基于SQL的查询语言兼容,Hive支持基于SQL的数据向Hadoop的可移植性和传输。 虽然最初由Facebook开发,但Hive已经被金融业监管机构和Netflix等公司使用和开发。

Apache Pig

Apache Pig用于分析以高级语言编写的大型数据集,旨在表达数据分析程序,并结合基础设施来评估程序。 Apache Pig的重要特性是提供大量并行化的能力。 这使系统能够处理“非常”大的大数据集。

开源硬件

开放源代码硬件是一种硬件,其规格已经发布并可供公众访问,允许个人复制,修改和重新分配,而无需支付使用费或费用。 这个政策也适用于开源机器人。 开源硬件基于社区合作。 社区通常由业余爱好者,硬件/软件开发者和一些大型企业组成。  

锐眼洞察 | 详谈 GCD(Grand Central Dispatch)的基本使用

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

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

1. GCD(Grand Central Dispatch)介绍

Grand Central Dispatch (GCD) 是 Apple 开发的一种多核编程的解决方法。该方法在 Mac OS X 10.6 Lion 中首次推出,并随后被引入到了 iOS4.0 中。GCD 是一个替代诸如 NSThread, NSOperationQueue, NSInvocationOperation 等技术的更高效和强大的技术。

GCD 属于系统级的线程管理技术,在 Dispatch queue 中执行相关任务的性能非常高。GCD 的源代码已经开源,感兴趣的可以参考Grand Central Dispatch。 GCD 中的FIFO队列称为 dispatch queue,以用来保证先进入队列的任务先得到执行。

GCD 简述

  • 和Operation queue相同,都是基于队列的并发编程API,均是通过集中管理、协同使用的线程池。

GCD具有5个不同的队列:

  1. 运行在主线程中的 Main queue
  2. 三个不同优先级的队列(High Priority Queue,Default Priority Queue,Low Priority Queue)。
  3. 更低优先级的后台队列 Background Priority Queue,主要用于I/O。
  4. 用户可自定义创建队列:串行或并行队列
  5. 具体的操作时在多线程上还是单线程上,主要依据队列的类型和执行方法,并行队列异步执行在多线程,并行队列同步执行只会在单线程(主线程)执行。

GCD 基本的概念

标准队列

标准队列是指GCD预定义的队列,在iOS系统中主要有两个:

WX20180125-183854

自定义队列

用户可以自定构建队列,并设置队列是并行还是串行:

WX20180125-183941

同步\异步线程创建

用户也可以根据需要自行构建同步\异步线程:

WX20180125-184016

2. 队列(dispatch queue)

  • Serial(串行队列):又叫做 private dispatch queues,同时只执行一个任务(Task)。Serial queue 常用语同步访问特定的资源或数据,当创建了多个 Serial queue 时,虽然各自是同步的,但是 Serial queue 之间是并发执行的。
  • Main dispatch queue: 全局可用的 Serial queue,在应用程序的主线程上执行。
  • Concurrent(并行队列):又叫做 global dispatch queues,可以并发的执行多个任务,但是执行的顺序是随机的。iOS 系统提供了四个全局并发队列,这四个队列有着对应的优先级,用户是不能创建全局队列的,只能获取,如下:

WX20180125-184318

  • Custom(自定义队列):用户可以自定义队列,使用 dispatch_queue_create 函数,并附带队列名和队列类型参数,其中队列类型默认是NULL,代表DISPATCH_QUEUE_SERIAL串行队列,可以使用参数DISPATCH_QUEUE_CONCURRENT设置并行队列。

 

WX20180125-184351
  • 自定义队列的优先级:在自定义队列的时候,可以设置队列的优先级,使用dipatch_queue_attr_make_with_qos_class或者dispatch_set_target_queue方法来设置,如下:

 

WX20180125-184955
  • dispatch_set_target_queue:此方法不仅能够设置队列优先级,还可以设置队列的层级体系,比如让多个串行队列和并行队列在统一的一个串行队列里执行,如下:

WX20180125-185418

队列的类型

在iOS中,队列本身默认是串行的,只能执行一个单独的block,但是队列也可以是并行的,同一时间执行多个block。

在创建队列时,我们通常使用dispatch_queue_create函数:

WX20180125-185443

iOS中的公开5个队列:主队列(main queue)、四个通用调度队列以及用户定制的队列。对于四个通用调度队列,分别为:

  • QOS_CLASS_USER_INTERACTIVE:user interactive 等级表示任务需要被立即执行已提供最好的用户体验,更新UI或者相应事件等,这个等级最好越小规模越好。
  • QOS_CLASS_USER_INITIATED:user initiated等级表示任务由UI发起异步执行。适用场景是需要及时结果同时又可以继续交互的时候。
  • QOS_CLASS_UTILITY:utility等级表示需要长时间运行的任务,伴有用户可见进度指示器。经常会用来做计算,I/O,网络,持续的数据填充等任务。
  • QOS_CLASS_BACKGROUND:background等级表示用户不会察觉的任务,使用它来处理预加载,或者不需要用户交互和对时间不敏感的任务。

一个典型的实例就是在后台加载图片:

WX20180125-190159

队列类型的使用

那么具体在操作中,什么时候使用什么类型的队列呢?通常有如下的规则:

  • 主队列:主队列通常是其他队列中有任务完成,需要更新UI时,例如使用延后执行dispatch_after的场景。
  • 并发队列:并发队列通常用来执行和UI无关的后台任务,但是有时还需要保持数据或者读写的同步,会使用dispatch_sync或者dispatch_barrier_sync 同步。
  • 自定义顺序队列:顺序执行后台任务并追踪它时。这样做同时只有一个任务在执行可以防止资源竞争。通常会使用dipatch barriers解决读写锁问题,或者使用dispatch groups解决锁问题。

可以使用下面的方法简化QoS等级参数的写法:

WX20180125-190306

dispatch_once用法

dispatch_once_t要是全局或static变量,保证dispatch_once_t只有一份实例。

WX20180125-190343

dispatch_async

设计一个异步的API时调用dispatch_async(),这个调用放在API的方法或函数中做。让API的使用者有一个回调处理队列。

WX20180125-190406
可以避免界面会被一些耗时的操作卡死,比如读取网络数据,大数据IO,还有大量数据的数据库读写,这时需要在另一个线程中处理,然后通知主线程更新界面,GCD使用起来比NSThread和NSOperation方法要简单方便。

WX20180125-193828

dispatch_after延后执行

dispatch_after只是延时提交block,不是延时立刻执行。

WX20180125-190811

范例,实现一个推迟出现弹出框提示,比如说提示用户评价等功能。

WX20180125-190834

例子中的dispatch time的参数,可以先看看函数原型


WX20180125-190857
第一个参数为DISPATCH_TIME_NOW表示当前。第二个参数的delta表示纳秒,一秒对应的纳秒为1000000000,系统提供了一些宏来简化:

WX20180125-190923
如果要表示一秒就可以这样写:

WX20180125-190949
dispatch_barrier_async使用Barrier Task方法Dispatch Barrier解决多线程并发读写同一个资源发生死锁

Dispatch Barrier确保提交的闭包是指定队列中在特定时段唯一在执行的一个。在所有先于Dispatch Barrier的任务都完成的情况下这个闭包才开始执行。轮到这个闭包时barrier会执行这个闭包并且确保队列在此过程不会执行其它任务。闭包完成后队列恢复。需要注意dispatch_barrier_async只在自己创建的队列上有这种作用,在全局并发队列和串行队列上,效果和dispatch_sync一样。

WX20180125-191022WX20180125-191039

Swift示例:

WX20180125-191105

都用异步处理避免死锁,异步的缺点在于调试不方便,但是比起同步容易产生死锁这个副作用还算小的。

dispatch_apply进行快速迭代

类似for循环,但是在并发队列的情况下dispatch_apply会并发执行block任务。

WX20180125-191137

dispatch_apply能避免线程爆炸,因为GCD会管理并发。

WX20180125-191203
示例:

WX20180125-191228
Block组合Dispatch_groups

dispatch groups是专门用来监视多个异步任务。dispatch_group_t实例用来追踪不同队列中的不同任务。

当group里所有事件都完成GCD API有两种方式发送通知,第一种是dispatch_group_wait,会阻塞当前进程,等所有任务都完成或等待超时。第二种方法是使用dispatch_group_notify,异步执行闭包,不会阻塞。

第一种使用dispatch_group_wait的swift的例子:

WX20180125-191306WX20180125-191324
OC例子:

WX20180125-191355

第二种使用dispatch_group_notify的swift的例子:

WX20180125-191426

OC例子:

WX20180125-191524

如何对现有API使用dispatch_group_t:

WX20180125-191614

注意事项

  • dispatch_group_async等价于dispatch_group_enter() 和 dispatch_group_leave()的组合。
  • dispatch_group_enter() 必须运行在 dispatch_group_leave() 之前。
  • dispatch_group_enter() 和 dispatch_group_leave() 需要成对出现的

3. Dispatch Block

队列执行任务都是block的方式

创建block。

WX20180125-191921

dispatch_block_wait:可以根据dispatch block来设置等待时间,参数DISPATCH_TIME_FOREVER会一直等待block结束。

WX20180125-192121

dispatch_block_notify:可以监视指定dispatch block结束,然后再加入一个block到队列中。三个参数分别为,第一个是需要监视的block,第二个参数是需要提交执行的队列,第三个是待加入到队列中的block。

WX20180125-192344

dispatch_block_cancel:iOS8后GCD支持对dispatch block的取消​

WX20180125-192537

使用dispatch block object(调度块)在任务执行前进行取消

dispatch block object可以为队列中的对象设置。

示例,下载图片中途进行取消:

WX20180125-192612WX20180125-192632

Dispatch IO 文件操作

dispatch io读取文件的方式类似于下面的方式,多个线程去读取文件的切片数据,对于大的数据文件这样会比单线程要快很多。

WX20180125-192655
  • dispatch_io_create:创建dispatch io
  • dispatch_io_set_low_water:指定切割文件大小
  • dispatch_io_read:读取切割的文件然后合并。

苹果系统日志API里用到了这个技术,可以在这里查看。

WX20180125-192731WX20180125-192816

此内容就到这里了。其他的技术点将会陆续放出,GCD是个好东西,但是在使用的时候一定要理清楚其含义,否则很容易出现不可调试的问题等。

锐眼洞察 | 机器学习和统计模型的差异(翻译)

作者:Tavish Srivastava

原文:Difference between Machine Learning & Statistical Modeling

译者:TalkingData解决方案架构师 李堃

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

在各种各样的数据科学论坛上,有这样一个问题经常会被问到——机器学习和统计模型的差别是什么?

这确实是一个难以回答的问题。考虑到机器学习和统计模型所解决问题的相似性,两者的区别似乎仅仅在于数据量和模型建立者的不同。

在这篇文章中,我将尽最大的努力来展示机器学习和统计模型的区别,同时也欢迎业界有经验的朋友对本文进行补充。

在我开始之前,让我们先明确使用这些工具背后的目标。无论采用哪种工具去分析问题,最终的目标都是从数据获得知识。两种方法都旨在通过分析数据的产生机制挖掘 背后隐藏的信息。

两种方法的分析目标是相同的。现在让我们详细的探究一下其定义及差异。

定义

机器学习:一种不依赖于规则设计的数据学习算法。

统计模型:以数学方程形式表现变量之间关系的程式化表达。

对于喜欢从实际应用中了解概念的人,上述表达也许并不明确。让我们看一个商务的案例。

商业案例

让我们用麦肯锡发布的一个有趣案例来区分两个算法。

案例:分析理解电信公司一段时间内客户的流失水平。

可获得数据:两个驱动-A&B

麦肯锡接下来的展示足够让人兴奋。请从下图来理解一下统计模型和机器学习算法的差别。

Screen Shot 2015-06-30 at 11.32.20 PM

从图中你观察到了什么?统计模型在分类问题中得到一个简单的分类线。 一条非线性的边界线区分了高风险人群和低风险人群。 但当我们看到通过机器学习产生的等高线时, 我们发现统计模型似乎没有办法和机器学习算法进行比较。 机器学习的方法获得了任何边界都无法详细表征的信息。这就是机器学习可以为你做的。

更令人兴奋的是,机器学习还被应用在YouTube和Google的引擎推荐上,机器学习通过瞬间分析大量的观测样本给出近乎完美的推荐建议。 即使只采用一个16 G内存的笔记本,每天处理数十万行的数千个参数的模型也不会超过30分钟。然而一个统计模型需要在一台超级计算机跑一百万年来观察数千个参数。

机器学习和统计模型的差异:

在给出了两种模型在输出上的差异后,让我们更深入的了解两种范式的差异,虽然它们所做的工作类似。

  • 所属的学派
  • 产生时间
  • 基于的假设
  • 处理数据的类型
  • 操作和对象的术语
  • 使用的技术
  • 预测效果和人力投入

以上提到的这几方面都能从不同程度上区分机器学习和统计模型,但并不能给出机器学习和统计模型的明确界限。

分属不同的学派

机器学习:计算机科学和人工智能的一个分支,通过数据学习构建分析系统,不依赖明确的构建规则。

统计模型:数学的分支用,通过发现变量之间相关关系从而预测输出。

诞生年代不同

统计模型的历史已经有几个世纪之久。但是机器学习却是最近才发展起来的。二十世纪90年代,稳定的数字化和廉价的计算使得数据科学家停止建立完整的模型而使用计算机进行模型建立。这催生了机器学习的发展。随着数据规模和复杂程度的不断提升,机器学习不断展现出巨大的发展潜力。

假设程度差异

统计模型基于一系列的假设。例如线性回归模型假设:

  1. 自变量和因变量线性相关
  2. 同方差
  3. 波动均值为0
  4. 观测样本相互独立
  5. 波动服从正态分布

Logistics回归同样拥有很多的假设。即使是非线性回归也要遵守一个连续的分割边界的假设。然而机器学习却从这些假设中脱身出来。机器学习最大的好处在于没有连续性分割边界的限制。同样我们也并不需要假设自变量或因变量的分布。

数据区别

机器学习应用广泛。在线学习工具可以飞速处理数据。这些机器学习工具可学习数以亿计的观测样本,预测和学习同步进行。一些算法如随机森林和梯度助推在处理大数据时速度很快。机器学习处理数据的广度(来源更多)和深度(观察更大量)上做的非常好。但统计模型一般应用在较小的数据量和较窄的数据属性上。

命名公约

下面一些命名几乎指向相同的东西:

Screen Shot 2015-07-01 at 12.19.11 AM

公式:

虽然统计模型和机器学习的最终目标是相似的,但其公式化的结构却非常不同。

在统计模型中,我们在试图估计f函数时是通过:

因变量(Y)=f(自变量)+ 扰动 函数

机器学习放弃采用函数f的形式,简化为:

输出(Y)——> 输入(X)

它试图找到n维变量X的袋子,在袋子间Y的取值明显不同。

预测效果和人力投入

自然在事情发生前并不给出任何假设。一个预测模型中,假设越少、预测效率越高。机器学习名称的内涵就是减少人力投入。机器学习通过反复迭代学习发现隐藏在数据中的科学。由于机器学习作用在真实的数据上并不依赖于假设,预测效果是非常好的。统计模型是数学的加强,依赖于参数估计。它要求模型的建立者提前知道或了解变量之间的关系。

结束语

虽然机器学习和统计模型看起来为预测模型的不同分支,但它们非常相近。经过数十年的发展,两种模型间的差异性越来越小。模型之间相互渗透和相互学习,使得未来两种模型的界限更加模糊。

锐眼洞察 | 零售数据的转变:谁能受益?(翻译)

作者:Ramesh Dontha

原文:The Shift in Retail Data: Who Can Benefit?

译者:TalkingData解决方案架构师 李堃

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

当我们的“数据”回顾我们实践的历史时,我们会发现我们对零售业感激不尽。

零售品牌几十年来一直处于分析的前沿。想想你上一次去实体店的情况。货架上的产品组合?分析的结果。显示器的布局?从扬声器飘来的音乐?你猜对了:分析。多年来,在使用数据改善客户体验方面,没有人比零售品牌做得更好。

然后,我们的零售商朋友遇到了困难:互联网。客户不是去当地的商场或大卖场,而是呆在家里,让他们的手指购物。但聪明的零售商意识到他们的客户不会离开,他们只是不出去。购物习惯的这种转变意味着通过在多个层面上吸引消费者来增加收入的机会 – 当然,这是通过分析来指导的。

建立混合体验
虽然网络的兴起使许多零售商濒临灭绝,但那些坚持下来的企业却将数字和店内数据结合在一起。这种混合的方法使他们能够更好地了解他们的客户,并相应地调整他们的业务。

虽然网上销售对于零售品牌来说很重要,但店内访问仍然是一个圣杯。当顾客浏览时,冲动购买更有可能,并且与店员互动的机会促进了与品牌更大的联系。即使是电子商务巨头亚马逊(Amazon)也已经感受到了亲身体验的力量,计划在未来几个月内开设几家实体店。

与此同时,零售商的电子商务方面提供了关于购物者习惯和活动的大量信息:他们来自哪里(电子邮件,社交媒体等),他们访问了哪些其他网站,无论他们是“搜索者“或”浏览器“等等。这些见解可以帮助零售商不仅优化他们的网站,还可以调整他们的店内体验。
为了增加收入,零售商需要创建一个无缝的品牌邂逅,让客户在线上网,同时吸引他们回到店里。他们怎么能做到这一点?答案在于他们的数据。

建立本地连接
促进混合客户参与的一种方法是接受本地连接,并使用地理定位分析来获得零售商的优势。更成功的零售商不仅经营其母公司的通用旗帜,而且还作为当地社区的成员服务于邻居的特殊需求。

在消费者层面,收集网上购物习惯的数据并不是什么新鲜事。零售商正在发现的是将这些信息映射回当地零售商店的客户群体的方法。他们可以将天气数据,游行或商会活动等当地活动以及客户人口统计数据与销售点数据和交易数据结合起来,从而清楚了解他们的客户想要什么以及如何获取这些数据,战略上。通过使用这些知识来提供送货上门,匹配价格或消除销售税等决策,品牌可以建立一种关系,使顾客一次又一次地回到店里。

本地化在行动
例如,服务于佛罗里达某些地区的零售商可能会跟踪天气数据,发现夏季下午3点到5点之间几乎每天都会下雨。他们可以利用这些信息来策划从店内咖啡店的“下午茶特价”到在收银台附近放置印有徽标的雨伞的策略。
本地化的驱动力,也突出了如何将数据传送到当地管理层手中的必要性。零售品牌需要一个系统来赋予当地管理人员及时的数据支持,从而为他们创造收入的决策。

下一步是什么?
正如零售商在店内和在线上混合分析一样,移动设备和“物联网”的兴起正在使景观更加复杂化,为客户体验提供额外的数据来源,而这些数据来源必须被理解并利用。当消费者看到他的智能手表上的一个警报,说他的当地衣服上周刚刚在网上看到的那件外套的尺寸是多少?而当他去商店时,零售商也可以提供“我们付你的销售税”和投入一个配套的帽子等奖励。

幸运的是,零售商数十年来使用分析的经验为应对这些挑战和其他挑战提供了完美的基础,并为其业务网络探索新的收入来源。

锐眼洞察 | 数据质量六步法(翻译)

作者:Ramesh Dontha

原文:Data Quality – A Simple 6 Step Process

译者:TalkingData数据科学家 孙强

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

我们都听说过很多关于低数据质量的恐怖故事。很多公司拥有数百万条记录,包括客户联系号码“(000)000-0000”、购买日期“99/99/99”、12个不同的性别值、没有状态信息的送货地址等等。“脏数据”为企业和组织带来了实际的成本消耗。 例如,美国邮政总局估计,2013年在处理由于数据质量差而导致无法投递的邮件上花费了15亿美元。 质量差的数据来源可能很多,但可以大致分为数据输入、数据处理、数据集成、数据转换和过时数据(陈旧的数据)。

那么,您改如何确保数据始终保持高质量? 人们越来越意识到数据对于做出明智决策的重要性,数据不准确会导致灾难性的后果。 挑战在于确保企业为其业务收集/采购相关的数据,以有意义和可持续的方式管理/治理这些数据,以确保关键主数据的高质量记录,并通过分析高质量数据以实现预定的业务目标。 基于数据质量专家和从业者的最佳实践,我们制定了6个步骤的数据质量框架。

第1步 – 定义

明确改进数据质量所要实现的业务目标,数据所有者/利益相关方,受影响的业务流程和数据规则。

以客户数据为例:

  • 目标:确保所有客户记录都是唯一的、信息准确性(例如:地址、电话号码等)、跨多系统数据的一致性等。
  • 数据所有者:销售副总裁
  • 利益相关方:金融、营销和生产
  • 受影响的业务流程:订单输入、开票、履行等
  • 数据规则:规则1 – 客户名称和地址应该是唯一的;规则2 – 所有的地址都应根据经核准的地址参考数据库进行核实

第2步 – 评估

根据定义步骤中规定的规则评估现有数据。 从关键属性的准确性、所有必要属性的完整性、跨多个数据集的属性的一致性、数据的及时性等多维度,对数据进行评估。根据每个企业的数据量、数据种类和数据质量项目的范围, 我们可能会使用一些分析工具进行定性和/或定量评估。 这是评估现有政策(数据访问、数据安全性、遵守特定行业标准/指南等)的阶段。

举例:

  • 评估客户记录中唯一性记录(包括姓名和地址)的占比;评估关键属性中等非空值的占比。

第3步 – 分析

对评估结果进行多方面分析。其中一个需要分析的方面是DQ业务目标与当前数据之间的差距。另一个需要分析的方面是数据质量较差的根本原因(如果是这样的话)。

举例:

如果客户地址不准确,不符合业务定义的目标,那么根源是什么? 是否是订单输入应用程序数据验证问题? 或者参考地址数据不准确?如果订单输入系统中的客户名称与财务系统中的不一致,是什么造成了这种不一致?

第4步 – 改进

根据前期分析设计和制定改进计划。 计划应该包含所涉及的时间表、资源和成本。

举例:

所有应用程序对地址的修改必须经过选定地址参考数据库的验证;客户名称只能通过订单输入应用修改;对系统的调整将需要6个月的时间才能实现,并需要XYZ资源和$$$。

第5步 – 实施

实施在改进阶段确定的解决方案。掌握技术以及其他业务流程相关的变化。实施全面的“变革管理”计划,确保所有利益相关方得到适当培训。

第六步-控制

定期验证数据是否与定义步骤中规定的业务目标和数据规则保持一致。定期向所有利益相关方传达数据质量指标和当前状态,以确保整个组织持续保持数据质量规范。

数据质量不是一次性项目,而是一个持续的过程,要求整个组织都以数据为导向、以数据为中心。 从大局来看,数据质量管理可以为组织带来丰厚收益。

锐眼洞察 | 2018年及未来的人工智能走向(翻译)

作者:Eugenio Culurciello

原文:Artificial Intelligence, AI in 2018 and beyond

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

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

译者注: 很多对于未来的预测实际上经常是错误的,不过多看看不同的人对未来的想法无疑是有价值的。人工智能发展到现在已经在很多领域证明了自己。不过目前的人工智能还远远达不到我们期望中的那个状态。下一个目标无疑是人工智能有了更好的感知能力,能够利用记忆、迁移学习以及持续学习能力来处理复杂的情况,这样的人工智能可能才会逐渐的向通用智能方面发展。

以下是我关于深度神经网络以及机器学习在更广泛的人工智能领域如何发展的看法,以及我们如何能够获得越来越复杂的机器以帮助我们的日常生活。 需要注意的是这些并不是对于未来的预测,而是对这些领域的发展轨迹、趋势以及技术需求进行更详细的分析,从而让我们能够获得有用的人工智能。 并不是所有的机器学习都是针对人工智能的,还有一些比较容易获得的成果,这里也会一并进行介绍。

目标

这个领域的目标是实现达到或者超过人类的机器,从而能够在我们的日常生活中帮助我们。自动驾驶车辆、智能家居、智能助手以及安全摄像头是第一个目标。家庭烹饪和清洁机器人以及无人机和机器人是第二个目标。另外一个是移动设备上的智能助手。还有就是能够听到或者看到我们日常生活中经历的全职的智能陪伴助理。终极目标是一个完全自主的综合体,在执行人类的日常任务上能够达到或者超过人类。

软件

在这里,软件被定义为通过优化算法进行训练的能够解决一个特定任务的神经网络架构。 在今天,神经网络已经在事实上成为了学习解决任务的工具,这些任务涉及通过监督学习来对大规模数据集进行分类。但这并不是人工智能,因为在真实的世界中经常需要从没有经历过的经验中进行无监督的学习,这需要能够整合从不同环境中获得的知识去解决所面临的新问题。

神经网络架构 – 几年前,当这个领域蓬勃发展时,我们经常说它具备从数据中自动学习算法参数的能力,并且优于人手工进行的特征工程。但是我们有意识的忘掉了一个小细节:基于训练来解决任务的神经网络架构并不是从数据中学得的,实际上它仍旧是由人来设计的。基于经验进行手工设计仍旧是这个领域中最主要的局限之一。神经网络架构是学习算法基础的核心。尽管我们的学习算法能够掌握新的任务,如果神经网络不正确,它们仍旧不能正常的工作。从数据中学习神经网络架构的问题在于在一个大规模数据集上尝试多个架构花费的时间太长。一个人不得不从头到尾尝试训练多个架构去看看哪个能够表现的最好。这正是我们今天最为耗时的试错的过程。我们需要在这个问题上投入更多的人的脑力去解决这个重要的问题。

非监督学习 – 我们不能总是在那里指导神经网络如何去做,不能总是在帮助它们纠正每一个错误,对它们的性能提供反馈,我们有我们自己的生活要去过。但是这就是我们今天对于有监督的神经网络需要做的:对于每一个实例,我们都要去帮助它使得它能够正确的工作。相反,人类会从一些例子中去学习,然后能够以一种持续的方式自我修正和学习更复杂的数据。

预测神经网络 – 当前的神经网络的一个主要局限就是它不具备我们人类大脑的一个重要特性:预测能力。关于人类大脑是如何工作的一个主要理论是大脑在不断做出预测:预测编码。如果你仔细想一下,我们每天都会体验到它。当你提起一个你认为很轻但是实际上很重的物体时,你会感到吃惊。因为当你准备提起它时,你已经预测了它将会如何影响你和你的身体,以及以及如何影响周边环境。 预测不仅仅帮助理解世界,而且还能够帮助我们知道什么时候不需要、什么时候需要学习。实际上,我们保存关于我们不知道的或者让我们感到吃惊的事情的信息,这样下次遇到的时候我们就不会感到吃惊。认知能力显然与我们大脑中的注意力机制有关系:我们具备先天的能力能够去忘掉99.9%的感官输入,而仅仅聚焦于对于我们的生存至关重要的数据 – 威胁在那里以及我们跑到哪里您够避开它。或者,在当今的社会,当我们急着要出门时我们的手机在哪里。 构建预测神经网络是与真实世界交互以及在复杂的环境中能够进行运转的核心,因此这是任何强化学习网络的核心网络。我们已经广泛的讨论了预测神经网络这个话题,并且是研究和创建它们的先锋组织之一。

当前的神经网络的局限 – 我们前面已经讨论了今天的神经网络的局限,不能够预测、基于内容的推理以及不稳定性,因此我们需要一种新型的神经网络。 神经网络胶囊是解决当前的神经网络局限的一种方法。在这里我们认为胶囊需要扩充一些新的特性:

  • 对视频帧的操作:这非常的简单,我们需要做的是让胶囊路由查看最近播放过的多个数据点。这相当于对最近的重要数据点上的联想记忆。需要注意的是它不是最近的帧的最近的表达,而是最近的帧的最不同点的表达。不同内容的不同点表达可以通过仅仅保存与预定义值不同的表达来获得。这个重要的细节可以保存最近的历史的相关信息,而不是一系列相关的数据点的无用的信息。
  • 预测神经网络能力:这已经是动态路由的一部分,从而强迫每一层都去预测下一层的表达。这是一个非常强大的自学习技术,在我们看来,它比我们社区所开发的所有的其他类型的无监督学习都更有效果。胶囊现在需要能够预测长时间的时空关系,但是现在这个能力还没有被实现。

持续学习 – 这一点很重要,因为神经网络需要不断向学习新的数据点。目前的神经网络每一次都只能够重新训练才能够学习新的数据。神经网络需要能够自我评估哪些是它们已经知道的以及哪些需要重新的训练。这也是现实生活中的增强学习任务所需要的,这样我们就能教机器学习新的任务而不会忘记旧的任务。 迁移学习 – 或者我们如何能够让这些算法通过观看视频自己学习,就像我们想要学习如何做一道新菜一样。这个能力需要我们前面列出的所有的组件,并且对于增强学习非常的重要。现在你只需要给机器一个例子,就可以训练你的机器来做你想要它做的事情,就像我们人类一样。 增强学习 – 这是深度神经网络的研究的圣杯:教给机器如何在一个真实世界的环境中去 学会行动。这需要自我学习、持续学习、预测能力以及很多我们不知道的东西。在增强学习领域还有很多的工作要去做,但是对于作者来讲,他仅仅是了解了这个问题的皮毛,距离解决它还有很多的路要走。 强化学习通常被认为是“锦上添花”,这意味着它仅仅是一个塑料合成大脑上的小型训练。那我们如何能够得到一个能够轻松解决所有问题的“通用”大脑呢? 这是一个先有鸡还是先有蛋的问题。今天为了一个一个的解决增强学习的问题,我们使用标准的神经网络:

  • 一个深度神经网络,它接受大量的输入数据,例如视频或者音频,然后将它们压缩为表达
  • 一个序列学习神经网络(例如RNN),去学习任务

上面是解决这个问题的两个显而易见的解决方案,但明显是错误的。但这正是每个人现在都在使用的,因为它们是目前可用的组件。结果却是不令人满意:我们的确可以从头学会玩视频游戏,并且掌握象棋或者围棋这类完全可被观察的游戏。但是不用我说,这些远远不能够解决现实世界的复杂问题。想象一下,一个AI玩Horizon Zero Dawn可以比人玩的更好,我非常想看到这个发生。 这正是我们想要的,机器可以和我们人类一样的运行。 我们在这里详细介绍了增强学习的工作和建议。它使用一个可以连续操作的预测神经网络以及一个关联存储器去存储当前的体验。

不会再存在循环神经网络 – 循环神经网络(RNN)已经出现了有一段时日了。RNN在训练并行化方面表现的非常不好,即使在特殊定制的机器上运行的也非常慢,原因是它们需要非常高的内存带宽,由此它们更受限于内存带宽而不是受限于计算能力。基于注意力的神经网络训练和部署上更高效也更快速,并且他们不容易受到训练和部署伸缩性的影响。在神经网络中,注意力有可能改变很多架构,但是现在它还没有得到应有的认可。将关联记忆和注意力结合起来,将会是下一波神经网络发展浪潮中的核心。 注意力神经网络已经能够像RNN一样学习序列,并且能够减少100倍的计算量!谁能够忽略这个巨大的进步? 我们认识到基于注意力的神经网络将会慢慢的在语音识别领域替换RNN,并且会在增强学习架构和通用人工智能领域获得一席之地。

硬件

硬件是深度学习取得进步的核心,让我们忘掉深度学习在2008-2012年的快速扩张,近些年深度学习迅速发展主要是因为硬件:

  • 每个手机上的廉价的图像传感器使得我们可以收集大量的数据集
  • GPU可以加速深度神经网络的训练

我们之前曾频繁的讨论过硬件。但是现在需要进行更新了。在过去的1-2年,我们看到了机器学习硬件的爆发式发展,尤其是针对深度神经网络。 有多家公司在这个领域有所投入:NVIDIA、Intel、Nervana、Movidius、Bitmain、Cambricon、Cerebras、DeePhi、Google、Graphcore、Groq、Huawei、ARM、Wave Computing。它们都在开发能够训练和运行深度神经网络的定制化高性能芯片。 关键是,在提供最低功耗和最高性能的同时,运行最新、最有用的神经网络。但是这个领域里很少有人能够理解硬件如何真正的改变机器学习、神经网络以及人工智能。很少有人理解芯片的重要性以及如何去开发它们。

  • 训练还是推理? – 很多公司在打造能够进行神经网络训练的芯片,其目的是抢占NVIDIA的一部分市场,而NVIDIA是神经网络训练硬件的事实上的标准。但是训练仅仅是深度神经网络应用世界中的一小部分。对于任何一个训练步骤,在真实世界中都有实际应用的上百万次的部署。例如你可以在云上使用一个目标检测神经网络:它基于大量图片进行一次训练,但是一旦训练完成,它将会基于数十亿数据在上百万台计算机上运行。这里试图说明的是:就像与真正使用的次数相比,训练次数其实很少,同样训练硬件的重要性也不高。而且制造训练所需要的芯片组需要额外的硬件和技巧。这意味这对于相同的性能需要更高的功率,因此不适合进行当前的生产部署。训练硬件重要,也是对推理硬件的简单调整,它并没有你想的那么重要。
  • 应用 – 在这个领域,能够提供以更低能耗来进行更快训练的硬件非常重要,因为它能够帮助更快创建和测试新模型。但是,运行应用的硬件(大部分用于推理)才是真正的飞跃。目前,有很多应用由于没有硬件或硬件低效的问题还不能用或不实用。比如我们的手机可以是语音助手,但由于不能让它一直在线,目前还远不达理想状态。我们的家庭助手都需要连接到供电设备上,因此不能随时的跟随我们在家里随意移动,除非我们周边有多个麦克风和设备。可能最重要的应用是将手机屏幕从我们的生活中移走,然后嵌入到我们的视觉系统当中。没有超级有效的硬件,所有这些应用以及其他更多应用(小机器人)都将无法实现。
  • 赢家和输家 – 在硬件领域,赢家是单位能耗最低并且能够最快进入市场的那些企业。例如在手机中取代SoC。这每年都在发生。现在想象一下将神经网络加速器嵌入到内存中,这可能能够更快征服和明显渗透大部分市场。这就是我们所说的赢家。

前面我们简要讨论了应用,但是我们需要详细讨论一下AI和神经网络如何进入和影响我们的生活。如下:

  • 图像和视频分类 – 已经有存在于很多云服务中。下一步在很多智能相机做到这些(已经有很多厂商提供)。在未来,神经网络将会越来越减少对云的依赖而在本地处理越来越多的数据:因为保护隐私和节省带宽而成为赢家。
  • 语音助手 – 因为能在我们的“智能”家居中播放音乐和控制基本设备,语音助手正在成为我们生活中的一部分。但是对话是我们人类活动中如此基础的一个能力,我们太把它当成理所当然的事情了。能够与你对话的小型设备是一场正在发生的革命。语音助手在为我们的服务中变得越来越好。但是它们仍需要连接电源。我们真正需要的助手是能够跟随我们移动的。我们的手机合适吗?在这里硬件又一次获得了胜利,因为硬件的进步使之成为可能。Alexa、Cortona和Siri会一直在你的身边陪伴。手机将很快变为智能家居,这是智能手机的有一次胜利。我们还希望语音助手能在车里跟随我们在城市中移动。我们需要能够在本地处理声音,越来越少的依赖云,从而更好隐私保护并降低带宽成本。硬件的进步将在1-2年实现这些。
  • 真正人工助手 – 能够识别语音真的很棒,但是我们真正需要的是能够实时识别我们所看到的,在我们移动时对周围环境进行分析。这是真正会让我们喜爱的智能助手。神经网络硬件能够满足你的这个愿望,因为分析视频流非常耗费计算能力,而且已经达到了现有硅基硬件理论的极限。换句话说,实现这些要比语音助手困难的多。但是这并不是不可能的,许多智能初创公司(比如AiPoly)已经有了所需的相关软件,但是缺乏能够支撑在手机上运行的强大硬件。还要注意的是,利用可穿戴眼镜之类的设备替换手机屏幕,将会使得智能助手真正的成为我们生活的一部分。
  • 烹饪机器人 – 会做饭和清洁的机器人将会成为下一个伟大的设备,我们可能很快就会拥有相关硬件,但是我们缺乏对应的软件。我们需要迁移学习、持续学习以及增强学习。这些工作看起来都非常有魅力,因为你会看到:每一个配方都是不同的,每一个烹饪的原材料看起来都不一样,我们不可能硬编码这些选项,我们需要一个综合体来非常好的学习和总结,从而能够完成相关的工作。我们远没有达到这个地步,但是也不是非常的遥不可及。按照目前的发展速度,可能需要几年的时间。我过去几年就在做这些工作,未来也将继续做下去。

锐眼洞察 | 使用卷积神经网络来检测卫星图像的特征(翻译)

作者:Ahmet Taspinar 

原文:Using Convolutional Neural Networks to detect features in satellite

译者:TalkingData数据科学家 李政昕

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

1.介绍

之前的博客文章中,我们已经看到了如何在TensorFlow中构建卷积神经网络(CNN),从零开始构建各种CNN架构(如LeNet5、AlexNet、VGGNet-16),并在MNIST、CIFAR-10、Oxflower17数据集上进行训练。

如果您一直关注最新的技术发展,您可能已经知道CNN能用于人脸识别、物体检测、医学图像分析、制造过程中的自动检测、自然语言处理任务以及其他许多应用。可以说,想找到CNN的实际应用,你仅仅受想象力和创造力(当然还有目的、精力和时间)的限制。

受到Kaggle的卫星图像特征检测挑战的启发,我想知道在卫星和航拍图像中检测特征是否容易。 如果这是可能的话,它的实际应用将是巨大的。在全球城市化进程中,城市正在不断扩大、发展和变化。这伴随着新的基础设施建设、新的建筑和社区诞生,以及景观的不断变化。监控和跟踪所有这些变化一直是一个劳动密集型工作。如果我们每天都可以得到全新的卫星图像,并使用深度学习来立即更新我们所有的地图,那么对于在这个领域工作的每个人来说都有非常大的帮助!

深度学习领域的发展如此之快,以至于几年前的热门——“简单”的图片分类已经显得过时了。目前,对象检测已经成为主流,在接下来的几年里我们可能会看到越来越多使用图像分割的应用(见图1)。

image

图1:计算机视觉中的任务可以分为图像分类、对象检测或分割任务

在这个博客中,我们将使用图像分类来检测航拍图像中的道路。 为此,我们首先需要获取这些航拍图像,并获取包含道路位置信息的数据(第2.1节)。 之后,我们需要将这两个图层放在一起(第3.1节)。 将准备好的数据集(第4.1节)以正确的格式保存后,我们可以将其送入建立卷积神经网络(4.3节)。 最后查看这个方法的准确性,并讨论可以使用哪些方法来改进它。

2.获取数据

任何数据科学项目中的第一个(也是最困难的)步骤总是获取数据。幸运的是,有许多包含各种形式卫星图像的开放数据集。有Landsat数据集、ESA的Sentinel数据集、MODIS数据集、NAIP数据集等。 每个数据集都有不同的优点和缺点。像NAIP数据集提供高分辨率(1米分辨率),但只覆盖美国。像Landsat覆盖整个地球,但分辨率较低(30米)。 还有其中一些数据集显示哪种类型的土地覆盖(森林、水、草地),其他数据集包含大气和气候数据。

由于我来自荷兰,所以我想使用覆盖荷兰的航空/卫星图像,因此我将使用PDOK提供的航拍图像。 这不仅是相当新的,并且他们也提供令人惊喜的25厘米的精度。

荷兰政府组织有很多可用的开放数据使用Pdokviewer,您可以在线查看大量这样开放的数据集:

  • 包含基础设施的层(荷兰的各种公路、铁路、水路(NWB wegenbestand)
  • 包含市与地区边界的层
  • 物理地理区域
  • 每个政府组织的位置
  • 农业区域
  • 每个街区的用电量
  • 土壤的类型与地形图
  • 每个街区的居民人数
  • 地表使用方式等等(甚至棕色长耳蝙蝠的生活栖息地)

image

图2:PDOK中可用的不同类型的图层

因此,有许多可用的数据集可以用作第二层(即作为包含道路位置信息的数据,之后需要与航拍图像数据进行合并),并使用它来自动检测卫星图像中的这些类型的特征。

PS:另一个包含很多地图的网站是Atlas Natuurlijk Kapitaal

2.1使用owslib下载图像

我感兴趣的图层是包含道路类型的图层。可以从荷兰政府的开放数据门户下载具有道路类型(NWB wegenbestand)的地图。航拍图像可以使用Web地图服务(WMS),可以通过Python包owslib下载。

WX20180122-103330

用“dx”和“dy”我们可以调整缩放级别。200的值大致对应于12的缩放级别,100的值大致对应于13的缩放级别。

此过程会在边界框((90000,427000),(110000,447000))内生成10.000个图块。这些坐标在rijksdriehoekscoordinate参考系统中给出,并且与WGS 84参考系统中的坐标((51.82781,4.44428),(52.00954,4.73177))相对应。 它覆盖了鹿特丹南部几平方公里(见图3),既包括城市也包括非城市地区,即我们的卷积神经网络有足够的道路进行训练。

image

图3:我们用来训练ConvNet的区域的边界框。

2.2查看包含荷兰道路的shapefile

接下来,我们将使用来自NWB Wegvakken(2017年9月版)的数据确定每个图像的内容。这是一个包含荷兰所有道路的文件,经常更新。可以从这个位置以shapefile的形式下载它。

Shapefile包含具有地理空间数据的形状,通常使用ArcGIS或QGIS等GIS软件打开。也可以使用pyshp库在Python中打开它。

WX20180122-103347

在这段代码中,列表’buffer’包含shapefile的内容。由于我们不想每次重复相同的shapefile读取过程,所以我们现在使用json.dumps()将其保存为json格式。

如果我们试图保存shapefile的内容,它会报错‘(…) is not JSON Serializable’。这是因为shapefile包含JSON本身不支持的数据类型(字节和日期时间对象)。 因此,我们需要为标准的JSON序列化器编写一个扩展,它可以获取JSON不支持的数据类型,并将它们转换为可序列化的数据类型。这是JSONencoder的方法。(关于这个方法的详情请看这里)。

WX20180122-103411

如果我们查看这个shapefile的内容,我们将会看到它包含以下类型的对象列表:

WX20180122-103437

它包含了大量的信息(手册中规定了每个信息的意义),但是对我们来说最重要的是

  • ‘WEGBEHSRT’ – >这表示道路类型
  • ‘coordinates’ – >这些是’rijkscoordinaten’系统中给出的这个特定对象的坐标。

在NWB Wegvakken中存在的不同的道路类型是:image

3.映射两层数据

现在应该确定哪些图像包含道路、哪些不包含道路。我们将NWB-Wegvakken的内容映射到下载的航拍照片的顶部来实现这一点。 我们可以使用Python字典来跟踪映射。我们还将使用字典来跟踪每个图像中存在的道路类型。

WX20180122-103452

在上面的代码中,前面从Shapefile转换为.JSON格式的NWB wegvakken的内容被加载到了dict_nwb_wegvakken中。

此外,我们初始化两个字典。第一个将填图像作为key,并将其内容列表作为值。第二个字典将填路类型作为key,将包含这些道路类型的所有图块作为值。如下所示:

WX20180122-103508

我们迭代dict_nwb_wegvakken的内容,对于每个元素,我们查找坐标和道路类型,并确认这些坐标是在我们的边界框内。通过以下方法来完成:

WX20180122-103522

add_to_dict方法首先通过确定每个tile命名的四个坐标(lowerleft x,y和upperright x,y)来确定一个坐标属于哪个tile。 我们还确定了每个坐标在tile中的相对位置。例如,“99800_445000_100000_445200.jpg”中的坐标(99880,445120)将具有相对坐标(0.4,0.6)。当你想绘制一个tile的内容时,这个方法很方便。

将道路类型与相对坐标一起添加到图像的内容列表。 同时,我们将tilename添加到第二个包含每个道路类型的tilename列表的字典中。

  • 如果只有一组坐标,并且这些坐标位于边界框内,我们立即将这些坐标添加到我们的字典中。
  • 如果元素中有多个坐标,我们不仅将所有的坐标添加到字典中,而且计算两个后续坐标之间的所有中间点,并将这些中间点添加到字典中。 这是必要的,因为两个坐标可以形成描述位于tile内部的道路的形状/线条,但是如果坐标恰好位于tile外部,我们将认为该tile不包含任何道路。 如图4所示。在左边我们可以看到描述一条道路的两点,但是它们碰巧位于tile外面,而在右边我们也计算两点之间的每一个中间点(每一个1 / POINTS_PER_METER米),并将中间点添加到字典中。

image

3.2可视化映射结果

利用可视化,查看映射是否正确、是否遗漏了道路,以及是否在两个坐标之间选择了足够的中间点以完全覆盖道路的所有部分。

WX20180122-103540

在图5中,我们可以看到两个数字,左边是(x0 = 94400,y0 = 432000),右边是(x0 = 93000,y0 = 430000)。 image

图5:体现NWB wegenbestand在tile上的映射结果的两张图

4.用卷积神经网络识别道路

4.1准备训练、测试和验证数据集

接下来,我们将把所有图像及其正确标签(道路是否存在以及道路类型)加载到数据集中。数据集是随机的,然后分成训练、测试和验证部分。

WX20180122-103602

我们可以使用以下函数对标签进行独热编码,并随机化数据集:

WX20180122-103613

4.2将数据集保存为一个pickle文件

将数据集加载到内存中的整个过程、尤其是随机化图像的顺序,通常需要很长时间。所以在完成一次之后,最好把结果保存为一个pickle文件。

WX20180122-103702

现在我们可以保存这次训练,在pickle中验证和测试这个数据集,准备部分的工作就完成了。

我们可以把这个pickle文件加载到卷积神经网络中并训练它来识别道路。

4.3训练卷积神经网络

正如你所看到的,在我们开始使用CNN之前,我们不得不做很多工作来准备数据集。这也反映了数据科学的现实:70%到80%的时间用于获取、理解和清理数据,数据的实际建模/训练只是工作的一小部分。

首先,我们从保存的pickle文件中加载数据集,从cnn_models模块中导入VGGNet并设置学习速率、批量大小等值。

WX20180122-103719

之后,可以构建包含卷积神经网络所有计算步骤的图并开始训练它。我们使用VGGNet-16卷积神经网络、l2正则化来最小化误差,学习率为0.0001。 在每一步中,训练准确率被附加到train_accuracies,并且在每10步,测试和验证准确率被附加到类似的列表。稍后我们将使用这些来形象化我们的准确率。

WX20180122-105502WX20180122-105536

4.5结果的准确率

下面是卷积神经网络的准确率结果。正如你所看到的,测试的准确率和验证集合在80%左右。

image

图6:训练、测试和验证集的准确率

从这些没有被准确分类的tile中可以看出,大部分被错误分类的tile是由于这些图片上的道路确实很难被检测到。 image

图7:被错误分类的一些tile

5.最后的话

我们已经看到了如何使用CNN在卫星或航空图像中检测道路。虽然我们通过卷积神经网络能够做的已经非常令人惊喜,但是AI和深度学习领域的技术发展是如此之快,“只是用CNN”已经过时了。

几年来,也有了被称为R-CNN、Fast R-CNN和R-CNN(如SSDYOLOYOLO9000)的神经网络。这些神经网络不仅可以检测图像中物体的存在,还可以返回物体的边界框。 现在还有可以执行分割任务的神经网络(如DeepMaskSharpMaskMultiPath),即它们可以确定图像中的每个像素属于哪个对象。 我认为这些可以执行图像分割的神经网络将是确定卫星图像内道路和其他物体位置的理想选择。在未来的博客中,我会初探如何使用这些类型的神经网络来检测卫星和航空图像中的道路(或其他特征)。

锐眼洞察 | 2018年云架构趋势(翻译)

作者:Keith D. Foote 

原文:Cloud Architecture Trends in 2018

译者:TalkingData数据科学家 孙强

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

人们不断想出新的智能方式来使用云。 因此,云计算架构设计和开发不断被调整和改进。 今天的企业需要灵活变通,快速行动,了解客户的期望。 为此,企业依靠云提供专用通信系统、数据存储系统和大数据处理系统。 随着云技术的发展,组织不断发现越来越多的用途。

云架构描述了用于提供云计算服务的“软件系统的组织”。 它通常涉及云中的多个元素,它们通过松耦合机制(例如消息队列)相互通信。 云的体系结构必须足够灵活,以允许各种系统访问。 可伸缩性和安全性是设计中的两个重要元素。

数据架构不应与云架构混淆,数据架构正在进行类似的演变。 这只是数据架构中更大的一个主题。

混合云

越来越多的组织将采用内部数据处理、私有云处理、公有云处理和软件即服务(SaaS)的组合来提供研究成果和商业智能。 虽然这种方法具有很大的灵活性,但它通常不是一个简单的系统,而且往往在管理上“不必要地”昂贵和笨拙。 最近的DATAVERSITY调研显示,在被调研组织中有47.7%正在使用混合系统。

混合云的体系结构涉及整合本地资源和云资源。 对于大多数具有本地技术的企业而言,云端即服务的使用需要在混合架构中运行。 某个云服务可能具有与客户的良好匹配的体系结构,而另一些没有选择具备兼容系统的云提供商的云服务商,因为无需投资设备和软件,可以将配置成本降至最低。

在调研云提供商时,考虑在云和内部部署系统上整合“信息提供应用程序”也很重要。 混合架构应该包括整合来自物联网的大数据和远程传感器的能力。 兼容的系统无需购买新硬件来支持应用程序,并且可以简化流程。

机器学习和深度学习

深度学习和机器学习都基于算法。 机器学习为计算机提供了使用重复性经验进行学习的能力。深度学习借助图形处理单元(GPU)和海量数据进一步推动了这一过程,并且经常用于训练AI实体。

许多企业领导者认为,机器学习将最大限度地从大数据获得洞察,并为他们提供竞争优势。 还有一些商业领袖还不确定机器学习是什么。 那些了解并使用它的人已经获得了有用的商业智能。 在短短的几年中,机器学习已经从实验室实验转变为非常有用的研究工具。

哈佛商业评论分析服务公司最近的一项调查显示,60%的受访者认为其组织未来的成功取决于机器学习。 许多人已经开始使用深度学习来开发模式识别、工作流程管理、预测建议以及检测欺诈行为。

AWS和微软Azure之间罕有的达成了合作伙伴关系,体现了机器学习和深度学习的重要性。 他们的合作伙伴关系是通过深度学习“开放源代码库”Gluon的方式实现的,旨在实现特定流程的自动化,从而使机器学习更加精简。 这两家公司以及IBM、Google和其他科技巨头都看到了云计算机学习的巨大潜力。

云容器

云容器(应用程序容器的版本)和容器管理平台将在2018年获得普及,因为它们是有用的、高效的和功能性的。 Forrester副总裁兼首席分析师Dave Bartoletti建议,目前有10%的企业正在生产环境使用容器,并且多达三分之一的企业已经开始对其进行测试。术语“应用容器”代表了一种提供一致性和设计效率的新技术。 基本上,它们是虚拟机和虚拟机管理程序的替代品。 容器比虚拟机更有效地使用存储资源、内存和CPU,从而可以使用相同的基础结构来支持更多的应用程序。

应用程序容器使用称为基于容器的虚拟化系统。 它是一个专为数据和处理而设计的“虚拟”存储容器,它将物理计算机环境中的所有内部元素隔离开来。 它以计算机为平台,独立运行。

这可以保护容器的应用程序和服务器,避免由于错误而损害对方。 IT专家声称,基于容器的虚拟化支持更高效的设计,无需在计算机上架设基础架构系统。 容器有自己的基础设施。

另外,云容器具有非常便携的特点。 一个容器可以很容易地上传到各种不同的服务器上。 容器可以很容易地复制,使得它们可以用于测试、开发和集成,而无需重新配置主机。 (注意:应用程序容器仍然是新的,并不总能理想的与所有服务器兼容,需要仔细检查容器的限制)。

人工智能

云提供商历来重视提供基础架构和软件。 然而,最近焦点转移到了提供智能云。仅支持自有云的 IBM Watson,已经在人工智能(AI)中处于领先地位。开发一个AI实体的主要挑战是在训练中涉及的时间和金钱。 云端GPU技术已被用于提供深度学习。

IBM最近宣布他们可以将AI实体的训练时间大幅缩短65%。 这被认为是一个重大的突破,也是迈向减少训练AI实体所需时间和金钱的重要一步。

很少有组织可以负担对人工智能的研究。 但是,主要的云供应商已经在AI研发方面投入了大量资金。 他们的目标是开发一种能够比竞争对手更快、更高效、更直观地与客户合作的云。 使用具有人工智能能力的云可以提供:

  • 廉价的人工智能研究:集成人工智能的云服务可以为企业提供人工智能研究和开发的资源,客户只需付出时间成本。 一个不成功的试点项目可以很容易地关闭,而无需处理不再需要的昂贵的硬件。
  • 易用性:云供应商一直在努力使自己的系统更加“用户友好”,并使用人工智能来实现这一目标。
  • 使用最新技术:使用AI云服务可以使企业保持技术领先的地位。面对竞争,主要的云供应商在不断提供新的AI服务。

人工智能和云的安全

为了安全目的,人工智能被期望越来越多地用于云内外。 在云中运行时,安全性是一个重要的考虑因素,AI提供了一种通过识别威胁和缩短响应时间来打击网络攻击的方法。在企业与多个系统进行交互的云中,云服务可能会受到更多的破坏,从而导致网络欺诈和对组织私有计算机的攻击。 安全性是选择云的重要因素。2017年10月,Vipre Cloud宣布使用人工智能来防止在线终端攻击。 他们正在努力通过将行为分析、众包数据收集、机器学习和统一管理相互关联的安全系统,来保护这个脆弱的区域。 Vipre Cloud不断更新最新的网络攻击信息,并在本地安装了一个配套代理,以确保端点的安全。

区块链

区块链是一种分布式账本技术(DLT),用于支持比特币和其他加密货币,可以通过使用计算机网络而不是单个本地化服务器来存储大量数据。 区块链本身不直接提供安全性,但可以创建安全应用程序。 ABI Research表示,区块链提供了三个支持安全性的基本功能:

  • 不可变性:数据创建后无法更改。
  • 透明:每个人都可以看到发生了什么。
  • 自治性:其是自我治理的。

这项技术理论上可以处理涉及金钱、货物或财产的任何类型的在线交易。 网上金融交易的潜力很大,从税收到允许移民向其他国家的家庭汇款,在这些应用场景中,银行业操作起来可能很困难。

在2017年10月,IBM创建了一个新的区块链支付平台,可以加快跨境支付。 几个国际银行在这个项目上共同合作,包括澳大利亚国民银行和Danamon银行。 10月下旬,香港和新加坡的中央银行同意使用区块链技术在跨境网络上进行合作。

数据虚拟化

数据虚拟化是一个术语,用于描述数据管理的一种方法,允许应用程序恢复和操作数据,而不需要数据的技术细节,例如数据位于何处或如何格式化。它从各种来源向多个用户提供实时的综合和抽象数据。 数据虚拟化模型被认为易于理解、易于构建和易于维护。

数据虚拟化过程涉及从不同来源传输数据。 使用数据虚拟化技术的主要目标是通过单点提供来自各种数据源的数据访问。 这允许用户访问应用程序而不需要其的确切位置。数据虚拟化最近已经适应了云计算,并将在2018年得到越来越多的使用。