谷歌I/O走進TF開源模型世界:從圖像識別到語義理解
機器之心原創
參與:吳攀、QW
一年一度的谷歌開發者大會 Google I/O 在山景城成功舉行,在首日的 Keynote 中,谷歌宣布了一系列新的硬體、應用、基礎研究等。而作為 AI First 的開發者大會,Google I/O 也自然安排了許多有關機器學習開發的內容,比如《教程 | 如何使用谷歌 Mobile Vision API 開發手機應用》。當然毋庸置疑,TensorFlow 也是本屆 I/O 大會的關鍵核心之一。當地時間 18 日下午,谷歌 TensorFlow 開發者支持 Josh Gordon 帶來了一場主題為《開源 TensorFlow 模型(Open Source TensorFlow Models)》的 Session,介紹了一些最流行的 TensorFlow 模型,並鼓勵了開源。機器之心在本文中對這一 Session 進行了整理介紹,其中部分內容也提供了機器之心文章的參考鏈接,希望能為你的擴展閱讀提供幫助。
演講主題:你知道你可以使用 TensorFlow 來描述圖像、理解文本和生成藝術作品嗎?來這個演講,你體驗到 TensorFlow 在計算機視覺、自然語言處理和計算機藝術生成上的最新項目。我將分享每個領域內我最偏愛的項目、展示你可以在家嘗試的實時演示以及分享你可以進一步學習的教育資源。這個演講不需要特定的機器學習背景。
在進入正題之前,Gordon 先談了談他對可復現的研究(reproducible research)的看法。他說我們現在理所當然地認為我們可以使用深度學習做到很多事情。在 2005 年的時候,他用了 6 個月時間試圖使用神經網路來做基本的圖像分類——識別分辨細胞是否感染了疾病。雖然那時候已經有很多不錯的軟體庫可用了,但他們仍然還是要手動編寫許多神經網路代碼。最後,六個月時間過去了,這些優秀工程師打造的網路才開始在二元分類任務上表現得足夠好一點。
而今天,你再也不需要這麼苦惱了。今天,一個優秀的 Python 開發者加一點 TensorFlow 背景知識,並且願意使用開源的模型,那麼僅需要幾天時間就能實現遠遠超過之前 6 個月所能達到的效果。當然,這要歸功於大學、公司、開發者等慷慨的分享,這也已經為我們的社會帶來了很大的價值。
Gordon 舉了一個例子說明。他說過去 8 個月有三種新的醫學圖像應用都依賴於一種被稱為 Inception 的深度學習神經網路模型,這些應用都實現了非常卓越的表現,有望在人類的生命健康方面提供方便實用的幫助。機器之心對這三種應用都進行過深度報道,參閱:
重磅 | 谷歌研發人工智慧眼科醫生:用深度學習診斷預防失明
學界 | 斯坦福 Nature 論文宣布新突破:深度學習皮膚癌診斷達專家水平
業界 | 谷歌使用深度學習幫助病理學家檢測癌症,演算法得分高達 89%
既然深度學習這麼有用?那麼深度學習是怎麼工作的呢?首先我們先來看看一個可以將圖像分類為「貓」或「狗」的模型。通過這個模型,我們可以看到深度學習與 Gordon 在 2005 年的工作有什麼不同。
Gordon 解釋說,在 2005 年時,為了開發圖像分類器,他編寫了 Python 代碼來提取圖像的特徵。首先他需要構思這個圖像分類器需要怎樣的特徵(比如:線、形狀、顏色),甚至還可能需要 OpenCV 這樣的庫來做人臉檢測。
而使用深度學習時,可以直接為模型輸入原始像素,讓模型自己去尋找分類所需的特徵。「深度學習」之所以被稱為「深度」,是因為它具有多個層,數據在這些層中進行處理,最後得到分類結果,更多介紹可參閱《入門 | 智能時代每個人都應該了解:什麼是深度學習?》
TensorFlow 是由谷歌設計的一個深度學習框架,擁有很多優點,包括快速靈活可擴展的開源機器學習庫、可用於研究和生產、可以運行在 CPU、GPU、TPU、安卓、iOS 和樹莓派等硬體和系統上。
Gordon 將在這個演講中為我們主要解讀以下 4 個重要研究:
當然,一直關注深度學習研究前沿的機器之心也已經對這些研究進行過完整報道:
業界 | 谷歌開放 Inception-ResNet-v2:一種新的圖像分類卷積神經網路模型
業界 | 谷歌發布語言處理框架 SyntaxNet 升級版,識別率提高 25%
業界 | 谷歌 SyntaxNet 模型大升級,為 40 種語言帶來文本分割和詞態分析功能
深度 | 谷歌增強型風格遷移新演算法:實現基於單個網路的多種風格實時遷移(附論文)
此外,Gordon 還提到了一些其它使用 TensorFlow 實現的研究成果;
你想的沒錯,機器之心依然報道過這些研究:
業界 | 谷歌發布神經音頻合成器 NSynth:專註於啟迪音樂創作
資源 | 谷歌官方開源 tf-seq2seq:一種通用編碼器-解碼器框架
重磅|谷歌開源最精確自然語言解析器 SyntaxNet 的深度解讀:一次關鍵進步以及一個重要工具
業界 | Show and Tell:谷歌在 TensorFlow 上開源圖像描述系統
業界 | 谷歌開源新的 TensorFlow 代碼,如何進行文本自動摘要
谷歌的這些研究中有一些仍然是當前最佳的,但他們仍然開源了相關的代碼,任何人都可以免費嘗試復現這些結果。那谷歌為什麼還要開源呢?畢竟有的研究是非常具有商業價值的。Gordon 說:「一個重要的理由是可以激勵別人繼續推進你的想法。」同時,這也能幫助降低開發者的進入門檻,能讓更多人參與進來。
要實現可復現的(reproducible)開源,你需要共享你的代碼和數據集。代碼方面,要做到可復現,你應該共享你所有的代碼,包括訓練、推理和驗證的代碼。數據集方面,你應該說明你所用的數據集,你對數據集的處理方式等等。最好能提供一個試用數據集(toy dataset),讓人們可以輕鬆驗證你的模型。
預訓練的檢查點(pretrained checkpoint)也很重要。pretrained checkpoint 是為了保存模型訓練過程中一些列狀態,這樣其他研究者就可以完全複製之前的研究過程,從而避免被隨機化(在深度學習中極為常見)等其他因素干擾。
Gordon 還談到了 Docker。很多時候,你的開發環境需要大量的依賴包。通過共享一個 Docker 容器,你可以讓其他人快速嘗試你的想法。
開發深度學習模型,當然可以選擇自己寫代碼。在 TensorFlow 中,你可以輕鬆編寫代碼,實現模型。這裡給出了兩個示例:
這段代碼使用 Keras + TensorFlow 的組合。Keras 是用來構建神經網路的 API,它具有簡單高效的特性,允許初學者輕鬆地建立神經網路模型;同時,Keras 也可以使用 TensorFlow 作為運行的後端,極大地加速了開發與訓練的過程。
首先我們使用 Keras 中的 Sequential 類初始化一個用於存放任意層網路的模型,我們可以簡單地認為這個類創建了一個杯子,我們的任務就是用適當的內容將這個杯子填滿。接著在代碼中不斷地調用 add 方法按照順序添加我們需要的神經網路層 (layer)。我們可以看到短短的幾行代碼便可以創建一個 MNIST 神經網路分類器。你只需要專註於以下幾個方面:將數據按照神經網路的輸入(代碼中為一行 model.add(Dense(512, activation="relu", input_shape=(784,)))格式處理好,選擇適當的激活函數(不僅是 relu,你也可以嘗試 tanh 或是 softmax 來快速比較不同激活函數對神經網路結果的影響),是否添加 Dropout 層來減輕學習過程中的過擬合現象。
當模型構建好之後,我們便可以快速地使用 compile 方法來編譯模型,其中的損失函數 loss、優化方法 optimizer 均可以自由選擇。最後,使用類似於 sklearn 機器學習工具包中的 fit 方法即可開始訓練我們的模型。
TensorFlow 有一個非常出色可視化工具 TensorBoard,可以協助你的開發。
除了自己動手開發,你也可以利用別人寫好的代碼,這也是開源的好處,也是本演講所關注的重點。
Inception
Gordon 首先介紹的模型是 Inception。
Inception 的結構
比如如果你想識別一張照片,你可以直接在谷歌的雲平台上直接調用該模型的 API 來幫你完成。當然,你可以通過使用開源模型的方式來實現:
上面的這一點代碼就實現了前面幻燈片上的 Inception 模型,可以看到,代碼量非常少。
這是該模型在 Gordon 自己拍攝的一張照片上所得到的結果。效果不好,主要是因為這個模型所預訓練的數據集來自於 ImageNet。ImageNet 中包含了大量的圖像,但其中大部分都是貓、狗、花、藝術品等等,對上圖照片的場景經驗不足。
而有了合適的數據集,Inception 能得到非常好的表現,甚至能夠分辨出狗的品種。
也許你對識別狗不感興趣,但你也可以用深度學習做其它事情,比如遷移學習。遷移學習的概念很簡單。舉個例子,假如你已經訓練好了一個可以識別狗的模型,但你想要識別上面照片中的城市。如果有遷移學習,你就不需要從頭開始在新數據集上訓練你的模型,你可以去掉你原來模型的最後一層,然後換上新的一層再訓練。這樣就能將原來需要數周的訓練時間減省到了幾十秒。
TensorFlow for Poets 展示這樣實現圖像模型的方式。希望在更多領域看到這樣的例子。實際上,在 https://github.com/tensorflow/models 中,有很多模型公開可用。
你也可以設計你自己的實驗:
接下來,Gordon 對大名鼎鼎的 Deep Dream 進行了介紹。參閱機器之心文章《深度 | 揭秘谷歌 Deep Dream 的前世今生》。
Deep Dream 何以成為可能。Gordon 解釋說,一是因為數據和計算機計算能力的極大增長,而是因為人們設計出了更加有效的演算法,三是這些演算法能自動學習到合適的特徵(feature)。
要提取出圖像的特徵,我們需要用到卷積。卷積就像是一個濾波器。比如下圖,左邊是一張曼哈頓的照片,中間是一個 3×3 的濾波器,右邊是處理後的圖像,只能大概看到一些建築的邊。
隨著層數的增多,模型識別出的特徵會越來越高級:
如果你查看 Deep Dream 的代碼,你會看到很多,下面給出了其中一些關鍵的代碼:首先我們從卷積神經網路中的某一層中選出一些列 filter(不同的 filter 會包含是分不同的特徵:如貓、狗、甚至是梵高的向日葵,這取決於你用什麼內容來訓練),接著利用這些 filter 定義好損失函數,不斷地利用 TensorFlow 中自動求導的功能更新原先的圖片。通過這幾行代碼,我們委託 TensorFlow 不斷地找出原始圖片中的一些區域(這些區域的特徵恰好與某些 filter 匹配),接著 TensorFlow 利用 filter 的信息來修改原始的圖片從而生成 DeepDream 的效果。
使用深度學習,你還能做風格遷移。對此 Gordon 並未做太多介紹,感興趣的讀者可參閱《神經風格遷移研究概述:從當前研究到未來方向(附論文和代碼)》。在這裡,Gordon 順帶提及了一下 Magenta,參閱《深度 | 人工智慧改變 MIDI 創作:谷歌 Magenta 項目是如何教神經網路編寫音樂的?》
風格遷移即是將一張藝術畫作的風格應用到一張照片的內容上,處理流程如下所示:
而且值得注意的是,現在你已經可以實時地給視頻執行風格遷移了!
語言
語言也是一個非常重要的領域。Gordon 將為我們講解 SyntaxNet 系列,其中最新的是 Parsey Saurus,這也是目前最準確的文本處理器之一。同樣,這也是開源的,可以通過 TensorFlow 使用。那麼模型是怎麼處理文本的呢?Gordon 用例子進行了說明。
假設有一個句子「I love NYC.」你可以使用谷歌雲的自然語言 API 來對這個句子進行處理,可以拖拽式地操作。
當然,你也可以在 TensorFlow 中使用 Docker 安裝環境,快速地嘗試 SyntaxNet:
還記得去年的 Parsey McParseface,那是當時最先進的自然語言處理模型,而現在 Parsey Saurus 已經超越了它。這兩者的區別在於 Parsey McParseface 是在詞層面上工作的,而 Parsey Saurus 則是工作在字元的層面上。在字元層面上的學習允許模型更加精細的處理文字,例如可以學習到詞素這樣最小單位的語言信息或是更好地處理生僻的字詞。
使用這些模型,你甚至可以像人一樣分析沒有實際意義語句的結構,比如:「The gostak distims the doshes.」這個句子是毫無意義的,但我們卻能夠理解這個句子的結構。比如說,我們能夠輕鬆理解其中各個詞的詞性,比如我們知道 distims 是動詞,而 gostak 和 doshes 則是名詞。
在 syntaxnet container 中,使用 Interactive Text Analyzer 也能得到同樣的結論。
你也可以詢問 distims 這個動作的執行者是什麼?
Parsey Saurus 還能告訴你更多:
下面列出了對該句子的一些分析結果:
也可以得到該句子的依存樹:
除此之外,你還可以下載在不同語言(40 多種)上預訓練過的模型。這正是開源的價值。
這個有很多非常好的用例。
如果有一個已有的系統,你可以更輕鬆地在這之上實現提升。
你可以將其用作一個新系統的基礎。讓你不需要再重頭開始訓練,就能獲得已有的詞性標註等功能。
然後,Gordon 又簡單介紹了 Release++ 的概念。這個概念來自 Magenta 的博客,表示他們不僅共享了自己的代碼,還提供了預訓練的模型和 Docker 容器。也就是說,你可以直接使用他們的模型達到同樣的效果。
開源為 TensorFlow 帶來的一大優勢是其具有非常多的學習資源,包括許多課程、博客、教程,你可以訪問其官網查閱。另外,這裡 Gordon 推薦了幾個值得關注的:
※GMIS 2017 大會吳思演講:視覺信息處理的動態法則
※GMIS2017Schmidhuber演講:人工智慧改變一切
※GMIS 2017大會鄧力演講:無監督學習的最新進展
※GMIS 2017 馬維英演講:信息流的未來與人工智慧的機會
※GMIS 2017 YinyinLiu:演變的AI與模型俱進
TAG:機器之心 |
※解讀谷歌NASNet:一個大規模圖像識別架構!
※專註圖像識別、光場顯示、VR/AR的IDEALSEE理想境界獲新投資
※ICPR 圖像識別與檢測挑戰賽冠軍方案出爐,基於偏旁部首來識別 Duang 字
※東芝成功研發出面向汽車駕駛員輔助系統的圖像識別人工智慧處理器ViscontiTM5的DNN硬體IP
※如何利用TensorFlow.js部署簡單的AI版「你畫我猜」圖像識別應用
※谷歌AI圖像識別功能Google Lens上線iOS平台 Android版也快了
※一文看懂近年火到不行的CNN圖像識別:從R-CNN到Mask R-CNN
※超越圖像識別,機器看得懂動作!IBM和MIT鼓搗著讓機器識別動態行為
※基於TensorFlow和Keras的圖像識別(第一部分)
※基於TensorFlow和Keras的圖像識別(第二部分)
※並行MAC/減少內存訪問,東芝發布第五代Visconti系列圖像識別SoC
※東芝選用Cadence Tensilica Vision P6 DSP 提高ADAS晶元的圖像識別性能
※python人工智慧-圖像識別
※蘋果更新 iOS 修復特殊字元崩潰問題;黑客入侵特斯拉的公有雲挖掘加密貨幣;谷歌 AI 從視網膜圖像識別心臟病
※Kaggle 圖像識別新賽來襲,還有一家中國企業提供贊助
※圖普科技 CEO 李明強:如何用圖像識別雲服務,建立商業閉環
※學界 | 最大規模數據集、最優圖像識別準確率!Facebook利用hashtag解決訓練數據難題
※Kofax以4億美元收購Nuance旗下圖像部門,強化圖像識別領域領導者地位
※DGX-1 助力清華海峽研究院加速圖像識別
※圖像識別領域四大天王誰最強?谷歌實力碾壓微軟IBM亞馬遜