:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Blog

cialis erfaring cialis i norge hva er kamagra cialis efeitos secundarios cialis bula viagra effekt viagra norge viagra på nett viagra nettbutikk viagra infarmed levitra comprimidos cialis uten resept cialis pris levitra eller cialis kamagra gel comprar viagra farmacia
  • Jan 25 / 2018
  • 0
Tech

锐眼洞察 | 详谈 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是个好东西,但是在使用的时候一定要理清楚其含义,否则很容易出现不可调试的问题等。

  • Jan 25 / 2018
  • 0
Tech

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

作者: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的取值明显不同。

预测效果和人力投入

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

结束语

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

  • Jan 23 / 2018
  • 0
Enterprise

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

作者:Ramesh Dontha

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Jan 22 / 2018
  • 0
Data, Tech

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

作者: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步 – 实施

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

第六步-控制

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

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

  • Jan 22 / 2018
  • 0
Ideas, Tech

锐眼洞察 | 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)已经有了所需的相关软件,但是缺乏能够支撑在手机上运行的强大硬件。还要注意的是,利用可穿戴眼镜之类的设备替换手机屏幕,将会使得智能助手真正的成为我们生活的一部分。
  • 烹饪机器人 – 会做饭和清洁的机器人将会成为下一个伟大的设备,我们可能很快就会拥有相关硬件,但是我们缺乏对应的软件。我们需要迁移学习、持续学习以及增强学习。这些工作看起来都非常有魅力,因为你会看到:每一个配方都是不同的,每一个烹饪的原材料看起来都不一样,我们不可能硬编码这些选项,我们需要一个综合体来非常好的学习和总结,从而能够完成相关的工作。我们远没有达到这个地步,但是也不是非常的遥不可及。按照目前的发展速度,可能需要几年的时间。我过去几年就在做这些工作,未来也将继续做下去。
  • Jan 19 / 2018
  • 0
Tech

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

作者: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),即它们可以确定图像中的每个像素属于哪个对象。 我认为这些可以执行图像分割的神经网络将是确定卫星图像内道路和其他物体位置的理想选择。在未来的博客中,我会初探如何使用这些类型的神经网络来检测卫星和航空图像中的道路(或其他特征)。

  • Jan 19 / 2018
  • 0
Tech

锐眼洞察 | 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年得到越来越多的使用。

  • Jan 18 / 2018
  • 0
Enterprise

锐眼洞察 | ​金融科技的5大新年计划(翻译)

作者:LHoFT

原文:5 New Years Resolutions for Fintech

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

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

 

金融科技在我们的生活中无所不在,这同时意味着它在我们的年终总结中应占有一个特殊的位置。当2017年即将结束时,我们可以回顾一下今年有哪些方面进展顺利、哪些方面需要改进,以及金融科技行业如何能在2018年有个积极的开端。

在2017年,我们在金融科技领域内看到了一些提升,即创业公司和金融机构对变革的需求意识逐渐强化。我们同时还看到,所有的参与者都有更强的合作、承担风险、以及采用创新技术的意愿。毫无疑问,2018年将继续带来巨大的变化,但为了实现这些变化, 我们的决心也需同在。

我们为金融科技制定了五个新年计划,并请不同的专家基于他们的观点进行权衡。加入我们,让我们一起实现这些计划的条约, 保持金融科技的积极势头,并在2018年将那些好的想法和理念付诸于实践。

1. 更加以客户为中心

当下,比以往任何时候都更能体现出来,任何不能使顾客完全满意的企业都将无法生存。金融科技市场很大,而消费者才是坐在驾驶位的人。这对金融科技公司来说意味着什么呢?这意味着每一项决定都应该考虑到客户的想法。

“2018年将不再存在以客户为中心的问题”Temenos首席增长官Duena Blomstrom表示。“无论大银行或是小银行都明白,争夺客户芳心的竞争将会是非常激烈,如果希望维持这种关系,就必须提供真正令人愉悦甚至上瘾的体验。

以客户为中心的文化有助于创建流畅的消费体验,这也正是N26和Transferwise如此成功的原因。金融科技初创企业和银行都应该通过公开数据交换和定性反馈来持续监控客户的期望,并将这些发现融入他们的产品中。客户对金融服务的高期望将继续为新的产品功能铺平道路,并推动传统金融机构实现更好的客户体验。

