??▌基本概念
我們從一個(gè)實(shí)例來(lái)了解機(jī)器學(xué)習(xí)的基本概念。假設(shè)我們現(xiàn)在面臨這樣一個(gè)任務(wù)(Task),任務(wù)的內(nèi)容是識(shí)別手寫(xiě)體的數(shù)字。對(duì)于計(jì)算機(jī)而言,這些手寫(xiě)數(shù)字是一張張圖片,如下所示:
對(duì)人來(lái)說(shuō),識(shí)別這些手寫(xiě)數(shù)字是非常簡(jiǎn)單的,但是對(duì)于計(jì)算機(jī)而言,這種任務(wù)很難通過(guò)固定的編程來(lái)完成,即使我們把我們已經(jīng)知道的所有手寫(xiě)數(shù)字都存儲(chǔ)到數(shù)據(jù)庫(kù)中,一旦出現(xiàn)一個(gè)全新的手寫(xiě)數(shù)字(從未出現(xiàn)在數(shù)據(jù)庫(kù)中),固定的程序就很難識(shí)別出這個(gè)數(shù)字來(lái)。所以,在這里,我們的任務(wù)指的就是這類很難通過(guò)固定編程解決的任務(wù)。
要解決這類任務(wù),我們的計(jì)算機(jī)需要有一定的“智能”,但是在我們的認(rèn)知中,只有人類才具備這種“高級(jí)智能”(某些靈長(zhǎng)類動(dòng)物雖然具備一定的運(yùn)用工具的能力,但我們認(rèn)為那距離我們所說(shuō)的智能還有很遠(yuǎn)的距離),所以如果我們想讓計(jì)算機(jī)具備這種“智能”,由于這是人造的事物,我們稱這種智能為人工智能(Artificial Intelligence, AI)。
正式地講,人工智能,是指由人制造出來(lái)的機(jī)器所表現(xiàn)出來(lái)的智能。通常人工智能是指通過(guò)普通計(jì)算機(jī)程序的手段實(shí)現(xiàn)的類人智能技術(shù)。機(jī)器學(xué)習(xí)可以幫助我們解決這類任務(wù),所以我們說(shuō),機(jī)器學(xué)習(xí)是一種人工智能技術(shù)。
那么機(jī)器學(xué)習(xí)是怎么解決這類任務(wù)的呢?
機(jī)器學(xué)習(xí)(Machine learning)是一類基于數(shù)據(jù)或者既往的經(jīng)驗(yàn),優(yōu)化計(jì)算機(jī)程序的性能標(biāo)準(zhǔn)的方法。這是機(jī)器學(xué)習(xí)的定義,看起來(lái)可能難以理解,我們對(duì)它進(jìn)行分解:
1、首先,對(duì)于手寫(xiě)數(shù)字識(shí)別這個(gè)任務(wù)來(lái)說(shuō),數(shù)據(jù)或者既往的經(jīng)驗(yàn)就是我們已經(jīng)收集到的手寫(xiě)數(shù)字,我們要讓我們的程序從這些數(shù)據(jù)中學(xué)習(xí)到一種能力/智能,這種能力就是:通過(guò)學(xué)習(xí),這個(gè)程序能夠像人一樣識(shí)別手寫(xiě)數(shù)字。
2、性能標(biāo)準(zhǔn),就是指衡量我們的程序的這種能力高低的指標(biāo)了。在識(shí)別任務(wù)中,這個(gè)指標(biāo)就是識(shí)別的精度。給定100個(gè)手寫(xiě)數(shù)字,有99個(gè)數(shù)字被我們的“智能”程序識(shí)別正確,那么精度就是99%。
3、優(yōu)化,就是指我們基于既往的經(jīng)驗(yàn)或者數(shù)據(jù),讓我們的“智能”程序變得越來(lái)越聰明,甚至比人類更加聰明。
機(jī)器學(xué)習(xí),就是能夠從經(jīng)驗(yàn)中不斷“學(xué)習(xí)進(jìn)步”的算法,在很多情況下,我們將這些經(jīng)驗(yàn)用數(shù)值描述,因此,經(jīng)驗(yàn)=數(shù)據(jù),這些收集在一起的數(shù)據(jù)被成為數(shù)據(jù)集(Dataset),在這些已有的數(shù)據(jù)集上學(xué)習(xí)的過(guò)程我們稱之為訓(xùn)練(Train),因此,這個(gè)數(shù)據(jù)集又被稱為訓(xùn)練集。
很顯然,我們真正關(guān)心的并不是機(jī)器學(xué)習(xí)算法在訓(xùn)練集上的表現(xiàn),我們希望我們的“智能”程序?qū)奈匆?jiàn)過(guò)的手寫(xiě)字也能夠正確的識(shí)別,這種在新的樣本(數(shù)據(jù))上的性能我們稱之為泛化能力(generalization ability),對(duì)于一個(gè)任務(wù)而言,泛化能力越強(qiáng),這個(gè)機(jī)器學(xué)習(xí)算法就越成功。
根據(jù)數(shù)據(jù)集的不同,機(jī)器學(xué)習(xí)可以分成如下三類:
監(jiān)督學(xué)習(xí)(Supervised learning):數(shù)據(jù)集既包含樣本(手寫(xiě)字圖片),還包含其對(duì)應(yīng)的標(biāo)簽(每張手寫(xiě)字圖片對(duì)應(yīng)的是那個(gè)數(shù)字)
無(wú)監(jiān)督學(xué)習(xí)(Unsupervised learning):與監(jiān)督學(xué)習(xí)相對(duì),數(shù)據(jù)集僅包含樣本,不包含樣本對(duì)應(yīng)的標(biāo)簽,機(jī)器學(xué)習(xí)算法需要自行確定樣本的類別歸屬
強(qiáng)化學(xué)習(xí)(Reinforcement learning):又稱為增強(qiáng)學(xué)習(xí),是一種半監(jiān)督學(xué)習(xí),強(qiáng)調(diào)如何基于環(huán)境而行動(dòng),以取得最大化的預(yù)期利益。
當(dāng)前大熱的神經(jīng)網(wǎng)絡(luò),深度學(xué)習(xí)等等都是監(jiān)督學(xué)習(xí),隨著大數(shù)據(jù)時(shí)代的到來(lái)以及GPU帶來(lái)的計(jì)算能力的提升,監(jiān)督學(xué)習(xí)已經(jīng)在諸如圖像識(shí)別,目標(biāo)檢測(cè)和跟蹤,機(jī)器翻譯,語(yǔ)音識(shí)別,自然語(yǔ)言處理的大量領(lǐng)域取得了突破性的進(jìn)展。
然而,當(dāng)前在無(wú)監(jiān)督學(xué)習(xí)領(lǐng)域并沒(méi)有取得像監(jiān)督學(xué)習(xí)那樣的突破性進(jìn)展。由于在無(wú)人駕駛領(lǐng)域主要應(yīng)用的機(jī)器學(xué)習(xí)技術(shù)仍然是監(jiān)督學(xué)習(xí),本文將重點(diǎn)講監(jiān)督學(xué)習(xí)的相關(guān)內(nèi)容。
在本文中,為了便于理解,我們使用手寫(xiě)數(shù)字識(shí)別來(lái)描述處理的任務(wù),實(shí)際上,機(jī)器學(xué)習(xí)算法能夠處理的任務(wù)還有很多,例如:分類,回歸,轉(zhuǎn)錄,機(jī)器翻譯,結(jié)構(gòu)化輸出,異常檢測(cè),合成與采樣, 缺失值填補(bǔ)等等。這些任務(wù)看似不同,卻有著一個(gè)共性,那就是很難通過(guò)人為設(shè)計(jì)的確定性程序來(lái)解決。
▌監(jiān)督學(xué)習(xí)
經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化
監(jiān)督學(xué)習(xí),本質(zhì)上就是在給定一個(gè)集合(X,Y)的基礎(chǔ)上去學(xué)得一個(gè)函數(shù):
y=f(x)
在 MNIST 問(wèn)題中,X就表示我們收集到的所有的手寫(xiě)數(shù)字圖片的集合,Y表示這些圖片對(duì)應(yīng)的真實(shí)的數(shù)字,函數(shù)f則表示輸入一張手寫(xiě)字圖片,輸出這張圖片表示的數(shù)值這樣的一個(gè)映射關(guān)系。
很顯然,這樣的映射關(guān)系中的x有著一個(gè)極其巨大的取值域(甚至有無(wú)限種可能取值), 所以我們可以把我們已有的樣本集合(X,Y)理解為從某個(gè)更大甚至是無(wú)限的母體中,根據(jù)某種未知的概率分布p,以獨(dú)立同分布隨機(jī)變量方式來(lái)取樣。現(xiàn)在,我們假定存在一個(gè)損失函數(shù)(Loss function)L,這個(gè)損失函數(shù)可以表述為:
L(f(x),y)
這個(gè)損失函數(shù)描述的是我們學(xué)得的函數(shù)f(x)的輸出和x樣本對(duì)應(yīng)的真實(shí)值y之間的距離,很顯然,這個(gè)損失越小,表示我們學(xué)得的函數(shù)f更貼近于真實(shí)映射g。以損失函數(shù)為基礎(chǔ),我們定義風(fēng)險(xiǎn):
函數(shù)f的風(fēng)險(xiǎn),就是損失函數(shù)的期望值。由于我們以手寫(xiě)字分類為例,所以這里各個(gè)樣本的概率分布p是離散的,我們可以用如下公式定義風(fēng)險(xiǎn):
如果是連續(xù)的,則可以使用定積分和概率密度函數(shù)來(lái)表示。這里的xi是指整個(gè)樣本空間的所有可能取值,所以,現(xiàn)在的目標(biāo)就變成了:在很多可能的函數(shù)中,去尋找一個(gè)f,使得風(fēng)險(xiǎn)R(f)最小。
然而,真實(shí)的風(fēng)險(xiǎn)是建立在對(duì)整個(gè)樣本空間進(jìn)行考量的,我們并不能獲得整個(gè)樣本空間,我們有的只是一個(gè)從我們要解決的任務(wù)的樣本空間中使用獨(dú)立同分布的方法隨機(jī)采樣得到的子集(X,Y),那么,在這個(gè)子集上,我們可以求出這個(gè)真實(shí)分布的近似值,比如說(shuō)經(jīng)驗(yàn)風(fēng)險(xiǎn):
其中(xi,yi)是我們已有的數(shù)據(jù)集中的樣本,所以,我們選擇能夠最小化經(jīng)驗(yàn)風(fēng)險(xiǎn)的函數(shù)f這樣的一個(gè)策略就被稱之為經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化原則。
很顯然,當(dāng)訓(xùn)練數(shù)據(jù)集足夠大的時(shí)候,經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化這一策略能夠保證很好的學(xué)習(xí)效果——這也就是我們當(dāng)代深度神經(jīng)網(wǎng)絡(luò)取得很多方面的成功的一個(gè)重要原因。專業(yè)的說(shuō),我們把我們已有的數(shù)據(jù)集的大小稱之為樣本容量。不論是什么應(yīng)用領(lǐng)域,規(guī)范的大數(shù)據(jù)集合,就意味著我們的機(jī)器學(xué)習(xí)任務(wù)已經(jīng)成功了一半。
模型,過(guò)擬合,欠擬合
那么學(xué)習(xí)這個(gè)f需要一個(gè)載體, 這個(gè)載體的作用就是,用它我們可以表述各種各樣的函數(shù)f這樣我們就可以通過(guò)調(diào)整這個(gè)載體去選擇一個(gè)最優(yōu)的f,這個(gè)最優(yōu)的f能夠使經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,這個(gè)載體我們專業(yè)地說(shuō),就是機(jī)器學(xué)習(xí)中的模型(model), 單純地說(shuō)模型的抽象概念可能讓人難以理解,我們選取一種模型的實(shí)例來(lái)看。
我們以人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)為例來(lái)討論。首先,我們知道我們現(xiàn)在需要的是一個(gè)模型,這個(gè)模型具有能夠描述各種各樣的函數(shù)的能力,下圖是一個(gè)神經(jīng)網(wǎng)絡(luò):
它看起來(lái)很復(fù)雜,讓人費(fèi)解,那么我們把它簡(jiǎn)化,如下圖:
我們把這個(gè)模型理解成一個(gè)黑箱,這個(gè)黑箱里有很多參數(shù):(w1,w2,w3,...,wn),我們用W來(lái)描述這個(gè)黑箱中的參數(shù),這些參數(shù)叫模型參數(shù),即使模型內(nèi)部的結(jié)構(gòu)不變,僅僅修改這些參數(shù),模型也能表現(xiàn)出不同的本領(lǐng)。
具體來(lái)說(shuō):對(duì)于手寫(xiě)字識(shí)別任務(wù),我們?cè)谑謱?xiě)字?jǐn)?shù)據(jù)集上通過(guò)一定的算法調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù),使得神經(jīng)網(wǎng)絡(luò)擬合出一個(gè)函數(shù)f,這個(gè)f是經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化的函數(shù),那么我們訓(xùn)練出來(lái)的這個(gè)“黑箱”就可以用于手寫(xiě)字識(shí)別了;另一方面,對(duì)于車輛識(shí)別來(lái)說(shuō),假設(shè)我們有車輛數(shù)據(jù)集,相同的思路,我們可以訓(xùn)練出一個(gè)黑箱來(lái)最做車輛識(shí)別。如下圖所示:
在前文中我們知道,考量一個(gè)機(jī)器學(xué)習(xí)模型的關(guān)鍵在于其泛化能力,一個(gè)考量泛化能力的重要指標(biāo)就是模型的訓(xùn)練誤差和測(cè)試誤差的情況:
訓(xùn)練誤差:模型在訓(xùn)練集上的誤差
測(cè)試誤差:模型在從未“見(jiàn)過(guò)的”測(cè)試集上的誤差
這兩個(gè)誤差,分別對(duì)應(yīng)了機(jī)器學(xué)習(xí)任務(wù)中需要解決的兩個(gè)問(wèn)題:欠擬合和過(guò)擬合。當(dāng)訓(xùn)練誤差過(guò)高時(shí),模型學(xué)到的函數(shù)并沒(méi)有滿足經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,對(duì)手寫(xiě)字識(shí)別來(lái)說(shuō),模型即使在我們的訓(xùn)練集中識(shí)別的精度也很差,我們稱這種情況為欠擬合。
當(dāng)訓(xùn)練誤差低但是測(cè)試誤差高,即訓(xùn)練誤差和測(cè)試誤差的差距過(guò)大時(shí),我們稱之為過(guò)擬合,此時(shí)模型學(xué)到了訓(xùn)練集上的一些“多余的規(guī)律”,表現(xiàn)為在訓(xùn)練數(shù)據(jù)集上識(shí)別精度很高,在測(cè)試數(shù)據(jù)集(未被用于訓(xùn)練,或者說(shuō)未被用于調(diào)整模型參數(shù)的數(shù)據(jù)集合)上識(shí)別精度不高。
模型的容量(capacity)決定了模型是否傾向于過(guò)擬合還是欠擬合。模型的容量指的是模型擬合各種函數(shù)的能力,很顯然,越復(fù)雜的模型就能夠表述越復(fù)雜的函數(shù)(或者說(shuō)規(guī)律,或者說(shuō)模式)。那么對(duì)于一個(gè)特定的任務(wù)(比如說(shuō)手寫(xiě)字識(shí)別),如何去選擇合適的模型容量來(lái)擬合相應(yīng)的函數(shù)呢?這里就引入了奧卡姆剃刀原則:
奧卡姆剃刀原則:在同樣能夠解釋已知觀測(cè)現(xiàn)象的假設(shè)中,我們應(yīng)該挑選”最簡(jiǎn)單”的那一個(gè)。
這可以理解為一個(gè)簡(jiǎn)約設(shè)計(jì)原則,在處理一個(gè)任務(wù)是,我們應(yīng)當(dāng)使用盡可能簡(jiǎn)單的模型結(jié)構(gòu)。
“一定的算法”–>梯度下降算法
前面我們說(shuō)到我們可以通過(guò)一定的算法調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù),這里我們就來(lái)介紹一下這個(gè)定向(朝著經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化的方向)調(diào)整模型參數(shù)的算法——梯度下降算法。
要最小化經(jīng)驗(yàn)風(fēng)險(xiǎn)Rˉ(f),等同于最小化損失函數(shù),在機(jī)器學(xué)習(xí)中,損失函數(shù)可以寫(xiě)成每個(gè)樣本的損失函數(shù)的總和:
其中θ表示模型中的所有參數(shù),現(xiàn)在我們要最小化L(θ),我們首先想到的是求解導(dǎo)數(shù),我們把這個(gè)L對(duì)θ的導(dǎo)數(shù)記作L′(θ)或者dLdθ, 導(dǎo)數(shù)L′(θ)就代表了函數(shù)L(θ)在θ處的斜率,我們可以把函數(shù)的輸入輸出關(guān)聯(lián)性用斜率來(lái)描述:
L(θ+α)≈L(θ)+αL′(θ)
其中,α是一個(gè)變化量,利用這個(gè)公式,我們就可以利用導(dǎo)數(shù)來(lái)逐漸使L變小,具體來(lái)說(shuō),我們只要讓?duì)恋姆?hào)和導(dǎo)數(shù)的符號(hào)相反,即:
sign(α)=?sign(L′(θ))
這樣,L(θ+α)就會(huì)比原來(lái)的L(θ)更?。?/p>
L(θ+α)=L(θ)?|αL′(θ)|
這種通過(guò)向?qū)?shù)的反方向移動(dòng)一小步來(lái)最小化目標(biāo)函數(shù)(在我們機(jī)器學(xué)習(xí)中,也就是損失函數(shù))的方法,我們稱之為梯度下降(gradient descent)。
對(duì)于神經(jīng)網(wǎng)絡(luò)這種復(fù)雜的模型來(lái)說(shuō),模型包含了很多參數(shù),所以這里的θ就表示一個(gè)參數(shù)集合,或者說(shuō)參數(shù)向量, 所以我們要求的導(dǎo)數(shù)就變成了包含所有參數(shù)的偏導(dǎo)數(shù)的向量▽?duì)萀(θ)。
這里的α就可以理解為我們進(jìn)行梯度下降的過(guò)程中的步長(zhǎng)了,我們將學(xué)習(xí)的步長(zhǎng)稱為學(xué)習(xí)率(learning rate), 它描述了梯度下降的速度。
▌小結(jié)
在本文中,我們沒(méi)有介紹任何一種具體的機(jī)器學(xué)習(xí)算法和模型,但是我們快速的了解了機(jī)器學(xué)習(xí)任務(wù)中的重要成分和結(jié)構(gòu),以下我們來(lái)進(jìn)行一個(gè)小的總結(jié):
首先,機(jī)器學(xué)習(xí)是用來(lái)完成特定的任務(wù)的:比如說(shuō)手寫(xiě)字識(shí)別,行人檢測(cè),房?jī)r(jià)預(yù)測(cè)等等。這個(gè)任務(wù)必須要有一定的性能度量,比如說(shuō)識(shí)別精度,預(yù)測(cè)誤差等等。
然后,為了處理這個(gè)任務(wù),我們需要設(shè)計(jì)模型,這個(gè)模型能夠從數(shù)據(jù)中基于一定的策略(比如說(shuō)經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化原則) 和一定的算法(比如說(shuō)梯度下降算法) 去學(xué)習(xí)一個(gè)函數(shù)。
最后,這個(gè)函數(shù)要能夠處理這個(gè)任務(wù)中的各種各樣的情況(包括沒(méi)有出現(xiàn)在訓(xùn)練集中的情況),這個(gè)模型要有很好的泛化能力,這樣,我們的機(jī)器學(xué)習(xí)任務(wù)就成功了。
-
人工智能
+關(guān)注
關(guān)注
1806文章
49028瀏覽量
249537 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134622 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25448
原文標(biāo)題:機(jī)器學(xué)習(xí)入門(mén)概覽
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA在機(jī)器學(xué)習(xí)中的具體應(yīng)用
一文帶你了解什么是機(jī)器視覺(jué)網(wǎng)卡

評(píng)論