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

选自Google

机器之心编译

机器之心编辑部

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

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

设计初衷:

  • 轻量级:允许小 binary size 和快速初始化/启动的设备端机器学习模型进行推断。

  • 跨平台:运行时的设计使其可以在不同的平台上运行,最先允许的平台是安卓和 iOS。

  • 快速:专为移动设备进行优化,包括大幅提升模型加载时间,支持硬件加速。

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

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

    架构

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

    终于!谷歌移动端深度学习框架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 推断图:

    终于!谷歌移动端深度学习框架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》:http://arxiv.org/abs/1708.00630

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

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

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

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

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

    原文链接:http://developers.googleblog.com/2017/11/announcing-tensorflow-lite.html

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

    点击「阅读原文」,参与 NIPS 2017 线上分享第二期。