十年雲計算老兵零基礎進軍深度學習的方法論

十年雲計算老兵零基礎進軍深度學習的方法論
做者|曹亞孟
編輯|Vincent
AI前線出品| ID:ai-front

人工智能是當今的熱議行業,深度學習是熱門中的熱門,浪尖上的浪潮,但對傳統 IT 從業人員來講,人工智能技術處處都是模型、算法、矢量向量,太晦澀難懂了。因此本文做者寫了這篇入門級科普文章,目標是讓 IT 從業者能看清讀懂深度學習技術的特色,但願讀者可以從中受益,順利找到本身心儀的工做。算法

第一. 人工智能的天時地利人和

行業的成熟要靠從業者的奮鬥(人和), 也要考慮大環境和歷史的進程(天時和地利)。數據庫

人工智能技術的井噴並非單純的技術進步,而是軟件、硬件、數據三方面共同努力水到渠成的結果,深度學習是 AI 技術的最熱分支,也是受這三方面條件的限制。服務器

AI 軟件所依賴的算法已經存在不少年了,神經網絡是 50 年前提出的技術,CNN/RNN 等算法比大部分讀者的年齡都要大。AI 技術一直被束之高閣,是由於缺少硬件算力和海量數據。隨着 CPU、GPU、FPGA 硬件的更新,幾十年時間硬件算力擴充了萬倍,硬件算力被逐漸解放。隨着硬盤和帶寬的降價提速,20 年前全人類都沒幾張高清照片,如今單個公司的數據量就能達到 EB 級。大數據技術只能讀寫結構化日誌,要讀視頻和圖片必須用 AI,人類已經盯不過來這麼多攝像頭了。微信

咱們只有從內心把 AI 技術請下神壇,才能把它當作順手的工具去用。AI 的技術很深理論很晦澀,主要是這個行業剛剛發芽還未分層,就像 20 年前 IT 工程師須要全面掌握技能,如今的小朋友們連字符集都不用關注。網絡

第二. 關聯度模型

深度學習有兩步工做,先要訓練生成模型,而後使用模型去推測當前的任務。架構

好比說我用 100 萬張圖片標記好這是貓仍是狗,AI 把圖片內各個片斷的特徵提取出來,生成一個貓狗識別模型。而後咱們再給這個模型套上接口作成貓狗檢測程序,每給這個程序一張照片它就能告訴你有多大概率是貓多大概率是狗。運維

這個識別模型是整個程序中最關鍵的部分,能夠模糊的認爲它就是一個密封黑盒的識別函數。之前咱們寫程序都是作 if-then-else 因果判斷,但圖像特徵沒有因果關係只看關聯度,過去的工做經驗反而成了新的認知障礙,還不如就將其當作黑盒直接拿來用。分佈式

接下來我放一個模型訓練和推測的實驗步驟截圖,向你們說明兩個問題:函數

  1. 須要用客戶的現場數據作訓練才能出模型,訓練模型不是軟件外包堆人日就行,很難直接承諾模型訓練結果。
  2. 訓練模型的過程很繁瑣耗時,但並不難以掌握,其工做壓力比 DBA 在線調試 SQL 小多了,IT 工程師在 AI 時代仍有用伍之地。

第三. 動手實驗

本節較長,若是讀者對實驗步驟和結果沒興趣,而是直接想看個人結論,也能夠跳過這一節。工具

這個實驗是 Nvidia 提供的入門培訓課程——ImageClassification with DIGITS - Training a model。

咱們的實驗很簡單,用 6000 張圖片去訓練 AI 識別 0-9 這幾個數字。

訓練樣本數據是 6000 張標號 0-9 的小圖片,其中 4500 張是用來作訓練(train),1500 張是驗證(val)訓練結果。

實驗數據準備

訓練圖片很小也很簡單,以下圖預覽,就是一堆數字:

-- 下圖是 01 樣本圖片 --


我作測試的圖片是官方教程提供了個白底紅字的「2」.

-- 下圖是 02 測試圖片 --


製做數據集

首先咱們要作一個圖片識別的數據集,數據集文件放在「/data/train_small」目錄下,圖片的類型選擇「Grayscale」,大小選 28x28,其餘都選默認,而後選擇建立數據集「minidata」。

-- 下圖是 03 初始數據集 --


下面是數據集建立的過程,由於咱們的文件很小不多,因此速度很快;若是是幾千萬張高清大圖速度就會很慢,甚至要搭建分佈式系統把 IO 分散到多臺機器上。

-- 下圖是 04 初始數據集中 --


這是建立完成數據集的柱形統計圖,鼠標剛好停在第二個柱形上,顯示當前標記爲「9」的圖片有 466 個。

-- 下圖是 05 建立完成數據集 --


開始建立模型

有了數據集之後咱們就能夠建立模型了,咱們選擇建立一個圖像分類模型(Image Classification Model),數據集選以前建立的「minidata」,訓練圈數輸 30 次,其餘選項暫時保持默認。

