第三章 沒(méi)有解決方法?現(xiàn)在有了!
“機(jī)器學(xué)習(xí)的發(fā)展要追溯到1957年,Rosenblatt提出了感知機(jī)模型……”
華東大學(xué)的一間教室里,徐毅站在講臺(tái)上,一邊播放幻燈片,一邊對(duì)著臺(tái)下的學(xué)生講解道。
剛剛進(jìn)入八月份,雖然秋季學(xué)期還未正式開學(xué),但華東大學(xué)的小學(xué)期課程已經(jīng)開始,徐毅正在給選修《機(jī)器學(xué)習(xí)》這門課程的本科生上課。
炎熱的夏風(fēng)伴隨著著窗外的蟬鳴,帶進(jìn)屋中昏沉的睡意,連不停嗡嗡轉(zhuǎn)動(dòng)的風(fēng)扇也無(wú)法吹散。
但教室里的學(xué)生幾乎全都專注地看向講臺(tái),認(rèn)真聽著徐毅的講授,展現(xiàn)出作為重點(diǎn)大學(xué)學(xué)生的優(yōu)秀素質(zhì),讓已經(jīng)汗流浹背的徐毅感到欣慰不已。
“……根據(jù)我們前面的講述,感知機(jī)實(shí)際上就是將我們輸入的數(shù)據(jù)作為向量,把向量中的每一個(gè)元素進(jìn)行加權(quán)求和,最后將數(shù)據(jù)分類,我們可以用一張二維的圖像作為示例。”
徐毅放出下一張PPT,圖上是一個(gè)畫著x軸和y軸的平面坐標(biāo)系,上面散落著許多紅色和藍(lán)色的點(diǎn)。
“來(lái)看這張圖,里面每一個(gè)點(diǎn)就代表一個(gè)數(shù)據(jù)樣本,我們用兩種顏色來(lái)表示數(shù)據(jù)的種類?!?p> “感知機(jī)的目的就是要找到一條直線,從而將這些點(diǎn)按照種類分開,就像這樣…”
隨著徐毅點(diǎn)擊鼠標(biāo),一條直線在圖中出現(xiàn),將兩種顏色的點(diǎn)切到左右兩邊。
“用數(shù)學(xué)語(yǔ)言來(lái)描述的話,就是用直線y=wx+b來(lái)將數(shù)據(jù)樣本分類,而感知機(jī)的學(xué)習(xí)過(guò)程就是尋找這條直線的系數(shù)w和b的過(guò)程,”
徐毅又一點(diǎn)鼠標(biāo),坐標(biāo)系上的點(diǎn)和直線統(tǒng)統(tǒng)消失,轉(zhuǎn)而出現(xiàn)了坐標(biāo)在(0,0)(0,1)(1,0)(1,1)上的四個(gè)點(diǎn),它們剛好構(gòu)成了一個(gè)小正方形的四個(gè)頂點(diǎn),右上角的頂點(diǎn)被標(biāo)成藍(lán)色,另外三個(gè)點(diǎn)則是紅色。
“我們用這四個(gè)點(diǎn)來(lái)表示最基礎(chǔ)的邏輯門,藍(lán)色表示真,紅色表示假,圖中所示是一個(gè)與門,顯而易見我們可以用一條直線把真值和假值分開。”
一道將正方形右上角斜著切開的黑線隨著徐毅的話語(yǔ)出現(xiàn),
“同樣地,對(duì)于或門和非門邏輯,我們同樣可以用一個(gè)感知機(jī)來(lái)表示,但是感知機(jī)有一個(gè)很重大的缺陷,大家覺得是什么?”
聽到徐毅的提問(wèn),下面的學(xué)生七嘴八舌地回答起來(lái)。
“多個(gè)種類混雜的情況?”
“不能用直線分離的點(diǎn)……”
“異或問(wèn)題!”
徐毅看了一眼說(shuō)出正確答案的學(xué)生,這個(gè)小胖子叫王浩中,對(duì)機(jī)器學(xué)習(xí)的相關(guān)知識(shí)了解的相當(dāng)全面,在前幾節(jié)課上已經(jīng)給他留下了很深刻的印象,因此他毫不意外地點(diǎn)點(diǎn)頭,補(bǔ)充道:
“多分類問(wèn)題實(shí)際上可以轉(zhuǎn)化為多個(gè)二分類問(wèn)題,因此這類問(wèn)題是完全可以用感知機(jī)實(shí)現(xiàn)的……”
“所以正確答案就是線性不可分問(wèn)題!例如這樣一些混雜在一起的點(diǎn),我們就不能用直線將它們分開,這種問(wèn)題的最簡(jiǎn)單形式就是異或問(wèn)題?!?p> 屏幕上的四個(gè)點(diǎn)顏色再變,左下和右上的兩個(gè)點(diǎn)變成藍(lán)色,另兩個(gè)點(diǎn)變成紅色。
這時(shí)臺(tái)下一個(gè)扎著單馬尾的女生急切舉手,徐毅沖她點(diǎn)點(diǎn)頭示意可以提問(wèn)。
“老師,異或不是可以用前面三種基本邏輯表示么?為什么可以學(xué)習(xí)三種基本邏輯的感知器不能表示異或?”
聽到這個(gè)問(wèn)題的徐毅笑了笑,并未直接回答,反而問(wèn)起其他學(xué)生,
“非常好的問(wèn)題!我們都知道異或可以由兩個(gè)非門和與門再加一個(gè)或門組成,那么我們可不可以同樣用幾個(gè)感知機(jī)分別表示幾種基本邏輯,最終組成一個(gè)異或門呢?有沒(méi)有同學(xué)講一下想法……王浩中?”
看到學(xué)生紛紛陷入沉默,于是直接點(diǎn)名前面的小胖子。
“嗯……可能原因是由于感知機(jī)最后的非線性激活函數(shù),從而導(dǎo)致多層結(jié)構(gòu)的感知機(jī)無(wú)法求解?據(jù)我所知好像現(xiàn)在沒(méi)有類似的方法,所以這條路應(yīng)該是不可行的。”
雖然徐毅提出的這個(gè)思路之前沒(méi)有想過(guò),但憑著對(duì)機(jī)器學(xué)習(xí)的深刻理解,王浩中思索片刻后便給出了結(jié)論。
王浩中的父親是領(lǐng)域內(nèi)的專家,在他高中時(shí)候就帶著他參與相關(guān)研究,王浩中在大二時(shí)就能以第一作者的身份發(fā)表二區(qū)論文,因此他對(duì)自己的答案有著充足的自信,挺起胸膛等著老師的回復(fù)。
“沒(méi)錯(cuò)!因?yàn)樵诟兄獧C(jī)中使用的激活函數(shù)是sign函數(shù),即對(duì)于任意大于零的自變量x,我們都令函數(shù)f(x)的值為1,而對(duì)于小于等于零的x,我們令函數(shù)值為-1,這是為了模擬人的神經(jīng)元工作原理……”
徐毅邊說(shuō)邊在黑板上畫出了這個(gè)函數(shù)的圖像,這是被y軸分為兩段的水平線,
“可以看到,這個(gè)函數(shù)的導(dǎo)數(shù)在原點(diǎn)以外處處為零,這對(duì)于單個(gè)的感知機(jī)當(dāng)然沒(méi)有問(wèn)題,因?yàn)槲覀兪褂锰荻认陆捣▽?duì)w的更新方向是-yx,對(duì)b的更新方向是-y,”
徐毅在黑板上洋洋灑灑寫出一行行推導(dǎo)公式,繼續(xù)講道,
“但當(dāng)感知機(jī)變?yōu)槎鄬咏Y(jié)構(gòu)時(shí),我們可以看到,由于鏈?zhǔn)椒▌t,最終的損失對(duì)于前面所有輸入的梯度都為0,也就是說(shuō),當(dāng)我們的感知機(jī)分類結(jié)果與實(shí)際目標(biāo)產(chǎn)生出入時(shí),它并不知道該往哪個(gè)方向更新自己的權(quán)重參數(shù)來(lái)減小誤差?!?p> “打個(gè)更直觀一點(diǎn)的比方,梯度下降法就是讓我們?cè)谝黄盏厣涎刂缕碌姆较蜃?,這樣最后我們總能走到一個(gè)損失最低的點(diǎn),或者至少是局部最低點(diǎn),”
“但經(jīng)過(guò)sign激活函數(shù)之后,我們所在的這片空地全都變成水平面了,每個(gè)方向上的梯度都是零,這就導(dǎo)致我們連前進(jìn)的方向都確定不了,想要找到損失最低點(diǎn)只能每個(gè)點(diǎn)都走過(guò)試一下,換句話說(shuō)就是遍歷整個(gè)平面,這顯然是不現(xiàn)實(shí)的?!?p> “——老師,這樣的話為什么我們不直接去掉激活函數(shù)?”
“去掉激活函數(shù)就變成用矩陣相乘表示的線性變換了,無(wú)論幾個(gè)矩陣相乘其實(shí)都可以變成兩個(gè)矩陣,這樣的多層結(jié)構(gòu)和單層的表達(dá)能力完全沒(méi)有區(qū)別!”面對(duì)提問(wèn),沒(méi)等徐毅回頭,還站著的王浩中就干脆回答道。
“……沒(méi)錯(cuò),這個(gè)問(wèn)題在過(guò)去的幾十年中一直未被解決,神經(jīng)網(wǎng)絡(luò)這一構(gòu)想也在提出之后很快陷入低迷,”
轉(zhuǎn)身面向講臺(tái)下,徐毅擺手示意王浩中座下,繼續(xù)播放幻燈片講道:
“當(dāng)然,科學(xué)家們還是找到了其它的方法來(lái)解決這一問(wèn)題,例如升維就是其中之一,”
“來(lái)看屏幕,我們可以利用核函數(shù),把二維上的四個(gè)點(diǎn)放進(jìn)三維空間,然后讓(0,0)(1,1)這兩個(gè)點(diǎn)的z坐標(biāo)變成1,另外兩點(diǎn)坐標(biāo)為0,這個(gè)時(shí)候我們就可以用感知機(jī)學(xué)習(xí)一個(gè)線性平面把它們分開。”
“這種使用核函數(shù)的感知機(jī)被稱為核感知機(jī),由于計(jì)算的時(shí)間成本太高,核感知機(jī)在提出后很快就被淘汰,但基于這種思想進(jìn)一步改良提出的SVM,也就是支持向量機(jī),迅速發(fā)展起來(lái)并成為現(xiàn)在最主流的機(jī)器學(xué)習(xí)算法?!?p> 頓了頓后,徐毅繼續(xù)說(shuō)道:
“當(dāng)然,這并不代表多層感知機(jī)是不可行的,根據(jù)我們之前的分析,這個(gè)結(jié)構(gòu)的問(wèn)題在于激活函數(shù)導(dǎo)致梯度無(wú)法傳播,那么我們只需要簡(jiǎn)單地將激活函數(shù)改成這樣——”
他用粉筆在sign函數(shù)的圖像上一劃,將右側(cè)始終為1的水平線變成一道斜線,
“我們只要讓f(x)在輸入大于零時(shí)等于它本身,即導(dǎo)數(shù)為1,這樣梯度就可以不被截?cái)?,?p> “之前在sign函數(shù)下的一整個(gè)水平面,在新的函數(shù)下就有了不同的坡度,從而我們就可以繼續(xù)使用梯度下降的方法來(lái)尋找最低點(diǎn)。”
“因此我們改用這個(gè)激活函數(shù)就可以構(gòu)建一個(gè)多層感知機(jī),這樣得到的多層感知機(jī)在現(xiàn)在的任務(wù)上可以……”
“等等,老師!”王浩中急切地,甚至顧不上失禮地打斷道:“既然它的效果這么好,為什么我在論文里從來(lái)沒(méi)有看到過(guò)?”
“因?yàn)檫@是我剛剛提出來(lái)的,”
無(wú)視了臺(tái)下聞言一陣騷動(dòng)的學(xué)生,徐毅反問(wèn)道:
“王同學(xué),請(qǐng)問(wèn)你覺得我的這種方法邏輯上有什么問(wèn)題么?”
王浩中不知所措地?fù)u搖頭,徐毅老師對(duì)感知機(jī)的講解十分生動(dòng)形象,深入淺出的同時(shí)又不失嚴(yán)謹(jǐn),至少自己沒(méi)有聽出任何邏輯上的問(wèn)題。
如果不看徐毅僅僅只有講師的職位,他甚至感覺對(duì)方在這個(gè)領(lǐng)域的理解都超過(guò)了自己的教授父親。
但異或問(wèn)題困擾了人工智能領(lǐng)域這么多年,怎么可能就這么容易被面前的老師如此順理成章、輕而易舉的解決?!
一定是在別的什么地方出了問(wèn)題!他正欲開口反駁,卻聽徐毅繼續(xù)道:
“實(shí)際上,多層感知機(jī)在現(xiàn)在的任務(wù)上可以取得媲美甚至超過(guò)SVM的效果,接下來(lái)我將展示一個(gè)簡(jiǎn)單的多層感知機(jī)模型和相應(yīng)的任務(wù)樣例,如果還有疑惑的同學(xué)也可以回去后仿照課上的講解自己進(jìn)行實(shí)驗(yàn)驗(yàn)證……”
“雖然不知道為什么這么簡(jiǎn)單的問(wèn)題可以困擾學(xué)界幾十年,一直沒(méi)有方法解決它,”
環(huán)顧教室,徐毅平靜地說(shuō)道:
“但是,現(xiàn)在有了?!?