移动端的机器学习-三-

99 阅读37分钟

移动端的机器学习(三)

原文:annas-archive.org/md5/b2afb00edd44c73b679c7855edee1ccf

译者:飞龙

协议:CC BY-NC-SA 4.0

第十章:使用 Google Vision 的移动应用程序

正如我们在第一章,“移动机器学习简介”中看到的,我们知道移动应用程序中的机器学习可以是在设备上实现,也可以使用机器学习云提供商服务实现。有各种机器学习云提供商:

  • Clarifai

  • Google Cloud Vision

  • Microsoft Azure 认知服务

  • IBM Watson

  • Amazon Machine Learning

在本章中,我们将深入探讨 Google Cloud Vision,以了解以下内容:

  • Google Cloud Vision 的功能

  • 如何在 Android 移动应用程序中使用 Google Cloud Vision 标签检测技术来确定相机拍摄的照片是什么。也就是说,我们基本上将图像输入到 Google Cloud Vision 中,看看它如何标记图像。Google Vision 将预测它从移动应用程序接收到的图像,并为图像提供标签。

Google Cloud Vision 的功能

Google Cloud Vision API 包含各种复杂且强大的机器学习模型,有助于执行图像分析。它使用易于使用的 REST API 将图像分类到各种类别。Google Cloud Vision 提供的重要功能包括以下内容:

  • 标签检测:这使我们能够将图像分类到数千个类别。图像可以被分类到各种常见的类别标签,例如动物水果

  • 图像属性检测:这使我们能够从图像中检测单个对象。它还可以检测诸如显著颜色等属性。

  • 人脸检测:这使我们能够从图像中检测人脸。如果图像中有多个面孔,每个面孔都可以单独检测。它还可以检测与面孔相关的一些显著属性,例如戴头盔。

  • Logo 检测:这使我们能够从图像中检测印刷文字。训练了显著的品牌标志,可以检测到。

  • 地标检测:它被训练来检测显著的地标——自然和人工的,因此这些地标是通过 Google Vision 进行检测的。

  • 光学字符识别:即使图像不是英文的,它也能帮助检测图像中的文本。这支持广泛的多种语言。

  • 显式内容检测:这有助于识别内容的类型或内容情感,例如暴力幽默。它使我们能够通过利用可以构建的元数据信息来执行图像的情感分析。

  • 搜索网页:这将在网络上搜索类似图像。

所有这些由 Google Cloud Vision 提供的功能都可以通过调用 Google 提供的简单 RESTful API 来使用。然而,对于它们的使用,每个功能都有一定的费用。也可以使用功能组合。定价详情可以在 Google Cloud Vision 网站上找到:cloud.google.com/vision/

使用 Google Cloud Vision 的示例移动应用程序

在本节中,我们将尝试使用 Google Cloud Vision 的 Android 移动应用程序示例。我们将从手机的相机捕获图像,将图像上传到 Google Cloud Vision,并查看它预测的图像是什么。这将使用 Google Cloud Vision 的标签检测功能,该功能确定上传图像的标签。

标签检测是如何工作的?

视觉 API 可以检测和提取图像中实体信息,涵盖广泛的类别。标签可以识别对象、位置、活动、动物种类、产品等。标签仅以英语返回。

需要确定标签的图像和我们要使用的 Google Vision 功能需要发送到请求 API。功能可以是Google Cloud Vision 功能部分中列出的任何功能,例如标签检测或标志检测。如果需要与图像一起发送任何额外的图像上下文,它可以作为附加参数发送。请求 API JSON 格式在此提供:

{
  "image": {
    object(Image)// Image which needs to be processed.
  },
  "features": [
    {
      object(Feature) //Google Vision Feature that needs to be invoked.
    }
  ],
  "imageContext": {
    object(ImageContext) //additional image context if required.
  },
}

图像对象可以是 base64 编码的字符串,也可以是需要分析的图像的 URL。该 URL 可以是 Google Cloud Storage 图像位置,或公开可访问的图像 URL。

请求的响应将是一个基于请求的功能的注释列表。在我们的案例中,它将是标签注释:

{
 "labelAnnotations": [
 {
 object(EntityAnnotation)
 }
 ],
 "error": {
 object(Status)
 },
}

返回的EntityAnnotation对象将包含图像的标签、预测分数和其他有用信息。所有与输入图像对象匹配的标签都作为包含预测分数的数组列表返回,基于此,我们可以在应用程序中执行所需的推理。

现在我们已经了解了标签检测的基本工作原理,让我们开始创建 Android 应用程序。

前提条件

为了开始探索 Google Vision 并编写使用 Google 视觉公开的服务编写的程序,以下是需要设置的内容,以便我们可以亲自动手:

  • 一个 Google Cloud Platform 账户

  • Google Cloud Console 上的一个项目

  • Android Studio 的最新版本

  • 运行 Android 5.0 或更高版本的移动电话

