十年云計算老兵零基礎(chǔ)進軍深度學(xué)習(xí)方法論

大數(shù)據(jù)

作者:曹亞孟

人工智能是當(dāng)今的熱議行業(yè),深度學(xué)習(xí)是熱門中的熱門,浪尖上的浪潮,但對傳統(tǒng) IT 從業(yè)人員來說,人工智能技術(shù)到處都是模型、算法、矢量向量,太晦澀難懂了。所以本文作者寫了這篇入門級科普文章,目標是讓 IT 從業(yè)者能看清讀懂深度學(xué)習(xí)技術(shù)的特點,希望讀者能夠從中受益,順利找到自己心儀的工作。

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

行業(yè)的成熟要靠從業(yè)者的奮斗(人和), 也要考慮大環(huán)境和歷史的進程(天時和地利)。

人工智能技術(shù)的井噴并不是單純的技術(shù)進步,而是軟件、硬件、數(shù)據(jù)三方面共同努力水到渠成的結(jié)果,深度學(xué)習(xí)是 AI 技術(shù)的最熱分支,也是受這三方面條件的限制。

AI 軟件所依賴的算法已經(jīng)存在很多年了,神經(jīng)網(wǎng)絡(luò)是 50 年前提出的技術(shù),CNN/RNN 等算法比大部分讀者的年齡都要大。AI 技術(shù)一直被束之高閣,是因為缺乏硬件算力和海量數(shù)據(jù)。隨著 CPU、GPU、FPGA 硬件的更新,幾十年時間硬件算力擴充了萬倍,硬件算力被逐漸解放。隨著硬盤和帶寬的降價提速,20 年前全人類都沒幾張高清照片,現(xiàn)在單個公司的數(shù)據(jù)量就能達到 EB 級。大數(shù)據(jù)技術(shù)只能讀寫結(jié)構(gòu)化日志,要讀視頻和圖片必須用 AI,人類已經(jīng)盯不過來這么多攝像頭了。

我們只有從心里把 AI 技術(shù)請下神壇,才能把它當(dāng)做順手的工具去用。AI 的技術(shù)很深理論很晦澀,主要是這個行業(yè)剛剛發(fā)芽還未分層,就像 20 年前 IT 工程師需要全面掌握技能,現(xiàn)在的小朋友們連字符集都不用關(guān)注。

第二. 關(guān)聯(lián)度模型

深度學(xué)習(xí)有兩步工作,先要訓(xùn)練生成模型,然后使用模型去推測當(dāng)前的任務(wù)。

比如說我用 100 萬張圖片標記好這是貓還是狗,AI 把圖片內(nèi)各個片段的特征提取出來,生成一個貓狗識別模型。然后我們再給這個模型套上接口做成貓狗檢測程序,每給這個程序一張照片它就能告訴你有多大幾率是貓多大幾率是狗。

這個識別模型是整個程序中最關(guān)鍵的部分,可以模糊的認為它就是一個密封黑盒的識別函數(shù)。以前我們寫程序都是做 if-then-else 因果判斷,但圖像特征沒有因果關(guān)系只看關(guān)聯(lián)度,過去的工作經(jīng)驗反而成了新的認知障礙,還不如就將其當(dāng)做黑盒直接拿來用。

接下來我放一個模型訓(xùn)練和推測的實驗步驟截圖,向大家說明兩個問題:

需要用客戶的現(xiàn)場數(shù)據(jù)做訓(xùn)練才能出模型,訓(xùn)練模型不是軟件外包堆人日就行,很難直接承諾模型訓(xùn)練結(jié)果。

訓(xùn)練模型的過程很繁瑣耗時,但并不難以掌握,其工作壓力比 DBA 在線調(diào)試 SQL 小多了,IT 工程師在 AI 時代仍有用伍之地。

第三. 動手實驗

本節(jié)較長,如果讀者對實驗步驟和結(jié)果沒興趣,而是直接想看我的結(jié)論,也可以跳過這一節(jié)。

這個實驗是 Nvidia 提供的入門培訓(xùn)課程——ImageClassification with DIGITS – Training a model。

我們的實驗很簡單,用 6000 張圖片去訓(xùn)練 AI 識別 0-9 這幾個數(shù)字。

訓(xùn)練樣本數(shù)據(jù)是 6000 張標號 0-9 的小圖片,其中 4500 張是用來做訓(xùn)練(train),1500 張是驗證(val)訓(xùn)練結(jié)果。

實驗數(shù)據(jù)準備

訓(xùn)練圖片很小也很簡單,如下圖預(yù)覽,就是一堆數(shù)字:

