姓名:蘆凱 ? ? ?學(xué)號(hào):17011210546
轉(zhuǎn)載自:公眾號(hào)“機(jī)器之心”,原文鏈接:https://mp.weixin.qq.com/s/V5XvXw7Aagf_EWkLlj4h7g
【嵌牛導(dǎo)讀】今年 5 月,谷歌曾在 I/O大會(huì)上宣布即將推出 TensorFlow Lite,今日,谷歌終于發(fā)布了新工具的開發(fā)者預(yù)覽版本,這是一款 TensorFlow用于移動(dòng)設(shè)備和嵌入式設(shè)備的輕量級(jí)解決方案。TensorFlow 可以在多個(gè)平臺(tái)上運(yùn)行,從機(jī)架式服務(wù)器到小型 IoT設(shè)備。但是隨著近年來機(jī)器學(xué)習(xí)模型的廣泛使用,出現(xiàn)了在移動(dòng)和嵌入式設(shè)備上部署它們的需求。而 TensorFlow Lite允許設(shè)備端的機(jī)器學(xué)習(xí)模型的低延遲推斷。在本文中,TensorFlow 團(tuán)隊(duì)將向我們介紹 TensorFlow Lite的特點(diǎn),并展示一個(gè)可用的輕量級(jí)模型。
【嵌牛鼻子】機(jī)器學(xué)習(xí),輕量級(jí)模型,谷歌,多平臺(tái)
【嵌牛提問】什么是TensorFlow Lite?
【嵌牛正文】
設(shè)計(jì)初衷:
輕量級(jí):允許小 binary size 和快速初始化/啟動(dòng)的設(shè)備端機(jī)器學(xué)習(xí)模型進(jìn)行推斷。
跨平臺(tái):運(yùn)行時(shí)的設(shè)計(jì)使其可以在不同的平臺(tái)上運(yùn)行,最先允許的平臺(tái)是安卓和 iOS。
快速:專為移動(dòng)設(shè)備進(jìn)行優(yōu)化,包括大幅提升模型加載時(shí)間,支持硬件加速。
現(xiàn)在,越來越多移動(dòng)設(shè)備內(nèi)置了專門的自定義硬件以高效處理機(jī)器學(xué)習(xí)工作負(fù)載。TensorFlow
Lite 支持安卓神經(jīng)網(wǎng)絡(luò)API(https://developer.android.com/ndk/guides/neuralnetworks/index.html),以充分利用新的可用加速器。
當(dāng)加速器硬件不可用時(shí),TensorFlow Lite 返回至經(jīng)優(yōu)化的 CPU 執(zhí)行操作,確保模型仍然可在大量設(shè)備上快速運(yùn)行。
架構(gòu)
下圖展示了 TensorFlow Lite 的架構(gòu)設(shè)計(jì):

組件包括:
TensorFlow 模型(TensorFlow Model):訓(xùn)練后的 TensorFlow 模型,保存在磁盤中。
TensorFlow Lite 轉(zhuǎn)換器(TensorFlow Lite Converter):該程序?qū)⒛P娃D(zhuǎn)換成 TensorFlow Lite 文件格式。
TensorFlow Lite 模型文件(TensorFlow Lite Model File):該格式基于 FlatBuffers,經(jīng)過優(yōu)化以適應(yīng)最大速度和最小規(guī)模。
然后將 TensorFlow Lite 模型文件部署到移動(dòng) App 中:
Java API:安卓設(shè)備上適用于 C++ API 的便利封裝。
C++ API:加載 TensorFlow Lite 模型文件,啟動(dòng)編譯器。安卓和 iOS 設(shè)備上均有同樣的庫。
編譯器(Interpreter):使用運(yùn)算符執(zhí)行模型。解釋器支持選擇性加載運(yùn)算符;沒有運(yùn)算符時(shí),編譯器只有 70KB,加載所有運(yùn)算符后,編譯器為 300KB。這比 TensorFlow Mobile(具備一整套運(yùn)算符)的 1.5M 要小得多。
在選擇的安卓設(shè)備上,編譯器將使用安卓神經(jīng)網(wǎng)絡(luò) API 進(jìn)行硬件加速,或者在無可用 API 的情況下默認(rèn)執(zhí)行 CPU。
開發(fā)者還使用 C++ API 實(shí)現(xiàn)自定義 kernel,它可被解釋器使用。
模型
TensorFlow Lite 已經(jīng)支持多個(gè)面向移動(dòng)端訓(xùn)練和優(yōu)化的模型:
MobileNet:一種能夠識(shí)別超過 1000 種不同物體的視覺模型,專為移動(dòng)端和嵌入式設(shè)備設(shè)計(jì);
Inception V3:一種圖像識(shí)別模型,功能上類似于 MobileNet,但能提供更高的準(zhǔn)確率(當(dāng)然模型也更大);
Smart Reply:一種設(shè)備端對(duì)話模型,能對(duì)接收到的會(huì)話聊天信息提供觸發(fā)性應(yīng)答。第一方和第三方通信 App 可在 Android Wear 上使用該特性。
Inception v3 和 MobileNet 都在 ImageNet 數(shù)據(jù)集上訓(xùn)練過,你可以通過遷移學(xué)習(xí)輕松地在自己的圖像數(shù)據(jù)集上重新訓(xùn)練這些模型。
關(guān)于 TensorFlow Mobile API
如你所知,TensorFlow已經(jīng)支持通過 TensorFlow Mobile API 在移動(dòng)端和嵌入端部署模型。進(jìn)一步來說,TensorFlow Lite 可以看作TensorFlow Mobile 的升級(jí),它成熟之后,就可以作為在移動(dòng)設(shè)備、嵌入設(shè)備上部署模型的首要推薦。此次公開的 TensorFlow Lite 是開發(fā)者預(yù)覽版,而 TensorFlow Mobile 依舊支持 APP 開發(fā)。
TensorFlow Lite的適用范圍很廣,并依然處于積極開發(fā)之中。通過這一開發(fā)者預(yù)覽版本,我們特意從一個(gè)受限平臺(tái)開始,保證其在最重要的常用模型上的性能。我們計(jì)劃優(yōu)先考慮根據(jù)用戶需求擴(kuò)展未來的功能。我們持續(xù)開發(fā)的目標(biāo)是簡(jiǎn)化開發(fā)者體驗(yàn),并在一系列移動(dòng)端和嵌入式設(shè)備上實(shí)現(xiàn)模型部署。
我們很高興開發(fā)者正上手使用TensorFlow Lite。我們計(jì)劃以從事 TensorFlow 項(xiàng)目的同樣力度來支持和維護(hù)外部社區(qū),并迫不及待想看看TensorFlow Lite 會(huì)帶來什么。更多信息請(qǐng)參見:http://tensorflow.org/mobile/tflite。
TensorFlow Lite 模型示例
作為TensorFlow Lite 庫的一部分,我們還發(fā)布了一個(gè)設(shè)備端對(duì)話模型和演示 APP,該 APP 提供了一個(gè)基于 TensorFlow Lite的自然語言應(yīng)用。該應(yīng)用有助于開發(fā)者和研究人員構(gòu)建在設(shè)備上執(zhí)行推斷的新型機(jī)器智能應(yīng)用。我們這次發(fā)布的模型會(huì)自動(dòng)生成建議的回復(fù)以作為聊天對(duì)話信息的輸入,且它還能執(zhí)行高效的推斷以作為插件嵌入聊天應(yīng)用中,從而可以實(shí)現(xiàn)移動(dòng)設(shè)備上的對(duì)話智能。
我們發(fā)布的這個(gè)對(duì)話模型使用了一種新型機(jī)器學(xué)習(xí)架構(gòu),該架構(gòu)將基于一種聯(lián)合優(yōu)化框架而訓(xùn)練緊湊的神經(jīng)網(wǎng)絡(luò)模型或其它機(jī)器學(xué)習(xí)模型。該架構(gòu)最初是在論文 ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections 中提出,且它能在有限計(jì)算力和儲(chǔ)存能力的移動(dòng)設(shè)備上高效地運(yùn)行。通過高效的「投影」操作,我們可以將任何輸入轉(zhuǎn)換為緊湊的向量表示,即類似的輸入根據(jù)投影的類型被投影到密集或稀疏的近鄰向量。例如消息「hey,how's it going?」和「How's it going buddy?」就可能被投影到相似的向量表征。
根據(jù)這個(gè)概念,會(huì)話模型在較低的計(jì)算力水平和內(nèi)存占用下結(jié)合了這些高效的運(yùn)算。我們使用一個(gè)ML 框架以端到端的方式訓(xùn)練這個(gè)設(shè)備上的模型,該框架能聯(lián)合訓(xùn)練兩個(gè)類型的模型,即緊密的 Projection 模型和 Trainer模型。這兩個(gè)模型以聯(lián)合的方式進(jìn)行訓(xùn)練,Projection 模型從 Trainer 模型中學(xué)習(xí)信息,而 Trainer模型更像一個(gè)導(dǎo)師,它一般使用更大和復(fù)雜的 ML 架構(gòu)進(jìn)行建模,因此 Projection 就像一個(gè)學(xué)生從 Trainer模型中學(xué)習(xí)它所知道的知識(shí)。在訓(xùn)練過程中,我們能疊加其它如量化或精煉等技術(shù)而實(shí)現(xiàn)更加強(qiáng)大的壓縮或選擇性地優(yōu)化目標(biāo)函數(shù)的特定部分。一旦訓(xùn)練完成,較小的投影模型就能直接在移動(dòng)設(shè)備上執(zhí)行推斷了。