准备工作

本节提供了在使用我们的移动应用程序开始使用 Google Cloud Vision API 之前我们需要做的关键活动的详细信息:

  1. Google Cloud Vision API 应在 Google Cloud 控制台中启用,并创建一个将在移动应用程序代码中使用的 API 密钥。请执行以下步骤以获取 Cloud Vision API 密钥:

    1. 打开cloud.google.com/vision

    2. 前往控制台。如果您没有试用账户,它将要求您创建一个并完成过程。

    3. 启用计费以获得 300 美元的免费信用额度。一旦我们有了账户,我们就可以进入控制台并完成创建密钥的过程。

    4. 从控制台创建一个项目。

    5. 打开该项目。前往 API 服务 | 搜索云视觉 API 库。

    6. 点击它并启用它。

    7. 前往 API 服务 | 凭据。

    8. 前往凭据 | API 密钥。

    9. 创建 API 密钥。

    10. 复制 API 密钥;这将在移动应用程序代码中使用。

  2. 在移动客户端应用程序中添加使用 Google Cloud Vision API 所需的依赖项。需要 Google API 客户端,因此需要将其添加到客户端项目中。这些需要在 Gradle 构建文件中指定。以下是一个包含关键依赖项的示例 Gradle 文件:

dependencies {
 compile fileTree(include: ['*.jar'], dir: 'libs')
 testCompile 'junit:junit:4.12'
 compile 'com.android.support:appcompat-v7:27.0.2'
 compile 'com.android.support:design:27.0.2'
 compile 'com.google.api-client:google-api-client-android:1.23.0' exclude module: 'httpclient'
 compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient'
 compile 'com.google.apis:google-api-services-vision:v1-rev369-1.23.0'
}

理解应用程序

在本节中,我们将查看源代码的关键流程,以了解从 Android 移动应用程序的角度如何使用 Google Vision API。

Vision 类代表 Google API 客户端的 Cloud Vision。第一步是初始化 Vision 类。我们通过 Builder 来完成,我们指定要使用的传输机制和 JSON 工厂:

Vision.Builder builder = new Vision.Builder(httpTransport, jsonFactory, null); 

下一步是将 API 密钥分配给 Vision Builder,以便它可以开始与云 API 交互。我们创建的密钥如下所示:

VisionRequestInitializer requestInitializer = new VisionRequestInitializer(CLOUD_VISION_API_KEY)
builder.setVisionRequestInitializer(requestInitializer);

最后一步是通过 Vision 实例来调用云 API:

Vision vision = builder.build();

现在我们将捕获一张图片并将其发送到云 API 以检测其标签。通过相机捕获图片的代码是常规的 Android 代码。以下代码提供了如何将图像转换为用于标签检测的 Vision 请求的详细信息:

BatchAnnotateImagesRequest batchAnnotateImagesRequest = new BatchAnnotateImagesRequest();

batchAnnotateImagesRequest.setRequests(new ArrayList<AnnotateImageRequest>() {{ AnnotateImageRequest annotateImageRequest = new AnnotateImageRequest();
 // Add the image
 Image base64EncodedImage = new Image();
 // Convert the bitmap to a JPEG
 // Just in case it's a format that Android understands but Cloud Vision
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream);
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// Base64 encode the JPEG
base64EncodedImage.encodeContent(imageBytes); annotateImageRequest.setImage(base64EncodedImage);
// add the features we want
annotateImageRequest.setFeatures(new ArrayList<Feature>() {{
Feature labelDetection = new Feature(); labelDetection.setType("LABEL_DETECTION"); labelDetection.setMaxResults(MAX_LABEL_RESULTS);
add(labelDetection);
}});
// Add the list of one thing to the request
add(annotateImageRequest);
}});
Vision.Images.Annotate annotateRequest =  vision.images().annotate(batchAnnotateImagesRequest);

Google Cloud Vision 将被作为一个异步任务来调用。从 API 收到的响应将被分析,以提供用户可读格式的数据。以下代码提供了从 Google Vision 收到的响应的详细信息:

 //Formatting the response as a string
 private static String convertResponseToString(BatchAnnotateImagesResponse response) {
 StringBuilder message = new StringBuilder("I found these things:\n\n"); List<EntityAnnotation> labels = response.getResponses().get(0).getLabelAnnotations();
 if (labels != null) {
 for (EntityAnnotation label : labels) {
 message.append(String.format(Locale.US, "%.3f: %s", label.getScore(), label.getDescription()));
 message.append("\n");
 }
 } else {
 message.append("nothing");
 }
 return message.toString();
 }

