上一期:(圖解)人工智能的黃金年代:機(jī)器學(xué)習(xí)
1950年代計(jì)算機(jī)發(fā)明以來,科學(xué)家便希冀著利用計(jì)算機(jī)創(chuàng)造出人工智能;然而,當(dāng)時的硬件效能低落、數(shù)據(jù)量不足,隨著通用問題解決機(jī)、日本第五代計(jì)算機(jī)等研究計(jì)劃的失敗,人工智能陷入了第一次的寒冬。
人工智能「現(xiàn)代鍊金術(shù)」的惡名,一直到1980年代開始才又復(fù)興。此時科學(xué)家不再使用傳統(tǒng)的邏輯推理方法,取而代之的是結(jié)合機(jī)率學(xué)、統(tǒng)計(jì)學(xué)等大量統(tǒng)計(jì)理論,讓計(jì)算機(jī)能透過資料自行學(xué)會一套技能,稱為「機(jī)器學(xué)習(xí)」。
機(jī)器學(xué)習(xí)方法有許多種不同的模型,此間爆發(fā)了兩次浪潮,第一波興盛的模型為「類神經(jīng)網(wǎng)絡(luò)」、又稱人工神經(jīng)網(wǎng)絡(luò)。類神經(jīng)網(wǎng)絡(luò)在剛出現(xiàn)時大為火紅,然而,在不久后卻遇到了運(yùn)算瓶頸,一下又沒落了下去,1980年代中期,由其他機(jī)器學(xué)習(xí)模型,如支持矢量機(jī)(SVM)模型作為主流。一直到2006年,多倫多大學(xué)的Geoffrey Hinton教授成功解決了類神經(jīng)網(wǎng)絡(luò)所遇到的問題、讓類神經(jīng)網(wǎng)絡(luò)重新?lián)Q上「深度學(xué)習(xí)」的名字卷土重來;如今深度學(xué)習(xí)技術(shù)對各大產(chǎn)業(yè)領(lǐng)域都將產(chǎn)生深遠(yuǎn)的影響,堪稱第四次工業(yè)革命。
今天就讓我們來談?wù)?,機(jī)器學(xué)習(xí)模型的第一波浪潮「類神經(jīng)網(wǎng)絡(luò)」、其原理和瓶頸;與第二波浪潮「淺層機(jī)器學(xué)習(xí)」如支持矢量機(jī),之所以一時間取代類神經(jīng)網(wǎng)絡(luò)、作為機(jī)器學(xué)習(xí)的主流熱門技術(shù)的原因。
(備注: 文中會有簡單的數(shù)學(xué)公式,但讀者不用害怕,只要大概理解基本原理即可。)
1950年代的人工智能走入了漫長的寒冬期,直到1980間,機(jī)器學(xué)習(xí)方迎來了第一個春天,這個春天叫做「類神經(jīng)網(wǎng)絡(luò)」,為計(jì)算機(jī)科學(xué)家由生物大腦的神經(jīng)元運(yùn)作方式所啟發(fā)、因而建立出來的數(shù)學(xué)模型。
1981年,美國神經(jīng)生物學(xué)家David Hubel和Torsten Wiesel對于動物視覺系統(tǒng)的處理信息方式有了進(jìn)一步的發(fā)現(xiàn),因而獲得了諾貝爾醫(yī)學(xué)獎。
他們把貓的頭骨開了一個小洞,向內(nèi)插入微電擊、埋入視皮質(zhì)細(xì)胞中,然后在小貓眼前放置一個會投射出光影的布幕,并不時改變光影的角度、亮度與大小。經(jīng)過數(shù)次實(shí)驗(yàn)與無數(shù)只小貓的犧牲,Hubel和Wiesel發(fā)現(xiàn),不同的視覺神經(jīng)元對于不同光影的反應(yīng)不盡相同──在不同情況下的視覺神經(jīng)元有著不同的活躍程度,甚至只對圖像的某些特定細(xì)節(jié)有反應(yīng)。
生物學(xué)上的神經(jīng)元研究,啟發(fā)了AI領(lǐng)域關(guān)于「類神經(jīng)網(wǎng)絡(luò)」(或稱人工神經(jīng)網(wǎng)絡(luò)) 的概念。神經(jīng)系統(tǒng)由神經(jīng)元構(gòu)成,彼此間透過突觸以電流傳遞訊號。是否傳遞訊號、取決于神經(jīng)細(xì)胞接收到的訊號量,當(dāng)訊號量超過了某個閾值(Threshold)時,細(xì)胞體就會產(chǎn)生電流、通過突觸傳到其他神經(jīng)元。
為了模擬神經(jīng)細(xì)胞行為,科學(xué)家設(shè)定每一個神經(jīng)元都是一個「激發(fā)函數(shù)」,其實(shí)就是一個公式;當(dāng)對神經(jīng)元輸入一個輸入值(input)后,經(jīng)過激發(fā)函數(shù)的運(yùn)算、輸出輸出值(output),這個輸出值會再傳入下一個神經(jīng)元,成為該神經(jīng)元的輸出值。如此這般,從第一層的「特征矢量」作為輸入值,一層層傳下去、直到最后一層輸出預(yù)測結(jié)果。
至于神經(jīng)元里面的激發(fā)函數(shù)公式是什么呢?1957年,Rosenblatt提出了感知機(jī)(Perceptron)模型。將特征矢量X1, X2, X3輸入進(jìn)感知機(jī)后,感知機(jī)會分別給予一個對應(yīng)的權(quán)重,分別為W1, W2, W3。若特征矢量和權(quán)重的內(nèi)積結(jié)果大于某個閾值(Threshold)時,輸出結(jié)果為1 (代表電流會傳遞)、若小于閾值則輸出0 (代表電流不傳遞)。
利用感知機(jī)模型,可以解決機(jī)器學(xué)習(xí)的基本二分法問題:將類別僅分為0和1 (圖片中有貓/沒貓;有得病/沒得病; 會下雨/不會下雨…)
然而輸出結(jié)果只有0和1,顯得不太精確;感知機(jī)對線性分類有效,無法處理線性不可分的問題。什么是線性可分、和線性不可分的問題呢?比如說切開西瓜,可以發(fā)現(xiàn)里面有白色的籽和黑色的籽;如果白籽和黑籽的分布,能讓我們用一刀切分開,就是線性可分;如果是要用橢圓或曲線才能切開,就是線性不可分。因此,線性可分的意義在于——我們能不能單純用一條直線把兩團(tuán)資料點(diǎn)切分開。
由于感知機(jī)只能解決線性可分的問題,但現(xiàn)實(shí)中的分類問題通常是非線性的,因此針對線性不可分問題,類神經(jīng)網(wǎng)絡(luò)領(lǐng)域又發(fā)展出了不同的激發(fā)函數(shù),比如使用Sigmoid函數(shù),將「圖片中有貓/沒貓」的0和1標(biāo)簽、進(jìn)一步細(xì)化成可能的機(jī)率──「圖片中有貓/沒貓」的機(jī)率是在0到1之間的任意實(shí)數(shù),比如0.8807…(x=2)、0.2689…(x=-1)。
因此「Sigmoid神經(jīng)元」進(jìn)一步被提了出來,使用Sigmoid函數(shù)作為神經(jīng)元的激發(fā)函數(shù)。Sigmoid函數(shù)即統(tǒng)計(jì)學(xué)上的邏輯回歸,因?yàn)閳D形長得像一個S故有此稱。
機(jī)器學(xué)習(xí)的核心概念是從資料中自行學(xué)會一套技能,并根據(jù)新給的數(shù)據(jù)、自行更正預(yù)測錯誤的地方、不斷地優(yōu)化技能。那么,類神經(jīng)網(wǎng)絡(luò)是如何從錯誤中進(jìn)行修正學(xué)習(xí)的呢? 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程可以分成下列兩個步驟:
1. 前向傳播 (Forward-Propagation)
類神經(jīng)網(wǎng)絡(luò)采用監(jiān)督式學(xué)習(xí)方法。在網(wǎng)絡(luò)中,每一個神經(jīng)元都是一個激發(fā)函數(shù);多個神經(jīng)元連接在一起、形成一個類似生物神經(jīng)網(wǎng)絡(luò)的網(wǎng)狀結(jié)構(gòu),并分成了好幾層。
當(dāng)機(jī)器學(xué)習(xí)第一次「看」到一只貓咪的圖片資料時,會將貓咪圖片的特征矢量透過神經(jīng)網(wǎng)絡(luò)從左向右傳遞過去,中間會經(jīng)過特定幾個神經(jīng)元、經(jīng)過各個神經(jīng)元上的激發(fā)函數(shù)后產(chǎn)出最終的預(yù)測答案──比如最后預(yù)測出來的結(jié)果是0.1,機(jī)器學(xué)習(xí)認(rèn)為這張圖片里面很可能沒有貓咪。
2. 反向傳播 (Backward-Propagation)
此時資料科學(xué)家會設(shè)定更正錯誤的方法──「代價函數(shù)」(Cost Function)。代價函數(shù)是預(yù)測結(jié)果和真實(shí)結(jié)果之間的差距。
如果預(yù)測完全正確,則代價函數(shù)值為0;如果代價函數(shù)值很高,則表示預(yù)測的偏誤很大。所以我們的目標(biāo)便是將代價函數(shù)優(yōu)化到越小越好。
當(dāng)預(yù)測結(jié)果和真實(shí)結(jié)果不一致時,兩者間的差距越大就會讓代價函數(shù)越大;因此,為了讓預(yù)測結(jié)果越接近目標(biāo)值、也就是代價函數(shù)達(dá)到最小,我們會將這個結(jié)果從右到左反向傳遞回去,調(diào)整神經(jīng)元的權(quán)重以找到代價函數(shù)的最小值。
簡單來講,類神經(jīng)網(wǎng)絡(luò)就是先讓資料訊號通過網(wǎng)絡(luò),輸出結(jié)果后、計(jì)算其與真實(shí)情況的誤差。再將誤差訊號反向傳遞回去、對每一個神經(jīng)元都往正確的方向調(diào)整一下權(quán)重;如此來回個數(shù)千萬遍后,機(jī)器就學(xué)會如何辨識一只貓了。
1986年,Rumelhar和Hinton等人提出了反向傳播算法,解決了神經(jīng)網(wǎng)絡(luò)所需要的復(fù)雜計(jì)算量問題,從而帶動了神經(jīng)網(wǎng)絡(luò)的研究熱潮。
此時的Hinton還很年輕,即便在后來神經(jīng)網(wǎng)絡(luò)遇到了瓶頸——反向傳播的優(yōu)化(找出誤差的最小值)問題,學(xué)術(shù)界一度摒棄神經(jīng)網(wǎng)絡(luò)時,仍不離不棄對于神經(jīng)網(wǎng)絡(luò)的研究。也正是這股熱情,使得30年以后,正是他重新定義了神經(jīng)網(wǎng)絡(luò)、帶來了神經(jīng)網(wǎng)絡(luò)復(fù)甦的又一春;Hinton也因此被稱為「深度學(xué)習(xí)之父」。
這邊,就讓我們來了解一下類神經(jīng)網(wǎng)絡(luò)究竟遇到了什么問題,以致差點(diǎn)一厥不振。
梯度消失問題——多層神經(jīng)網(wǎng)絡(luò)的挑戰(zhàn)
當(dāng)變量是線性關(guān)系時,代價函數(shù)J(?),也就是計(jì)算預(yù)測結(jié)果和實(shí)際真實(shí)數(shù)據(jù)之間的距離差距,將公式用圖形畫出來,能發(fā)現(xiàn)是一個凸函數(shù)。可以想象我們將一顆球從最高點(diǎn)開始滾落、很快就能掉到這個山谷的谷底 (最小值)。
也就是說,在面對線性問題時,模型能夠很快地找到代價函數(shù)的最小值。
然而在真實(shí)世界中、變量之間的關(guān)系多半是非線性。比如當(dāng)我們采用Sigmoid神經(jīng)元時,由于Sigmoid函數(shù)不是線性函數(shù),其代價函數(shù) J(?) 便不是凸函數(shù),意味著圖形上有多個局部最小值。
將Sigmoid神經(jīng)元的代價函數(shù)圖形繪制出來后,可以發(fā)現(xiàn)在最高點(diǎn)丟下一顆球后,球可能會掉到某個下凹的地方就停止?jié)L動了,然而那并非是全山谷最低的地方。也就是說,我們很容易僅找到局部最小值、而非全域的最小值。
這種尋找代價函數(shù)最小值的方法稱為「梯度下降法」(Gradient Descent)。透過微積分計(jì)算出斜率 (導(dǎo)數(shù)),我們可以計(jì)算出山坡上最陡峭的那一個方向,這種微積分概念稱為「梯度」。只要朝著梯度的方向走去,就是最快下降的道路了。
至于要從山谷中的哪一個地方降落、開始往下走呢?我們可以先隨機(jī)選擇一個斜率為初始值,然后不斷地修改以減小,直到斜率為0。如此稱為「隨機(jī)梯度下降法」(Stochastic Gradient Descent)。
機(jī)器學(xué)習(xí)相當(dāng)注重優(yōu)化的問題──如何用更快的方式逼近最佳解。計(jì)算機(jī)科學(xué)家會去想:我該優(yōu)化什么東西才好? 要怎么優(yōu)化才會實(shí)際上增加我的收入、或解決某個實(shí)務(wù)上的問題? 要用甚么方法達(dá)成這個優(yōu)化?
象是我們在梯度下降法中討論的收斂性值 (如何找到最低的谷底),即是機(jī)器學(xué)習(xí)的研究重點(diǎn)。機(jī)器學(xué)習(xí)重視實(shí)務(wù)問題上的使用情境差異,會嘗試解決各種不同的問題、并尋找最佳的優(yōu)化方式。
一層層的類神經(jīng)網(wǎng)絡(luò)聽起來似乎很厲害。當(dāng)年由Hinton等人首先提出了多層感知機(jī)、以及反向傳播的訓(xùn)練算法,使得類神經(jīng)網(wǎng)絡(luò)在1980-1990年代鼎盛一時。然而,幾乎讓神經(jīng)網(wǎng)絡(luò)這個機(jī)器學(xué)習(xí)方法從此一蹶不振的問題,很快就出現(xiàn)了。這個問題叫做「梯度消失」(Vanishing Gradient)。
梯度下降法就像爬下谷底一樣,從一開始很快的往下跑,越接近谷底時每個一梯度會逐漸變小、慢慢逼近最小值。
我們在一開始提到過,類神經(jīng)網(wǎng)絡(luò)的原理就是先讓資料訊號通過網(wǎng)絡(luò),輸出結(jié)果后、計(jì)算其與真實(shí)情況的誤差。再將誤差訊號反向傳遞回去,透過梯度下降法,讓神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)去逐一調(diào)整神經(jīng)元的權(quán)重、不斷優(yōu)化直到誤差最小、也就是代價函數(shù)達(dá)到最小值。
然而這種方法在神經(jīng)網(wǎng)絡(luò)具備多層的情況下,性能變得非常不理想,容易出現(xiàn)梯度消失問題——非線性問題的代價函數(shù)為非凸函數(shù),求解時容易陷入局部最優(yōu)解、而非全域最優(yōu)解。
更糟的是,這種情況隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的增加而更加嚴(yán)重,即隨著梯度逐層不斷消散、導(dǎo)致其對神經(jīng)元權(quán)重調(diào)整的功用越來越小,所以只能轉(zhuǎn)而處理淺層結(jié)構(gòu)(小于等于3),從而限制了性能。
如果說為了不讓神經(jīng)網(wǎng)絡(luò)失真,僅能讓資料來回傳個1、2層,那還叫神經(jīng)網(wǎng)絡(luò)嗎?人類的大腦可就有數(shù)千萬層神經(jīng)網(wǎng)絡(luò)呢!與其使用理論難度高、訓(xùn)練速度慢、實(shí)際結(jié)果也只能傳少少幾層的淺層神經(jīng)網(wǎng)絡(luò)的情況下不比其他方法好,不如使用其他的機(jī)器學(xué)習(xí)模型。
神經(jīng)網(wǎng)絡(luò)由于遇到了優(yōu)化的瓶頸,以致一度沒落。當(dāng)時的學(xué)界只要看到出現(xiàn)「神經(jīng)網(wǎng)絡(luò)」字眼的論文或研究計(jì)劃,便會立刻貶斥。多層的神經(jīng)網(wǎng)絡(luò)是不可能的,而若采用僅有兩層的神經(jīng)網(wǎng)絡(luò),不如使用其他更好上手、同樣只有兩層的「淺層」機(jī)器學(xué)習(xí)模型。
1990年代,各式各樣的淺層機(jī)器學(xué)習(xí)被提出,其中支撐矢量機(jī) (SVM, Support Vector Machines)最廣受歡迎。
同樣是做資料的二分法,SVM是怎么做的呢?
要如何找出一條線、完美地將藍(lán)球和紅球切分開? 且兩類群須距離這條線最遠(yuǎn)、以確定兩群資料分得越開越好。這樣新進(jìn)資料進(jìn)來的時候才不會容易掉到錯誤的另外一邊、出現(xiàn)誤差(Error)。
SVM會將原始資料投影到一個更高維度的空間里,在低維度不可切分的資料,在高維度便可以切分了。
SVM 理論上更加嚴(yán)謹(jǐn)完備,上手簡單,得到主流學(xué)術(shù)界的追捧。此時人人都不相信神經(jīng)網(wǎng)絡(luò)的可能性。而支持矢量機(jī) (SVM) 技術(shù)在圖像和語音識別方面的成功,使得神經(jīng)網(wǎng)絡(luò)的研究陷入前所未有的低潮。
此時學(xué)術(shù)界的共識是: 多層神經(jīng)網(wǎng)絡(luò)是個完全沒有前途的死胡同。
究竟是誰重新改變了這一切、讓多層神經(jīng)網(wǎng)絡(luò)在2006年時換上「深度神經(jīng)網(wǎng)絡(luò)」(Deep Neural Network; 又稱Deep Learning, 深度學(xué)習(xí)) 的新名字、聲勢浩大地卷土重來呢? 還記得我們提過、對于神經(jīng)網(wǎng)絡(luò)不離不棄研究三十年的Hinton嗎?他是怎么解決這個問題的呢?
在現(xiàn)今,深度學(xué)習(xí)已是人工智能領(lǐng)域中成長最為快速的類別;下一篇就讓我們來聊聊深度學(xué)習(xí)之父──多倫多大學(xué)Geoffrey Hinton教授的故事,與深度學(xué)習(xí)火熱的應(yīng)用趨勢。
文章來源:股感知識庫 | 圖片來源:Joseph Wang
聯(lián)系客服