-- 下圖是 06 新建模型 --


到了建立模型的下半段是選擇網絡構型,咱們選擇 LeNet 便可,將模型命名爲 TestA。

-- 下圖是 07 選擇 LeNet --


此次 Demo 咱們沒作細節設置,但生產環境可能要常常修改配置文件。

-- 下圖是 08 微調 LeNet --


接下來就開始生成模型了,小數據集簡單任務的速度仍是很快的,並且驗證正確率很高。可是若是是大任務大模型,可能會算上幾天時間。

-- 下圖是 09 開始生成模型 --


模型生成完成,咱們再看一下驗證正確率很高了,若是生產環境正確率過低,可能你要微調建立模型的參數。

-- 下圖是 10 訓練完成後的 accuracy--


調試模型

在模型頁面往下拖就能夠看到下載模型、測試模型等按鈕,咱們選擇測試模型,將那個「白底紅字 2」提交作個測試。

-- 下圖是 11 測試模型 --


默認是測試 Epoch #30,咱們先跑 10 次試試。原本想省點服務器電費,結果只有 20.3% 的概率識別正確。

-- 下圖是 12TestA 模型 10 圈結果 --


咱們提升測試圈數到 25 圈,結果準確率從 20.3% 提升到了 21.9%。

-- 下圖是 13TestA 模型 25 圈結果 --


整個模型的上限是 30 圈,正確識別結果也才 21.92%。到了這裏我插一句,未正確識別多是由於個人建模數據是 28*28 的黑白圖,而我給測試圖片大小和顏色都不對。

-- 下圖是 14TestA 模型 30 圈結果 --


更換模型繼續調試

在 TestA 這個模型上能夠點克隆任務,即製做一個同配置的模型再跑一次;這個按鈕有意思啊,咱們之前編譯程序不經過的時候,retry 十萬次也是不經過啊,爲何克隆任務是個面板經常使用按鈕?

-- 下圖是 15 克隆模型 TestA --


這時好玩的事情發生了,我作出的「TestA-Clone」,識別出數字 2 的概率是 94.81%。

-- 下圖是 16 克隆 TestA 結果 --


咱們再把老模型克隆一次,結果識別出數字 2 的概率是 63.4%。

-- 下圖是 17 再次克隆 TestA 結果 --


我新建一個模型 TestB,讓它在 TestA 的基礎上再次訓練。

-- 下圖是 18 新建 TestB --


TestB 的訓練結果反而不如最先的那一版模型,正確率 20.69%。

-- 下圖是 19TestB 的訓練結果 --


沒有最慘只有更慘,看我新訓練的模型 TestC。

-- 下圖是 20TestC 訓練失敗 --


從此次測試看,最好的模型是 TestA-Clone,其次是 Clone2。

-- 下圖是 21 模型結果彙總 --


但這就算找到合適模型了嗎?我又手寫了個數字 2,還特意選的黑底白字 28*28,結果這幾個模型沒一個識別準確的,所有識別失敗。

-- 下圖是 22. 新圖識別失敗 --


第四. 實戰才能出模型

本次實驗拿到正確率是 94.81% 的模型是意外驚喜,那個模型測其餘圖片失敗卻是意料之中的。由於此次實驗的初始樣本才幾千張,若是樣本數量夠多,過擬合(即噪音特徵被歸入模型)的可能性就越小;我用的所有是默認調試選項,添加其餘特徵項調試模型可能會減小欠擬合(主特徵沒提取到)的概率;我並未明肯定義該模型的使用場景,即沒有明確訓練數據、測試文件和生產文件是否相同。

咱們看到徹底相同配置的模型,只由於點擊生成模型的時間不一樣,對同一個圖片的識別結果確千差萬別,再次強調這不是因果判斷而是相關性計算。實驗結論和我上文的主張相同,模型須要拿實戰數據進行實際訓練,且咱們只能預估但不能預測模型生成結果。我作這個實驗就是給你們解釋,AI 模型訓練不是軟件外包,不是談攏了價格就能規劃人日預估效果的。

一個 AI 技術供應商簡單點就是賣現成的模型,好比說人臉識別模型、OCR 識別模型等等。但若是客戶有定製需求,好比說識別臉上有青春痘、識別是否是左撇子簽名,那就須要先明確技術場景,再準備數據大幹一場。至於練模型的時間是 1 天仍是 1 個月不太肯定,AI 模型訓練像作材料試驗同樣,可能半年也可能十年才能發現目標。

第五. IT 工程師的新工做

前文我提到兩個觀點,第二個觀點就是訓練模型的工做並不難,IT 工程師能夠較爲容易的學會訓練模型的工做,而後咱們就能繼續擴展從業範圍,在 AI 大浪潮中分一杯熱羹了。

