:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Tagged / 机器学习

  • Jan 26 / 2018
  • 0
Tech

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

作者:Avi Turgeman

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 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 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还刚开源不久,相信在社区的力量下,会带来不同的功能和体验,拭目以待。

  • Jan 15 / 2018
  • 0
Tech

锐眼洞察 | 脉冲神经网络——下一代的机器学习(翻译)

作者:Devin Soni

原文:Spiking Neural Networks, the Next Generation of Machine Learning

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

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

译者注:

现在的深度学习基本上是基于第二代神经网络的学习。第二代神经网络能够解决一些问题,不过离我们想要达到的未来还有很多的路要走,而已经有很多人在研究新一代的神经网络,也就是脉冲神经网络。让我们先对它有一个粗浅的了解。

每个对机器学习近期进展有所了解的人,都应该听说过目前用于机器学习的第二代人工神经网络。第二代人工神经网络通常是全连通的神经网络,它们输入连续的值,然后输出连续的值。 虽然其让我们在许多领域取得了突破性的进展,但其在生物学上并不是非常的准确,并没有模仿到我们大脑神经元的实际机制。

第三代神经网络——脉冲神经网络(spiking neural networks),旨在弥合神经科学与机器学习之间的鸿沟,使用接近真实的生物神经模型来进行计算。脉冲神经网络(SNN)与机器学习社区所了解的神经网络具有根本性的不同。SNN使用脉冲来进行操作,脉冲是在时间点上发生的离散的事件,而不是连续的值。脉冲的出现是由代表不同生物过程的微分方程决定的,其中最重要的是神经元的膜电位。当神经元的膜电位到达特定值的时候,脉冲会被触发,然后该神经元的值会被重置。最常见的模型是LIF(Leaky Integrate-and-fire)模型。另外,SNN通常是稀疏连接的,并且通过特殊的网络拓扑结构来实现。

乍一看起来,SNN似乎是一种倒退,我们现在的神经网络已经从连续的输出转变为了二元输出,并且这些脉冲训练不容易解释。

LIF模型的微分方程

脉冲发生时神经元的膜位

然而,脉冲训练给了我们更强大的处理时空数据的能力,而这些时空数据通常就是我们的真实世界的感官数据。

空间方面指的是神经元只与其本地的神经元相连接,因此它可以分别处理输入块的输入(类似于CNN使用过滤器一样)。

时间方面指的是脉冲训练是随着时间发生的,因此我们损失了二进制编码,但是获得了脉冲发生时间相关的信息。

三个神经元的脉冲训练

这使得我们可以非常自然的处理时间相关的数据而不需要引入RNN而带来复杂性。实际上已经证明,脉冲神经元从根本上来讲,是比传统的人工神经元更为强大的计算单元。

全脉冲神经网络

既然SNN理论上比第二代人工神经网络更为强大,我们自然会问为什么它们没有被广泛的使用呢?SNN目前的主要问题是如何训练。尽管我们有无监督的生物学习方法,比如Hebbian和STDP,但是还没有找到比第二代生成网络更为高效的有监督的SNN训练方法。由于脉冲训练是不可微分的,我们不能在SNN训练中使用梯度下降而不丢失脉冲的精确时间信息。因此,为了使得SNN能够应用于现实世界的任务,我们需要开发一个有效的监督学习方法。这是一个非常难的任务,因为我们需要了解人类大脑如何真正的进行学习,从而给定这些网络生物的现实性。

另外一个我们将要解决的问题是,在通用硬件上模拟SNN是非常的计算密集型的,因为它需要模拟不同的微分方程。但是类似于IBM的TrueNorth等模拟神经元的硬件通过特殊的模拟神经元的硬件可以来解决这个问题,它可以利用神经元脉冲的离散和稀疏的特性。

