AI開發者十問:10分鐘瞭解AI開發的基本過程

華為雲開發者社群發表於2021-07-27
摘要:從AI開發模型、框架、工具,到提升開發效率的學習辦法,為AI開發者逐一解答。

本文分享自華為雲社群《10分鐘瞭解AI開發的基本過程》,作者:簡單堅持。

1、AI開發究竟在開發什麼?

  • 一個硬體開發者的工作成果是一個佈滿積體電路的伺服器,開機就可以執行某種軟體。
  • 一個移動端開發者的工作成果可以是一個手機APP,包括了大量二進位制資料,可被麒麟晶片直接執行。
  • 一個AI開發者的工作成果則是一個模型,模型本質上是一個函式:
f(圖片) = "How are you"
f(貓圖片) = "Cat"

無論這個函式有多麼複雜,有多少個變數或者引數,AI開發都是試圖找出這個函式的表示式。

2、AI模型(函式)是怎麼開發出來的?

AI模型本質是一個函式,想要找到這個函式準確的的表示式,僅憑邏輯是無法推匯出來的,而是訓練出來的,我們餵給機器目前已有的資料,機器就會從這些資料裡去找出一個最能滿足(專業術語稱為擬合)這些資料的函式,當有新的資料需要預測的時候,機器就可以通過這個函式去預測出這個新資料對應的結果是什麼。

對於一個具備某種智慧能力而言,一般具備以下要素:資料+演算法+模型,開發的過程,就是不斷地用資料和演算法使得模型越來越逼近真實情況,注意是逼近而非推導,這個過程稱為訓練。

3、AI模型的訓練過程是怎麼樣的?

我們來用一個能夠區分貓和狗圖片的模型來幫助理解訓練的過程:“資料”就是我們需要準備大量標註過是“貓”還是“狗”的圖片;“演算法”指的是構建模型時我們打算用淺層的網路還是深層的,如果是深層的話我們要用多少層,每層有多少神經元、功能是什麼等等,也就是網路架構的設計,相當於我們確定了我們的預測函式應該大致結構是什麼樣的。

我們用Y=f(W,X,b)來表示這一函式,X是已有的用來訓練的資料(貓和狗的圖片),Y是已有的圖片資料的標籤(該圖片是貓還是狗), W和b是什麼意思呢?一開始,我們確實不知道,這兩個引數是需要機器學習後自己找出來的,找的過程也就是訓練的過程。

“模型”指的我們把資料帶入到演算法中進行訓練,機器就會去不斷地學習,當機器找到最優W和b後,我們就說這個模型是訓練成功了,這個時候我們的函式Y=f(W,X,b)就完全確定下來了

然後我們就可以在已有的資料集外給模型一張新的貓或狗的圖片,那模型就能通過函式Y=f(W,X,b)算出來這張圖的標籤究竟是貓還是狗,這就是推理。

簡單總結下:不管是最簡單的線性迴歸模型、還是較複雜的擁有一億個引數的深度神經網路模型,本質都是尋找一個能夠良好擬合目前已有資料的函式Y=f(W,X,b),並且我們希望這個函式在新的未知資料上也能夠表現良好。

4、AI為什麼要強調大量資料?

因為只有資料量足夠大,模型才能夠學習到足夠多且準確的區分貓和狗的特徵,才能在區分貓狗這個任務上,表現出足夠高的準確性;當然資料量不大的情況下,我們也可以訓練模型,不過在新資料集上預測出來的結果往往就會差很多。

假設識別貓的模型要非常準確,就需要各種光照條件、各種背景、各種花色的貓的照片,不僅要有波斯貓,還要有加菲貓,直到模型包含了我們能想到的各種貓的特徵,一個人臉識別模型,大約需要幾百萬張照片,才能達到可用,著名的Imagenet資料集,大約包含了1400萬張圖片,極大地方便了開發者。

5、在AI開發過程中一個好的開發工具可以幫助開發者做什麼?

假設沒有一個現成的開發平臺,首先你需要學會常用的AI開發語言python,python是整個過程並不耗精力的環節,其次你需要學習傳統機器學習和深度學習相關演算法,這塊算是花費最多精力和時間的環節,然後儘可能去理解和推導演算法,然後用python程式碼去實現演算法再訓練模型,程式碼能力很重要,不然你的模型都建不起來。

然後你發現了一個開發框架,華為MindSpore或者谷歌Tensorflow,你會發現並不需要那麼高的數學門檻,不是說要深刻理解演算法才能更好訓練出好模型,模型損失函式優化方法MindSpore/Tensorflow都內建好了,而且只需要簡單的呼叫就好了,如果說MindSpore/Tensorflow是可以把一個模型程式碼量大大減少的框架,那麼Keras就是讓模型程式碼量可以少到驚人的框架,例如上面的貓狗分類器,15行程式碼就可以搞定,幾十行程式碼就把一個擁有著卷積層、池化層和全連線層的較高階優化方法的深度學習網路架構寫出來。