— 下圖是 01 樣本圖片 —

大數(shù)據(jù)

我做測試的圖片是官方教程提供了個白底紅字的“2”.

— 下圖是 02 測試圖片 —

大數(shù)據(jù)

制作數(shù)據(jù)集

首先我們要做一個圖片識別的數(shù)據(jù)集,數(shù)據(jù)集文件放在“/data/train_small”目錄下,圖片的類型選擇“Grayscale”,大小選 28×28,其他都選默認,然后選擇創(chuàng)建數(shù)據(jù)集“minidata”。

— 下圖是 03 初始數(shù)據(jù)集 —

大數(shù)據(jù)

下面是數(shù)據(jù)集創(chuàng)建的過程,因為我們的文件很小很少,所以速度很快;如果是幾千萬張高清大圖速度就會很慢,甚至要搭建分布式系統(tǒng)把 IO 分散到多臺機器上。

— 下圖是 04 初始數(shù)據(jù)集中 —

大數(shù)據(jù)

這是創(chuàng)建完成數(shù)據(jù)集的柱形統(tǒng)計圖,鼠標恰好停在第二個柱形上,顯示當(dāng)前標記為“9”的圖片有 466 個。

— 下圖是 05 創(chuàng)建完成數(shù)據(jù)集 —

大數(shù)據(jù)

開始創(chuàng)建模型

有了數(shù)據(jù)集以后我們就可以創(chuàng)建模型了,我們選擇創(chuàng)建一個圖像分類模型(Image Classification Model),數(shù)據(jù)集選之前創(chuàng)建的“minidata”,訓(xùn)練圈數(shù)輸 30 次,其他選項暫時保持默認。

— 下圖是 06 新建模型 —

大數(shù)據(jù)

到了創(chuàng)建模型的下半段是選擇網(wǎng)絡(luò)構(gòu)型,我們選擇 LeNet 即可,將模型命名為 TestA。

— 下圖是 07 選擇 LeNet —

大數(shù)據(jù)

這次 Demo 我們沒做細節(jié)設(shè)置,但生產(chǎn)環(huán)境可能要經(jīng)常修改配置文件。

— 下圖是 08 微調(diào) LeNet —

大數(shù)據(jù)

接下來就開始生成模型了,小數(shù)據(jù)集簡單任務(wù)的速度還是很快的,而且驗證正確率很高。但是如果是大任務(wù)大模型,可能會算上幾天時間。

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

大數(shù)據(jù)

模型生成完成,我們再看一下驗證正確率很高了,如果生產(chǎn)環(huán)境正確率太低,可能你要微調(diào)創(chuàng)建模型的參數(shù)。

— 下圖是 10 訓(xùn)練完成后的 accuracy–

大數(shù)據(jù)

調(diào)試模型

在模型頁面往下拖就可以看到下載模型、測試模型等按鈕,我們選擇測試模型,將那個“白底紅字 2”提交做個測試。

— 下圖是 11 測試模型 —

大數(shù)據(jù)

默認是測試 Epoch #30,我們先跑 10 次試試。本來想省點服務(wù)器電費,結(jié)果只有 20.3% 的幾率識別正確。

— 下圖是 12TestA 模型 10 圈結(jié)果 —

大數(shù)據(jù)

我們提高測試圈數(shù)到 25 圈,結(jié)果準確率從 20.3% 提高到了 21.9%。

— 下圖是 13TestA 模型 25 圈結(jié)果 —

大數(shù)據(jù)

整個模型的上限是 30 圈,正確識別結(jié)果也才 21.92%。到了這里我插一句,未正確識別可能是因為我的建模數(shù)據(jù)是 28*28 的黑白圖,而我給測試圖片大小和顏色都不對。

— 下圖是 14TestA 模型 30 圈結(jié)果 —

大數(shù)據(jù)

更換模型繼續(xù)調(diào)試

在 TestA 這個模型上可以點克隆任務(wù),即制作一個同配置的模型再跑一次;這個按鈕有意思啊,我們以前編譯程序不通過的時候,retry 十萬次也是不通過啊,為什么克隆任務(wù)是個面板常用按鈕?

— 下圖是 15 克隆模型 TestA —

大數(shù)據(jù)

這時好玩的事情發(fā)生了,我做出的“TestA-Clone”,識別出數(shù)字 2 的幾率是 94.81%。

— 下圖是 16 克隆 TestA 結(jié)果 —

大數(shù)據(jù)

我們再把老模型克隆一次,結(jié)果識別出數(shù)字 2 的幾率是 63.4%。