SNN的未来仍旧不清晰,一方面,它是我们目前的神经网络的天然继承者。但是,另外一方面,对于大部分的任务来讲,它还不是一个可以实用的工具。在实时图像和音频处理方面有一些SNN的实际应用,但是相关的实际应用的资料还非常少。SNN的大多数论文要么太理论化,要么就是比一个简单的全连接的二代网络性能还差。然而,有很多团队正在开发SNN的监督学习规则,我对SNN的未来仍就保持乐观。

1_HiorFaHQ59K0XktcGrvGyw.png

  • Jan 12 / 2018
  • 0
Data, Tech

锐眼洞察 | 如何用机器学习模型预测App用户流失?(翻译)

作者:Lisa Orr

原文:Predicting Mobile App User Churn: Training & Scaling Our Machine Learning Model

译者:TalkingData Frank Zhang

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

随着获取 App 新用户的成本飞涨,保留已安装用户是最大化获客成本和用户生命周期价值的关键。Urban Airship 的数据科学小组去年花费了一年时间来开发一种方法识别和定位可能停止使用您的应用的用户。我们称之为预测流失。

在这里,我提供了基于数十亿事件的可扩展机器学习预测模型建立过程的深入见解,并介绍这些预测能力如何带来对用户行为的新洞察,如何为新的触达策略提供动力,如何影响用户留存。

开发机器学习模型

流失预测是一个简单的分类问题 ; 及时回顾用户活动,检查一段时间后谁保持活跃状态,然后提出一个模型,将活跃用户和不活跃用户分开。借助于大量的数据,我们试图寻找用户可能继续打开应用程序的最佳指标是什么?

首先,我们可以查看用户的日常使用活动。用户打开应用程序的频率如何?他们最近什么时候打开的?如果我们试图预测谁会在不久的将来打开应用,一个好的指标可能是用户是否已经打开应用程序。接收推送通知的影响呢?选择接收它们是影响用户 App 活动的首要因素吗?

回顾 60 天的用户数据,我们在累积窗口中汇总了消息发送和应用打开信息,以及一些附加信息,如设备平台和 App ID。然后,我们根据用户在未来 30 天内是否打开应用,将每个用户标记为已流失或未流失。利用为每个用户汇总的特征数据,我们使用梯度提升树机器学习算法来训练模型。

我们对流失预测进行了六个月的历史研究,对数十种特征(即可观察的用户和应用行为)进行了模型训练。我们的目标是在预测客户流失方面获得更高的准确性,并洞察影响客户流失的因素。通过研究模型,对于哪些特征影响最大,我们发现了一些有趣的模式:

  • 打开活动。到目前为止,未来是否活动的最大预测因素是从最近一次打开以来的持续时间。这是有道理的,因为这是与我们试图预测的时间方向相反的方向。在最近的时间窗口内打开的次数和最近一次打开距今的时间远近程度在预测谁将要流失方面都起着重要作用。

  • 发送活动。另一个有趣的发现是,接收推送通知对用户保留有积极影响。这又是有道理的,如果您选择接收推送通知,则表明您对该应用表现出积极的兴趣,并且表明了发现其更多价值的开放性。

    来自 Urban Airship 的数据科学和营销团队最近的一项研究说明了这一点。收到至少一个推送通知的用户与没有收到推送消息的用户相比,留存率高出 66%。我们还发现收到的通知数量和保留的天数之间的关系,用户收到的消息越多,他们继续使用应用的时间越长。与打开次数一样,通知发送的距今的时间远近和频率在模拟客户流失活动中起到了作用。

扩展模型

现在我们创建了一个可工作模型,下一步就是测试它扩展到数千个应用和数十亿用户的能力。添加更多的应用很快暴露出一个弱点:将数据从 csv(从 MapReduce 作业的输出创建我们的特征数据)重新处理为稀疏矩阵(提升树模型所需的格式)。

由于内存问题,此处理步骤导致作业失败。增加计算资源可以暂时解决问题,但是随着我们添加更多的应用,我们需要重新思考我们的策略。在开发阶段写入 csv 非常有用,因为我们可以仔细检查我们的工作。但除了人类可读,使用中间格式没有真正的好处。