用户可以查看返回的图像标签。

输出

当一部手机被捕获并发送到视觉 API 时,此部分将显示 Android 应用程序屏幕。可能的标签列在输出屏幕上:

图片

摘要

在本章中,我们探讨了 Google Cloud Vision 的工作原理,以及如何轻松地从移动应用程序中调用它。我们看到了如何轻松地进行复杂的机器学习预测,而无需选择和训练模型。在下一章中,我们将探索移动应用程序领域中机器学习的未来。

第十一章:移动应用程序上机器学习的未来

机器学习ML)需要巨大的计算能力,因此需要专门的处理器。但如果机器学习的力量能够带到缺乏这种处理能力的移动设备上,并且也能在离线模式下工作,那么将会有巨大的机会,以及一个全新的商业类别,包含一系列难以想象的创新有用移动应用程序。客户和业务之间连接的整个方式都将被重塑。

移动设备已经成为人类身体的延伸器官。现在很难找到不带手机的人。如果手机要成为人类的一部分,那么就像眼睛、鼻子、腿等一样,知道我们每天做什么,并习惯了我们的生活方式,以类似的方式,手机也可以理解我们日常生活的方方面面,并揭示许多关键数据点,这些数据点我们可能没有时间自己分析。

此外,一个移动设备可以安装由不同组织提供的许多应用程序,这使得第三方很容易深入了解我们的生活方式、生活模式和深层次秘密,并根据收集到的关键指针采取许多不同的行动。可能会有这样的可能性,不仅会惠及第三方,也可能惠及我们。他们可以尝试让我们意识到我们对自己无知的事情,或者建议更好的方式来完成我们做的某些活动,从而改善我们的生活。可能性无限,留给我们的想象力去思考如何在移动设备上实现和实施机器学习。

我们还看到了物联网的爆炸式增长。这是另一个维度,其中移动设备中的机器学习变得至关重要。定时发送不同信息的传感器可以靠近传感器,而不是传输到服务器。可以使用不同的协议在传感器和移动设备之间进行此类数据交换,并迅速采取及时行动。在这里,同样,可能性无穷无尽,正在发生划时代的创新,而这只是冰山一角。

在本章中,我们将深入了解以下主题:

  • 关键机器学习移动应用程序

  • 关键创新领域

  • 利益相关者的机会——在移动机器学习生态系统中,关键的利益相关者正在做什么?

关键机器学习移动应用程序

在本节中,我们将探讨一些最受欢迎的移动应用程序,并了解它们在移动机器学习领域的应用。

Facebook

Facebook 开发了一个名为 Caffe2Go 的 AI 平台。通过这个工具集,Facebook 最初希望为用户提供丰富的 AI 和 AR 体验。他们允许用户通过设备上的机器学习处理视频和图像,并执行某些任务,而无需将这些视频和图像传输到后端进行复杂的图像和视频处理。他们的风格转换工具包允许用户将一种图像风格的美术品质应用到其他图像和视频中。

Google Maps

Google 推出了 TensorFlow Lite 以及 ML Kit,这些工具使用户能够在移动应用程序中执行移动机器学习。Google Maps 是 Google 的一个经典移动机器学习示例。

Snapchat

Snapchat 正在创新复杂的机器学习算法,这些算法能够感知由摄像头捕获的图像中的面部特征。这些算法试图学习面部特征,然后尝试创建一个带有关键面部特征点的面具。这个面具可以用来与有趣的图形并置,创造出留给用户想象和创造力的图像。

Tinder

Tinder,于 2012 年推出,是一款促进相互感兴趣用户之间沟通的社交应用程序。用户通过左滑或右滑来选择其他用户的照片,并可能与他们匹配。Tinder 引入了一个智能照片功能,利用机器学习算法提高了用户找到合适匹配的能力。这个功能允许用户首先看到最著名的照片,因为底层模型不断通过分析用户的滑动行为来学习和重新排序照片。

Netflix

Netflix 使用机器学习为用户提供高质量的流媒体体验。在移动设备上观看流媒体内容比在其他渠道上复杂得多。Netflix 正在实施复杂的机器学习算法,根据观看的内容来预测网络带宽、缓存需求以及设备的视频适应性需求,以改善和增强流媒体体验。

Oval Money

Oval Money 使用机器学习算法来学习用户的消费模式,以便为最终用户提供储蓄选项。它能够识别常规的重复模式并识别重复付款,以帮助用户节省金钱。

ImprompDo

ImprompDo 是一个时间管理应用程序,它学习用户行为并管理待办事项列表。它根据通过研究用户行为和他们的常规时间表、所在位置等信息,在最佳时间提醒用户处理待办事项列表中的项目。

Dango