2. 更加多元化

福布斯在2017年十月的头条文章中说得很对:“金融科技有99个问题,多元化正是其中之一。”金融领域一定会从不断增长的多元观点中受益。并不是每个人都以同样的方式使用产品或是服务,这意味着与不同的团队一起工作将有助于促进包容和创新,最终增强组织的文化和产品。

FarmDrive合伙人Mary Joseph表示:“作为一个个体,为我职业生涯和成长带来最大收益就是与那些在性别认同、能力、阶级、种族、纪律、甚至是音乐品味等各方面与我不同的同事合作”。“在金融科技领域,我们针对金融挑战制定了创新的解决方案,通常是为那些被排除在正规金融机构之外的边缘群体。包括用户群的成员在内,有个多元化的思想者群体,增强了我们开发高质量产品的能力,从而增加了金融包容性。”

根据一篇来自CFSI的博客所言,在科技领域仅有3%的CEO是女性,不到1%是黑人,以及不到1%是西班牙裔。在金融领域,仅有4%的跨国银行是由女性CEO所领导的。在2018年,应当让这些数字更加平衡,以促进一个更健康、更具代表性的金融科技生态系统。

3. 更加注重合作

合作,对于任何行业来说都很关键,但对于金融科技来说尤为重要,后者通过与传统银行直接竞争得到其PR地位。在最初的金融科技大爆发之后,显然反对者能做到的变得十分有限。对金融机构的批评和消费者对他们的需求提高是启动变革的关键步骤,但合作是通往前进的道路。

“合作是未来金融服务的关键”来自Luxembourg金融科技院的CEO Nasir Zubairi说道。

“作为Luxembourg的金融技术创新中心,我们将金融机构、政府、国家项目、企业合作伙伴、大学、技术学院、国内及国际初创企业、思想领袖、科技传道者、投资者等聚集在一起,并与之建立联系。这是一个全盘路径。”

想象一下,如果金融科技的领头人、银行、政策制定者和其他专家可以无障碍地合作,那么产品创新和可扩展性将有无限可能。我们挑战金融科技组织使其扩大视野,在实验室或当地生态系统之外开展工作。

“金融服务的瓦解实际上是通过敏捷的初创公司和成熟公司的成功合作来实现的。对于一家资源有限的初创公司而言,找到一家合适的合作伙伴是一项挑战,但幸运的是在Luxembourg有许多优秀的牵线人,像是LHoFT、LuxFutureLab、I’Atelier Fintech Boost. 今天,Tetrao的人工智能已经对用户的客户体验产生了影响,如果没有我们的合作伙伴,这些将是不可企及的”,最近法国巴黎银行国际黑客马拉松的获奖者Tetrao的CEO Christian Gillot说道。

4. 更具创造力

在金融领域,敏捷性或许是初创公司最大的优势。把它与创造力结合起来,你就得到了一份严肃创新并具备竞争优势的秘诀。当然,还有很多其他方面需要考虑,像是合适的资源和团队,但创造力对于构建一个优秀、可扩展和直观的产品的重要性不可低估。

11:FS的CEO兼金融科技内幕播客(FinTech Insider Podcast)的主持人David Brear说道:“初创公司不仅要在沟通上发挥教育作用,而且还要有娱乐性。”

“他们必须进入到成熟公司不能触及的地方,不断地突破预期。聪明的企业需要认识到现在B2B正在使用B2C渠道来触达他们的顾客。他们正在创造一大批忠实的读者、听众和观众,他们从自己的创作中获得了真正的价值。”

5. 以更加开放的心态对待变化

认识到改变的必要性和真正接受它是两件截然不同的事,而金融可以仍需要更多的后者。这一点尤其适用于长久以来一直抵制变革的传统银行。

“银行应该为未来一两年的客户创造新的体验,而不仅仅是重新粉刷当前的服务,”ETRONIKA的联合创始人Kęstutis Gardžiulis说道。

