AI系統構建流程2

AI系統構建流程2

  首先,我們要弄清楚解決的是什麼問題,然後針對這個問題去進行技術的預研究,預研的過程有可能需要反覆修改問題。這兩步都確定下來之後要開始收集數據、訓練模型,去做相應的功能開發,最後進行產品化,產品化之後還要上線迭代,迭代過程中可能會產生問題,需要重新去構建模型開發。
在這裏插入圖片描述

1. 問題定義:從產品出發,數據 A 到數據 B

  現在大家講到 AI 可能更多談到的是深度學習技術裏面的監督式學習技術,這類技術解決的問題就是把數據 A 映射到數據 B。比如人臉識別技術中,數據 A 是人臉圖片,數據 B 就是這個人的 ID。這個問題就是要解決,通過人臉圖片怎麼知道這個人是誰。
  現在所有的 AI 項目大概都可以歸納成這樣一個問題。所以,首先要搞清楚數據 A 和數據 B 分別是什麼。同時要從產品本身的需求出發,明確產品需要做到什麼樣的程度,比如門禁系統的人臉識別和手機上的人臉識別,數據、限定條件等都是有差別的,兩個產品對技術的要求也是不一樣的。

2. 技術預研:數據複雜度、關係複雜度與數據量

  解決問題定義之後,我們就會去做一些技術調研,確定現代技術的邊界在哪裏,包括什麼技術是能做的,能做到什麼程度,以及做到這個程度需要多少代價。

3. 數據收集

  首先,數據量需要充足。
  接下來,數據質量很重要。要對收集到的數據做標記,如果數據上有大量的標記錯誤,這個數據基本上就沒法用,所以需要進行數據清洗,一遍遍地進行數據糾錯,提升數據質量。
  數據分佈也很重要,必須滿足產品要求的所有應用場景。比如,人臉識別如果需要識別側臉,那麼數據當中就需要有足夠的側臉數據,否則分佈就不夠好。

4. 模型訓練:準確評價模型

  數據準備好以後,就進入訓練模型的環節。這裏的關鍵是你怎麼去評價這個模型。
  首先,測試集的設計非常重要,測試模型用的數據和用來訓練模型的數據必須是完全分開的,測試時一定要用模型沒看過的數據去檢驗這個算法做得好不好。
  測試數據的選擇也是非常重要的,不同的測試數據有可能導致你檢驗的結果完全相反,所以這個設計必須以產品要求的應用作爲出發點,就是需要涵蓋哪些不同的 CASE,針對每個 CASE 都要有一些不同的測量數據,最後才能得出結論,這個技術是不是能夠滿足產品需求。

  另外模型設計也需要考慮性能要求,比如是在手機上線,還是在一個後端服務器上線,兩者對計算資源的消耗要求不一樣。手機上可消耗的資源會受到限制,那麼模型就要做得非常小。

5. 工程開發:基礎架構保證高性能,輔助算法完成最後 10%

  模型訓練後、產品上線前,還需要有一定輔助的工程。比如在後端上線,要有一個基礎的深度學習特定集羣,一般都是 CPU 集羣。如果是在手機端上線,需要在手機上有一個引擎,像快手自己開發的 YCNN 引擎就是屬於這種基礎架構,對模型和技術的性能有着很大影響。

  另一方面,除了 AI 升級的算法本身,一些傳統算法的輔助也非常必要。例如 AlphaGo,大家通常知道這是深度學習的成果,其實也結合了例如蒙特卡洛樹搜索之類的傳統算法才能達到它當時的成績。很多時候解決問題,除了深度學習提供的模式識別能力,還要依賴推理、搜索等其他能力的輔助。

6. 產品化:好的產品能化腐朽爲神奇

  工程開發結束就可以產品化了,一個好的產品設計是可以化腐朽爲神奇的。很多技術有時並沒達到一個非常好的狀態,但可以用一些好的設計去規避技術缺點,發揮技術的長處。這個流程可能是在最後階段,但是實際用戶體驗設計在問題定義的時候就已經開始了。

7. 版本迭代:持續改進

  產品上線後,還需要對版本進行迭代,修復上線過程中發現的一些問題。這裏需要強調的一點還是數據,數據佔據了 AI 項目大概四分之三以上的時間。上線以後第一時間就要開始收集數據,因爲這纔是用戶在使用時候的數據,是最貼合應用場景的數據,所以也是最重要的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章