Dango 是一个表情符号预测应用程序,它建议适合对话上下文的最合适的表情符号。它使用学习算法来理解不同的情绪和对话的上下文,从而提出及时的表情符号。

Carat

Carat 监控手机上发生的所有活动,并提供节省电池电量的建议。

Uber

Uber 利用机器学习技术帮助为乘客提供预计到达时间和费用。它还帮助为司机提供详细信息和地图,以满足这个预计到达时间。

GBoard

GBoard,谷歌为 iOS 和 Android 开发的移动键盘,使用机器学习来预测用户在真正输入之前将要输入的内容。

关键创新领域

以下部分详细介绍了利用机器学习力量的创新正在发生的某些商业领域。在这方面,已经有不少玩家正在引领潮流。

个性化应用

通过利用通过移动设备提供的各种参数来理解用户行为,并为了个性化目的理解他们的生活模式,这将对用户有价值。当同一个移动应用将要服务于广泛用户群体的用户档案时,如果它能提供最适合使用者的特定功能,这将具有重大价值。这种高级个性化可以通过利用机器学习来实现。

医疗保健

在这里,有各种用例可以帮助跟踪可以跟踪、学习和用于提供医疗保健创新的各种健康参数,例如可以根据移动应用中的图片和声音进行诊断的诊断应用。

通过移动应用跟踪个人定期健康和健身数据的健身跟踪和消费者医疗保健应用可以预防各种与生活方式相关的疾病。

这些移动应用实际上可以通过警报和通知来改变用户行为,并通过监控他们的生活方式来采取所需的任何行动。例如,它们可以建议散步、服药和眨眼。

目标化的促销和营销

移动应用可以用来研究用户行为并跟踪用户偏好,为用户提供目标化的促销。大多数收集的用户信息,如人口统计、使用统计和档案信息,可以使用机器学习算法进行分析,以对特定个人应推广的产品或服务做出可靠的预测。因此,与此一致,目标化的营销和广告可以针对用户。

视觉和音频识别

移动应用可以识别环境和用户环境,并修改设备的音频/视频控制,或根据用户偏好播放合适的音频和视频。

电子商务

具有机器学习智能的移动应用在电子商务领域可以有多种用途。一个这样的例子是零售店内的导航应用,它可以提高商业效益。

室内导航处理的是建筑内的导航。由于在建筑内通常无法接收到 GPS 信号,当需要自动定位时,会使用其他定位技术。在这种情况下,通常会使用 Wi-Fi 或信标(低功耗蓝牙BLE))来创建所谓的室内 GPS。然而,与 GPS 不同的是,它们还允许你确定实际的楼层。大多数应用程序都需要室内路由功能,该功能通过室内导航应用程序精确地引导人们穿过建筑物,并以此自动确定他们的位置——这与我们在汽车中使用的导航系统非常相似。

在许多顶级电子商务网站上,当我们购买某个产品时,会提供产品推荐。这是基于浏览历史、购买历史、用户查询理解、排名和用户喜好确定,结合用户情况、位置、偏好和限制来实现的。

在电子商务中,趋势预测和根据观察到的趋势立即采取行动在销售中起着巨大作用。这两个方面之间的差距可以通过机器学习算法有效地填补。

财务管理

机器学习正在财务管理的每个阶段得到应用。用户投资组合管理、欺诈检测、交易、贷款管理和客户服务是结合用户数据和配置文件可以提供无数机会来以不同方式服务客户并利用机器学习算法的不同阶段。

游戏和娱乐

更真实、更具吸引力的增强虚拟现实,结合机器学习,可以为最终用户提供令人惊叹的个性化游戏和娱乐体验。

通过利用各种参数,例如设备能力、用户偏好和网络能力,通过应用机器学习,可以更高效、更有效地进行内容管理、视频流和内容渲染。

企业应用

那些拥有大量日常重复性活动的企业应用,现在通过提供给企业员工的新见解变得有趣,甚至更有生产力,这些见解实际上可以改善决策并使企业获得更大的价值,从而为企业节省大量资金。

招聘、时间管理、运营和资本支出、旅行以及销售流程可以根据特定用户、客户和地理区域进行定制,利用可用的庞大企业数据,并应用机器学习算法来提出有用的及时预测。

房地产

基于机器、神经网络和增强现实功能强大的可视化软件,当结合使用时,可以通过使客户能够可视化他们的梦想家园并在飞行中根据他们的偏好建模家园,从而显著帮助房地产领域。

宜家已经推出了一款名为宜家空间的应用程序(itunes.apple.com/us/app/ikea-place/id1279244498?mt=8),允许用户可视化他们选择的家具如何融入他们的家中。

同样,Azati 的图像建模应用程序允许用户用其他选择替换现有的墙面覆盖,从而使用户能够立即查看他们选择的覆盖物在计划购买或装饰的样板房上的效果。

