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

本文是 WWDC 2018 Session 704 的读后感,其视频及配套 PDF 文稿链接如下:
Core ML 3 Framework。本文会首先回顾 Core ML 的发展历史,其后着重介绍 Core ML 本次的更新和使用场景。
查阅全部 WWDC 2019 专栏内容,点击此处前往小专栏。

Core ML 发展史

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

其中模型获取在 Create ML 章节中已有深入探讨和介绍,感兴趣的朋友可以查阅 WWDC 2018:初探 Create ML

而模型部署和使用方面,则完全是由 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的第一步。


image

Core ML 新功能和使用场景

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

本地模型个性化

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

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

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

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

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

image

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

// 模型类
class DogClassifier

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

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

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

根据新提供的接口,我们可以根据以下步骤更新原来的模型:

// 1. 提供原模型的信息
let bundle = Bundle(for: DogClassifier.self)
let updatableModelURL = bundle.url(forResource: "DogClassifier",
withExtension: "mlmodelc")!

// 2. 提供新的训练数据
let trainingData = prepareTrainingData(from: trainingSamples)

// 3. 开始更新模型
let updateTask = try MLUpdateTask(forModelAt: updatableModelURL,
                                  trainingData: trainingData,
                                  configuration: configuration,
                                  completionHandler: { context in
                                    // 使用新的模型
                                    self.dogClassifier.model = context.model
                                  })
updateTask.resume()

实际模型中更新的只是部分层级:它们必须是全连接的卷积神经网络层,其更新损失经过均方差和交叉熵计算后通过 Adam 和 SGD 方法优化,使得参数变化在一个固定范围,变化比较平稳。

神经网络的优化和支持

苹果的神经网络模型主要是由两部分组成:

  1. 卷积层。负责加权叠加输入数据。简单的讲,就是对于一个数据不同的特征,你要计算出一个结果,就得将这些特征拉到一个维度。卷积层的工作就是把特征一个个提取出来,放在一个向量中。
  2. 激活函数。负责将神卷积层输出的结果(向量)加上一个非线性变换。可以这样理解,这时候所有的特征被揉在一起,最后输出的是一个全局特征值。

Core ML 的模型,原来只能一层层的定向传输数据。现在 Core ML 3.0 增加了动态的神经网络层,可以根据不同条件,进行不同层之间选择性的传输、在固定层之间数据循环传输。目前,Core ML 3.0 可以支持多达100多种神经网络。

苹果现场展示了一款集合声音识别、自然语言处理、声音合成三大模型的应用。首先模型接受一篇长文,然后根据用户的提问,在长文中提取关键信息回答提问。这里 Core ML 3.0 可以将多个神经网络层动态结合形成一个综合性能的模型,可以接收不同类型的数据进行处理并输出精准的结果。


image

性能优化和更多种类数据支持

如往常一样,苹果在 Core ML 3.0 中优化了使用性能,例如用在不同图片分类器中,底层的逻辑被提取出来,做成了引用——这样多个模型就不用每次拷贝同一份底层逻辑,这也使得每个模型的大小缩小了一半左右。


image

基于 Core ML 为自然语言处理定制的 NLP 框架和为图像定制的 Vision 框架也进行了不小的更新。NLP 中,苹果增加了单词的上下文语义理解;Vision中,苹果引入了图片内文字检索和预测图片关注度的显著性预测功能。iOS 13 的图片 App 中,苹果还将 Vision 框架用于图片搜索功能,以提高搜索的准确性和相关度。

最后,本次 Core ML 新增了两种新的数据类型:声音和活动。声音方面,既可以文字转声音、也可以声音转文字,配合 NLP 框架效果更好。使用实例即是苹果自己的 Siri 和 Accessbility 语音功能(用户可以通过语音操控各种 App)。活动方面的应用主要集中在 Apple Watch,通过相关模型可以更好地帮助运动员判断姿势是否正确、是否需要调整训练计划等。

总结

Core ML 3.0 如期而至,WWDC 相关的 Session 由去年的8个增加到了10个。可以说苹果在此稳步投资,其功能的增加和性能的优化使得其使用场景进一步扩大,采用 Core ML 的 App 数量目前也已经增加到了300个以上。相信下一步 Core ML 将会继续专注于多种输入数据和模型之间的联系,例如增加多语种的支持;同时,移动端性能的优化也是其一个重要的方向。可以料想到,Core ML 将会在2年左右成为所有主流 App 的标配。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容