1. 什么是人工智能?
我們先說說什么是人工智能担租,畢竟我們想要測試一個東西就要先理解它么勺择。 不嚴謹?shù)恼f,現(xiàn)階段的人工智能是:大數(shù)據(jù)+機器學(xué)習(xí)巷屿。 那為什么是不嚴謹?shù)恼f呢,因為人工智能的范疇還挺大的促绵,機器學(xué)習(xí)是其中的一個子集攒庵, 現(xiàn)在大部分人把機器學(xué)習(xí)和人工智能劃等號,因為我們目前在人工智能領(lǐng)域產(chǎn)生了價值的項目败晴,主要是機器學(xué)習(xí)帶來的浓冒。 我們又說這是現(xiàn)階段對人工智能的定義, 因為人工智能還是在迅猛發(fā)展的尖坤,上個世紀70年代的時候人們對人工智能的定義還是專家系統(tǒng)呢稳懒, 所以人類的對人工智能的理解也是不停的在進步的,說不定過個幾十年人工智能的實現(xiàn)方式就不是機器學(xué)習(xí)了慢味。
我們舉一個信用卡反欺詐的例子场梆, 以前的時候在銀行里有一群業(yè)務(wù)專家, 他們的工作就是根據(jù)自己的知識和經(jīng)驗向系統(tǒng)中輸入一些規(guī)則纯路。例如某一張卡在一個城市有了一筆交易或油,之后1小時內(nèi)在另一個城市又有了一筆交易。這些專家根據(jù)以前的經(jīng)驗判斷這種情況是有盜刷的風(fēng)險的驰唬。他們在系統(tǒng)中輸入了1千多條這樣的規(guī)則顶岸,組成了一個專家系統(tǒng)。 這個專家系統(tǒng)是建立在人類對過往的數(shù)據(jù)所總結(jié)出的經(jīng)驗下建立的叫编。 我們可以把它就看成一個大腦辖佣,我們業(yè)務(wù)是受這個大腦控制的。但這個大腦是有極限的搓逾,我們要知道這種規(guī)則從0條建立到1條是很容易的卷谈,但是從幾千條擴展到幾千零一條是很難的。 因為你要保證新的規(guī)則有效霞篡,要保證它不會跟之前所有的規(guī)則沖突世蔗,所這很難端逼,因為人的分析能力畢竟是有限的。 我聽說過的最大的專家系統(tǒng)是百度鳳巢的凸郑,好像是在10年的時候吧裳食,廣告系統(tǒng)里有1W條專家規(guī)則。但這是極限了芙沥,它們已經(jīng)沒辦法往里再添加了。 所以說這是人腦的一個極限浊吏。 后來呢大家引入機器學(xué)習(xí)而昨, 給機器學(xué)習(xí)算法中灌入大量的歷史數(shù)據(jù)進行訓(xùn)練, 它跟人類行為很像的一點就是它可以從歷史數(shù)據(jù)中找到規(guī)律找田,而且它的分析能力更強歌憨。 以前人類做分析的時候,可能說在反欺詐的例子里墩衙,一個小時之內(nèi)的跨城市交易記錄是一個規(guī)則务嫡,但如果機器學(xué)習(xí)來做的話,它可能劃分的更細漆改,例如10分鐘之內(nèi)有個權(quán)重心铃,10分鐘到20分鐘有個權(quán)重笆搓,1小時10分鐘也有個權(quán)重姑子。 也就是說它把這些時間段拆的更細。 也可以跟其他的規(guī)則組合宁改,例如雖然我是1小時內(nèi)的交易記錄跨越城市了樊破,但是我再哪個城市發(fā)生了這類情況也有個權(quán)重愉棱,發(fā)生的時間也有個權(quán)重,交易數(shù)額也有權(quán)重哲戚。也就是說機器學(xué)習(xí)能幫助我們找個更多更細隱藏的更深的規(guī)則奔滑。 以前銀行的專家系統(tǒng)有1000多條規(guī)則,引入了機器學(xué)習(xí)后我們生成了8000W條規(guī)則顺少。 百度在引入機器學(xué)習(xí)后從1w條規(guī)則擴展到了幾十億還是幾百億條(我記不清楚了)朋其。 所以當(dāng)時百度廣告推薦的利潤很輕易的提升了4倍。 我們可以把專家系統(tǒng)看成是一個比較小的大腦祈纯,而機器學(xué)習(xí)是更大的大腦令宿。 所以說我們叫它機器學(xué)習(xí),是因為它像人類一樣可以從歷史中庫刻畫出規(guī)律腕窥,只不過它比人類的分析能力更強粒没。 所以在網(wǎng)上有個段子么,說機器學(xué)習(xí)就是學(xué)出來海量的if else簇爆, 其實想想也有道理癞松,套路都是if 命中了這條規(guī)則爽撒,就怎么么樣的,else if 命中了那個規(guī)則响蓉,就怎么怎么樣的硕勿。 人類的分析能力有限么,專家系統(tǒng)里人類寫1千枫甲,1w個if else就到頭了源武。 但是機器學(xué)習(xí)給你整出來幾百個億的if else出來。 我們就可以把機器學(xué)習(xí)想的low一點么想幻,不要把它想的那么神秘粱栖。
2. 什么是模型?
那接下來我們就聊聊什么是模型了。 模型這個詞大家肯定都聽過脏毯,但它到底是個什么東西相信很多人都是懵的闹究,因為它太抽象了,好像很多領(lǐng)域里都有這個詞食店, 我剛?cè)肼毜臅r候一直都在問模型是什么渣淤。 都說機器學(xué)習(xí)算法訓(xùn)練出來的是模型,我們要針對這個模型做測試吉嫩,但這玩意到底是個什么東西价认。 我們繼續(xù)不嚴謹?shù)恼f,模型就是個數(shù)據(jù)庫率挣,里面存儲的就是我們之前說到的規(guī)則和這些規(guī)則對應(yīng)的權(quán)重刻伊。 我們應(yīng)用模型的時候怎么做? 其實就是拿著新數(shù)據(jù)到模型這個數(shù)據(jù)庫里找規(guī)則椒功,把匹配的所有規(guī)則和他們的權(quán)重做乘法并累加在一起捶箱,就是我們最后得到的預(yù)測值。 我們外圍調(diào)用的系統(tǒng)都是根據(jù)這個預(yù)測值展開的动漾。假如說我要給客戶做定價丁屎,那把客戶的數(shù)據(jù)傳過來,看看這個數(shù)據(jù)符合哪些規(guī)則旱眯,然后根據(jù)規(guī)則的權(quán)重算出一個預(yù)測的價格回來晨川。
3. LR直觀的解釋
剛才講的東西偏業(yè)務(wù),接下來我講講更偏原理的東西删豺,以幫助我們理解以后的測試場景共虑, 大家不懂擔(dān)心聽不懂, 我還是盡量說人話呀页。 我們講講邏輯回歸的原理 妈拌,為什么講邏輯回歸呢,因為它是最簡單但也是最常用最重要的機器學(xué)習(xí)算法蓬蝶。 從邏輯回歸可以擴展出很多的應(yīng)用尘分,使用不同的激活函數(shù)它既可以做分類問題猜惋,也可以做回歸問題, 現(xiàn)在非撑喑睿火的深度學(xué)習(xí)是什么著摔? 其實就是個多隱藏層的神經(jīng)網(wǎng)絡(luò), 那神經(jīng)網(wǎng)絡(luò)呢定续?神經(jīng)網(wǎng)絡(luò)中的隱藏層每一個神經(jīng)元都是一個邏輯回歸谍咆,所以我們說邏輯回歸是最重要的一個算法。接下來我們看看它的函數(shù)香罐。
注:邏輯回歸 - 百度百科的解釋
作者注:大學(xué)計算機科班出身的應(yīng)該對這種圖不陌生卧波,就是收集一些特征點,然后回歸模擬出一個2維的函數(shù)圖庇茫,然后我們將比如月份,地點之類的參數(shù)輸入進去螃成,就能得到大致的房價預(yù)測值旦签。對,就是這樣的一種概念寸宏!
假設(shè)圖中一次函數(shù)公式是:y=wx+b宁炫, 其中y是預(yù)測值,x是特征(也就是我們的規(guī)則)氮凝,w是特征的權(quán)重羔巢,b是截距。我們說要預(yù)測房價改怎么做呢罩阵? 其實它就是求一條直線竿秆,讓我們根據(jù)這條直線算出的預(yù)測值跟所有真實的這些點的誤差最小。所以我們說它在學(xué)習(xí)什么稿壁? 學(xué)習(xí)的主要就是w和b的值幽钢。我們要求一個w和b,讓預(yù)測值跟真實值的誤差最小傅是。 所以在模型訓(xùn)練的過程中匪燕,我們會根據(jù)某種規(guī)則不停的改變w和b的值。 我們訓(xùn)練多少輪喧笔,就會改變多少次w和b的值帽驯。直到找到最合適的w和b的值,讓預(yù)測值和真實值誤差最小书闸。這就是它整個的訓(xùn)練過程尼变。上面說我們只有一個特征,如果有n個特征呢梗劫? 公式就變成了y= w1x1+w2x2+w3x3......wnx* +b享甸, 我們剛才說模型是個數(shù)據(jù)庫截碴,里面存儲的是所有的特征和他們的權(quán)重,在這里大家就知道了存放的就是x和對應(yīng)的w蛉威, 當(dāng)有新數(shù)據(jù)來做預(yù)測的時候就是用這個公式來計算預(yù)測值的. 當(dāng)然這是一個線性回歸的例子日丹,我們把做這種預(yù)測某一個值的算法叫做回歸算法。 那我們?nèi)绾巫龇诸悊栴}呢蚯嫌,假如說人臉識別哲虾,要判斷我和一張照片是不是一個人,它應(yīng)該告訴我兩個值择示,0或者1. 來告訴我這條數(shù)據(jù)是正例束凑,還是負例。 所以我們引入了一個叫sigmod的激活函數(shù)栅盲,大家不用知道它的原理汪诉,只需要知道它能把我們的預(yù)測值轉(zhuǎn)換成0~1中的數(shù)值。 假如說把我和照片的信息輸入到模型中谈秫,它返回一個數(shù)值是0.8. 意思是這個人有80%的概率跟照片是同一個人扒寄。 所以通過這個激活函數(shù)我們就把預(yù)測值轉(zhuǎn)換了一個概率值。 我們外圍系統(tǒng)調(diào)用的時候會根據(jù)這個概率值做一些處理拟烫。 比如說我們設(shè)置一個閾值是0.9该编。 但凡是預(yù)測值大于0.9的我們判斷為正例,小于0.9的我們判斷為負例硕淑。 這樣我們把一個回歸問題變成了一個二分類的問題课竣。 這個線性回歸模型,也就變成了邏輯回歸置媳。 所以說我面試的時候于樟,比較喜歡問候選人邏輯回歸為什么是分類算法而不是回歸算法。 原因就在這里了半开, 它基于線性回歸隔披,但加入了sigmod激活函數(shù)后就變成了做2分類問題的邏輯回歸。 如果你再換個激活函數(shù)softmax寂拆,它就變成一個多分類算法了奢米。 所以有些時候,尤其是在做深度學(xué)習(xí)的時候纠永,其實我們不會去說某個神經(jīng)元是線性回歸鬓长,還是邏輯回歸的,還是多分類算法尝江,因為造成他們不同的可能就是輸出層的激活函數(shù)的不同涉波。
作者注:二分類問題就是要么是結(jié)果A,要么是結(jié)果B,只有兩種分類
作者注:我們的模型系統(tǒng)是這樣工作的:它會盡量構(gòu)造出一個符合所有樣本特征的‘函數(shù)’啤覆, 有了函數(shù)苍日,如果有新的一個給定的樣本,只要給他參數(shù)窗声,它就能算出一個預(yù)測值相恃;然后這個模型系統(tǒng)還有個激活函數(shù)(或許會有多個激活函數(shù)),這個/些激活函數(shù)會把預(yù)測值轉(zhuǎn)換成百分比值笨觅;我們還能設(shè)定一些閾值拦耐,用來暫時判定得出的百分比是正例還是負例
4. 模型的評估指標(biāo)
OK, 我們之前鋪墊了很多原理性的信息见剩,現(xiàn)在我們終于可是開始講正題了杀糯。按照我們傳統(tǒng)的軟件測試思路, 把整個機器學(xué)習(xí)服務(wù)當(dāng)做黑盒子苍苞,這個黑盒子的實體是模型固翰。 我們把數(shù)據(jù)輸入到模型中,得到預(yù)測值羹呵,判斷預(yù)測值的正確性倦挂。 這個思路是對的,但是我們對這個預(yù)測值的正確性是無法通過單一一條數(shù)據(jù)就能驗證的担巩。 就像在2分類問題中我們得到的預(yù)測值是一個概率值,我們能驗證這個概率是正確的么没炒? 假如模型告訴你這個人和照片有99.9%的相似度涛癌。 但是他們確實不是一個人,你能說他預(yù)測錯了么送火? 明顯不能啊拳话,畢竟它沒告訴你100%一定是這個人,不知道大家看過上一季的最強大腦沒有种吸,當(dāng)時吳恩達先生也在場弃衍,人機大戰(zhàn)中的人臉識別項目中出乎所有人意料的是計算機輸出了兩個答案,因為在這個項目的志愿者中有一對雙胞胎坚俗,計算機計算他們兩個人的概率的時候只相差了0.01%镜盯, 當(dāng)時吳恩達先生也不知道選哪個好了,也不說是說概率高的就一定正確猖败。 所以我們一定輸入比較大的數(shù)據(jù)集到模型中速缆,然后統(tǒng)計一些諸如正確率這樣的指標(biāo)來評估模型的效果。
作者注:對恩闻!模型預(yù)測不是百分百正確的艺糜,我們只能盡量讓它靠近預(yù)測正確,而不能百分百依靠它,完全相信它破停!那么怎么讓它盡量靠近預(yù)測正確呢翅楼? 答案就是輸入大量的樣本、多輪次的樣本真慢,不斷驗證回歸出新模型---顯而易見毅臊,這樣的模型預(yù)測的準確率會越來越高,直到我們認為滿意為止晤碘! 以下會有一些專有名詞出現(xiàn)褂微,請慢慢理解消化,最好動動手园爷,不懂的/有懷疑的地方請記下來宠蚂,一起討論之~不可放過一點疑問!
混淆矩陣
那首先我們先說分類的問題童社,先從混淆矩陣說起求厕。對于一個二分類問題來說,將實例分為正類(Positive/+)或負類(Negative/-)扰楼,但在使用分類器進行分類時會有四種情況
一個實例是正類呀癣,并被預(yù)測為正類,記為真正類(True Positive TP/T+)
一個實例是正類弦赖,但被預(yù)測為負類项栏,記為假負類(False Negative FN/F-)
一個實例是負類,但被預(yù)測為正類蹬竖,記為假正類(False Positive FP/F+)
一個實例是負類沼沈,但被預(yù)測為負類,記為真負類(True Negative TN/F-)
為了全面的表達所有二分問題中的指標(biāo)參數(shù)币厕,下列矩陣叫做混淆矩陣 - Confusion Matrix
這是我們評估一個分類模型的時候第一件要做的事情列另。我們看這個圖,上面有一個正負例判定閾值旦装, 我之前說過做2分類問題的時候我們得到的是一個0~1的概率值页衙,外圍系統(tǒng)通過設(shè)定一個閾值來判斷數(shù)據(jù)是正例還是負例。 這個混淆矩陣就是要計算不同的閾值下那4中分類情況下的分布阴绢。那我們?yōu)槭裁匆y(tǒng)計這些東西呢店乐。 因為我們之后要講的關(guān)于分類問題的所有評估指標(biāo),幾乎都是通過混淆矩陣計算出來的旱函。
PS:注意到上面圖中的模型預(yù)測(負)這一列响巢,實際值(正)+實際值(負)不等于總數(shù), 這是因為在計算過程中四舍五入了棒妨!
精準踪古,召回含长,F(xiàn)1 score
精準率:
首先是精準率(Precision)拘泞,其實可能叫【被預(yù)測為正類的精準率】更合適。因為它的公式是TP/(TP+FP)枕扫,也就是在所有被預(yù)測為正類的樣本中陪腌,其中本來確實是正類所占的百分比。還是用剛才的例子來說的話烟瞧,就是:在這群被預(yù)測的人群中诗鸭,本來確實是患癌的人數(shù)占所有被預(yù)測為患癌人數(shù)的百分比。
召回率:
召回率(Recall)就是說参滴,所有得了癌癥的病人中强岸,有多少個被查出來得癌癥。公式是:TP/(TP+FN)砾赔。 意思是真正類在所有正樣本中的比率蝌箍,也就是真正類率(TPR)。
召回和精準理解起來可能比較繞暴心,我多解釋一下妓盲,我們說要統(tǒng)計召回率,因為我們要知道所有得了癌癥中的人中专普,我們預(yù)測出來多少悯衬。因為預(yù)測癌癥是我們這個模型的主要目的, 我們希望的是所有得了癌癥的人都被查出來檀夹。不能說得了癌癥的我預(yù)測說是健康的甚亭,這樣耽誤人家的病情是不行的。 但同時我們也要統(tǒng)計精準率击胜, 為什么呢, 假如我們?yōu)榱俗非笳倩芈室畚疲矣州斎胍粋€特別糟糕的模型偶摔,永遠判斷你是得了癌癥的,這樣真正得了癌癥的患者肯定不會漏掉了促脉。但明顯這也是不行的對吧辰斋, 人家明明是健康的你硬說人家得了癌癥,結(jié)果人家回去悲憤欲絕瘸味,生無可戀宫仗,自殺了∨苑拢或者回去以后散盡家財藕夫,出家為僧。結(jié)果你后來跟人說我們誤診了, 那人家砍死你的心都有毅贮。 所以在統(tǒng)計召回的同時我們也要加入精準率办悟, 計算所有被查出來得了癌癥的人中,有多少是真的癌癥病人滩褥。 說到這大家可能已經(jīng)看出來召回和精準在某稱程度下是互斥的病蛉, 因為他們追求的是幾乎相反的目標(biāo)。 有些時候召回高了瑰煎,精準就會低铺然。精準高了召回會變低。 所以這時候就要根據(jù)我們的業(yè)務(wù)重心來選擇到底選擇召回高的模型還是精準高的模型酒甸。 有些業(yè)務(wù)比較看重召回魄健,有些業(yè)務(wù)比較看重精準。 當(dāng)然也有兩樣都很看重的業(yè)務(wù)烘挫,就例如我們說的這個預(yù)測癌癥的例子诀艰。或者說銀行的反欺詐場景饮六。 反欺詐追求高召回率其垄,不能讓真正的欺詐場景漏過去,在一定程度上也注重精準率卤橄,不能隨便三天兩頭的判斷錯誤把用戶的卡給凍結(jié)了對吧绿满,來這么幾次用戶就該換銀行了。 所以我們還有一個指標(biāo)叫F1 score窟扑, 大家可以理解為是召回和精準的平均值喇颁,在同時關(guān)注這兩種指標(biāo)的場景下作為評估維度。
今天就先理解到這里吧嚎货,待續(xù)橘霎!
參考文獻及原文地址:
孫高飛(ycwdaaaa@testerhome): AI測試深度學(xué)習(xí)基礎(chǔ) (十三)--演講稿: 機器學(xué)習(xí)服務(wù)的測試探索