利用激活图谱探索神经网络-Exploring Neural Networks with Activation Atlases (上)
利用激活圖譜探索神經網絡-Exploring Neural Networks with Activation Atlases(上)
- 瞎白話
- 正文
- 概覽
- 簡介
- 查看單張圖像
- 聚合多張圖像
- 原文鏈接
- 原文作者列表
- Shan Carter
- Zan Armstrong
- Ludwing Schubert
- Ian Johnson
- Chris Olah
- DOI: 10.23915/distill.00015
- 這篇文章原文來自Distill,Distill是一個深度學習的文章平臺,致力于產出清晰,動態,生動的深度學習文章。其官網上的標語是:Machine Learning Research Should Be Clear, Dynamic and Vivid. Distill Is Here to Help。總而言之,Distill提供了一些更為生動,通俗易懂的深度學習文章,對于初學者和深度學習研究人員都是不錯的閱讀材料。
利用激活圖譜探索神經網絡
我們通過使用特征反演(feature inversion)可視化了一個圖像分類神經網絡中的數百萬個激活,創建了一個能夠揭示神經網絡通常如何表示概念的可自由探索的特征激活圖譜。
圖1 InceptionV1神經網絡的激活圖譜顯示了許多完全實現的特征,如電子器件(圖中A部分),建筑物(圖中B部分),食物(圖中C部分),動物的耳朵,植物,以及水作為背景(圖中D部分)等。網格單元被標記為它們最支持的分類。網格單元的大小也根據內部平均激活數量的密度來確定。
-
Introduction(簡介)
神經網絡能夠學習到比任何人類直接設計的系統更準確地分類圖像的能力。一個自然而然的問題就是,神經網絡究竟學習到了什么以至于能取得如此好的分類能力呢?
特征可視化嘗試通過讓我們看到“神經網絡的視角”來回答這一問題。這些研究起始于對的單個神經元的可視化和嘗試找到這些神經元在響應什么。因為神經網絡中的神經元并不是單獨工作的,這就導向了對簡單的神經元組合的特征可視化。相應的另一個問題就是,我們應該研究哪些神經元組合的特征可視化呢?一個自然的回答就是根據激活值來挑選那些對于特定輸入有較大響應的神經元。
這些方法十分有趣,因為我們可以通過特征可視化理解神經網絡的隱藏層。這些隱藏層是神經網絡勝過傳統機器學習方法的核心,而從歷史上看,我們對它們的作用知之甚少。特性可視化通過將隱藏層連接回輸入來解決這個問題。
然而,激活值可視化有一個很大的缺陷,那就是它只能讓你看到網絡是如何看待單個的輸入的。這樣激活值可視化就無法給出整個網絡層次的全局視圖。當我們想要一張整個森林的地圖時,一次檢查一棵樹是不夠的。
有一些能夠給出全局視圖的技術,但這些技術也有一些缺點。舉例來說,Karpathy的CNN codes visualization通過獲取每個圖像并根據它們在神經網絡中的激活值來組織它們,進而提供數據集的全局視圖。展示模型所認為的相似圖像確實有助于我們推斷網絡對哪些特征做出了響應,但是特征可視化使這些聯系更為明確。Nguyen等人使用t-SNE算法獲得了更多樣化的神經元可視化,通過對圖像進行聚類,為t-SNE優化過程生成不同的初始化方式。這揭示了關于神經元檢測到的內容的更全局的視圖,但仍然僅僅關注于單個神經元。
本文將介紹激活圖譜(activation atlases) 這一技術。一般來說,我們使用了類似于CNN codes 的技術,但沒有展示輸入數據而是平均激活的特征可視化圖像。通過將這兩種技術結合,我們就能夠得到“神經網絡視角”的全局視圖。
圖2 幾種特征可視化技術的對比。上圖中A表示的是單個神經元的特征可視化,將單個神經元可視化會使隱藏層有一定的意義,但卻忽略了神經元之間的交互作用——它只向我們展示了高維激活空間的一維正交探針。B表示的是兩個神經元組合的特征可視化,成對的相互作用揭示了相互作用的效果,但它們只顯示了數百維空間的二維切片,而且許多組合是不現實的。C展示了空間激活的特征可視化。空間激活通過對可能激活的子流形進行采樣,向我們展示了許多神經元的重要組合,但它們僅限于在給定的示例圖像中出現的那些。D展示的是激活圖譜提供的特征可視化。激活圖譜通過對多種可能的激活進行采樣,為我們提供了一個更全面的概況。
這些圖譜不僅僅揭示了一個模型的抽象視覺表示,在后面的文章中我們將給出圖譜可以展示模型使用了高層次的錯誤特征表示的例子。當然,激活圖譜也有它的局限性。具體而言,激活圖譜的生成依賴于我們用于采樣的激活值對應的輸出圖像的數據分布(在我們的示例中,我們使用了從ImageNet數據集訓練集中隨機選擇的100萬張圖像)。結果就是,示例中的激活圖譜僅僅能顯示樣本數據分布對應的激活值。雖然明白這些局限性很重要,我們也會在后續深入討論這些局限性,但是激活圖譜仍然能夠讓我們對神經網絡學習到的特征表示有了一種全新的認識。
圖3 一個錯誤分類的示例,灰鯨加上棒球被神經網絡認為更像是大白鯊而不是灰鯨或者棒球本身,下文將講解錯誤分類的原因。
-
Looking at a Single Image(查看單張圖像)
在深入了解激活圖譜之前,讓我們來簡要地回顧一下如何使用特征可視化來讓激活向量能被人所理解(”this is what we call see through the network’s eyes”)。這項技術先前在Build Blocks這篇文章中介紹過,而且也正是激活圖譜技術的基石。
在這篇文中中,我們將集中于InceptionV1(也被大家稱作GooglenNet)這一神經網絡。在2014年ImageNet大型視覺識別挑戰賽中,它贏得了分類任務的冠軍。InceptionV1由許多層組成,我們稱之為“mixed3a”、“mixed3b”、“mixed4a”等,有時簡稱為“3a”。每一層都是在前一層的基礎上依次構建的。
圖4 Inceptionv1的模型結構概覽圖。InceptionV1建立了對圖像的多層理解,它是在ImageNet ILSVRC上訓練的,每個層實際上都有幾個組成部分,但在本文中,我們將重點討論這些較大的block。
為了可視化InceptionV1如何查看圖像,第一步是將圖像輸入到網絡中并前向傳播到感興趣的層。然后我們收集激活值——每個神經元激活的數值。如果一個神經元被它所顯示的東西所激發,它的激活值將是正的。
不幸的是,這些激活值的向量只是無單位數的向量,并不是特別容易被人理解的。這就是特性可視化的用武之地。粗略地說,我們可以把特征可視化看作生成能夠讓網絡產生特定激活向量的理想化的圖像。雖然我們通常使用網絡將圖像轉換成激活向量,但在特征可視化中,我們走的是相反的方向。我們從特定層的激活向量開始,通過迭代優化過程創建圖像。
因為InceptionV1是一個卷積網絡,每層每幅圖像都不只有一個激活向量。這意味著相同的神經元在前一層的每個batch上運行。因此,當我們通過網絡傳遞整個圖像時,每個神經元將被評估數百次,對于圖像的每個batch一次。我們可以分別考慮每個神經元對每個batch的激活量。
圖5 單張輸入圖像中不同的batch的特征可視化。圖中INPUT IMAGE表示輸入圖像,IMAGE PATCH表示卷積運算的基本單位,ACTIVATIONS表示的是這一個Image Patch 對應的網絡激活值,FEATURE VISUALIZATION表示的是單個Image Patch對應的特征可視化圖像,最后ACTIVATION GRID中不同的方格中是不同的Image Patch對應的特征可視化圖像。
圖6 單張輸入圖像中的不同batch的特征可視化,右側的可視化圖像生成自InceptionV1網絡的mixed4d層。
最終的結果是一個特征可視化網格,每個Image Batch一個。這向我們展示了網絡如何看到輸入圖像的不同部分。
-
Aggregating Multiple Images (聚合多張圖像)
“激活網格”能夠展示神經網絡是如何看待一個單張圖像的,但如果我們想更多呢?如果我們想要看到網絡如何響應數以百萬計的訓練集中的圖像呢?
當然,我們可以一個一個的查看訓練集中所有圖像對應的“激活網格”。但是,這樣的方法對于大規模的數據集是不適用的,而且人類本身也不擅長對無結構的樣本的比較。就像是我們通過直方圖理解統計規律,如果我們想要看到數百萬個特征可視化圖像中的模型就需要一種匯總和組織特征可視化圖像的方法。
讓我們先從收集數百萬張圖像的激活值開始,我們隨機從每張圖像的激活值中選擇一個Image Batch對應的激活值(spatial activation)。這樣我們就得到了數百萬個激活向量,每個激活向量都是高維向量,比如說512維。面對如此復雜的數據,我們需要對其進行組織和匯總才能得到一個全局視圖(big picture)。
值得慶幸的是,我們擁有現代化的降維技術。像t-SNE,UMAP這樣的算法,能夠將像激活值向量這樣的高維向量降維到2維平面上同時保留原始維度空間的局部結構。降維算法可以用來組織我們的激活向量,但是我們還需要將其聚合成更易于管理的元素,投影圖上有一百萬個點的話將會難以解釋。為此,我們將在通過降維創建的2D布局上繪制網格。對于網格中的每個單元,我們將平均化所有位于該單元邊界內的激活,并使用特征可視化來創建圖標表示。
圖7 激活圖譜的生成過程示意圖。首先將一組隨機選取的100萬張圖像輸入網絡,每張圖像收集一個隨機的空間激活。然后將激活向量通過UMAP算法降維后投影到2維平面上,在二維平面上繪制點,相似的激活向量被放置在相近的位置。最后在二維平面上繪制一系列網格,并將同一個網格內所有點對應的激活向量平均化然后通過特征反演(feature inversion)可視化平均后的激活向量。網格單元的大小與該落在網格內的激活向量對應的點數成正比。
我們使用Feature Visualization這篇文章中描述的正則化來執行特征可視化(特別是轉換魯棒性)。對每個激活向量還計算一個屬性向量,屬性向量對每一個類別都有一個值,并近似于激活向量對每個類別影響的大小。激活圖譜中顯示的網格內的屬性是該網格內的激活向量的屬性向量的平均值。
這個平均屬性可以被認為是顯示網格傾向于支持什么類別。在較淺的層中,平均屬性是非常小的,而最支持的類別是相當隨機的,因為像紋理這樣的低級視覺特征在沒有上下文的情況下往往沒有什么區別。
圖8 激活圖譜的一小部分和其中每個網格所給出的“可能的標簽”。
整個激活圖譜乍一看有點讓人信息過載,這反映了模型所學習到的抽象概念的多樣性。讓我們來深入的看一下整個激活圖譜。
圖9 激活圖譜的左上角。如果我們看圖集的左上角,就會看到像動物頭的樣子。不同類型的動物之間存在某些區別,但似乎更多是哺乳動物的元素(如眼睛,毛皮,鼻子)的集合,而不是其他非哺乳動物類的集合。我們還添加了標簽,以顯示每個平均激活最傾向于的類別。請注意,在網絡淺層的某些層中,這些屬性標簽可能會有些混亂。
圖10 激活圖譜中的皮毛和四足動物的腿部。從左上角往下移動我們開始看到不同類型的皮毛和四條腿動物的背部。
圖11 繼續往下,我們發現不同的動物腿和腳擱在不同類型的地面上。
圖12繼續往下,我們開始失去任何可識別的動物部位,并看到孤立的地面和地板。我們看到屬性標簽開始變成 “沙洲”之類的,也有像地面上發現的諸如“門墊”或“螞蟻”之類的東西。
圖13 這些多沙的巖石背景慢慢融入海灘和水域。在這里,我們看到了水面之上和之下的湖泊和海洋。盡管該網絡確實具有“海濱”之類的某些類別,但我們看到屬性標簽有許多海洋動物,而沒有任何視覺上的提及動物本身。盡管并不意外,但可以放心的是,用于分類“海濱”類別的海洋的激活與分類“海星”或“海獅”時使用的激活相同。在這一點上,湖泊與海洋之間也沒有真正的區別。“湖邊”和“河馬”的屬性與“海星”和“黃貂魚”混合在一起。
圖14 現在,我們跳到激活圖譜的另一側,在那里我們可以看到文本檢測器的多種變體。 當識別諸如“菜單”,“網站”或“書皮”之類的類時,這些將很有用。
圖15 向上移動,我們看到關于人的許多變體。在ImageNet中,很少有專門用于識別人物的類,但是很多圖像中都存在人物。我們看到屬性大都是人們使用的東西(“錘子”,“長笛”),人們穿的衣服(“領結”,“足球衫”)和人們參與的活動(“籃球”)。在這些可視化中,膚色具有統一性,我們懷疑這是用于訓練的數據分布的反映。
圖16 最后,重返左部,我們可以看到主要由顏色組成的圓形食物和水果-我們可以看到諸如“檸檬”,“橙色”和“無花果”的屬性標簽。
圖17 此外,我們還可以在總的激活圖譜上劃線追蹤特征可視化圖像的變化,不僅僅是因為這些區域本身就很重要,曲線上的特征可視化圖像的變化似乎也是人類可以理解的。以水果舉例來說,我們可以追蹤一個與尺寸和數量相關的變化路徑。
圖18 相似的,對“人”這一個類別來說,我們也可以找到一條與圖像中人數相關的路徑。
圖19 在于地面相關的特征可視化圖像中,我們能夠找到一條從“水”到“海灘”再到“巖石懸崖”的路徑。
圖20 在與植物相關的區域,我們可以找到一條似乎與植物模糊程度相對應的路徑。由于照相機的典型焦距,這可能被用來確定物體的相對大小。近距離拍攝小昆蟲的照片比拍攝大動物(如猴子)的照片有更多模糊化背景樹葉的可能。
需要注意的是,這些路徑是在低維投影中構造的。在低維度的投影中,它們是平滑的路徑,但我們并不知道這些路徑在原始的高維激活空間中是怎樣的。
總結
以上是生活随笔為你收集整理的利用激活图谱探索神经网络-Exploring Neural Networks with Activation Atlases (上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HbuilderX表格练习2
- 下一篇: 保姆级PS教程:建筑表现后期中的照明处理