“只有在传统银行建立全新的敏捷反应团队—像是专注于新的科技机遇的特殊任务小组—才能帮助他们在现有组织中生存下去”。应该允许他们去大胆想象、去经历失败并保持对创新的渴望。准备着往前迈三步走在那些开辟者的更前面”。

这份计划也适用于那些将被迫遵守2018年即将出台的新立法的初创企业,包括GDPR和MiFID II。所有玩家都必须做好适应这些的准备,开辟自己的道路,并接受伴随这一新领域而来的挑战。

  • Jan 18 / 2018
  • 0
Tech

锐眼洞察 | 不可错过的2018年Fintech趋势(翻译)

作者:Adriana Bickford

原文:Top Technology Trends to look for in 2018

译者:TalkingData市场部

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

随着2017年接近尾声,我们展望新一年,制定目标并翻开新一页。这是一个沉思、想象并满怀雄心壮志进入2018年的时刻。
毫无疑问,2017年让我们认识到,科技已被证明对服务产生了颠覆。从比特币的价格冲上高峰,到人工智能的影响力日益增长,我们可以看到社会对替代性金融服务的需求是多么急切。

热门AI文章:

那么,2018年需要注意那些热门科技趋势呢?通过与行业顶尖专家、领导者与预言家的讨论,我们选出了以下三大趋势。

区块链

由于比特币的神秘性,可能会让很多公司不敢使用它,但事实上数字货币已经进入了市场。甚至进入了证券交易所。

面对比特币在2017年的高潮,我们预测,它会给像以太坊和莱特币等其他加密货币让路,以积蓄能量。已有猜测,以太坊的市值将在2018年超过比特币。

CB Insight预测,到2020年,数字货币将会成为主导货币。企业与政府已经开始聚焦协议如何将数字货币整合入他们的系统,从而不被排除在外。甚至投入更多开发自有的解决方案。在这新的一年,我们将开始看到对加密货币的更多试验和实际应用。

人工智能(AI)

我们已经看到科技如何通过机器学习、机器人科学与聊天机器人,来不断拓展科学与技术的边界。

在2018年,AI与机器学习将继续占领新闻头条。有预估,到2020年,将有85%的客户交互由AI完成。随着实验进行,我们开始看到自动化流程将消除错误并降低成本。在2018年,其将通过分析与大数据的形式来优化决策并提高服务速度,产生更大的价值

在2018年,AI将不仅仅是“可有可无”而是“必不可缺”。

数字化体验——这次针对后端

虽然,数字化转型的焦点之前都集中在前端,我们预测,2018年将借助科技来赋能后端流程与系统,从而为客户提供全面的、流畅的体验

系统必须整合从触点到渠道来提供实时的客户交互,从而提供转型的业务模型。

上面就是我对金融科技发展方向的预测。由于对数字化服务的需求的增长,我们将继续看到客户离开网点并通过他们的设备轻松进行交易。传统银行要注意这些预测,并快速向整体客户旅程从面对面服务升级到日常服务的阶段转变。

2017年已经过去,是时候聚焦2018年,并关注如何参与到即将改变未来金融大局的主流趋势中来。

  • Jan 17 / 2018
  • 0
Tech

锐眼洞察 | Apple开源机器学习框架 Turi Create 简介与实践

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

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

logo.png

日前,苹果在 GitHub 平台上公布了 Turi Create 框架,苹果表示,这个框架旨在通过简化机器学习模型的开发,降低开发者构建模型的门槛。详细说明如下:

Turi Create 概述

Turi Create简化了自定义机器学习模型的开发。你不需要成为机器学习的专家,即可为你的程序添加推荐,对象检测,图像分类,图像相似度识别或活动分类。

  • 易于使用:让你聚焦于任务而不是算法
  • 可视化:内置的流式可视化功能可以探索你的数据
  • 灵活:支持文本,图像,音频,视频和传感器数据
  • 快速和可扩展性:可在单台机器上处理大型数据集
  • 易于准备配置:模型导出到Core ML,即可用于iOS,macOS,watchOS和tvOS应用程序

使用Turi Create,你可以处理很多常见的场景:

你还可以使用基本的机器学习模型做成基于算法的工具包:

支持的平台