至于推斷,訓(xùn)練后的投影模型被編譯成一系列 TensorFlow Lite 運(yùn)算符,并被優(yōu)化以在移動(dòng)平臺(tái)上快速執(zhí)行,或直接在設(shè)備上執(zhí)行。下面是設(shè)備端對(duì)話模型的 TensorFlow Lite 推斷圖:

今天發(fā)布的開源會(huì)話模型(包括代碼)使用以上提到的聯(lián)合機(jī)器學(xué)習(xí)架構(gòu)進(jìn)行端到端的訓(xùn)練。今天的發(fā)布內(nèi)容還包括了一個(gè)演示APP,從而可以輕松地下載和在你的移動(dòng)設(shè)備上試用一鍵智能回復(fù)。該架構(gòu)允許基于應(yīng)用需求對(duì)模型尺度和預(yù)測(cè)質(zhì)量進(jìn)行簡(jiǎn)易配置。你可以在 GitHub里找到從該模型輸出的高質(zhì)量的對(duì)話樣本。該系統(tǒng)還可以回退到從(通過對(duì)聊天的對(duì)話中所觀察到的常用應(yīng)答目的進(jìn)行學(xué)習(xí)和編譯得到的)一個(gè)固定的集合中提供建議的回復(fù)。其背后的模型和谷歌在其app 中使用的智能回復(fù)(Smart Reply)是不同的。
超越會(huì)話模型
有趣的是,以上所描述的機(jī)器學(xué)習(xí)架構(gòu)能為背后的模型提供靈活的選擇。我們還設(shè)計(jì)了可兼容不同機(jī)器學(xué)習(xí)方法的架構(gòu),例如,當(dāng)使用TensorFlow進(jìn)行深度學(xué)習(xí)的時(shí)候,我們是為背后的模型學(xué)習(xí)了一個(gè)輕量神經(jīng)網(wǎng)絡(luò)(ProjectionNet),然而當(dāng)用另一個(gè)不同的架構(gòu)(ProjectionGraph)的時(shí)候,我們是使用圖框架而不是神經(jīng)網(wǎng)絡(luò)表示模型。
聯(lián)合框架也可以為不同機(jī)器學(xué)習(xí)模型架構(gòu)訓(xùn)練輕量的設(shè)備端模型。例如,谷歌開發(fā)者推出了一個(gè)ProjectionNet 架構(gòu),使用復(fù)雜的前饋/循環(huán)架構(gòu)(就像LSTM)作為訓(xùn)練模型,聯(lián)合一個(gè)簡(jiǎn)單的投影架構(gòu)——其中包含動(dòng)態(tài)投影操作以及一些窄帶全連接層。整個(gè)架構(gòu)使用反向傳播在 TensorFlow上進(jìn)行端到端訓(xùn)練,在訓(xùn)練完成后,我們就可以直接使用緊湊的 ProjectionNet 進(jìn)行推理了。通過這種方法,我們可以訓(xùn)練尺寸很小的ProjectionNet 模型,兼顧小尺寸(比常規(guī)模型小幾個(gè)數(shù)量級(jí))與高性能,在一些視覺和語言分類任務(wù)中達(dá)到滿意的效果。
相關(guān)示例可參閱論文《ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections》:https://arxiv.org/abs/1708.00630
同樣的,谷歌也為圖學(xué)習(xí)框架訓(xùn)練了其他輕量級(jí)模型,甚至引入了半監(jiān)督學(xué)習(xí)。

