看得見(jiàn)的機(jī)器學(xué)習(xí):零基礎(chǔ)看懂神經(jīng)網(wǎng)絡(luò)
關(guān)于機(jī)器學(xué)習(xí),有一個(gè)古老的笑話(huà):
Machine learning is like highschool sex. Everyone says they do it, nobody really does, and no one knows what it actually is. [1]
翻譯過(guò)來(lái)意思大概是:
機(jī)器學(xué)習(xí)就像高中生的性愛(ài)。每個(gè)人都說(shuō)他們做了,但其實(shí)沒(méi)有人真的做了,也沒(méi)有人真正知道它到底是什么。
總之,在某種程度上,機(jī)器學(xué)習(xí)確實(shí)有很多晦澀難懂的部分。雖然借助TensorFlow、sklearn等工具,機(jī)器學(xué)習(xí)模型以及神經(jīng)網(wǎng)絡(luò)通常能被快速地運(yùn)行起來(lái),但真正弄清背后發(fā)生了什么,仍然不是一件容易的事。在本篇文章中,我會(huì)試圖用直觀的方式來(lái)解釋神經(jīng)網(wǎng)絡(luò)。俗話(huà)說(shuō),「耳聽(tīng)為虛,眼見(jiàn)為實(shí)」,本文的目標(biāo)就是,利用「可視化」的方法,讓你親眼「看到」神經(jīng)網(wǎng)絡(luò)在運(yùn)行時(shí)到底做了什么。
本文不會(huì)出現(xiàn)一個(gè)公式,希望非技術(shù)人員也能看懂。希望如此^-^
最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)
當(dāng)今在圖像識(shí)別或NLP中使用的深度神經(jīng)網(wǎng)絡(luò),都發(fā)展出了非常復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)層次多達(dá)幾十層,模型參數(shù)多達(dá)數(shù)十萬(wàn)、上百萬(wàn)個(gè)。這樣的神經(jīng)網(wǎng)絡(luò)理解起來(lái),難度極大,而且計(jì)算起來(lái)也需要很強(qiáng)的算力。
因此,我們由簡(jiǎn)入繁,先從最簡(jiǎn)單的情況入手。
首先,我們考慮一個(gè)簡(jiǎn)單的「二分類(lèi)」問(wèn)題。下面展示了一個(gè)隨機(jī)生成的數(shù)據(jù)集:
上圖展示的是總共160個(gè)點(diǎn)(包括紅色和藍(lán)色),每個(gè)點(diǎn)代表一個(gè)數(shù)據(jù)樣本。顯然,每個(gè)樣本包含2個(gè)特征,這樣每個(gè)樣本才能夠在一個(gè)二維坐標(biāo)系中用一個(gè)點(diǎn)來(lái)表示。紅色的點(diǎn)表示該樣本屬于第1個(gè)分類(lèi),而藍(lán)色的點(diǎn)表示該樣本屬于第2個(gè)分類(lèi)。
二分類(lèi)問(wèn)題可以理解成:訓(xùn)練出一個(gè)分類(lèi)模型,把上圖中160個(gè)樣本組成的訓(xùn)練集按所屬分類(lèi)分成兩份。注意:這個(gè)表述并不是很?chē)?yán)謹(jǐn)。上圖中的樣本只是用于訓(xùn)練,而訓(xùn)練出來(lái)的模型應(yīng)該能對(duì)「不屬于」這個(gè)訓(xùn)練集的其它樣本進(jìn)行分類(lèi)(不過(guò)我們現(xiàn)在不關(guān)注這一點(diǎn),可以先忽略掉這個(gè)表述上的細(xì)節(jié))。
為了完成這個(gè)二分類(lèi)任務(wù),我們有很多種機(jī)器學(xué)習(xí)模型可供選擇。但現(xiàn)在我們的目的是為了研究神經(jīng)網(wǎng)絡(luò),所以我們可以設(shè)計(jì)一個(gè)最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),來(lái)解決這個(gè)分類(lèi)問(wèn)題。如下圖:
這個(gè)神經(jīng)網(wǎng)絡(luò)幾乎沒(méi)法再簡(jiǎn)單了,只有1個(gè)輸入層和1個(gè)輸出層,總共只有3個(gè)神經(jīng)元。
經(jīng)過(guò)簡(jiǎn)單的數(shù)學(xué)分析就容易看出,這個(gè)只有2層的神經(jīng)網(wǎng)絡(luò)模型,其實(shí)等同于傳統(tǒng)機(jī)器學(xué)習(xí)的LR模型(邏輯回歸)。也就是說(shuō),這是個(gè)線(xiàn)性分類(lèi)器,對(duì)它的訓(xùn)練相當(dāng)于在前面那個(gè)二維坐標(biāo)平面中尋找一條直線(xiàn),將紅色點(diǎn)和藍(lán)色點(diǎn)分開(kāi)。
根據(jù)紅色點(diǎn)和藍(lán)色點(diǎn)的位置分布,我們很容易看出,這樣的一條直線(xiàn),很容易找出來(lái)(或?qū)W習(xí)出來(lái))。實(shí)際上,上圖中這個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),經(jīng)過(guò)訓(xùn)練很容易就能達(dá)到100%的分類(lèi)準(zhǔn)確率(accuracy)。
現(xiàn)在,假設(shè)我們的數(shù)據(jù)集變成了下面的樣子(紅色點(diǎn)分成了兩簇,分列藍(lán)色點(diǎn)左右):
如果我們還是使用前面的2層的神經(jīng)網(wǎng)絡(luò),試圖畫(huà)一條直線(xiàn)來(lái)把紅色點(diǎn)和藍(lán)色點(diǎn)分開(kāi),顯然就做不到了。我們說(shuō),現(xiàn)在這個(gè)分成三簇的數(shù)據(jù)集已經(jīng)不是「線(xiàn)性可分」的了。實(shí)際上,針對(duì)最新的這個(gè)數(shù)據(jù)集,前面這個(gè)只有2層的神經(jīng)網(wǎng)絡(luò),不管你怎么訓(xùn)練,都只能達(dá)到60%~70%左右的分類(lèi)準(zhǔn)確率。
為了提高分類(lèi)的準(zhǔn)確率,比較直觀的想法也許是畫(huà)一條曲線(xiàn),這樣才能把紅色點(diǎn)和藍(lán)色點(diǎn)徹底分開(kāi)。這相當(dāng)于要對(duì)原始輸入數(shù)據(jù)做非線(xiàn)性變換。在神經(jīng)網(wǎng)絡(luò)中,我們可以通過(guò)增加一個(gè)隱藏層(hidden layer)來(lái)完成這種非線(xiàn)性變換。修改后的神經(jīng)網(wǎng)絡(luò)如下圖:
我們看到,修改后的神經(jīng)網(wǎng)絡(luò)增加了一層包含2個(gè)sigmoid神經(jīng)元的隱藏層;而輸入層和隱藏層之間是全連接的。實(shí)際上,當(dāng)我們重新訓(xùn)練這個(gè)帶隱藏層的神經(jīng)網(wǎng)絡(luò)時(shí),會(huì)發(fā)現(xiàn)分類(lèi)的準(zhǔn)確率又提升到了100%(或者非常接近100%)。這是為什么呢?
我們可以這樣來(lái)看待神經(jīng)網(wǎng)絡(luò)的計(jì)算:每經(jīng)過(guò)一層網(wǎng)絡(luò),相當(dāng)于將樣本空間(當(dāng)然也包括其中的每個(gè)樣本數(shù)據(jù))進(jìn)行了一次變換。也就是說(shuō),輸入的樣本數(shù)據(jù),經(jīng)過(guò)中間的隱藏層時(shí),做了一次變換。而且,由于隱藏層的激活函數(shù)使用的是sigmoid,所以這個(gè)變換是一個(gè)非線(xiàn)性變換。
那么,很自然的一個(gè)問(wèn)題是,經(jīng)過(guò)了隱藏層的這一次非線(xiàn)性變換,輸入樣本變成什么樣了呢?下面,我們把隱藏層的2個(gè)神經(jīng)元的輸出畫(huà)到了下圖中:
我們發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象:變換后的樣本數(shù)據(jù)點(diǎn),還是分成了三簇,但紅色點(diǎn)再也不是分列藍(lán)色點(diǎn)的兩側(cè)了。兩簇紅色點(diǎn)被分別逼到了一個(gè)角落里,而藍(lán)色點(diǎn)被逼到了另外一個(gè)不同的角落里。很容易看出,現(xiàn)在這個(gè)圖變成「線(xiàn)性可分」的了。而隱藏層的輸出數(shù)據(jù),再經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)最后一個(gè)輸出層的處理,剛好相當(dāng)于經(jīng)過(guò)了一個(gè)線(xiàn)性分類(lèi)器,很容易用一條直線(xiàn)把紅色點(diǎn)和藍(lán)色點(diǎn)分開(kāi)了。
從隱藏層的輸出圖像,我們還能發(fā)現(xiàn)一些細(xì)節(jié):
所有的數(shù)據(jù)坐標(biāo)(不管是X軸還是Y軸),都落在了(0,1)區(qū)間內(nèi)。因?yàn)閟igmoid激活函數(shù)的特性,正是把實(shí)數(shù)域映射到(0,1)之間。
我們發(fā)現(xiàn),所有的數(shù)據(jù)都落在某個(gè)角落里。這不是偶然,還是因?yàn)閟igmoid激活函數(shù)的特性。當(dāng)充分訓(xùn)練到sigmoid神經(jīng)元「飽和」時(shí),它一般是會(huì)輸出接近0或1的值,而極少可能輸出一個(gè)接近(0,1)中間的值。
總結(jié)一下:從前面的分析,我們大概可以看到這樣一個(gè)變換過(guò)程,就是輸入樣本在原始空間內(nèi)本來(lái)不是「線(xiàn)性可分」的,而經(jīng)過(guò)了隱藏層的變換處理后,變得「線(xiàn)性可分」了;最后再經(jīng)過(guò)輸出層的一次線(xiàn)性分類(lèi),成功完成了二分類(lèi)任務(wù)。
當(dāng)然,這個(gè)例子非常簡(jiǎn)單,只是最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。但即使是更復(fù)雜的神經(jīng)網(wǎng)絡(luò),原理也是類(lèi)似的,輸入樣本每經(jīng)過(guò)一層網(wǎng)絡(luò)的變換處理,都變得比原來(lái)更「可分」一些。我們接下來(lái)就看一個(gè)稍微復(fù)雜一點(diǎn)的例子。
手寫(xiě)體數(shù)字識(shí)別MNIST
現(xiàn)在我們來(lái)考慮一下「手寫(xiě)體數(shù)字識(shí)別」的問(wèn)題。
在機(jī)器學(xué)習(xí)的學(xué)術(shù)界,有一個(gè)公開(kāi)的數(shù)據(jù)集,稱(chēng)為MNIST[2]。使用神經(jīng)網(wǎng)絡(luò)對(duì)MNIST的數(shù)據(jù)進(jìn)行識(shí)別,堪稱(chēng)是神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)領(lǐng)域的「Hello World」。
在MNIST的數(shù)據(jù)集中,共有70000張手寫(xiě)體數(shù)字圖片。它們類(lèi)似下面的樣子:
每一張圖片都是28像素×28像素的黑白圖片,其中每個(gè)像素用一個(gè)介于[0,255]之間的灰度值表示。
MNIST的數(shù)字識(shí)別問(wèn)題,就是給你一張這樣的28像素×28像素的圖片,用程序區(qū)分出它具體是0到9哪一個(gè)數(shù)字。
對(duì)于這個(gè)問(wèn)題,歷史上的最佳成績(jī)是99.79%的識(shí)別率,方案使用了卷積神經(jīng)網(wǎng)絡(luò)(CNN)。我們這里不想讓問(wèn)題復(fù)雜化,因此還是采用普通的全連接的神經(jīng)網(wǎng)絡(luò)來(lái)求解。我們使用的網(wǎng)絡(luò)結(jié)構(gòu)如下:
這個(gè)神經(jīng)網(wǎng)絡(luò)的輸入和輸出是這樣定義的:
- 輸入:每次輸入一張圖片。圖片的每個(gè)像素的灰度值,除以255后得到一個(gè)[0,1]之間的歸一化的灰度值,然后輸入到輸入層的每個(gè)神經(jīng)元上。也就是說(shuō),輸入層有784個(gè)神經(jīng)元,正好對(duì)應(yīng)一張圖片28×28=784個(gè)像素。
- 輸出:輸出層共10個(gè)神經(jīng)元,各個(gè)神經(jīng)元的輸出分別對(duì)應(yīng)0到9這幾個(gè)數(shù)字。哪個(gè)神經(jīng)元輸出的值最大,我們就可以認(rèn)為預(yù)測(cè)結(jié)果是對(duì)應(yīng)的那個(gè)數(shù)字。另外,10個(gè)輸出值再經(jīng)過(guò)softmax處理,就得到了當(dāng)前輸入圖片是各個(gè)數(shù)字的概率。
對(duì)這個(gè)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練后,可以很輕松地獲得98%左右的正確識(shí)別率。那針對(duì)這個(gè)更寬的神經(jīng)網(wǎng)絡(luò),我們還能使用前面的方法來(lái)對(duì)它進(jìn)行可視化的圖像繪制嗎?
降維
在前面的一小節(jié)中,我們的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)輸入層和隱藏層都只有2個(gè)神經(jīng)元,因此可以在一個(gè)二維坐標(biāo)平面中繪制它們的圖像。而對(duì)于MNIST的這個(gè)神經(jīng)網(wǎng)絡(luò),當(dāng)我們想對(duì)它的輸入層進(jìn)行圖像繪制的時(shí)候,發(fā)現(xiàn)它有784維!
如何把784維的特征向量繪制出來(lái)?這涉及到對(duì)于高維數(shù)據(jù)可視化的問(wèn)題。通常來(lái)講,人的大腦只能理解最高3維的空間,對(duì)于3維以上的空間,就只能靠抽象思維了。
我們想象一個(gè)簡(jiǎn)單的例子,來(lái)感受一下對(duì)高維空間進(jìn)行直觀的理解有多么困難:
- 首先,在一個(gè)平面內(nèi)(也就是2維空間),我們可以找到3個(gè)兩兩等距的點(diǎn),以它們?yōu)轫旤c(diǎn)可以組成一個(gè)等邊三角形。
- 在一個(gè)3維空間內(nèi),我們可以找到4個(gè)兩兩等距的點(diǎn),以它們?yōu)轫旤c(diǎn)可以組成一個(gè)正四面體,這個(gè)正四面體的每個(gè)面都是一個(gè)等邊三角形。
- 現(xiàn)在,我們上升到4維空間,理論上我們可以找到5個(gè)兩兩等距的點(diǎn),以它們?yōu)轫旤c(diǎn)可以組成一個(gè)我們姑且稱(chēng)之為「正五面體」的東西。繼續(xù)類(lèi)比,這個(gè)所謂的「正五面體」,它的每個(gè)「面」,也就是由5個(gè)點(diǎn)中的任意4個(gè)點(diǎn)組成的「面」,嚴(yán)格來(lái)說(shuō)不能稱(chēng)它為一個(gè)「面」,因?yàn)樗且粋€(gè)正四面體。另外需要注意,當(dāng)我們?cè)谶@里用「正五面體」這樣一個(gè)名不副實(shí)的名字來(lái)命名的時(shí)候,還帶來(lái)了很大的誤導(dǎo)性,因?yàn)樗?tīng)起來(lái)像是3維空間中的一個(gè)「正多面體」。但如果你對(duì)數(shù)學(xué)的歷史有所了解的話(huà),那么就應(yīng)該知道,早在2000多年前,歐幾里得就在他的《幾何原本》中提出了,3維空間中根本不存在正五面體(實(shí)際上3維空間中只有5種正多面體)。
好了,如果你還能跟得上前面最后這一段關(guān)于4維空間的描述,那么說(shuō)明你一定閱讀得非常仔細(xì),而且正在一邊閱讀一邊思考^-^但不管怎么說(shuō),4維空間的情形已經(jīng)讓人足夠惱火了(它們符合邏輯但卻不可想象),更別說(shuō)讓我們來(lái)想象784維空間中的幾何結(jié)構(gòu)了!
因此,我們需要降維(dimensionality reduction)的技術(shù),把高維空間中的數(shù)據(jù)降低到3維或2維空間內(nèi),然后才能可視化地繪制出來(lái),達(dá)到一定的「直觀理解」的目的。
那降維到底是怎樣的一種操作呢?我們仔細(xì)回想一下,其實(shí)在現(xiàn)實(shí)世界中,我們已經(jīng)碰到過(guò)很多降維的情況了。比如下面這張圖片:
這是100多年前的一幅名畫(huà),名字叫《大碗島的星期天下午》。在這幅畫(huà)作中,我們可以感受到海灘遠(yuǎn)處強(qiáng)烈的縱深感。但任何一幅畫(huà)作,都是在一張二維的平面上繪制的。所以,畫(huà)家需要把三體景物投影到二維上,這就是一種「降維」處理。與此類(lèi)似,我們平常用相機(jī)拍出的照片,也是把三維空間「降維」到了二維平面上。這種降維處理普遍存在,可以稱(chēng)為「投影變換」,是線(xiàn)性變換的一種。
我們?cè)賮?lái)看一個(gè)例子:
圖中右側(cè)是一張世界平面地圖。本來(lái)地球的表面是個(gè)三維空間中的球面,但上面的世界地圖把整個(gè)球面繪制到了一個(gè)二維平面上。為了做到這一點(diǎn),顯然地圖的繪制者需要把球面攤平,部分區(qū)域需要進(jìn)行一定的拉伸和扭曲。我們把這個(gè)繪制過(guò)程想象成一個(gè)映射:地球表面的一個(gè)點(diǎn),映射到世界平面地圖上的一個(gè)點(diǎn)上。但所有的點(diǎn)的映射并不滿(mǎn)足同樣的線(xiàn)性關(guān)系,所以這是一個(gè)非線(xiàn)性變換。
上面不管是畫(huà)作、照片的例子,還是世界平面地圖的例子,都是把三維降維到二維。但在機(jī)器學(xué)習(xí)中,我們經(jīng)常需要把從更高維降維到三維或二維。人們發(fā)明了各種各樣的降維方法,比如PCA (Principal Component Analysis),是一種線(xiàn)性降維方法;MDS (Multi-dimension Scaling)、t-SNE (t-Distributed Stochastic Neighbor Embedding),都是非線(xiàn)性降維方法。
基于k近鄰圖和力學(xué)模型的降維可視化方法
前面提到的各種降維方法,做法不同,也各有側(cè)重點(diǎn)。任何一種解釋起來(lái),都要花去很大的篇幅,因此本文不一一詳述??紤]到我們接下來(lái)的目標(biāo),是為了對(duì)前一節(jié)引入的MNIST神經(jīng)網(wǎng)絡(luò)進(jìn)行直觀的可視化展示,所以我們這里采取一種更為直接(也易理解)的方法——一種基于k-NNG (k-Nearest Neighborhood Graph,k近鄰圖)和力學(xué)模型(Force-Directed)的降維可視化方法[3][4]。
這種方法的過(guò)程可以如下描述:
- 對(duì)于高維空間中的節(jié)點(diǎn)計(jì)算兩兩之間的距離,為每個(gè)節(jié)點(diǎn)找到離它最近的k個(gè)節(jié)點(diǎn),分別連接起來(lái)建立一條邊。這樣就創(chuàng)建出了一個(gè)由節(jié)點(diǎn)和邊組成的圖數(shù)據(jù)結(jié)構(gòu)。這個(gè)新創(chuàng)建的圖有這樣的特性:有邊直接相連的節(jié)點(diǎn),它們?cè)谠呔S空間中的位置就是比較接近的;而沒(méi)有邊直接相連的節(jié)點(diǎn),它們?cè)谠呔S空間中的位置就是比較遠(yuǎn)的。這個(gè)圖稱(chēng)為「k近鄰圖」,也就是k-NNG (k-Nearest Neighborhood Graph)。另外還有一個(gè)問(wèn)題:高維空間中兩個(gè)節(jié)點(diǎn)的距離怎么計(jì)算?這其實(shí)有很多種計(jì)算方法,比較常見(jiàn)的有「歐幾里得距離」、「明可夫斯基距離」等。
- 將前面一步得到的k近鄰圖在二維平面中繪制出來(lái)。這變成了一個(gè)常見(jiàn)的繪圖布局的問(wèn)題,從某種程度上跟電路板的元器件布局有點(diǎn)像。為了讓繪制出來(lái)的圖像清晰易觀察,這個(gè)繪制過(guò)程需要盡量滿(mǎn)足一定的條件,比如,邊線(xiàn)的交叉應(yīng)該盡量少;有邊相連的節(jié)點(diǎn)應(yīng)該盡可能離得近一些;節(jié)點(diǎn)之間不能離得太近(聚在一起),應(yīng)該盡量均勻地散布在整個(gè)坐標(biāo)系平面上。為了達(dá)到這樣的要求,我們采用了Fruchterman和Reingold發(fā)明的Force-Directed Graph Drawing這種算法。它模擬了物理世界的力學(xué)原理,如下圖所示:
- 想象左上角的圖,把邊換成彈簧,把節(jié)點(diǎn)換成帶電小球;
- 彈簧會(huì)傾向于把相鄰節(jié)點(diǎn)(即有邊相連的節(jié)點(diǎn))固定在一個(gè)自然長(zhǎng)度上(對(duì)應(yīng)原高維空間中的距離),不能太遠(yuǎn)也不能太近;
- 所有「帶電小球」都互相保持斥力,讓不相鄰的節(jié)點(diǎn)互相遠(yuǎn)離,并促使所有節(jié)點(diǎn)盡量散布整個(gè)畫(huà)面;
- 放開(kāi)手,讓各個(gè)節(jié)點(diǎn)在彈簧和斥力的作用下自由移動(dòng),最后達(dá)到總體能量最小的狀態(tài),這時(shí)就得到了左下角那個(gè)更好的節(jié)點(diǎn)布局。
對(duì)于這種方法,我們需要重點(diǎn)關(guān)注的是:從高維降到低維,原來(lái)高維空間中的哪些幾何特性被保持住了?從前面繪制過(guò)程的描述容易看出:在原高維空間中距離比較近的節(jié)點(diǎn),在最后繪制的二維圖像中,也會(huì)在彈簧拉力的作用下離得比較近。只有搞清楚這一點(diǎn),我們才能通過(guò)觀看低維的圖像,來(lái)理解高維的結(jié)構(gòu)。
現(xiàn)在,我們終于做好準(zhǔn)備來(lái)對(duì)MNIST神經(jīng)網(wǎng)絡(luò)進(jìn)行可視化了。
MNIST的可視化
上圖是對(duì)于MINST神經(jīng)網(wǎng)絡(luò)輸入層數(shù)據(jù)的可視化圖像(784維)。圖中每一個(gè)節(jié)點(diǎn)都表示一張圖片,用一個(gè)784維的向量表示;圖中每一種顏色表示0到9數(shù)字中的一個(gè),相當(dāng)于節(jié)點(diǎn)總共有10種分類(lèi)。我們可以看出:
- MNIST的原始數(shù)據(jù)集中,自發(fā)展示出了一些結(jié)構(gòu)。表示相同數(shù)字的節(jié)點(diǎn),它們?cè)谠?84維空間中,也會(huì)比較接近,因此會(huì)自然地聚集成簇。比如,左側(cè)的藍(lán)色節(jié)點(diǎn)群,表示數(shù)字0;右下角的靛藍(lán)色節(jié)點(diǎn)群,表示數(shù)字1;而左下角的絳紫色節(jié)點(diǎn)群,表示數(shù)字6。
- 中間右側(cè)有多種不同類(lèi)的節(jié)點(diǎn)混雜的一起。比如,表示數(shù)字9的紅色節(jié)點(diǎn),表示數(shù)字7的深褐色節(jié)點(diǎn),還有表示數(shù)字4的黃綠色節(jié)點(diǎn),相互交織在一起。這表示它們不太容易互相區(qū)分開(kāi)。
上圖則是對(duì)于MINST神經(jīng)網(wǎng)絡(luò)中間隱藏層輸出數(shù)據(jù)的可視化圖像(128維)。圖中每一個(gè)節(jié)點(diǎn)還是對(duì)應(yīng)一張圖片(即對(duì)應(yīng)原始圖片數(shù)據(jù)經(jīng)過(guò)了隱藏層的變換之后的數(shù)據(jù)),變成了用一個(gè)128維的向量表示;圖中每一種顏色仍是表示0到9數(shù)字中的一個(gè),還是總共有10種分類(lèi)。我們可以看出:
- 與前面的MINST原始輸入數(shù)據(jù)相比,節(jié)點(diǎn)的混亂程度降低了(我們也可以說(shuō),熵值降低了)。這也包括在前面圖像中混雜在一起的數(shù)字7、數(shù)字4和數(shù)字9,現(xiàn)在它們都各自聚集成簇了:左側(cè)突出來(lái)的深褐色節(jié)點(diǎn)群,是數(shù)字7;左上角的黃綠色節(jié)點(diǎn)群,是數(shù)字4;紅色節(jié)點(diǎn)群,是數(shù)字9。這表示更容易把它們相互分開(kāi)了。
上圖是對(duì)于MINST神經(jīng)網(wǎng)絡(luò)最終的輸出層輸出數(shù)據(jù)(經(jīng)過(guò)了softmax處理之后的)的可視化圖像(10維)。圖中每一個(gè)節(jié)點(diǎn)還是對(duì)應(yīng)一張圖片(即對(duì)應(yīng)原始圖片數(shù)據(jù)經(jīng)過(guò)了整個(gè)神經(jīng)網(wǎng)絡(luò)的變換之后的數(shù)據(jù)),變成了一個(gè)只有10維的向量;圖中每一種顏色仍是表示0到9數(shù)字中的一個(gè),還是總共有10種分類(lèi)。我們可以看出:
- 節(jié)點(diǎn)混亂程度極大降低,每類(lèi)數(shù)字都各自聚集在一起??紤]到這張圖像里面的節(jié)點(diǎn)數(shù)量跟前面兩張圖像里面的節(jié)點(diǎn)數(shù)量是完全一樣的,但散布空間小了很多,說(shuō)明按照分類(lèi)的聚集程度達(dá)到了很高的程度。實(shí)際上,這時(shí)候只需要對(duì)最后這個(gè)10維向量做一個(gè)簡(jiǎn)單的argmax判斷,就可以以很高的準(zhǔn)確率識(shí)別出具體數(shù)字了。這表示,最后的輸出具有很高的「可分」度。
小結(jié)
在本文中,通過(guò)對(duì)神經(jīng)網(wǎng)絡(luò)的可視化研究,我們發(fā)現(xiàn):從原始的特征輸入出發(fā),神經(jīng)網(wǎng)絡(luò)每經(jīng)過(guò)一層的變換處理,都在抽象程度上離問(wèn)題的目標(biāo)更接近一點(diǎn)。拿MNIST的手寫(xiě)體數(shù)字識(shí)別問(wèn)題來(lái)說(shuō),目標(biāo)是一個(gè)多分類(lèi)問(wèn)題,即把圖片歸到0到9這10個(gè)類(lèi)別中的一個(gè)。最開(kāi)始輸入的是原始的圖片像素?cái)?shù)據(jù),每經(jīng)過(guò)一次網(wǎng)絡(luò)層變換處理之后,數(shù)據(jù)就變得比原來(lái)更「可分」一點(diǎn),也就是離分類(lèi)的目標(biāo)更接近一點(diǎn)。
這是一種典型的對(duì)信息進(jìn)行整合的過(guò)程。就像許多現(xiàn)實(shí)世界中的情形一樣,龐雜的細(xì)節(jié),只有經(jīng)過(guò)有效地整合,我們才能獲得真正的「感知」或「認(rèn)知」。
而對(duì)于類(lèi)似圖像識(shí)別這樣的簡(jiǎn)單的感知行為,人類(lèi)甚至意識(shí)不到這個(gè)信息整合過(guò)程的存在。把人眼看到物體這個(gè)過(guò)程拆解開(kāi)來(lái)看,物理世界的光子進(jìn)入人眼感光細(xì)胞,會(huì)產(chǎn)生大量的細(xì)節(jié)數(shù)據(jù)。而這些數(shù)據(jù)勢(shì)必經(jīng)過(guò)了人腦中一個(gè)類(lèi)似神經(jīng)網(wǎng)絡(luò)(肯定比神經(jīng)網(wǎng)絡(luò)更高級(jí))的結(jié)構(gòu)來(lái)處理,將這些細(xì)節(jié)數(shù)據(jù)經(jīng)過(guò)整合之后,才讓我們?cè)诤暧^層面認(rèn)識(shí)到眼前看到了什么物體。對(duì)人腦來(lái)說(shuō),這個(gè)過(guò)程是瞬間發(fā)生的,它快速、準(zhǔn)確,而且低能耗。如果我們要設(shè)計(jì)一種能識(shí)別物體的模型,最好的方法也許是完全復(fù)制人腦的處理機(jī)制。但這些機(jī)制都是未知,或者至少我們所知非常有限。因此,我們只能近似、參考、模仿人腦的機(jī)制。
最后,我們今天所討論的可視化技術(shù),只是對(duì)于機(jī)器學(xué)習(xí)追求可解釋性的技術(shù)(Interpretability Techniques)中非常初級(jí)的一部分。它可能會(huì)對(duì)我們?nèi)绾涡拚F(xiàn)有模型或者如何更好地訓(xùn)練模型,提供參考價(jià)值,但是,它很可能無(wú)法幫助我們從頭發(fā)明出一個(gè)顛覆式的學(xué)習(xí)機(jī)制。就像我們?cè)谏弦黄恼隆冻绦騿T眼中的「技術(shù)-藝術(shù)」光譜》中所討論的那樣,新模型的設(shè)計(jì),或者一種嶄新學(xué)習(xí)機(jī)制的發(fā)明,仍然是一門(mén)需要靈感的「藝術(shù)」。