农业

通过移动应用程序,可以为农民提供各种解决方案。通过智能手机捕获的土壤和植物图像可以进行分析,以提供有关土壤恢复技术、除草技巧、植物健康控制等方面的有用见解。这些图像可以在各种参数上进行分析,例如土壤缺陷、植物病虫害、缺陷以及土壤中的营养缺乏。可能性无穷无尽,可以扩展到农业的各个步骤,以帮助提高作物产量。

能源

能源行业是应用机器学习后可以带来大量能源节省的领域,从而保护环境并帮助我们走向绿色。

基于用户偏好和可用性,通过移动应用程序控制的机器学习智能家庭可以为每个家庭带来巨大的能源节省。

自动驾驶汽车可以通过优化路线和多人使用同一辆车旅行时的路线和利用,调节速度和能源消耗,从而节省能源。

机器学习还可以用于智能电网及其维护,它可以预测故障点以及故障发生的时间,从而可以采取必要的预防措施。

智能电网是一个包含各种操作和能源措施的电力系统,包括智能电表、智能家电、可再生能源资源和节能资源。电力生产和分配的电子功率调节和控制是智能电网的重要方面。它是一个使用数字通信技术检测和响应本地使用变化的电力供应网络。

移动安全

机器学习可用于面部识别工具,这些工具可能用于移动设备中应用程序的认证和授权。

微软、谷歌和其他公司正在大力开展这项工作,以保护他们的操作系统以及这些操作系统中的移动应用程序免受安全威胁。

谷歌也推出了一种名为群体分析的机器学习算法。该算法通过跟踪那些没有必要收集或发送数据的应用程序,帮助识别谷歌应用商店中的有害应用。

Zimperium 的 Z9 软件是利用机器学习实现移动安全性的移动设备恶意软件检测软件的例子。

利益相关者的机会

本节提供了关于该领域关键利益相关者的详细信息,他们贡献并决定了机器学习在移动设备上的成功和普及。它探讨了他们如何贡献于移动机器学习,以及他们各自正在进行的创新,以增加移动机器学习的接受度并使其广泛传播。

硬件制造商

硬件是执行机器学习移动应用程序的基础平台。机器学习在处理单元和内存方面有特定的要求,以便运行复杂的机器学习算法。直到最近,硬件限制是推动大多数机器学习处理在无处理单元或内存限制的后端服务器上进行的其中一个原因。但现在,大多数设备制造商都在进行突破性的创新,使硬件适合运行移动设备上的机器学习应用程序:

  • 苹果已经为其 iPhone X 的主芯片组设计了并构建了一个神经引擎,用于处理复杂的由机器学习驱动的图像处理。

  • 在 Pixel 2 设备中,谷歌还构建了一套定制的芯片组,以满足机器学习(ML)的需求。

  • 华为的 Mate 10 也内置了神经网络处理单元。

  • ARM 启动了一个项目,旨在创建一个由人工智能驱动的智能芯片,这将允许移动设备在离线时继续运行机器学习算法。这将减少数据流量,加快处理速度,同时节省电池消耗。

  • 高通也在与 ARM 合作,生产下一代移动设备,使机器学习算法能够高效运行。

移动操作系统供应商

移动操作系统,如 iOS 和 Android,以及微软的 Windows 移动操作系统,都在满足在移动设备上运行移动机器学习算法的需求。操作系统本身已经集成了各种功能来支持移动机器学习。

第三方移动机器学习 SDK 提供商

正如我们在本书中所见,有各种 SDK 可供程序员创建移动机器学习程序:

  • TensorFlow Lite

  • Caffe2Go

  • Core ML

  • ML Kit

  • 弗里茨

我们已经探讨了这些 SDK 的高级架构,并在本书中使用了前面提到的每个 SDK 编写了示例移动机器学习应用程序。

在移动机器学习技术赋能的以下领域,所有人都有机会:

  • 就像混合移动应用程序开发一样,混合机器学习模型开发也可能存在一种方法,可以使用通用语言来开发这些机器学习模型

  • 在模型部署和现场部署的机器学习模型的升级方面存在许多问题

  • 在监控现场机器学习模型性能和使用的方面有许多需要改进的地方

  • 在这些 SDK 中支持许多机器学习算法需要做大量的工作

  • 现在,主要只从移动设备上进行模型的预测和使用;训练也可以在移动设备上通过设备端训练启用进行。

机器学习移动应用程序开发者

作为移动应用程序开发者,你面前有一个巨大的机会,可以在这个领域创造突破性和创新性的解决方案。可能性无穷无尽,实施方法也如本章示例所示得到了简化。如果你在移动应用程序开发方面有很好的了解,并且能够对机器学习算法有一个基本的概念,你就可以将它们用于解决关键问题,并为最终用户提供价值驱动的创新。

