震惊!谷歌正式发布移动端深度学习框架TensorFlow Lite

今年 5 月,谷歌曾在 I/O 大会上宣布即将推出 TensorFlow Lite,今日,谷歌终于发布了新工具的开发者预览版本,这是一款 TensorFlow 用于移动设备和嵌入式设备的轻量级解决方案。TensorFlow 可以在多个平台上运行,从机架式服务器到小型 IoT 设备。但是随着近年来机器学习模型的广泛使用,出现了在移动和嵌入式设备上部署它们的需求。而 TensorFlow Lite 允许设备端的机器学习模型的低延迟推断。在本文中,TensorFlow 团队将向我们介绍 TensorFlow Lite 的特点,并展示一个可用的轻量级模型。

项目链接:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite

设计初衷:

  • 轻量级:允许小 binary size 和快速初始化/启动的设备端机器学习模型进行推断。
  • 跨平台:运行时的设计使其可以在不同的平台上运行,最先允许的平台是安卓和 iOS。
  • 快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。

现在,越来越多移动设备内置了专门的自定义硬件以高效处理机器学习工作负载。TensorFlow Lite 支持安卓神经网络 API(https://developer.android.com/ndk/guides/neuralnetworks/index.html),以充分利用新的可用加速器。

当加速器硬件不可用时,TensorFlow Lite 返回至经优化的 CPU 执行操作,确保模型仍然可在大量设备上快速运行。

架构

下图展示了 TensorFlow Lite 的架构设计:

组件包括:

  • TensorFlow 模型(TensorFlow Model):训练后的 TensorFlow 模型,保存在磁盘中。
  • TensorFlow Lite 转换器(TensorFlow Lite Converter):该程序将模型转换成 TensorFlow Lite 文件格式。
  • TensorFlow Lite 模型文件(TensorFlow Lite Model File):该格式基于 FlatBuffers,经过优化以适应最大速度和最小规模。

然后将 TensorFlow Lite 模型文件部署到移动 App 中:

  • Java API:安卓设备上适用于 C++ API 的便利封装。
  • C++ API:加载 TensorFlow Lite 模型文件,启动编译器。安卓和 iOS 设备上均有同样的库。
  • 编译器(Interpreter):使用运算符执行模型。解释器支持选择性加载运算符;没有运算符时,编译器只有 70KB,加载所有运算符后,编译器为 300KB。这比 TensorFlow Mobile(具备一整套运算符)的 1.5M 要小得多。
  • 在选择的安卓设备上,编译器将使用安卓神经网络 API 进行硬件加速,或者在无可用 API 的情况下默认执行 CPU。

开发者还使用 C++ API 实现自定义 kernel,它可被解释器使用。

模型

TensorFlow Lite 已经支持多个面向移动端训练和优化的模型:

  • MobileNet:一种能够识别超过 1000 种不同物体的视觉模型,专为移动端和嵌入式设备设计;
  • Inception V3:一种图像识别模型,功能上类似于 MobileNet,但能提供更高的准确率(当然模型也更大);
  • Smart Reply:一种设备端对话模型,能对接收到的会话聊天信息提供触发性应答。第一方和第三方通信 App 可在 Android Wear 上使用该特性。

Inception v3 和 MobileNet 都在 ImageNet 数据集上训练过,你可以通过迁移学习轻松地在自己的图像数据集上重新训练这些模型。

关于 TensorFlow Mobile API

如你所知,TensorFlow 已经支持通过 TensorFlow Mobile API 在移动端和嵌入端部署模型。进一步来说,TensorFlow Lite 可以看作 TensorFlow Mobile 的升级,它成熟之后,就可以作为在移动设备、嵌入设备上部署模型的首要推荐。此次公开的 TensorFlow Lite 是开发者预览版,而 TensorFlow Mobile 依旧支持 APP 开发。

TensorFlow Lite 的适用范围很广,并依然处于积极开发之中。通过这一开发者预览版本,我们特意从一个受限平台开始,保证其在最重要的常用模型上的性能。我们计划优先考虑根据用户需求扩展未来的功能。我们持续开发的目标是简化开发者体验,并在一系列移动端和嵌入式设备上实现模型部署。

我们很高兴开发者正上手使用 TensorFlow Lite。我们计划以从事 TensorFlow 项目的同样力度来支持和维护外部社区,并迫不及待想看看 TensorFlow Lite 会带来什么。更多信息请参见:http://tensorflow.org/mobile/tflite。

TensorFlow Lite 模型示例

作为 TensorFlow Lite 库的一部分,我们还发布了一个设备端对话模型和演示 APP,该 APP 提供了一个基于 TensorFlow Lite 的自然语言应用。该应用有助于开发者和研究人员构建在设备上执行推断的新型机器智能应用。我们这次发布的模型会自动生成建议的回复以作为聊天对话信息的输入,且它还能执行高效的推断以作为插件嵌入聊天应用中,从而可以实现移动设备上的对话智能。

我们发布的这个对话模型使用了一种新型机器学习架构,该架构将基于一种联合优化框架而训练紧凑的神经网络模型或其它机器学习模型。该架构最初是在论文 ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections 中提出,且它能在有限计算力和储存能力的移动设备上高效地运行。通过高效的「投影」操作,我们可以将任何输入转换为紧凑的向量表示,即类似的输入根据投影的类型被投影到密集或稀疏的近邻向量。例如消息「hey, how's it going?」和「How's it going buddy?」就可能被投影到相似的向量表征。

根据这个概念,会话模型在较低的计算力水平和内存占用下结合了这些高效的运算。我们使用一个 ML 框架以端到端的方式训练这个设备上的模型,该框架能联合训练两个类型的模型,即紧密的 Projection 模型和 Trainer 模型。这两个模型以联合的方式进行训练,Projection 模型从 Trainer 模型中学习信息,而 Trainer 模型更像一个导师,它一般使用更大和复杂的 ML 架构进行建模,因此 Projection 就像一个学生从 Trainer 模型中学习它所知道的知识。在训练过程中,我们能叠加其它如量化或精炼等技术而实现更加强大的压缩或选择性地优化目标函数的特定部分。一旦训练完成,较小的投影模型就能直接在移动设备上执行推断了。

至于推断,训练后的投影模型被编译成一系列 TensorFlow Lite 运算符,并被优化以在移动平台上快速执行,或直接在设备上执行。下面是设备端对话模型的 TensorFlow Lite 推断图:

TensorFlow Lite 执行设备端对话模型

今天发布的开源会话模型(包括代码)使用以上提到的联合机器学习架构进行端到端的训练。今天的发布内容还包括了一个演示 APP,从而可以轻松地下载和在你的移动设备上试用一键智能回复。该架构允许基于应用需求对模型尺度和预测质量进行简易配置。你可以在 GitHub 里找到从该模型输出的高质量的对话样本。该系统还可以回退到从(通过对聊天的对话中所观察到的常用应答目的进行学习和编译得到的)一个固定的集合中提供建议的回复。其背后的模型和谷歌在其 app 中使用的智能回复(Smart Reply)是不同的。

超越会话模型

有趣的是,以上所描述的机器学习架构能为背后的模型提供灵活的选择。我们还设计了可兼容不同机器学习方法的架构,例如,当使用 TensorFlow 进行深度学习的时候,我们是为背后的模型学习了一个轻量神经网络(ProjectionNet),然而当用另一个不同的架构(ProjectionGraph)的时候,我们是使用图框架而不是神经网络表示模型。

联合框架也可以为不同机器学习模型架构训练轻量的设备端模型。例如,谷歌开发者推出了一个 ProjectionNet 架构,使用复杂的前馈/循环架构(就像 LSTM)作为训练模型,联合一个简单的投影架构——其中包含动态投影操作以及一些窄带全连接层。整个架构使用反向传播在 TensorFlow 上进行端到端训练,在训练完成后,我们就可以直接使用紧凑的 ProjectionNet 进行推理了。通过这种方法,我们可以训练尺寸很小的 ProjectionNet 模型,兼顾小尺寸(比常规模型小几个数量级)与高性能,在一些视觉和语言分类任务中达到满意的效果。

相关示例可参阅论文《ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections》:https://arxiv.org/abs/1708.00630

同样的,谷歌也为图学习框架训练了其他轻量级模型,甚至引入了半监督学习。

用于设备端模型训练的机器学习架构:ProjectionNet 使用深度学习训练(左),ProjectionGraph 使用图学习训练(右)。

在未来,谷歌将持续提升 TensorFlow Lite 模型的性能,并开源更多模型。这些使用机器学习架构的模型(以及未来即将推出的模型)将被很多自然语言处理与计算机视觉应用所采用,嵌入到已有 APP 中,为终端设备带来智能。谷歌希望以此促进机器学习与自然语言处理社区持续发展,让技术解决更多问题。

Note:目前的设备端模型是面向小尺寸、低延迟应用进行训练和优化的,适用于手机和可穿戴设备。在谷歌自有的 APP 中,智能回复的预测是通过更大、更复杂的模型完成的。在商用化系统中,谷歌也会使用多种分类器对不适当内容进行探测,并对用户体验进行进一步优化。谷歌建议开发者们在使用 TensorFlow Lite 时也可以遵循这样的使用范例以达到更好效果。

原文发布于微信公众号 - 人人都是极客(rrgeek)

原文发表时间:2017-11-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏上善若水

秘籍0x02基础误差分析

Eyeball 开发集的大小将主要取决于你能够手动分析样本的时间,以及你所拥有的访问数据的权限;

16240
来自专栏AI研习社

Github 项目推荐 | Tensorflow.js 进化建模

这是 Siraj Raval 在 Youtube 上用 Tensorflow.js 实现Evolution建模的代码。

18440
来自专栏AI研习社

比 TensorFlow 云快 46 倍!IBM 用 Snap ML 和 Tesla V100 秀肌肉

AI 研习社按:TensorFlow 的机器学习库可以说大家都已经很熟悉了,但 IBM 的研究人员们表示这都是小意思。

10220
来自专栏AI科技评论

Google正式发布TensorFlow Lite预览版,针对移动/嵌入设备的轻量级解决方案

AI科技评论消息,日前,谷歌正式发布 TensorFlow Lite 开发者预览版,这是针对移动和嵌入式设备的轻量级解决方案。TensorFlow Lite 是...

31870
来自专栏AI科技评论

动态 | 谷歌发布机器学习规则 关于机器学习工程的最佳实践(下)

文章介绍了一种机器学习样式,类似于 Google C++ 样式指南和其他常用的实用编程指南。

8420
来自专栏AI科技评论

深度 | 为了让iPhone实时运行人脸检测算法,苹果原来做了这么多努力

AI 科技评论按:苹果从iOS11开始正式在系统中带有机器学习API,同步提供了许多基于机器学习/深度学习的手机功能。其实这之前苹果就已经做了很多研究和开发,但...

398100
来自专栏AI科技大本营的专栏

TensorFlow AI 新品更易用!联手NVIDIA,支持Swift和JavaScript

整理 | 费棋 天体物理学家使用 TensorFlow 分析开普勒任务中的大量数据,以发现新的行星; 医学研究人员利用 TensorFlow 机器学习技术来评估...

431110
来自专栏人工智能

深度学习轻松学:如何用可视化界面来部署深度学习模型

翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCognition.ai 的创始人。 Deep Cognition (深度认知) 建立的...

41870
来自专栏社区的朋友们

机器学习 DQN 算法在火影手游的实践

AlphaGo的出现,让我对机器学习产生了很大的兴趣,学习了 AnderwNG 大神“史坦福大学公开课:机器学习课程”之后开始尝试自己处理相关问题,并在项目中...

1.9K100
来自专栏非著名程序员

GitHub 上最火,最热门的机器学习和人工智能,数据科学项目

最近,普拉纳夫 · 达尔(Pranav Dar)发文总结了 2018 年 2 月份 Github 上最火的 5 个数据科学和机器学习项目。

12730

扫码关注云+社区

领取腾讯云代金券