1. 程式人生 > >【AI測試】機器學習專案的測試,演算法測試

【AI測試】機器學習專案的測試,演算法測試

開場白

大家好,今天分享的主題是AI演算法專案的測試探索。
首先介紹人工智慧的一些基本概念,接著說明人工智慧和機器學習的關係,然後再敘述機器學習相關的基本概念,包括監督學習,無監督學習,會重點說監督學習。再介紹機器學習演算法專案的測試。最後會介紹演算法專案測試的學習入門。

人工智慧

近些年,人工智慧受到了極大的關注,其主要還歸功於深度學習的興起,極大地推動了智慧機器人、計算機視覺、自然語言處理等領域的發展。
有一次我問5歲的侄女“你知道人工智慧嗎”,她回答:“人工智慧好吃嗎?” 從小就是一個吃貨,人工智慧不能吃,那它能做什麼,會怎麼影響我們的生活呢?
大家看這是人工智慧定義。人工智慧的“智慧”就是讓機器可以像人類一樣智慧。
和人類一樣思考,人類一樣聽懂明白語義的意思,可以看懂圖片或視訊中的事物,人類一樣動起來。

一個優秀的人工智慧系統,應該具有三個方面的特徵:知識運用的能力、從資料或經驗中學習的能力、處理不確定性的能力。

知識運用能力:

知識是智慧體現的一個最重要的維度。聽說看能力如果不考慮內容的深度,則僅僅是停留在感知智慧的層面,只能與環境互動和獲取環境的資訊,其智慧表現的空間非常有限。一個智慧系統應該能夠很好的儲存與表示、運用知識,並基於知識進行歸納推理。

學習能力:

從資料中或過去的經驗中學習的能力,這通常需要運用機器學習演算法。具備一個不斷進化和進步的學習能力,那麼就可能具備更高的智慧水平。同時,學習過程應該能夠融入儘可能多的知識類資訊,才能夠達到支援智慧系統的要求。

不確定性處理能力:

能夠很好地處理資料中不確定性,像噪聲、資料屬性缺失,模型決策的不確定性,甚至模型內部引數的不確定性。無人駕駛系統就需要處理各種各樣的不確定性如環境的不確定性、決策的不確定性。
目前,絕大多數人工智慧的系統,還都或多或少地缺少這些特質。

人工智慧的應用目前有很多,像圖中這些
這裡簡單介紹三個人工智慧的主要應用領域:
智慧機器人
傳統機械領域與人工智慧的結合產生了機械智慧。這些機器人產品體現了各種人工智慧技術的綜合運用。隨著未來人工智慧及相關技術的逐步完善和成熟,服務機器人必將走進千家萬戶,人與機器人和諧並存的社會雖然還需時日,但可以期待。

智慧駕駛
谷歌、特斯拉、百度等公司都在無人駕駛上進行了佈局和投入。無人駕駛是典型的人工智慧技術的綜合運用,需要處理複雜的目標識別、環境感知與建模、規劃與控制、綜合決策等問題,對於智慧系統的魯棒性、不確定性決策、安全性提出了更高的要求。

個性推薦:
比如亞馬遜的商品推薦,今日頭條的內容推薦演算法。
人工智慧已經正在改變一些行業。

人工智慧和機器學習的關係

機器學習是人工智慧研究與應用的一個分支。
人工智慧涵蓋的領域很廣,除了機器學習外,還包括專家系統、多代理、進化計算、模糊邏輯和粗糙集、機器學習、知識表示、推薦系統等。人工智慧的發展也主要得益於機器學習領域的推動,尤其是深度學習取得的突破,其他領域的進展相對較小。人工智慧分為弱人工智慧和強人工智慧,前者讓機器具備觀察和感知的能力,可以做到一定程度的理解和推理。目前的科研都集中在弱人工智慧這部分。而強人工智慧期待讓機器獲得自適應能力,解決一些之前沒有遇到過的問題。電影裡的人工智慧多半都是在描繪強人工智慧,比如星球大戰中的機器人,而這部分在目前的現實世界裡難以真正實現。

機器學習