摘要

在本章中,我们了解了移动领域机器学习的未来以及它对用户的有用之处。我们还讨论了使用机器学习的不同移动应用程序,包括 Facebook、Netflix 和 Google Maps。

我们还看到了各种商业领域如何使用机器学习应用程序,以及使用移动设备在机器学习领域中的利益相关者所存在的各种机会。

第十二章:问答

在本附录中,我们将探讨章节中未涵盖的概念和要点,但这些都是全面理解和欣赏移动机器学习所必需的。我们将关注可能出现在你心中的问题,并尝试回答与此领域相关的问题。

常见问题解答

我们将把常见问题解答组织成三个基本部分:

  • 第一部分将探讨更通用的、与数据科学、机器学习等相关的问题。

  • 第二部分将探讨与不同移动机器学习框架相关的具体问题。

  • 第三部分和最后一部分将探讨与移动机器学习项目实施相关的具体问题。

数据科学

在本节中,我们将回答一些与数据科学及其应用相关的问题。

什么是数据科学?

数据科学是从数据中提取相关见解的过程。它是数学、机器学习、计算机编程、统计建模、数据工程和可视化、模式识别和学习、不确定性建模、数据仓库和云计算等多个领域的综合。追求这些领域所需的技能包括工程、数学、科学、统计学、编程、创造力和数据维护与维护。

数据科学在哪里使用?

数据科学用于人工智能AI)和机器学习。它解决复杂的数据问题,揭示在应用之前未知的信息。它揭示了数据之间极端相关且对业务非常有用的未知相关性。

什么是大数据?

大数据通常包括超出常用软件工具捕获、管理和处理能力的数据集。

大数据的特点是 Gartner 在 2001 年提出的三个 V,即:

  • 容量:数据量巨大且在增加

  • 速度:数据积累的速度快且在增加

  • 多样性:被捕获的特征/特性的数量大且在增长

Gartner 在 2012 年的定义是:大数据是高容量、高速度、高多样性信息资产,需要新的处理形式来实现增强决策、洞察发现和流程优化

大数据可以包括大数据系统、大数据分析和大数据集。

什么是数据挖掘?

数据挖掘是检查大型现有数据集并从中提取有用见解的过程。

数据科学与大数据之间的关系

数据科学不一定涉及大数据,但数据规模的增长使得大数据成为数据科学的一个重要方面。

什么是人工神经网络?

人工神经网络ANNs)是受构成动物大脑的生物神经网络启发的计算系统。这些系统不是通过特定的任务规则编程的,而是通过考虑例子来执行任务,例如图像识别。为了识别一朵玫瑰,它通过学习来学习玫瑰的特征,以定义一个样本为玫瑰,而不是通过编程。

什么是 AI?

AI 指的是通过机器模拟人类大脑功能。这是通过创建一个能够展示人类智能的 ANN 来实现的。AI 机器执行的主要人类功能包括逻辑推理、学习和自我纠正。这是一个非常复杂的领域,要使本质上不智能的机器思考和行动像人类一样,需要大量的计算能力和数据输入。

AI 分为两个部分:

  • 通用 AI:使机器在广泛领域变得智能,在思维和推理上类似于人类。这至今尚未实现,并且已经启动了许多正在进行的研究活动。

  • 窄 AI:使机器在特定领域变得智能,如数字识别和国际象棋。这在今天是可能的。

数据科学、AI 和机器学习是如何相互关联的?

了解数据科学、AI 和机器学习之间确切关系的信息是非常有趣且重要的:

  • AI:这个领域试图通过人工方式模拟人类智能。正如人类能够看到、观察他们周围的数据并做出决策一样,同样的尝试正在通过机器进行。这是一个非常广泛的领域。这项技术仍在不断发展。为了通过 AI 完成人类非常容易完成的小任务,需要大量的数据。

  • 机器学习:AI 的一个子集。专注于特定问题领域。这项技术有针对现实生活用例的实现。它是 AI 和数据科学之间的连接桥梁。

  • 数据科学:这是一个数据研究领域,旨在从中提取信息。这可以使用机器学习来分析数据、大数据等:

机器学习框架

在本节中,我们将探讨本书中已经讨论过的几个机器学习框架,以及我们没有讨论过的框架,并对它们提供一些简要的指导。

Caffe2

  • 来自 Facebook 的 Caffe2 是本书未讨论的关键移动机器学习框架之一。更多详情可以从caffe2.ai/获取。

  • Caffe2 是一个深度学习框架,它提供了一个简单直接的方式来实验深度学习,并利用社区对新型模型和算法的贡献。

  • 原始的 Caffe 框架对于大规模产品用例非常有用,尤其是在其无与伦比的性能和经过良好测试的 C++代码库方面。

  • Caffe2 在许多方面是对原始 Caffe 框架的改进。

  • 要理解和开始使用框架编写代码示例,它有一个陡峭的学习曲线。

