做者|曹亞孟
編輯|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 因果判斷,但圖像特徵沒有因果關係只看關聯度,過去的工做經驗反而成了新的認知障礙,還不如就將其當作黑盒直接拿來用。分佈式
接下來我放一個模型訓練和推測的實驗步驟截圖,向你們說明兩個問題:函數
本節較長,若是讀者對實驗步驟和結果沒興趣,而是直接想看個人結論,也能夠跳過這一節。工具
這個實驗是 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 工程師能夠較爲容易的學會訓練模型的工做,而後咱們就能繼續擴展從業範圍,在 AI 大浪潮中分一杯熱羹了。
首先說技術不是門檻,咱們舉個 IT 工程師能聽懂的例子:一個 Oracle DBA 既沒讀過數據庫源碼,也還沒摸過新業務場景,甚至缺少理論知識只能作常見操做;如今這個項目能夠慢慢上線,讓他離線調試 SQL,拿到性能最佳值的點日誌保存就完工了。作 AI 模型調試時,懂原理懂算法會讓工做更有目的性,但更有目的性只能保證接近而不能保證命中目標。
根據上文的實驗,咱們能夠看到有下列工做是須要人作的:
談到最後再附贈一些我的觀點,隨機想的,只寫論點不寫論證過程了:
曹亞孟,雲計算老兵,擁有 10 年以上運維工做經驗,對主流運維技術都有所涉獵,近幾年重點關注雲計算技術,前後就任於七牛和百度,從事雲計算技術的後臺架構、運營和客戶方案落地工做。
-全文完-
AI前線提供最新最全AI領域技術資訊、一線業界實踐案例、蒐羅整理業界技術分享乾貨、最新AI論文解讀。歡迎關注咱們的微信公衆號:AI前線 ,ID:ai-front