我们直接在 MapReduce 作业内将特征数据重新格式化为稀疏矩阵。到目前为止,通过在 MapReduce 阶段添加更多的机器或者增加建模阶段使用的单机的大小,解决了更多的内存压力。随着格式的变化,我们能够同时训练数千个应用的模型。

模型生产

一旦我们有了一个可扩展的工作模型,下一步就是搞清楚如何最好地向客户提供这些预测。对于模型中的每个用户,我们可以得到一个打分为 0 到 1 的流失概率。分数越高,用户越可能会流失。反之,得分越低,用户越可能会留存。

如果你看一下流失概率的分布,就会发现你的应用的超级粉丝(肯定会回来的)和你的应用将要流失的用户。而在这中间,还有一些混杂的个体,对于他们将要走向哪个方面不太确定。

模型的概念使我们将用户分成三组:高风险组、中风险组和低风险组。通过预测结果来进行推送,我们的客户能够根据他们触达策略的激进程度来调整他们的受众细分。

例如,如果您试图重新接触风险较高的用户,那么如果只包括高风险受众,则可以扩大提供的奖励,或者如果同时包含高风险和中等风险受众,则可以将其缩小。

一旦用户被分类为高风险、中风险或低风险,客户可以通过实时移动数据流立即获取数据,以便在其他系统中进行分析或采取行动,DashBorad 可查看近五周的表现,通过可视化 展示为了将用户从高风险状态转移到低风险状态所做的努力效果如何。

在实际环境中预测

为了说明预测流失如何影响触达策略(反之亦然),这里有几个匿名的 Urban Airship 客户和他们各自的流失评分分布:

 

 

 

以上可视化表示 Urban Airship 三个示例应用的用户流失预测分数直方图。每个条形表示可能流失分数落在指定分数范围内的用户的百分比。颜色代表风险类别:绿色是低风险,黄色是中等风险,红色是高风险。预测于 2017 年 2 月 3 日进行。

比较这些应用,我们可以看到流失预测的用户分布。与大多数用户处于高风险组的应用 B 相比,应用 A 中大多数用户处于低风险组。对于应用 C,我们看到一个双峰分布,其中一大群用户处于高风险组,另一大群用户处于低风险组。

流失预测与应用触达策略有何关系?这三个应用都有大量的受众群体(超过 300 万个独立设备),且都使用消息推送来吸引用户。

但是,这些应用的触达方式存在很大差异。应用 A(低风险应用)有一个非常复杂的触达策略,广泛使用高级功能(即标签、生命周期列表、应用程序内通知、消息中心等),针对受众分群推送,并获得对这些消息的高度参与(通过直接或在影响下打开应用)。

另一方面,应用 B(高风险应用)在进行简单的受众细分后使用非常基本的消息推送策略,偶尔传达给有限的受众,并且几乎没有受众参与。

应用 C(流失分数存在双峰分布的应用)使用了中间策略。他们利用一些高级的参与度特征,如别名、徽章和深度链接,几乎只发送广播信息,推送了这些信息后他们观察到了大量的受众响应。

通过比较流失预测和应用触达策略,我们的客户可以找出哪些地方需要改进,这些改进带来哪些变化,并且可以比较流失分数在每周的变化情况。

对于应用程序 B,我们建议针对更多的受众群体,更频繁地进行消息推送,并将他们的消息推送策略的使用扩展到更多的方式(如应用内消息推送和消息中心), 以及通过标签和指定用户提高触达精准度。

对于应用 C,我们建议不再使用广播推送,转而明确针对高风险的受众。

下一步是什么?

预测性流失使企业能够在正确的时间,正确的渠道将正确的内容送达用户,将用户从要流失的转变为留存的。但这只是数据科学和机器学习能力的开始。不久以后,使用数据自动发送消息通知并改善用户触达效果将是公司的标配。

 

  • Dec 29 / 2017
  • 0
Ideas, Tech

锐眼洞察 | 学了这么久机器学习,你真的了解它的概念吗?

作者:TalkingData 杨慧

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

导语:

