最近,人們對深度神經(jīng)網(wǎng)絡(luò)產(chǎn)生了極大的興趣,因?yàn)樗鼈冊?a href="http://www.wenjunhu.com/v/tag/3744/" target="_blank">計(jì)算機(jī)視覺等領(lǐng)域取得了突破性的成果。
盡管如此,仍有一些人對此表示關(guān)切。一是很難去理解神經(jīng)網(wǎng)絡(luò)真正在做什么。如果一個人訓(xùn)練得很好,就可以獲得高質(zhì)量的結(jié)果,但是要理解它是如何做到的是很困難的。如果網(wǎng)絡(luò)出現(xiàn)故障,很難解釋出了什么問題。
雖然理解深層神經(jīng)網(wǎng)絡(luò)的一般行為很有挑戰(zhàn)性,但事實(shí)證明,探索低維深層神經(jīng)網(wǎng)絡(luò)要容易得多——每層只有幾個神經(jīng)元的網(wǎng)絡(luò)。事實(shí)上,我們可以通過可視化來理解這種網(wǎng)絡(luò)的行為和訓(xùn)練。這一觀點(diǎn)將使我們對神經(jīng)網(wǎng)絡(luò)的行為有更深的直覺,并觀察到神經(jīng)網(wǎng)絡(luò)與一個稱為拓?fù)鋵W(xué)的數(shù)學(xué)領(lǐng)域之間的聯(lián)系。
接下來有許多有趣的事情,包括能夠?qū)μ囟〝?shù)據(jù)集進(jìn)行分類的神經(jīng)網(wǎng)絡(luò)復(fù)雜性的基本下界。
一個簡單的例子
讓我們從一個非常簡單的數(shù)據(jù)集開始,平面上的兩條曲線上的所有點(diǎn)。神經(jīng)網(wǎng)絡(luò)將試著把點(diǎn)分為兩類。
一個最直觀的方式去觀察神經(jīng)網(wǎng)絡(luò)的行為(或任何分類算法),就是看看它是如何對每個可能的數(shù)據(jù)點(diǎn)進(jìn)行分類的。
我們將從最簡單的神經(jīng)網(wǎng)絡(luò)開始,這個只有一個輸入層和一個輸出層。這樣的網(wǎng)絡(luò)只是試圖用一條線將這兩類數(shù)據(jù)分開。
這種網(wǎng)絡(luò)不夠有趣?,F(xiàn)代神經(jīng)網(wǎng)絡(luò)通常在輸入和輸出之間有多層,稱為“隱藏”層。但這個網(wǎng)絡(luò)好歹有一層可研究。
類似地,我們可以通過查看神經(jīng)網(wǎng)絡(luò)對其域中不同點(diǎn)所做的操作,來觀察該網(wǎng)絡(luò)的行為。下面這個圖用比直線更復(fù)雜的曲線來分離數(shù)據(jù)。
對于每一層,網(wǎng)絡(luò)都會轉(zhuǎn)換數(shù)據(jù),創(chuàng)建一個新的表示形式。我們可以查看這些表示形式中的數(shù)據(jù)以及網(wǎng)絡(luò)如何對它們進(jìn)行分類。當(dāng)我們得到最終的表示時(shí),網(wǎng)絡(luò)只會在數(shù)據(jù)中畫一條線(可能在更高的維度中,是一個超平面)。
在前面的可視化中,我們查看了數(shù)據(jù)的“原始”表示形式。你可以把它看作是我們在看「輸入層」?,F(xiàn)在我們將在它被第一層轉(zhuǎn)化之后再看一看。你可以認(rèn)為這是我們在看「隱藏層」。
每一個維度都對應(yīng)于該層神經(jīng)元的激活。
隱藏層學(xué)習(xí)的一種表示,這樣使得數(shù)據(jù)可以線性分離
層的連續(xù)可視化
在上一節(jié)中概述的方法中,我們通過查看與每一層對應(yīng)的表示來學(xué)習(xí)理解網(wǎng)絡(luò)。這給了我們一個離散的表示列表。
棘手的部分在于理解我們?nèi)绾螐囊粋€到另一個。謝天謝地,神經(jīng)網(wǎng)絡(luò)層有很好的特性,使這變得非常容易。
在神經(jīng)網(wǎng)絡(luò)中有各種不同的層。我們將討論 tanh 層作為一個具體例子。一個tanh層,包括:
用“權(quán)”矩陣 W 作線性變換
用向量 b 作平移
用 tanh 逐點(diǎn)表示
我們可以將其視為一個連續(xù)的轉(zhuǎn)換
其他標(biāo)準(zhǔn)層的情況大致相同,由仿射變換和單調(diào)激活函數(shù)的逐點(diǎn)應(yīng)用組成。
我們可以應(yīng)用這種技術(shù)來理解更復(fù)雜的網(wǎng)絡(luò)。例如,下面的網(wǎng)絡(luò)使用四個隱藏層對兩個稍微糾纏的螺旋進(jìn)行分類。隨著時(shí)間的推移,我們可以看到,為了對數(shù)據(jù)進(jìn)行分類,它從“原始”的表示方式轉(zhuǎn)變?yōu)楦呒墑e的表示方式。雖然螺旋最初是糾纏在一起的,但到最后它們是線性可分離的。
另一方面,下面的網(wǎng)絡(luò),也使用多層,但無法分類兩個更糾纏的螺旋。
這里值得明確指出的是,這些任務(wù)只是有些挑戰(zhàn)性,因?yàn)槲覀兪褂玫氖堑途S神經(jīng)網(wǎng)絡(luò)。如果我們使用更廣泛的網(wǎng)絡(luò),這一切都會很容易。
(Andrej Karpathy基于ConvnetJS制作了一個很好的demo,讓您可以通過這種可視化的訓(xùn)練交互式地探索網(wǎng)絡(luò)!)
tanh層的拓?fù)?/p>
每一層都會拉伸和擠壓空間,但它從不切割、斷裂或折疊空間。直觀上來看,它保持了拓?fù)湫再|(zhì)。例如,如果一個集合在之前連續(xù),那么它將在之后也如此(反之亦然)。
像這樣不影響拓?fù)涞淖儞Q稱為同胚。形式上,它們是雙向連續(xù)函數(shù)的雙射。
定理:神經(jīng)網(wǎng)絡(luò)的一層有N個輸入和N個輸出,這層的映射是同胚,如果權(quán)重矩陣 W 是非奇異的。
證明:讓我們一步一步地考慮這個問題
假設(shè) W 存在非零行列式。那么它是一個具有線性逆的雙射線性函數(shù)。線性函數(shù)是連續(xù)的。那么乘以 W 是同胚
translations是同胚的
tanh(和sigmoid和softplus,但不是ReLU)是具有連續(xù)逆的連續(xù)函數(shù)。它們就是雙射,逐點(diǎn)的應(yīng)用它們就是一個同胚
因此,如果 W 存在一個非零行列式,我們的層就是同胚。
如果我們?nèi)我獾貙⑦@些層組合在一起,這個結(jié)果仍然成立。
拓?fù)渑c分類
我們考慮一個二維數(shù)據(jù)集,它包含兩類:
A是紅的,B是藍(lán)的
說明:如果一個神經(jīng)網(wǎng)絡(luò)沒有一個包含3個或更多隱藏單元的層,不管深度如何,它都不可能對這個數(shù)據(jù)集進(jìn)行分類。
如前所述,使用sigmoid單元或softmax層進(jìn)行分類相當(dāng)于試圖找到一個超平面(在本例中是一條線)來分隔 A 和 B。由于只有兩個隱藏單元,網(wǎng)絡(luò)在拓?fù)渖蠠o法以這種方式分離數(shù)據(jù),并且在這個數(shù)據(jù)集上注定會失敗。
在下面的可視化中,當(dāng)一個網(wǎng)絡(luò)沿著分類線訓(xùn)練時(shí),我們觀察到一個隱藏的表示。正如我們所看到的,它試圖學(xué)習(xí)一種方法來做到這一點(diǎn)。
最后它被拉進(jìn)了一個相當(dāng)不好的局部極小值。雖然它實(shí)際上能夠達(dá)到80%的分類精度。
這個例子只有一個隱藏層,但是無論如何它都會失敗。
證明:要么每層是同胚,要么層的權(quán)矩陣有行列式0。如果是同胚的話,A仍然被B包圍著,一條線不能把它們分開。但是假設(shè)它的行列式為0,那么數(shù)據(jù)集將在某個軸上折疊。因?yàn)槲覀兲幚淼氖桥c原始數(shù)據(jù)集同胚的東西,A 被 B 包圍,A 在任何軸上塌陷意味著我們將有一些A 和 B 混合的點(diǎn),它們變得無法區(qū)分。
如果我們添加第三個隱藏單元,問題就變得不重要了。
通過這種表示,我們可以用一個超平面來分隔數(shù)據(jù)集。
為了更好地了解發(fā)生了什么,讓我們考慮一個更簡單的一維數(shù)據(jù)集:
如果不使用由兩個或更多隱藏單元組成的層,我們就無法對該數(shù)據(jù)集進(jìn)行分類。但是如果我們用一個單位和兩個單位,我們就學(xué)會了用一條漂亮的曲線來表示數(shù)據(jù),這樣我們就可以用一條線來分隔類:
流形假說
這是否與真實(shí)世界的數(shù)據(jù)集相關(guān),比如圖像數(shù)據(jù)?如果你真的認(rèn)真對待流形假設(shè),我認(rèn)為這是值得考慮的。
流形假設(shè)是自然數(shù)據(jù)在其嵌入空間中形成低維流形。有理論和實(shí)驗(yàn)作為理由相信這是真的。如果你相信這一點(diǎn),那么分類算法的任務(wù)就是從根本上分離一組糾纏在一起的流形。
在前面的示例中,一個類完全包圍了另一個類。然而,狗的圖像流形似乎并不很可能被貓圖像流形完全包圍。但是還有其他更合理的拓?fù)淝闆r,仍然可能會引發(fā)問題,我們將在下一節(jié)中看到。
連接和同倫
一個有趣的數(shù)據(jù)集是兩個鏈接的圓環(huán)面(tori),A 和 B。
這與我們之前考慮的數(shù)據(jù)集非常相似,如果不使用n+1維度,這個數(shù)據(jù)集就不能被分離,這里即為第4維度。
連接是在結(jié)理論中被研究的,這是拓?fù)鋵W(xué)的一個領(lǐng)域。有時(shí),當(dāng)我們看到一個連接時(shí),它是否是一個斷開的鏈接(一堆東西糾纏在一起,但可以通過連續(xù)變形來分開)并不是很明顯。
如果一個只有3個單位的層的神經(jīng)網(wǎng)絡(luò)可以對它進(jìn)行分類,那么它就是一個斷開的連接。(問題:從理論上講,一個只有3個單元的網(wǎng)絡(luò)是否可以對所有未鏈接進(jìn)行分類?)
從結(jié)的角度來看,我們對神經(jīng)網(wǎng)絡(luò)產(chǎn)生的表示的連續(xù)可視化不僅僅是一個很好的動畫,它是一個解開鏈接的過程。在拓?fù)鋵W(xué)中,我們稱之為原始連接和分離之間的ambient isotopy。
一個簡單的方法
對于神經(jīng)網(wǎng)絡(luò)來說,最簡單的方法就是嘗試將流形拉開,并盡可能地拉伸那些纏結(jié)在一起的部分。雖然這不會接近真正的解決方案,但它可以實(shí)現(xiàn)相對較高的分類精度,并且是一個較為誘人的局部最小值。
它會在它試圖拉伸的區(qū)域上呈現(xiàn)出非常高的導(dǎo)數(shù),并且在不連續(xù)點(diǎn)附近較尖銳。我們知道這些事情發(fā)生了。收縮懲罰,懲罰數(shù)據(jù)點(diǎn)的層的導(dǎo)數(shù),是應(yīng)對這一點(diǎn)的自然方法。
由于這些局部極小值從解決拓?fù)鋯栴}的角度來說是完全無用的,拓?fù)鋯栴}可能為探索解決這些問題提供了一個很好的動力。
另一方面,如果我們只關(guān)心取得好的分類結(jié)果,我們似乎不在乎。如果一小部分?jǐn)?shù)據(jù)流形被另一個流形所纏繞,那對我們來說是個問題嗎?盡管存在這個問題,我們似乎應(yīng)該能夠得到任意好的分類結(jié)果。
(我的直覺是,像這樣試圖欺騙問題是個壞主意:很難想象這不會是一個死胡同。特別是,在局部極小值是一個大問題的優(yōu)化問題中,選擇一個不能真正解決問題的體系結(jié)構(gòu)似乎會導(dǎo)致糟糕的性能。)
操縱流形的更好層次?
我越是想到標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)層——也就是說,用仿射變換和逐點(diǎn)激活函數(shù)——我就越感到不抱幻想。很難想象它們真的非常適合操縱流形。
也許有一種完全不同的層次,我們可以在構(gòu)圖中使用更傳統(tǒng)的層次是有意義的?
我覺得很自然的一件事是學(xué)習(xí)一個向量場,它的方向是我們想要移動流形的方向:
然后在此基礎(chǔ)上變形空間:
我們可以在固定點(diǎn)學(xué)習(xí)向量場(只需從訓(xùn)練集中選取一些固定點(diǎn)作為錨),并以某種方式進(jìn)行插值。上面的向量場的形式如下:
其中和是向量和和是n維高斯函數(shù)。這是受到徑向基函數(shù)的啟發(fā)。
K-近鄰層
我也開始認(rèn)為,線性可分性可能對神經(jīng)網(wǎng)絡(luò)是一個巨大的,可能是很不合理的的要求。在某些方面,使用k近鄰(k-NN)是一件很自然的事情。然而,k-NN它的成功在很大程度上依賴于它對數(shù)據(jù)進(jìn)行分類的表示,因此在k-NN能夠正常工作之前需要一個良好的表示。
作為第一個實(shí)驗(yàn),我訓(xùn)練了一些MNIST網(wǎng)絡(luò)(兩層CNN,無dropout),達(dá)到~1%,測試錯誤。然后,我放棄了最后的softmax層,并使用了k-NN算法。我能夠?qū)崿F(xiàn)測試誤差降低0.1-0.2%。
不過,這感覺不太合適。網(wǎng)絡(luò)仍然在嘗試進(jìn)行線性分類,但是由于我們在測試時(shí)使用k-NN,它能夠從它犯的錯誤中恢復(fù)一點(diǎn)。
由于(1/distance)的加權(quán),k-NN相對于它所作用的表示是可微的。因此,我們可以直接訓(xùn)練網(wǎng)絡(luò)進(jìn)行k-NN分類。這可以看作是一種“最近鄰”層,作為softmax的替代品。
我們不想為每個小批量反饋整個訓(xùn)練集,因?yàn)檫@在計(jì)算上非常昂貴。我認(rèn)為一個很好的方法是根據(jù)小批量中其他元素的類別對小批量中的每個元素進(jìn)行分類,給每個元素賦予(1/(與分類目標(biāo)的距離))的權(quán)重,遺憾的是,即使使用復(fù)雜的體系結(jié)構(gòu),使用k-NN也只能得到5-4%的測試錯誤,而使用更簡單的體系結(jié)構(gòu)會得到更糟糕的結(jié)果。不過,我在使用超參數(shù)方面投入的精力很少。
不過,我還是很喜歡這種方法,因?yàn)槲覀儭耙蟆本W(wǎng)絡(luò)做的似乎更合理。我們希望同一流形的點(diǎn)比其他流形的點(diǎn)更接近,而不是流形被超平面分開。這應(yīng)該對應(yīng)于膨脹不同類別的流形之間的空間和收縮單個流形。這感覺很簡單。
總結(jié)
數(shù)據(jù)的拓?fù)涮匦钥赡苁沟檬褂玫途S網(wǎng)絡(luò)來線性劃分類是不可能的(在不考慮深度的前提下)。即使在技術(shù)上可行的情況下,例如螺旋,這樣做也是非常具有挑戰(zhàn)性的。
為了用神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)進(jìn)行精確分類,有時(shí)需要寬層。此外,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)層似乎不太擅長表示流形的重要操作;即使我們用手巧妙地設(shè)置權(quán)重,也很難緊湊地表示我們想要的變換。新設(shè)計(jì)的層,特別是由機(jī)器學(xué)習(xí)的多方面觀點(diǎn)推動的,可能是有用的。
責(zé)任編輯:haq
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100973 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7113瀏覽量
89304
原文標(biāo)題:用可視化理解神經(jīng)網(wǎng)絡(luò)!
文章出處:【微信號:TheBigData1024,微信公眾號:人工智能與大數(shù)據(jù)技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論