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