一個開發框架就像安卓框架為手機APP開發者提供的很多基礎功能,如果沒有這個框架,一個簡單的給好友傳送圖片的功能,你需要直接和作業系統的各個底層功能模組打交道了。

6、AI開發,有了開發框架就夠了嗎?

當然不是,一個開發框架,只是幫開發者做了一些開發者沒必要實現的部分,或者實現起來代價太大的部分,一個完整的AI開發過程,從準備資料、資料預處理、資料標註、選擇演算法、訓練、調參、部署,這和一個普通的APP開發的過程差不多。如同生產一輛汽車,一個自動化、高科技的總裝車間是必不可少的,但衝壓、塗裝車間也制約著汽車的生產效率,那麼制約AI開發效率最頭痛的是什麼,請看下一個問題。AI開發過程中最大的困難是什麼?

7、AI開發過程中最大的困難是什麼?

  • 要準備大量的資料,前面已經提過,更可怕的是資料標註,據統計,資料處理和標註環節大約佔整個開發週期的70%。所謂標註,就是給資料打標籤,告訴機器一張圖片究竟是貓還是狗,標註是一件在AI開發者看來技術含量非常低的工作,已經屬於勞動密集型產業,業界有大量的第三方公司,專門從事資料標註工作。以自動駕駛為例,車頭上的攝像機在實時拍攝車前的所有畫面,自動駕駛標註的過程要標註前車、障礙物、行人、訊號燈、指示牌、指示線等等,這個過程如果完全依賴人工標註,自動駕駛將永遠難以商用。
  • 要反覆迭代訓練,訓練並不是一蹴而就,要反覆修改各種引數,使得模型的準確度逐步提升,這個過程,目前需要豐富的經驗,如果沒有充足的算力,訓練一次,等待三天,然後調參,再等待三天,如果要迭代20次,這個過程是很消耗人的意志。所以,即使不考慮成本因素,算力也是制約AI普及最大的問題。

8、怎麼解決AI開發者的問題?

正如開發一個office軟體,不可能費事到用記事本敲程式碼,你需要一個像visual studio一樣的整合開發環境,需要一個像Git一樣的程式碼管理工具,同理,開發一個AI模型,你也需要一個整合開發環境,而且需要一個版本管理工具。

提供給開發者程式碼編輯環境、語法檢查、編譯器等功能,一個AI的開發平臺,同樣也要能幫開發者標註資料、建立模型訓練作業、部署模型等功能,有了開發平臺,開發平臺要幫助開發者把所有苦活累活都幹完,讓開發者聚焦在最核心的程式碼和演算法上。

當然,要提供給開發者易獲取、效能強、價格低的算力,提高模型訓練的迭代速度。

9、有沒有更快地提升AI開發速度的辦法?

當然有。從根本上提升開發效率,挖掘到最本質,只有兩個辦法:重用和自動化,否則只能一行一行程式碼幹起。

開發一個APP,可以從最基本的程式碼寫起,可以複用開發者共享的開發包、函式等,華為雲開源映象站有大量的java開發包,就是這個意思,也可以複用一個完整的APP,修改下介面配色,就變成了自己的APP,這是複用。要保障APP的質量,可以手工測試,也可以用自動化測試工具。如果這些都不想做,可以也可以用一個現成的工具,用視覺化的方法生成一個APP,當然APP的風格只能從工具已有的模板中選取。開發者一直在試圖用各種辦法,降低開發的工作量。

AI開發也是一樣的。可以找現成的資料集、找現成的標註好的資料集,現成的演算法和模型,用自動部署工具將模型部署到端邊雲。當然,也可用自動學習功能,只要提供原始資料,由系統幫助開發者完成模型構建、演算法選擇和自動訓練,開發者可以直接看到結果。最簡單的辦法,就是尋找一個已經訓練好的模型,在軟體中直接呼叫。

基於此,一個好的AI開發平臺,要從各個維度去提升開發效率,這些功能往往都是很多小細節,算力強、訓練快,只是完成了必須的最基本的功能。

10、華為將提供什麼開發工具給開發者?

  • ModelArts,一個AI開發平臺 ,用於AI模型開發
  • HiLens,一個視覺AI應用開發平臺,用於AI應用開發,應用裡面的模型由ModelArts提供。

以上兩款產品以雲服務的方式在華為雲EI提供服務。

Atlas 200 developer kit(開發板)是ModelArts 的線下開發套件。

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章