本文是对 TalkingData腾云大学执行校长杨慧分享的两个专题的总结,分别介绍了国内外知名学者、媒体对 Machine Learning 和 Business Intelligence 的定义,也谈了杨慧个人的理解。

 

什么是机器学习?

导读:

学习一直是生物具有的特性,在人类身上的表现尤为明显。机器学习,顾名思义,就是让机器(计算机、程序)也具备学习的能力。更精简点来说,就是通过经验提高性能的某类程序。

卡内基梅隆大学(Carnegie Mellon University)的 Tom Michael Mitchell 教授在 1997 年出版的书籍 Machine Learning 中对机器学习进行过很专业的定义,这个定义在学术界内被多次引用。

在这本书中对机器学习的定义为:

假设一个程序能够在任务 T 上,随着经验 E 的添加,效果 P 也能够随之添加,则称这个程序能够从经验中学习。

在大部分情况下,在训练数据达到一定数量之前,越多的训练数据能够使逻辑回归算法的推断越精准。但是如果数据的特征值,也就是描述一条数据的维度越少,那么即使有再多的训练数据,逻辑回归算法也无法非常好地利用。

因此,机器学习的效果与数据的维度密不可分。怎样数字化地表达现实世界中的实体,一直是计算机科学中一个很重要问题,维度越多,描述得越清楚,机器学到的经验越多。

因此,工欲善其事必先利其器,机器学习这种手段不是大数据的价值所在,更广泛的数据维度,占有更多有多维度价值的数据集,才是大数据的价值所在。

 

 

机器学习(ML)是探索学习算法的构建和研究(DAMA DMBOK)。

此外,“机器学习建立具有适应性参数的程序,参数可根据程序收到的数据自动调整。通过适应已经看到的数据,程序能够改善他们的行为。另外程序还对数据进行了概括,这意味着这些程序可以在以前不可见的数据集上执行功能。”(Alejandro Correa Bahnsen)

据 Keith D. Foote 介绍:最基本的机器学习就是使用算法来解析数据,从中学习,然后对世界上的事物做出决定或预测的实践。因此,机器学习使用大量的数据和算法对机器进行“训练”,赋予其学习如何执行任务的能力,而不是用一些特定的指令手工编写软件程序来完成特定的任务。

机器学习同以下概念相结合(DMBOK):

  • 监督学习:基于广义规则;例如,将垃圾邮件从非垃圾邮件中分离出来。

  • 无监督学习:基于识别隐藏模式(即数据挖掘)。

  • 强化学习:基于实现目标(例如,在象棋中击败对手)。

  • 机器学习还包括编程机器,来快速从查询中学习,并适应不断变化的数据集。

机器学习的其他定义还包括:

先进的算法“由许多技术组成(如深度学习、神经网络和自然语言处理,以现有信息的经验为指导)”(Gartner IT 术语表)

“基于数据经验的结果而更新知识库的系统。”(Adrian Bowles)

“数据分析的一种方法,可自动建立分析模型。”(SAS)

内置智能的算法,使用可用的数据来回答问题。(Paramita Ghosh)

“通过解读我们周围的世界的数据,分类以及从成功和失败中学习这些方法,教计算机和我们同样的学习方式。”(Forbes)

人工智能的一个子领域,或是机器使用数据和自学的 AI 领域。(TechRepublic)

用于数字化转换的人工智能。(哈佛商业评论)

企业使用机器学习来:

  • “大幅缩短回答时间,指导组织洞见”(DMBOK)

  • 处理计算机系统的威胁或安全问题

  • 预测或执行预测分析(McKinsey)

  • 赶上数据量的增长(ComputerWorld)

  • 开发 AI 算法中复杂问题自动化(MIT Technology Review)

  • 在提高员工敬业度和提高客户满意度的同时扩大一线增长(Harvard Business Review)

  • 提高编程的效率和速度(James Kobielus)

  • 在多个行业中提升和开发众多不同的用例 (Paramita Ghosh)

什么是商业智能?

导读:

BI 有两层含义:一层是工具类含义-做分析的技术集;一层是职能类含义,做分析的过程。这两者缺一不可。

如果只看到了 BI 的工具类含义,就会误入“工具至上”之路。BI 说到底还是为了业务服务,只有解决了业务痛点问题的 BI 才是 Smart BI。从业务角度来说,BI 解决的问题包括了:决策的正确性(effectiveness)和决策的即时性(efficiency)。

 

 

商业智能(BI)包含了分析、报告不同业务操作的技术和工具。商业智能使用存储在不同数据仓库、数据集市、数据湖泊和其他存储平台中的原始数据,将其转换为可操作的知识/信息资产。内容包括仪表盘,电子表格,数据可视化,报告等等。

“在其更为详尽的用法中,BI 是在指定组织内收集、存储、回收和分析数据资产所必需的所有系统、平台、软件、工艺和技术。因此,BI 是用于战略规划、决策制定、市场调研、客户支持、库存分析、统计报告以及企业在整体运营洞察机制等其他方面的程序和流程。”(Kelle O’Neal&Charles Roe)

如 DAMA DMBOK 所述:

“商业智能有两个含义:首先是指一种旨在了解组织活动和机会的数据分析。这类分析结果用来提高组织的成功;其次,商业智能是支持这种数据分析的一系列技术。商业智能工具可以实现查询、数据挖掘、统计分析、报告、场景建模、数据可视化和仪表盘。 ”

商业智能的其他定义包括:

“包含应用程序,基础架构,工具和最佳实践的一个统称,可以访问和分析信息以改进和优化。”(Gartner IT 词汇表)

 

“BI 的重点在于:在正确的时间基于正确的信息快速高效地做出决策。”(Keith Foote)

软件和服务的杠杆作用,将数据转化为可行的运筹情报、以及组织的战略战术业务决策。(Mary Pratt,CIO)

一个“总括术语,涵盖了围绕商业数据收集,处理和分析的一系列活动。”(美国东北大学 Mikal Khoso)

“一套利用信息管理流程输出进行分析、报告、绩效管理和信息交付的方法,流程,架构和技术。”(Forrester)

“这个术语是指将原始数据转化为企业可以用来做出更好的组织决策的信息的想法、实践和技术。”(BusinessIntelligence)

组织/公司使用商业智能来:

  • 支持操作功能

  • 执行监管要求

  • 获得关于公司、客户和产品的洞见

  • 获得竞争优势

  • 实践描述性,预测性,规定性和实时分析

  • 做出决策或监控进度(Kelle O’Neal)

 

  • Dec 27 / 2017
  • 0
Tech

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

作者:Pedro Domingos

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

转载自:简书

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

译者注:

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

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

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

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

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

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

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

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

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

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

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

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

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

算法1 决策树归纳

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

泛化才是关键

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

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

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

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

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

光有数据还不够

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

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

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

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

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

过拟合有好几副面孔

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

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

图1. 飞镖的偏差和方差

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

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

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

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

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

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

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

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

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

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

高维度直觉失误

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

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

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

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

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

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

理论保证不一定有用

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

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

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

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

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

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

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

特征工程是关键

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

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

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

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

数据多比算法聪明更好

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

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

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

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

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

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

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

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

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

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

学习更多的模型

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

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

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

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

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

简单不意味着准确

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

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

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

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

可表示不意味着可学习

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

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

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

相关并非因果

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

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

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

结论

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

最后,祝你学的开心!

  • Dec 25 / 2017
  • 0
Tech

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

作者:Stefan Franczuk

原文:5 Predictions About the Future of Machine Learning

转载自:开源中国

 

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

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

1. 量子计算(Quantum Computing)

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

相关开源项目推荐:

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

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

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

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

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

相关开源项目推荐:

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

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

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

3. 协同学习(Collaborative Learning)

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

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

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

相关开源项目推荐:

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

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

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

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

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

5. 认知服务(Cognitive Service)

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

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

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

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

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

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

最后

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

参考资料

 

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