人腦具備不斷積累經驗的能力,依賴經驗我們便具備了分析處理的能力,比如我們要去菜場挑一個西瓜,別人或者自己的經驗告訴我們色澤青綠、根蒂蜷縮、敲聲渾響的西瓜比較好吃。我們具備這樣的能力,那麼機器呢?機器不是隻接收指令,處理指令嗎?和人腦類似,可以餵給機器歷史資料,機器依賴建模演算法生成模型,根據模型便可以處理新的資料得到未知屬性。許多機器學習系統所解決的都是無法直接使用固定規則或者流程程式碼完成的問題,通常這類問題對人類而言卻很簡單。比如,手機中的計算器程式就不屬於具備智慧的系統,因為裡面的計算方法都有清楚而固定的規程;但是如果要求一臺機器去辨別一張照片中都有哪些人或者物體,這對我們人類來講非常容易,然後機器卻非常難做到。
機器學習所研究的主要內容,是關於在計算機上從資料中產生“模型”的演算法。即學習演算法,有了學習演算法,我們把資料提供給它,它就能基於這些資料產生模型;在面對新的資料時,模型會給我們提供相應的預測結果。

機器學習的按學習方式來可以劃分四類: 監督學習、無監督學習、半監督學習和強化學習。
監督學習指的就是我們給學習演算法一個數據集。這個資料集由“正確答案”組成。
關注的是對事物未知表現的預測,一般包括分類問題和迴歸問題。
無監督學習,指在資料集中沒有“正確答案”,期望從資料本身發現一些潛在的規律,無監督學習傾向於事物本身特性的分析,常用的技術包括資料降維和聚類問題。
訓練資料集中有一部分答案,一部分沒答案的稱為半監督學習。
強化學習相對來說比較複雜,是指一個系統和外界環境不斷地互動,獲得外界反饋,然後決定自身的行為,達到長期目標的最優化。也就是從一開始什麼都不懂, 通過不斷地嘗試, 從錯誤中學習, 最後找到規律, 學會了達到目的的方法。比如AlphaGo用的深度強化學習。
重點講下監督學習:
如圖中不同形狀的幾何圖形,給它們分別打上正確的標記。通過演算法訓練後,達到正確分類的目的。要進行機器學習,首先要有資料。有了資料之後,再對資料進行標註。
那實際專案中是怎麼給資料打標註,為什麼要給資料標註?帶著這兩個問題我們來看個視訊。
資料標註師 - [資料標註師](https://www.thepaper.cn/newsDetail_forward_2052136)
看完視訊,相信大家對資料標註有更清晰的瞭解。
這位老師也講了他所理解的人工智慧:利用人工標註的資料給到機器進行學習,使機器智慧化。人工智慧中的“人工”也就是這麼個意思。
為什麼要花時間和人力成本去做資料標註,不是還有不需要標註資料的無監督學習嗎?
監督學習的效果一般更好。
標籤代表了“先驗證知識”,並給定了模型能力的“下界”。

機器學習中監督學習模型的任務重點在於,根據已有經驗知識對未知樣本的目標進行預測,根據目標預測變數的型別不同,我們把監督學習任務大體分為“分類”和“迴歸”
分類問題是最為常見的監督學習問題,最基礎的就是二分類問題,如圖中的動物分類為兔子還是牛。
右邊的圖為多分類問題。

迴歸問題,預測的目標是連續變數,比如預測房價、預測明天的天氣溫度
如圖中給出一些面積、位置,房間數作為預測值,來預測一輛房屋的價格。要訓練這個系統,需要給出大量房屋樣本,包括它們的預測值和標籤,也就是它們的價格。通過演算法訓練,當有未知房屋資料時可以通過迴歸器就預測出它的價格。

什麼是模型?
大家來做下這個猜數字遊戲,1, 4, 16…()… 256… 括號裡的是什麼。為什麼是64,不是其他數字,又為什麼是數字,不是一個漢字或者一個字母。我們找到了數字之間的規律,邏輯關係,並且抽象成了模型,我們才能知道括號裡是什麼。
舉個生活中的例子,小米硬體中手機外殼,在大批量生產前需要先設計手機外殼的模具,然後所有同型號的手機外殼都按這個模具樣版生產出來。這個模具也是個硬體上的模型。
演算法的模型又是什麼?模型是從資料裡抽象出來的,用來描述客觀世界的數學模型。通過對資料的分析,找到其中的規律,找到的規律就是模型。
機器學習的根本目的,是找一個模型去描述我們已經觀測到的資料。

生成模型之後,可以以檔案形式儲存在磁碟上或者載入到記憶體中。達到模型的持久化。

機器學習專案的測試

這裡寫圖片描述

模型評估

如何評估模型,可以通過泛化能力。泛化能力指的是學習方法對未知資料的預測能力。就好比運動員平時都是在訓練場進行訓練,而評估運動員的真實實力要看在大賽中的表現。
我們實際希望的,是在新樣本上能表現得很好的學習器,為了達到這個目的,應該從訓練樣本中儘可能推演出適用於所有潛在樣本的“普通規律”,這樣才能在遇到新樣本時做出正確的預測,泛化能力比較好。
當學習器把訓練樣本學得“太好”了的時候,很可能已經把訓練樣本自身的一些特點當作了所有潛在樣本都會具有的一般性質,這樣就會導致泛化效能下降。這種現象在機器學習中稱為“過擬合“,與之相對是“欠擬合”指的是對訓練樣本的一般性質尚未學習。
有多種因素可能導致過擬合,其中最常見的情況是由於學習能力過於強大,以至於把訓練樣本所包含的不太一般的特性都學到了,而欠擬合則通常是由於學習能力低下而造成的。

如何看泛化能力的好壞呢? 通過泛化誤差。
先解釋下各種名詞
從資料中分析得到模型的過程稱為“訓練”,用於“訓練”的資料稱為“訓練資料”。其中每個樣本稱為一個“訓練樣本”,訓練樣本組成的集合稱為“訓練集”,測試樣本組成的集合稱為“測試集”。
模型在訓練集上的誤差通常稱為 “訓練誤差” 或 “經驗誤差”,在測試集上的誤差通常稱為“測試誤差”。而在新樣本上的誤差稱為 “泛化誤差”
機器學習的目的是得到泛化誤差小的學習器。然而,在實際應用中,新樣本是未知的,所以
以測試集上的“測試誤差”作為泛化誤差的近似。使用一個“測試集”來測試學習器對新樣本的判別能力。需要注意的是,測試樣本儘量不在訓練集中出現、未在訓練過程中使用過。

效能度量(performance measure)是衡量模型的泛化能力的評價標準。
1,準確率(accuracy)
2,精確率(precision)==查準率、召回率( recall)==查全率,F1值 ,ROC與AUC —分類演算法評價指標
F1值 是精確率和召回率的調和均值
3,MSE(均方誤差),RMSE(均方根誤差),MAE(平均絕對誤差)、R-Squared(擬合度) —-迴歸演算法評價指標

都是評估模型好壞的指標,相互之間有一定關係,只是側重點會不同。
準確率(accuracy)。對於給定的測試資料集,分類器正確分類的樣本數與總樣本數之比。是最常見也是最基本的評價演算法效能指標。
有些場景下,只看這一個指標是不夠的。比如 :
在二分類中,當正反比例不平衡的情況下,尤其是當我們對少數的分類更感興趣的時時候,準確率評價基本就沒什麼參考價值。
舉個例子:有個100條樣本資料的測試集,其中80個正例,20個反例。那如果模型把所有樣本都預測為正例,那模型的準確率至少都是80%。當模型遇到新樣本時,它都區分不出一個反例。這種模型也就沒用了。

精確率是針對我們預測結果而言的,它表示的是預測為正的樣本中有多少是真正的正樣本。
而召回率是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了。
一般來說,精確率高時,召回率往偏低,而精確率低時,召回率偏高。
只有在一些簡單的任務中才可能使精確率和召回率都很高。

精確率和召回率 例項
這裡寫圖片描述

評價指標跑出來看又怎麼評判呢?
這裡執行得出的準確率是0.96,好還是不好呢,是否可以測試通過。要1.0準確率才測試通過嗎?,看實際專案的應用場景、目前的技術水平、產品經理的需求定義。測試人員把各指標值反饋出來,在測試報告中體現出來。比如說無人駕駛,如果它的準確率是96%,大家會不會去坐無人駕駛的汽車呢?反正我是不敢的,這是在用生命來測試演算法。
我們來看下2016年的新聞
百度自動駕駛負責人王勁 2016年9月
去年的這個時候,我們的圖象識別,識別汽車這一項,剛好也是89%。我們認為這個89%,要達到97%的準確率,需要花的時間,會遠遠超過5年。而人類要實現無人駕駛,主要靠攝像頭來實現安全的保障的話,我們認為要多少呢?我們認為起碼這個安全性的保障,要達到99.9999%,所以這個是一個非常非常遠的一條路。我們認為不是5年,10年能夠達得到的。
一般的人工智慧系統,如搜尋、翻譯等可允許犯錯,而無人駕駛系統與生命相關,模型效能要求很高。

魯棒性 (robustness)

魯棒性也就是所說健壯性,簡單來說就是在模型在一些異常資料情況下是否也可以比較好的效果。
也就是我們在最開始講人工智慧三個特徵中的 處理不確定性的能力。
比如人臉識別,對於模糊的圖片,人帶眼鏡,頭髮遮擋,光照不足等情況下的模型表現情況。
演算法魯棒性的要求簡單來說就是 “好的時候”要好,“壞的時候”不能太壞。
在AlphaGo 和李世石對決中,李世石是贏了一盤的。李世石九段下出了“神之一手”
Deepmind 團隊透露:錯誤發生在第79手,但AlphaGo直到第87手才發覺,這期間它始終認為自己仍然領先。這裡點出了一個關鍵問題:魯棒性。人類犯錯:水平從九段降到八段。機器犯錯:水平從九段降到業餘。
測試方法就是用盡可能多的異常資料來覆蓋進行測試。

模型安全

攻擊方法有:試探性攻擊、對抗性攻擊兩種
在試探性攻擊中,攻擊者的目的通常是通過一定的方法竊取模型,或是通過某種手段恢復一部分訓練機器學習模型所用的資料來推斷使用者的某些敏感資訊。
主要分為模型竊取和訓練資料竊取
對抗性攻擊對資料來源進行細微修改,讓人感知不到,但機器學習模型接受該資料後做出錯誤的判斷。
比如圖中的雪山,原本的預測準確率為94%,加上噪聲圖片後,就有99.99%的概率識別為了狗。
目前模型安全還是比較難的領域,像構造對抗性樣本,這裡就簡單介紹下一下。

響應速度

響應速度是指從資料輸入到模型預測輸出結果的所需的時間。對演算法執行時間的評價。
測試方法:
time.time() / time.clock()
time命令
time python test.py
定義裝飾器timethis,將裝飾器放在函式定義之前
這裡只是簡單看下模型執行所需的時間。並沒有涉及大資料叢集,分散式下的演算法效能。

業務測試

包括業務邏輯測試,業務 & 資料正確性測試。主要關注業務程式碼是否符合需求,邏輯是否正確,業務異常處理等情況。可以讓產品經理提供業務的流程圖,對整體業務流程有清晰的瞭解。業務測試大家肯定都非常熟悉了,都是相通的,這裡不花時間介紹啦。

白盒測試

白盒測試方法有很多,這裡以只說下程式碼靜態檢查。
先讓演算法工程師將程式碼的邏輯給測試人員講解,通過講解理清思路。
然後測試做程式碼靜態檢查,看是否會有基本的bug。
工具的話使用pylint來做程式碼分析。

模型監控

服務監控大家應該都知道,這裡就不介紹了。只說下模型監控。
專案釋出到線上後,模型在線上持續執行,需要以固定間隔檢測專案模型的實時表現,可以是每隔半個月或者一個月,通過效能指標對模型進行評估。對各指標設定對應閥值,當低於閥值觸發報警。如果模型隨著資料的演化而效能下降,說明模型已經無法擬合當前的資料了,就需要用新資料訓練得到新的模型。

機器學習演算法專案的測試就介紹到這裡。

演算法測試學習入門

機器學習理論和實戰書籍視訊推薦,給有興趣學習機器學習的同學。
這裡寫圖片描述