姓名:蘆凱 ? ? ?學(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ā)布了新工具的開(kāi)發(fā)者預(yù)覽版本侄榴,這是一款 TensorFlow用于移動(dòng)設(shè)備和嵌入式設(shè)備的輕量級(jí)解決方案。TensorFlow 可以在多個(gè)平臺(tái)上運(yùn)行,從機(jī)架式服務(wù)器到小型 IoT設(shè)備。但是隨著近年來(lái)機(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)
【嵌牛提問(wèn)】什么是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痘煤。
快速:專(zhuān)為移動(dòng)設(shè)備進(jìn)行優(yōu)化,包括大幅提升模型加載時(shí)間猿规,支持硬件加速衷快。
現(xiàn)在,越來(lái)越多移動(dòng)設(shè)備內(nèi)置了專(zhuān)門(mén)的自定義硬件以高效處理機(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 模型张遭,保存在磁盤(pán)中邓萨。
TensorFlow Lite 轉(zhuǎn)換器(TensorFlow Lite Converter):該程序?qū)⒛P娃D(zhuǎn)換成 TensorFlow Lite 文件格式。
TensorFlow Lite 模型文件(TensorFlow Lite Model File):該格式基于 FlatBuffers菊卷,經(jīng)過(guò)優(yōu)化以適應(yīng)最大速度和最小規(guī)模缔恳。
然后將 TensorFlow Lite 模型文件部署到移動(dòng) App 中:
Java API:安卓設(shè)備上適用于 C++ API 的便利封裝。
C++ API:加載 TensorFlow Lite 模型文件洁闰,啟動(dòng)編譯器歉甚。安卓和 iOS 設(shè)備上均有同樣的庫(kù)。
編譯器(Interpreter):使用運(yùn)算符執(zhí)行模型扑眉。解釋器支持選擇性加載運(yùn)算符纸泄;沒(méi)有運(yùn)算符時(shí)赖钞,編譯器只有 70KB,加載所有運(yùn)算符后聘裁,編譯器為 300KB雪营。這比 TensorFlow Mobile(具備一整套運(yùn)算符)的 1.5M 要小得多。
在選擇的安卓設(shè)備上咧虎,編譯器將使用安卓神經(jīng)網(wǎng)絡(luò) API 進(jìn)行硬件加速卓缰,或者在無(wú)可用 API 的情況下默認(rèn)執(zhí)行 CPU。
開(kāi)發(fā)者還使用 C++ API 實(shí)現(xiàn)自定義 kernel砰诵,它可被解釋器使用。
模型
TensorFlow Lite 已經(jīng)支持多個(gè)面向移動(dòng)端訓(xùn)練和優(yōu)化的模型:
MobileNet:一種能夠識(shí)別超過(guò) 1000 種不同物體的視覺(jué)模型捌显,專(zhuān)為移動(dòng)端和嵌入式設(shè)備設(shè)計(jì)茁彭;
Inception V3:一種圖像識(shí)別模型,功能上類(lèi)似于 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)練過(guò),你可以通過(guò)遷移學(xué)習(xí)輕松地在自己的圖像數(shù)據(jù)集上重新訓(xùn)練這些模型炫欺。
關(guān)于 TensorFlow Mobile API
如你所知乎完,TensorFlow已經(jīng)支持通過(guò) TensorFlow Mobile API 在移動(dòng)端和嵌入端部署模型。進(jìn)一步來(lái)說(shuō)品洛,TensorFlow Lite 可以看作TensorFlow Mobile 的升級(jí)树姨,它成熟之后,就可以作為在移動(dòng)設(shè)備桥状、嵌入設(shè)備上部署模型的首要推薦帽揪。此次公開(kāi)的 TensorFlow Lite 是開(kāi)發(fā)者預(yù)覽版,而 TensorFlow Mobile 依舊支持 APP 開(kāi)發(fā)辅斟。
TensorFlow Lite的適用范圍很廣转晰,并依然處于積極開(kāi)發(fā)之中。通過(guò)這一開(kāi)發(fā)者預(yù)覽版本士飒,我們特意從一個(gè)受限平臺(tái)開(kāi)始查邢,保證其在最重要的常用模型上的性能。我們計(jì)劃優(yōu)先考慮根據(jù)用戶(hù)需求擴(kuò)展未來(lái)的功能变汪。我們持續(xù)開(kāi)發(fā)的目標(biāo)是簡(jiǎn)化開(kāi)發(fā)者體驗(yàn)侠坎,并在一系列移動(dòng)端和嵌入式設(shè)備上實(shí)現(xiàn)模型部署。
我們很高興開(kāi)發(fā)者正上手使用TensorFlow Lite裙盾。我們計(jì)劃以從事 TensorFlow 項(xiàng)目的同樣力度來(lái)支持和維護(hù)外部社區(qū)实胸,并迫不及待想看看TensorFlow Lite 會(huì)帶來(lái)什么他嫡。更多信息請(qǐng)參見(jiàn):http://tensorflow.org/mobile/tflite。
TensorFlow Lite 模型示例
作為T(mén)ensorFlow Lite 庫(kù)的一部分庐完,我們還發(fā)布了一個(gè)設(shè)備端對(duì)話模型和演示 APP钢属,該 APP 提供了一個(gè)基于 TensorFlow Lite的自然語(yǔ)言應(yīng)用。該應(yīng)用有助于開(kāi)發(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)行荷憋。通過(guò)高效的「投影」操作,我們可以將任何輸入轉(zhuǎn)換為緊湊的向量表示褐望,即類(lèi)似的輸入根據(jù)投影的類(lèi)型被投影到密集或稀疏的近鄰向量勒庄。例如消息「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è)類(lèi)型的模型谨读,即緊密的 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)練過(guò)程中塑径,我們能疊加其它如量化或精煉等技術(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ā)布的開(kāi)源會(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)還可以回退到從(通過(guò)對(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è)備端模型。例如纫雁,谷歌開(kāi)發(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)行推理了闲勺。通過(guò)這種方法,我們可以訓(xùn)練尺寸很小的ProjectionNet 模型扣猫,兼顧小尺寸(比常規(guī)模型小幾個(gè)數(shù)量級(jí))與高性能菜循,在一些視覺(jué)和語(yǔ)言分類(lèi)任務(wù)中達(dá)到滿(mǎn)意的效果。
相關(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í)。
在未來(lái)昧穿,谷歌將持續(xù)提升TensorFlow Lite模型的性能勺远,并開(kāi)源更多模型。這些使用機(jī)器學(xué)習(xí)架構(gòu)的模型(以及未來(lái)即將推出的模型)將被很多自然語(yǔ)言處理與計(jì)算機(jī)視覺(jué)應(yīng)用所采用时鸵,嵌入到已有 APP中胶逢,為終端設(shè)備帶來(lái)智能。谷歌希望以此促進(jìn)機(jī)器學(xué)習(xí)與自然語(yǔ)言處理社區(qū)持續(xù)發(fā)展饰潜,讓技術(shù)解決更多問(wèn)題初坠。
Note:目前的設(shè)備端模型是面向小尺寸、低延遲應(yīng)用進(jìn)行訓(xùn)練和優(yōu)化的彭雾,適用于手機(jī)和可穿戴設(shè)備碟刺。在谷歌自有的APP中,智能回復(fù)的預(yù)測(cè)是通過(guò)更大薯酝、更復(fù)雜的模型完成的半沽。在商用化系統(tǒng)中爽柒,谷歌也會(huì)使用多種分類(lèi)器對(duì)不適當(dāng)內(nèi)容進(jìn)行探測(cè),并對(duì)用戶(hù)體驗(yàn)進(jìn)行進(jìn)一步優(yōu)化抄囚。谷歌建議開(kāi)發(fā)者們?cè)谑褂肨ensorFlow Lite 時(shí)也可以遵循這樣的使用范例以達(dá)到更好效果霉赡。