Turi Create支持:

  • macOS 10.12+
  • Linux(依赖于glibc 2.12+)
  • Windows 10(需要WSL)

系统要求

  • Python 2.7(即将支持Python 3.5+)
  • x86_64架构

安装

Linux不同变种的安装详细说明,参阅LINUX_INSTALL.md。常见的安装问题,参阅INSTALL_ISSUES.md

苹果官方推荐使用环境virtualenv,安装或建立Turi Create。请务必使用你的系统pip安装virtualenv。

WX20180117-182218

安装Turi Create的方法参照标准的python包安装步骤。要创建一个名为venv的Python虚拟环境,请参照以下步骤:

WX20180117-182233
要激活新的虚拟环境并在此环境中安装Turi Create,请按照下列步骤操作:

WX20180117-182243
另外,如果你使用的是Anaconda,你可以使用它的虚拟环境:

WX20180117-182306
在您的虚拟环境中安装Turi Create:

WX20180117-182315

GPU支持

Turi Create不一定需要GPU,但某些模型可以通过使用GPU加速。如果要在安装turicreate包后启用GPU支持,请执行以下步骤:

  • 安装CUDA 8.0(说明
  • 为CUDA 8.0安装cuDNN 5(说明

确保将CUDA库路径添加到LD_LIBRARY_PATH环境变量。通常情况下,这意味着将以下行添加到 ~/.bashrc文件中:

WX20180117-182326
如果你将cuDNN文件安装到单独的目录中,请确保单独添加它。下一步是卸载mxnet并安装启用CUDA的mxnet-cu80包:

WX20180117-182336

确保你安装的MXNet版本与turicreate依赖的版本相同(当前为0.11.0)。如果你在设置GPU时遇到困难,可参阅MXNet安装说明

当然,除了上述的安装方式之外,你还可以从源码构建,如果想要从源码构建,可参阅BUILD.md中的详细说明。

猫狗大战

Turi Create可以训练定制的机器学习模型。这意味着可以开发可识别不同对象的模型,只要您使用大量图像训练模型即可。

这里我们以识别猫狗为例,建立一个自定义的模型,可以识别图像是猫还是狗。

1. 下载猫和狗的图像

第一步是下载很多猫和狗的图像。这是必要的,因为我们将使用图像来训练我们的自定义模型。这里我使用的是Kaggle Dogs vs. Cats的数据集。如果你觉得在这里单独下载麻烦,可直接在Kaggle Cats and Dogs Dataset中下载全量数据集。

下载好图像数据集之后,我们解压到对应的文件夹内备用。

2. 标记数据、训练模型

在开始训练我们的模型前,首先需要对每一张图像标记其为‘cat’还是‘dog’。幸运的是Turi Create提供了标记基于不同文件夹的图像的功能,具体代码如下:

WX20180117-182352

标记完成后,可以看到数据集的全局情况:

上述代码的最后一行 data.explore(),会自动打开Turi Create的图像可视化查看工具,在这里你可以看到每张图像以及相应的标记,也是一种核查标记是否正确的方式。

数据集准备完成后,就可以进行模型的训练了。在训练的时候,会将数据集按照‘二八原则’进行训练集和测试集划分,然后进行模型训练:

WX20180117-182407

训练的过程可能会花一点时间,长短取决对机器的配置。在训练的过程中,Turi Create会打印出每一步执行的动作,如下:


……

最终我们得到的正确率为:0.986954749287,但看这个结果还不错。并且已经导出了mymodel.model和支持Core ML 的 CatsAndDogs.mlmodel

3. 移植模型到iOS应用程序

有了CatsAndDogs.mlmodel模型文件后,我们就可以将其移植到iOS应用程序中了。关于如何集成,可参考Apple官方的图像识别例子,这里不再陈述:

总结

本篇内容对Apple公开的Turi Create机器学习框架进行了简单的介绍,并实践了Turi Create在图像识别方面的一些基本用法。Turi Create不仅仅能用于图像识别,在其他方面能有很好的表现,目前Turi Create还刚开源不久,相信在社区的力量下,会带来不同的功能和体验,拭目以待。

页面:12345678910...49
随时欢迎您 联系我们