首先說技術不是門檻,咱們舉個 IT 工程師能聽懂的例子:一個 Oracle DBA 既沒讀過數據庫源碼,也還沒摸過新業務場景,甚至缺少理論知識只能作常見操做;如今這個項目能夠慢慢上線,讓他離線調試 SQL,拿到性能最佳值的點日誌保存就完工了。作 AI 模型調試時,懂原理懂算法會讓工做更有目的性,但更有目的性只能保證接近而不能保證命中目標。

根據上文的實驗,咱們能夠看到有下列工做是須要人作的:

  1. 根據客戶的要求,提出對原始數據的需求。這裏要動業務方向的腦子,好比說想查一下什麼人容易肥胖,自然能想到的是每一個人的飲食和運動習慣,但專業醫生會告訴你要調取轉氨酶膽固醇一類的數據。
  2. 原始數據須要清洗整理和標註,沒找到相關性的樣本不是未標註的樣本。前文試驗中 6000 張圖片可都是標註了 0-9 的數字的,咱們測試模型是爲了找到「2」這一組圖片的相關性。清洗、整理和標註數據的工做多是自動也多是人工,自動作那就是咱們寫腳本或跑大數據,人工作就是提需求而後招 1500 個大媽給黃圖打框,但工程師會對打框過程全程指導。這裏還有取巧的方法,友商的模型太貴甚至不賣,那就是直接用友商的公有云 API 接口,或者買友商大客戶的日誌,讓友商幫你完成數據篩檢。
  3. 上文試驗中僅僅是圖片分類數據集,已經有不少可調整選項了;生產環境不只有圖片還有聲音、文字、動做特徵等數據集,數據集的設置是否合理,要不要重建數據集都須要屢次調試和長期觀察。
  4. 實驗中生成模型沒怎麼調參數也只花了一分鐘時間,但生產環境的模型生成參數要常常調整,而生成一個模型的時間多是幾小時甚至幾天。
  5. 驗證結果的準確性,若是是柔性需求能夠目測幾個測試結果就把模型上線了,但若是是剛性業務可能又要組織十萬份以上樣本進行測試驗證。順路說一句,用來訓練模型的硬件未必是適用於來驗證和跑生產環境的,若是是高壓力測試可能還要換硬件部署。
  6. 模型也有平常維護,可能隨着數據集的更新模型也要按期更新,也可能發現模型有個致命的誤判會威脅到業務,這都須要及時處理。

第六. 附贈的小觀點

談到最後再附贈一些我的觀點,隨機想的,只寫論點不寫論證過程了:

  1. 如今搭建和使用 AI 環境很難,但軟件會進步和解決這個問題;三年前雲計算平臺很難部署和維護,如今遍地都是一鍵部署和 UI 維護的雲平臺方案。
  2. 深度學習這個技術領域太吃數據和算力了,人腦不會像 AI 這麼笨,可能之後會有新技術出現取代深度學習在 AI 領域的地位。
  3. 由於須要數據和算力,搞個 AI 公司比其餘創業企業更難;如今有名的 AI 創業企業都是單一領域深耕三年以上,讓用戶提供數據他們只作單一典型模型。一樣巨頭企業搞 AI 也不容易,即便挖到人 AI 項目也要花時間冷起動,清洗數據不只消耗體力一樣消耗時間。
  4. 深度學習的計算過程不受控制,計算結果須要人來驗證,因此它不能當作法務上的證據。當 AI 發現嫌疑人時警察會馬上採起行動,但它的創造者都沒法描述 AI 下一步會如何下圍棋。一個嬰兒能尿出來世界地圖,某人隨手亂輸能碰對銀行卡的密碼,AI 會告訴你股市 99.99% 要暴漲,但這些都不能當作獨立單責的證據。
  5. 搞 AI 須要準備大量數據,中國對美國有個特點優點,能夠作數據標註的人不少並且價格便宜,但到模型實踐這一步,中國的人力成本過低又限制了 AI 走向商用。
  6. 不要恐慌 AI 會消滅人類,對人類有威脅的 AI 確定是有缺陷的 AI,但人類同樣也選出過希特勒這類有缺陷的領袖。也不要鼓吹 AI 會讓人類失業社會動盪的,你們仍是老老實實談星座運勢吧,我爲何就不擔憂本身失業?
  7. 有些事 AI 的確準率看起來很低實其很高,好比兩人對話聽能清楚 80% 的字就不錯了,AI 只聽懂 85% 了的文字已經越超人類了。你看我打倒顛字序並不影響你讀閱啊。

做者簡介

曹亞孟,雲計算老兵,擁有 10 年以上運維工做經驗,對主流運維技術都有所涉獵,近幾年重點關注雲計算技術,前後就任於七牛和百度,從事雲計算技術的後臺架構、運營和客戶方案落地工做。

全文完

AI前線提供最新最全AI領域技術資訊、一線業界實踐案例、蒐羅整理業界技術分享乾貨、最新AI論文解讀。歡迎關注咱們的微信公衆號:AI前線 ,ID:ai-front

相關文章
相關標籤/搜索