0
深度學習的黑盒問題一直以來都是機器學習領域的一大難題,而直接導致這一難題的便是神經(jīng)網(wǎng)絡中除輸入層和輸出層以外的隱藏層。
隱藏層不直接接受外界的信號,也不直接向外界發(fā)送信號,因而如何認識隱藏層內(nèi)部的工作原理和運行機制,也成為深度學習研究中的一大挑戰(zhàn)。
可視化隱藏層是其中的一個解決方法,那如何做到呢?
對此,來自西蒙弗雷澤大學的幾位學生Pallavi Bharadwaj、Inderpartap Cheema、Najeeb Qazi 以及 Mrinal Gosain 合作寫作了一篇文章,不僅指出了了解神經(jīng)網(wǎng)絡隱藏層的重要性,還詳盡地介紹了如何可視化神經(jīng)網(wǎng)絡以及隱藏層的過程。
大腦皮層中神經(jīng)元之間的連接,啟發(fā)了模仿這些復雜連接的算法的開發(fā)。簡而言之,可以將神經(jīng)網(wǎng)絡的學習方法理解為類似于新生兒通過一段時間的觀察和聆聽來學習辨認父母的方式。一旦神經(jīng)網(wǎng)絡接收到相當大的所需數(shù)據(jù)集后,該網(wǎng)絡就會使用其精確的知識“權(quán)重”來證明或識別未知數(shù)據(jù)樣本上的模式。
讓我們來思考一下關于面部識別的任務,網(wǎng)絡開始分析來自輸入層圖像的各個像素。在輸入層之后,“隱藏層”反復學習識別幾何形狀和特征,這些幾何形狀和特征由眼睛、嘴唇、疤痕等特定的特征構(gòu)成。在最終的輸出層中,它根據(jù)計算出的概率信息對人臉進行了充分的猜測,并識別該面孔到底是誰。
顯然,這些隱藏層在最終將輸入分解為有價值的信息方面,起著至關重要的作用。從輸入到輸出的過程中每一層處理的信息越來越復雜,而且通常而言,隱藏層,顧名思義,這個名詞籠罩著神秘的色彩,但是它們是這樣嗎?
AI 領域流傳了一個關于神經(jīng)網(wǎng)絡的故事,以檢測坦克為目標來訓練神經(jīng)網(wǎng)絡,結(jié)果神經(jīng)網(wǎng)絡卻學會了檢測一天的時間。
這個故事的來源是這樣的:
美國陸軍希望使用神經(jīng)網(wǎng)絡來自動檢測偽裝的敵方坦克。 研究人員用兩組數(shù)據(jù)來訓練神經(jīng)網(wǎng)絡,一組是50張?zhí)箍藗窝b在樹林中的照片,另一組是50張沒有坦克的樹林照片。 然后,研究人員又拍攝了另外一組100張的照片,并進行了測試。
神經(jīng)網(wǎng)絡將剩余的所有照片都進行了正確的分類。并且分類結(jié)果得到成功確認! 研究人員將他們的檢測方式移交給了五角大樓,五角大樓很快將其退還了,他們抱怨在該神經(jīng)網(wǎng)絡上的測試完全失敗。
事實證明,在用于訓練的數(shù)據(jù)集中,偽裝坦克的照片是在陰天拍攝的,而平原森林的圖像是在晴天拍攝的。 神經(jīng)網(wǎng)絡只不過是學會了區(qū)分多云和晴天,而不是學會識別偽裝的坦克。
無論故事是否真實,它都突出了深度學習中的“數(shù)據(jù)偏向”這一重要問題,但同時也讓一些人認識到,他們只有在得到最終輸出的結(jié)果后才能知道神經(jīng)網(wǎng)絡正在學習什么。即使結(jié)果對于給定的數(shù)據(jù)而言是正確的,但是更重要的是知道網(wǎng)絡是如何給出這些結(jié)果的,這就是為什么我們必須要了解隱藏層的工作原理。
我們回到網(wǎng)絡的基本構(gòu)建模塊——神經(jīng)元。 神經(jīng)元的各層構(gòu)成了復雜、性能最佳的神經(jīng)網(wǎng)絡。 但問題是,每個神經(jīng)元學到了什么?是否可以捕獲在任意特定的時間上的網(wǎng)絡圖像并查看每個神經(jīng)元的行為? 俗話說“一圖勝千言”,現(xiàn)階段所需要的就是可視化。
在最近的項目中,Tensorflow.js的合著者之一Daniel Smilkov和谷歌大腦團隊的Shan Carter共同創(chuàng)建了一個神經(jīng)網(wǎng)絡訓練場( Playground),旨在通過讓用戶與其進行交互和實驗來可視化隱藏層。
The Tensorflow Playground
有趣的是,我們在給機器學習建立更好的模型過程中,得到了關于大腦運作方式的新信息。 處理和可視化隱藏層是開始此過程的好方法,同時也讓更多的人能夠理解深度學習這一概念。
當你對Tensorflow Playground的感受從玩的很開心轉(zhuǎn)換到厭煩時,你就可以加入我們,來學習如何親自構(gòu)建可視化。
讓我們先來了解下 Keras可視化工具包(Keras-vis),這是一個用于可視化和調(diào)試訓練過的神經(jīng)網(wǎng)絡的高級開發(fā)庫。
我們使用在ImageNet 數(shù)據(jù)集的子集上經(jīng)過訓練的VGG16網(wǎng)絡的預訓練權(quán)重,ImageNet 數(shù)據(jù)集由120萬張手工標注的圖像組成,屬于1/1000的預定義類。
這讓我們可以深入地了解使用的層的類型、過濾器大小、可訓練的參數(shù)等。請注意,由于池化層不可訓練,因此該層有0個參數(shù)。 最大池化層通過選擇窗口中的最大值來減小輸入的大小,并且此過程不涉及任何權(quán)重更新。
如果我們要將一個“圖像分類問題”的輸出層可視化為一個圖像,那么我們需要將輸出層的激活函數(shù)轉(zhuǎn)換為線性函數(shù)而不是softmax函數(shù)。了解一種檢索與模型各層關聯(lián)的配置參數(shù)和權(quán)重的方法,會派上用場。
這為我們提供了一些有價值的信息,例如每一層使用的激活函數(shù),該層是否可訓練,過濾器大小,使用了哪種類型的正則器等等。
該實用程序生成的輸入可最大化特定過濾器在給定層上的激活值。在這里,我們嘗試分析模型將輸入的圖像分類為黑熊的期望。
作為人類,我們知道熊的共同特征是身軀大,腿長,鼻子長,耳朵小而圓,毛發(fā)蓬亂,五個不能伸縮的爪子和短尾巴。
這里,神經(jīng)網(wǎng)絡有多個層次的決定需要做,最后結(jié)合這一類別得出結(jié)論。我們需要知道這是一張動物的圖片,這只動物是熊,然后再根據(jù)熊的顯著特征將其縮小到熊的種類(極地熊/黑色熊/棕色熊等)。
我們知道黑熊生活在森林里,北極熊生活在多雪的地區(qū)。作為人類,即使圖像以白色為背景,我們?nèi)匀荒苷_地識別出黑熊的圖像。因此一個訓練有素的網(wǎng)絡應該具備這種跨多層學習的能力。
我們不需要網(wǎng)絡區(qū)分綠色和白色背景,需要的是它們根據(jù)熊的特征來分辨熊的類型。我們都不想重蹈覆轍都市傳奇的故事,不是嗎?
黑熊(左)及北極熊(右)圖像
我們嘗試將模型期望的輸入可視化,并將該輸入分類為黑熊。要將一個圖像分類為黑熊,我們需要激活輸出層的第295個索引,因為該索引與“黑熊”相對應。所以我們通過激活輸出層的這個節(jié)點來逆向構(gòu)造一個輸入圖像。
(輸出層的每個節(jié)點都對應一類圖像。如果要查看 ImageNet 數(shù)據(jù)集的所有類和索引,可以進行以下操作。)
黑熊(左)和北極熊(右)的激活最大化圖
從上圖可以看出,在最后一層,模型正在尋找上述提到的熊最重要的特征。 在訓練過程中,模型也逐步學習各類型特征的微小差異。 現(xiàn)在,我們可以確信網(wǎng)絡正在學習正確的一系列特征,以識別熊!
您可能想知道每個隱藏層是如何對輸出層的最終結(jié)果起作用的。對模型進行微調(diào)以獲得預期的結(jié)果,這一點尤為重要。那怎么做呢?了解具體每一層最突出的一系列特征,使我們能夠在需要時,使用跳躍連接( Skip Connection)來略過這些特性。
讓我們考慮一下前面關于熊分類的例子?,F(xiàn)在試著了解網(wǎng)絡在整個分類過程中是如何被引導的。我們嘗試提取網(wǎng)絡的一組隱藏層(block1_conv1、block2_conv1、block3_conv1、block4_conv1)的輸出,并在每個層中繪制圖像。
黑熊(左)和北極熊(右)的分層輸出
要注意的是,初始層正在學習識別形狀和邊緣等低級特征。這些層了解輸入的要點。在隨后的圖層中,網(wǎng)絡會嘗試接觸越來越多的模糊圖案,如腿、耳朵、眼睛、顏色等。這就是為什么我們會說,網(wǎng)絡越深,它學得越好。
網(wǎng)絡中神秘的隱藏層逐漸捕獲了輸入的最復雜的特征。
圖像中的顯著性是指圖像在視覺處理環(huán)境中的獨特特征(像素、分辨率)。它們代表了圖像中最具視覺吸引力的位置。顯著圖是它們的地形表示法。這種可視化技術使我們能夠認識到每個像素在生成輸出過程中的重要性。
論文《 Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps》(《深度卷積網(wǎng)絡:可視化圖像分類模型和顯著圖》)最早介紹了這項技術,論文地址:https://arxiv.org/pdf/1312.6034v2.pdf
顯著圖生成激活類的種子輸入熱力圖。讓我們以下面這個例子來看看這是什么樣的:
這是一只可愛的狗狗,對吧?
您認為上圖中,網(wǎng)絡應該關注圖像的哪一部分? 當然是圖片中右側(cè)的狗。
網(wǎng)絡將忽略圖像中的其余圖像的像素,將該圖像正確地分類為狗的圖片。 現(xiàn)在,我們?nèi)绾沃谰W(wǎng)絡是否專注于這一部分呢? 這正是顯著圖發(fā)揮重要作用的地方。
顯著圖計算每個像素對結(jié)果的影響。這涉及到計算輸入圖像上每一個像素的輸出梯度。正梯度表示像素值的變化會增加輸出值。
顯著圖-像素的熱力圖
正如我們上面所討論的,這個模型把焦點放在了圖中狗的臉上。由于梯度的大小等于圖像的大?。ㄔ诿恳粋€像素計算出來的),因此提供了一種只有狗圖像的直覺。
顯著圖有助于發(fā)現(xiàn)圖像的獨特特征,而遮擋圖則有助于找出圖像中對模型最重要的部分。
遮擋,在英語中的意思是“隱藏或阻擋”某物。 這就是遮擋圖的工作原理。 圖像的某些部分被遮蓋或“遮擋”,與此同時計算類的概率。 如果概率減少,則圖像的這部分很重要,否則就不重要。
通過這個小怪物的圖像可以更好地理解遮擋圖。
小怪物
我們首先加載此圖像,然后繪制它。 下一步是通過掩蓋圖像的不同部分來生成概率熱圖。
標準化概率的熱圖
現(xiàn)在,使用標準化的概率將遮擋圖轉(zhuǎn)換成灰度掩碼,最后,將其疊加到圖像上。
遮罩最終圖像(左)和灰度遮罩(右)
這樣我們可以清楚地看到模型進行圖像分類的側(cè)重點。這為了解錯誤分類的原因,提供了更深入的說明。
via: https://medium.com/sfu-big-data/unveiling-the-hidden-layers-of-neural-networks-6269615fb8a9
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。