scikit-learn

  • Scikit-learn 是众所周知的最著名的机器学习包之一,提供了大量常见机器学习算法的高效实现版本。

  • 它不是一个移动机器学习包。然而,使用 scikit-learn 创建的模型可以通过转换工具转换为 Core ML 和 TensorFlow Lite 模型,并直接用于移动应用程序。

  • 它在机器学习算法中具有类似和统一的 API 实现,并且提供了非常全面的辅助文档。

  • 学习 scikit-learn 以及使用它实现和扩展模型非常容易。

  • Scikit-learn 最初由 David Cournapeau 在 2007 年的谷歌夏日代码项目中开发。后来,Matthieu Brucher 加入了项目,并将其作为他论文工作的一部分开始使用。2010 年,INRIA 参与其中,并于 2010 年 1 月底发布了第一个公开版本(v 0.1 beta)。现在,项目拥有超过 30 位活跃的贡献者,并得到了 INRIA、谷歌、Tinyclues 和 Python 软件基金会的赞助。

  • Scikit-learn 通过 Python 中的统一接口提供了一系列监督学习和无监督学习算法。

  • 它遵循宽松的简化版 BSD 许可协议,并在许多 Linux 发行版中分发,鼓励学术和商业使用。

  • 该库建立在 SciPy 之上,您必须先安装 SciPy 才能使用 scikit-learn。

TensorFlow

  • TensorFlow 是一个用于快速数值计算的开源库。它由谷歌创建并维护,并遵循 Apache 2.0 开源许可协议发布。API 使用 Python 编程语言编写,尽管也有访问底层 C++ API 的途径。

  • 有一个针对移动设备的独立版本,我们已经在书中详细讨论过,并在我们的实际动手练习中使用过。

  • 在 TensorFlow 中创建的模型可以用于转换为 TensorFlow 移动和 TensorFlow Lite 模型,并在移动应用程序中使用。

  • TensorFlow 旨在用于研究和开发以及生产系统。它可以在单 CPU 系统、GPU 上运行,以及移动设备和数百台机器的大型分布式系统中。

  • 从数学上讲,张量是一个 n 维向量。它可以用来表示 n 维数据集。"Flow"指的是一个图;该图不能是循环的,图中的每个节点代表一个操作,如加法、减法等。每个操作的结果都会形成一个新的张量。

  • TensorFlow 能够并行评估每个节点,因此消除了在串行模式下等待节点评估的空闲浪费时间。

  • TensorFlow 允许用户利用并行计算设备来加速操作。

Core ML

  • 苹果在 WWDC'17 上发布了 Core ML,今年更新到了 Core ML 2。提醒一下,Core ML 允许开发者将机器学习模型集成到 iOS 和 MacOS 应用中。这是该领域的第一次重大尝试,最初开发者们因为几个原因而非常喜欢它。

  • Core ML 支持多种机器学习模型,包括神经网络、树集成、支持向量机和广义线性模型。Core ML 需要 Core ML 模型格式(具有.mlmodel文件扩展名的模型)。

  • 苹果还提供了转换器,可以将其他几个库中创建的模型转换为 Core ML 格式。由于我们在本书中使用了这些转换器,我们发现这些转换器极其简单易用,并且与大多数著名的现有机器学习库兼容。

  • 苹果还提供了一些流行的开源模型,这些模型已经以 Core ML 模型格式存在,可以直接下载并用于构建我们的应用。

  • Core ML 针对设备性能进行了优化,这最小化了内存占用和功耗。严格在设备上运行也确保了用户数据的安全,即使在没有网络连接的情况下,应用也能运行。

  • Core ML 最大的优势是它极其简单易用。只需几行代码就可以帮助你集成一个完整的机器学习模型。自从 Core ML 发布以来,就有大量使用它的创新项目涌现。然而,Core ML 能做的事情也有局限性。

  • Core ML 只能帮助你将预训练的 ML 模型集成到你的应用中。这意味着你只能进行预测;无法进行模型训练。

  • 到目前为止,Core ML 已被证明对开发者来说极其有用。今年在 WWDC 上宣布的 Core ML 2,应该通过称为量化批量预测的技术将推理时间提高 30%。

移动机器学习项目实施

在本节中,我们将探讨任何机器学习项目实施者在开始项目之前都会考虑的基本问题。

在开始项目之前,需要考虑哪些高级重要事项?

