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

AI前線發表於2017-10-17
十年雲端計算老兵零基礎進軍深度學習的方法論
作者|曹亞孟
編輯|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



相關文章