339b81efdfdf04dd4f48d629b43daef1
机器学习移动端的峥嵘初现: Core ML 3.0

本文是 WWDC 2018 Session 704 的读后感,其视频及配套 PDF 文稿链接如下:
Core ML 3 Framework
本文会首先回顾 Core ML 的发展历史,其后着重介绍 Core ML 本次的更新和使用场景。

Core ML 发展史

Core ML 是苹果在2017年推出的机器学习框架。旨在为 App 开发提供一套完整的机器学习方案,包括模型获取、模型部署、使用模型三个部分。

其中模型获取在 Create ML 章节中已有深入探讨和介绍,感兴趣的朋友可以查阅机器学习新工具: Create ML App

而模型部署和使用方面,则完全是由 Core ML 负责。Core ML 1.0 的模型可以直接在 Xcode 中导入 App 中,然后自动生成 API 接口。Core ML 2.0 在此基础上,进行了 API 的扩展和改进;对输入量化了权重,对输出增加了定制化精度的功能;模型的神经网络层也可以定制化替换。这一系列的改进使得 Core ML 的灵活性大幅提成、性能更是提高了30%。可以说 Core ML 2.0 做到了更小、更快、定制化的目标。

至此,苹果已经在移动端机器学习领域完成了从0到1的计划。今年 Core ML 3.0 的发展,在笔者看来,则是从1到N的第一步。

Core ML 新功能和使用场景

今年的更新主要有三个:本地模型个性化、神经网络的优化和支持、性能优化和更多种类的数据支持。

本地模型个性化

之前的 Core ML 模型,只能处理普遍的、共性的数据。例如,它可以判断一张照片中的动物是不是狗,但无法针对不同的狗主人,判断照片中的狗是否属于当前使用模型的主人。要解决这个问题,有以下几个方案:

  1. 针对不同的狗主人训练不同的模型。这样做的问题是扩展性太差:如果有10000个狗主人,那这个识别主人的 App 就要发布10000个版本,每个版本有不同的模型,每个用户要去下载各自的版本。这样做显然不现实。

  2. 将照片上传至云端处理。服务器端的模型可以提取相应的特征,然后根据大数据确定狗主人的信息,再将信息返回至移动端。这样做的问题首先是有延时,网络情况会直接影响 App 性能;其次是有隐私泄露的可能,毕竟照片和狗主人的信息会在上传和下载的同时被窃取。

  3. 在本地更新模型,适配不同的用户。所有用户一开始拿到的都是同一个模型,之后模型会根据用户输入的图片,自动更新参数,生成新的本地模型。新的模型会根据当前用户的照片,判断该狗是否属于主人。

Core ML 3.0 目前采取的就是方案3。这样做的唯一疑虑就是性能问题:只能快捷得处理简单任务,复杂的就捉襟见肘。这是由于手机硬件性能和优化不足导致的瓶颈。

具体的实现原理是,苹果在原来的 Core ML 模型中加入了更新接口,用于接收新的输入数据,并更新对应的模型参数,这样就可以生成新的本地化模型。就上文的小狗(狗主人)识别模型为例,现在的 Core ML 3.0 模型有以下4个接口:

// 模型类
class DogClassifier

// 输入类,用于接收带分类数据
class DogClassifierInput

// 输出类,用于输出分类结果
class DogClassifierOutput

// 相比于 Core ML 2.0 新增的输入类,用于接收新的训练数据,用以改变模型参数
class DogClassifierTrainingInput
top Created with Sketch.