— 下圖是 17 再次克隆 TestA 結(jié)果 —

大數(shù)據(jù)

我新建一個模型 TestB,讓它在 TestA 的基礎(chǔ)上再次訓(xùn)練。

— 下圖是 18 新建 TestB —

大數(shù)據(jù)

TestB 的訓(xùn)練結(jié)果反而不如最早的那一版模型,正確率 20.69%。

— 下圖是 19TestB 的訓(xùn)練結(jié)果 —

大數(shù)據(jù)

沒有最慘只有更慘,看我新訓(xùn)練的模型 TestC。

— 下圖是 20TestC 訓(xùn)練失敗 —

大數(shù)據(jù)

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

— 下圖是 21 模型結(jié)果匯總 —

大數(shù)據(jù)

但這就算找到合適模型了嗎?我又手寫了個數(shù)字 2,還特地選的黑底白字 28*28,結(jié)果這幾個模型沒一個識別準確的,全部識別失敗。

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

大數(shù)據(jù)

第四. 實戰(zhàn)才能出模型

本次實驗?zāi)玫秸_率是 94.81% 的模型是意外驚喜,那個模型測其他圖片失敗倒是意料之中的。因為這次實驗的初始樣本才幾千張,如果樣本數(shù)量夠多,過擬合(即噪音特征被納入模型)的可能性就越小;我用的全部是默認調(diào)試選項,添加其他特征項調(diào)試模型可能會減少欠擬合(主特征沒提取到)的幾率;我并未明確定義該模型的使用場景,即沒有明確訓(xùn)練數(shù)據(jù)、測試文件和生產(chǎn)文件是否相同。

我們看到完全相同配置的模型,只因為點擊生成模型的時間不同,對同一個圖片的識別結(jié)果確千差萬別,再次強調(diào)這不是因果判斷而是相關(guān)性計算。實驗結(jié)論和我上文的主張相同,模型需要拿實戰(zhàn)數(shù)據(jù)進行實際訓(xùn)練,且我們只能預(yù)估但不能預(yù)測模型生成結(jié)果。我做這個實驗就是給大家解釋,AI 模型訓(xùn)練不是軟件外包,不是談攏了價格就能規(guī)劃人日預(yù)估效果的。

一個 AI 技術(shù)供應(yīng)商簡單點就是賣現(xiàn)成的模型,比如說人臉識別模型、OCR 識別模型等等。但如果客戶有定制需求,比如說識別臉上有青春痘、識別是不是左撇子簽名,那就需要先明確技術(shù)場景,再準備數(shù)據(jù)大干一場。至于練模型的時間是 1 天還是 1 個月不太確定,AI 模型訓(xùn)練像做材料試驗一樣,可能半年也可能十年才能發(fā)現(xiàn)目標。

第五. IT 工程師的新工作

前文我提到兩個觀點,第二個觀點就是訓(xùn)練模型的工作并不難,IT 工程師可以較為容易的學(xué)會訓(xùn)練模型的工作,然后我們就能繼續(xù)擴展從業(yè)范圍,在 AI 大浪潮中分一杯熱羹了。

首先說技術(shù)不是門檻,我們舉個 IT 工程師能聽懂的例子:一個 Oracle DBA 既沒讀過數(shù)據(jù)庫源碼,也還沒摸過新業(yè)務(wù)場景,甚至缺乏理論知識只能做常見操作;現(xiàn)在這個項目可以慢慢上線,讓他離線調(diào)試 SQL,拿到性能最佳值的點日志保存就完工了。做 AI 模型調(diào)試時,懂原理懂算法會讓工作更有目的性,但更有目的性只能保證接近而不能保證命中目標。

根據(jù)上文的實驗,我們可以看到有下列工作是需要人做的:

根據(jù)客戶的要求,提出對原始數(shù)據(jù)的需求。這里要動業(yè)務(wù)方向的腦子,比如說想查一下什么人容易肥胖,天然能想到的是每個人的飲食和運動習(xí)慣,但專業(yè)醫(yī)生會告訴你要調(diào)取轉(zhuǎn)氨酶膽固醇一類的數(shù)據(jù)。原始數(shù)據(jù)需要清洗整理和標注,沒找到相關(guān)性的樣本不是未標注的樣本。前文試驗中 6000 張圖片可都是標注了 0-9 的數(shù)字的,我們測試模型是為了找到“2”這一組圖片的相關(guān)性。清洗、整理和標注數(shù)據(jù)的工作可能是自動也可能是人工,自動做那就是我們寫腳本或跑大數(shù)據(jù),人工做就是提需求然后招 1500 個大媽給黃圖打框,但工程師會對打框過程全程指導(dǎo)。這里還有取巧的方法,友商的模型太貴甚至不賣,那就是直接用友商的公有云 API 接口,或者買友商大客戶的日志,讓友商幫你完成數(shù)據(jù)篩檢。上文試驗中僅僅是圖片分類數(shù)據(jù)集,已經(jīng)有很多可調(diào)整選項了;生產(chǎn)環(huán)境不僅有圖片還有聲音、文字、動作特征等數(shù)據(jù)集,數(shù)據(jù)集的設(shè)置是否合理,要不要重建數(shù)據(jù)集都需要多次調(diào)試和長期觀察。實驗中生成模型沒怎么調(diào)參數(shù)也只花了一分鐘時間,但生產(chǎn)環(huán)境的模型生成參數(shù)要經(jīng)常調(diào)整,而生成一個模型的時間可能是幾小時甚至幾天。驗證結(jié)果的準確性,如果是柔性需求可以目測幾個測試結(jié)果就把模型上線了,但如果是剛性業(yè)務(wù)可能又要組織十萬份以上樣本進行測試驗證。順路說一句,用來訓(xùn)練模型的硬件未必是適用于來驗證和跑生產(chǎn)環(huán)境的,如果是高壓力測試可能還要換硬件部署。模型也有日常維護,可能隨著數(shù)據(jù)集的更新模型也要定期更新,也可能發(fā)現(xiàn)模型有個致命的誤判會威脅到業(yè)務(wù),這都需要及時處理。

第六. 附贈的小觀點

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

現(xiàn)在搭建和使用 AI 環(huán)境很難,但軟件會進步和解決這個問題;三年前云計算平臺很難部署和維護,現(xiàn)在遍地都是一鍵部署和 UI 維護的云平臺方案。深度學(xué)習(xí)這個技術(shù)領(lǐng)域太吃數(shù)據(jù)和算力了,人腦不會像 AI 這么笨,可能以后會有新技術(shù)出現(xiàn)取代深度學(xué)習(xí)在 AI 領(lǐng)域的地位。因為需要數(shù)據(jù)和算力,搞個 AI 公司比其他創(chuàng)業(yè)企業(yè)更難;現(xiàn)在有名的 AI 創(chuàng)業(yè)企業(yè)都是單一領(lǐng)域深耕三年以上,讓用戶提供數(shù)據(jù)他們只做單一典型模型。同樣巨頭企業(yè)搞 AI 也不容易,即使挖到人 AI 項目也要花時間冷起動,清洗數(shù)據(jù)不僅消耗體力同樣消耗時間。深度學(xué)習(xí)的計算過程不受控制,計算結(jié)果需要人來驗證,所以它不能當(dāng)做法務(wù)上的證據(jù)。當(dāng) AI 發(fā)現(xiàn)嫌疑人時警察會立刻采取行動,但它的創(chuàng)造者都無法描述 AI 下一步會如何下圍棋。一個嬰兒能尿出來世界地圖,某人隨手亂輸能碰對銀行卡的密碼,AI 會告訴你股市 99.99% 要暴漲,但這些都不能當(dāng)做獨立單責(zé)的證據(jù)。搞 AI 需要準備大量數(shù)據(jù),中國對美國有個特色優(yōu)勢,可以做數(shù)據(jù)標注的人很多而且價格便宜,但到模型實踐這一步,中國的人力成本太低又限制了 AI 走向商用。不要恐慌 AI 會消滅人類,對人類有威脅的 AI 肯定是有缺陷的 AI,但人類一樣也選出過希特勒這類有缺陷的領(lǐng)袖。也不要鼓吹 AI 會讓人類失業(yè)社會動蕩的,大家還是老老實實談星座運勢吧,我為什么就不擔(dān)心自己失業(yè)?有些事 AI 的確準率看起來很低實其很高,比如兩人對話聽能清楚 80% 的字就不錯了,AI 只聽懂 85% 了的文字已經(jīng)越超人類了。你看我打倒顛字序并不影響你讀閱啊。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關(guān)資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2017-10-18
十年云計算老兵零基礎(chǔ)進軍深度學(xué)習(xí)方法論
作者:曹亞孟 人工智能是當(dāng)今的熱議行業(yè),深度學(xué)習(xí)是熱門中的熱門,浪尖上的浪潮,但對傳統(tǒng) IT 從業(yè)人員來說,人工智能技術(shù)到處都是模型、算法、矢量向量,太晦澀難

長按掃碼 閱讀全文