終於!谷歌移動端深度學習框架TensorFlow Lite正式發佈

 2017-11-15 10:49:00.0

原標題:終於!谷歌移動端深度學習框架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 時也可以遵循這樣的使用範例以達到更好效果。

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

文章來源:機器之心