在未來,谷歌將持續(xù)提升TensorFlow Lite模型的性能,并開源更多模型。這些使用機(jī)器學(xué)習(xí)架構(gòu)的模型(以及未來即將推出的模型)將被很多自然語言處理與計(jì)算機(jī)視覺應(yīng)用所采用,嵌入到已有 APP中,為終端設(shè)備帶來智能。谷歌希望以此促進(jìn)機(jī)器學(xué)習(xí)與自然語言處理社區(qū)持續(xù)發(fā)展,讓技術(shù)解決更多問題。
Note:目前的設(shè)備端模型是面向小尺寸、低延遲應(yīng)用進(jìn)行訓(xùn)練和優(yōu)化的,適用于手機(jī)和可穿戴設(shè)備。在谷歌自有的APP中,智能回復(fù)的預(yù)測(cè)是通過更大、更復(fù)雜的模型完成的。在商用化系統(tǒng)中,谷歌也會(huì)使用多種分類器對(duì)不適當(dāng)內(nèi)容進(jìn)行探測(cè),并對(duì)用戶體驗(yàn)進(jìn)行進(jìn)一步優(yōu)化。谷歌建議開發(fā)者們?cè)谑褂肨ensorFlow Lite 時(shí)也可以遵循這樣的使用范例以達(dá)到更好效果。