在开始项目之前,需要解决以下高级事项:

  • 根据我们看到的 ML 定义,对问题进行明确定义,为任务 T、性能度量 P 和经验 E 提供清晰的输入。

  • 拥有所需数量的数据可用

  • 设计移动端或基于云的移动机器学习框架的决策

  • 正确选择适合我们需求的机器学习框架

实施移动机器学习项目所需的角色和技能是什么?

可以为移动机器学习项目计划以下技能和角色:

  • 领域专家/专家:对问题、数据、数据中的特征、业务背景等进行输入

  • 机器学习数据科学家:分析数据,进行特征工程和数据预处理,并构建机器学习模型

  • 移动应用程序开发者:利用移动机器学习模型来构建移动应用程序

  • 测试员:测试模型以及移动应用程序

在这里,每个角色都可以通过这本书被其他人学习,并且可以由单个人或多个人执行,以确保移动机器学习项目的成功实施。

测试移动机器学习项目时应该关注什么?

项目中要测试的关键是移动机器学习模型。因此,独立于移动应用程序,模型需要彻底测试。

我们已经看到了在测试机器学习模型时应该关注什么。在测试模型时需要考虑训练数据、测试数据和交叉验证。需要测量所选模型的性能指标。对于每次运行,都需要进行清晰的记录,以便我们清楚地知道对于输入数据特征集的 delta 变化,输出会有什么样的 delta 变化。所有在第一章,《移动机器学习导论》中解释的概念,如准确性、精确度、召回率、错误等,都应该被测试机器学习模型的工程师清楚地理解。此外,对于每种类型的算法,错误和性能度量指标各不相同,在测试模型时应该充分考虑。测试机器学习模型本身就是一个值得写一本书的主题,而这本书中详细讨论的内容超出了范围。

领域专家将如何帮助机器学习项目?

领域专家/专家在任何一个机器学习项目的成功中扮演关键角色,他的具体价值将在以下领域体现:

  • 定义问题陈述并帮助正确理解解决方案的期望

  • 数据准备:

    • 在特征工程中,哪些是好的候选者被选中并保留为预测属性?

    • 如何结合多个目标/属性以帮助解决问题陈述

    • 如何采样以选择测试集和训练集

    • 帮助进行数据清洗

  • 进度监控和结果解释:

    • 定义所需的预测准确度

    • 根据取得的进展,确定是否需要更多数据/附加数据

    • 在中间设置一个检查点,并确定取得的进展是否与定义的问题陈述一致,追求的解决方案是否一致,是否可以继续在同一方向上推进,或者是否有必要采取不同的路径/重新校准方法。

  • 对进度进行持续更新和反馈

机器学习项目中常见的陷阱有哪些?

以下是在任何机器学习项目中常见的一些陷阱:

  • 不切实际的目标,不明确的问题定义,没有适当的目标

  • 数据问题:

    • 建立预测模式的数据不足

    • 预测属性选择不当

    • 数据准备问题

    • 数据归一化问题——未能跨数据集归一化数据

    • 解决问题时数据使用的偏差

  • 机器学习方法选择不当:

    • 选择的机器学习方法不适合定义的问题陈述

    • 不尝试替代算法

  • 过早放弃。这种情况很常见。如果工程师看不到初始结果,无法进行各种依赖因素的排列组合,并且无法对结果进行系统记录,他们往往会失去兴趣。如果持续/有系统地记录并尝试各种可能性,机器学习问题可以轻松解决。

安装

在本节中,我们将介绍设置本书中创建程序所需的不同工具和 SDK 安装程序。

Python

在本书中,我们使用 Python 创建了机器学习模型。因此,您必须知道如何在您的系统中安装 Python,以便通过实际示例进行学习。

访问www.python.org/downloads/

它将显示最新的下载版本;下载安装程序并安装。

在 Windows 上安装时,它会询问是否要将 Python 添加到路径环境变量中。勾选复选框以自动为您完成。否则,您需要手动将其添加到路径变量中。

要检查您的机器上是否已安装 Python,请转到命令提示符或终端,并输入python。它应该显示 Python 提示符。否则,如果您已经将其安装到驱动器中,则需要设置路径变量。

Python 依赖项

Python 默认会附带pip包管理器。您可以使用pip进行安装。语法如下:

pip install package name

关于可用包的更多信息,您可以访问pypi.org/project/pip/。在本书中,我们已在各自的章节中给出了所有依赖项安装命令。

Xcode

首先,在 Apple 上创建一个开发者账户并登录到您的账户developer.apple.com/。点击下载并向下滚动/搜索最新版本的 Xcode,版本号高于 9.4,然后点击下载。它将下载 XZIP 文件。将其提取出来,并通过将其拖动到应用程序文件夹中在您的 Mac 机器上安装。

参考文献

以下是一些您可以参考的参考文献,以了解更多关于在移动设备上进行机器学习的知识: