天天看點

深度學習參數可視化調試和了解

                                               1、Visualize Layer Activations

通過将神經網絡隐藏層的激活神經元以矩陣的形式可視化出來,能夠讓我們看到一些有趣的insights。在[8]的頭部,嵌入了一個web-based的CNN網絡的demo,可以看到每個layer activation的可視化效果。

深度學習參數可視化調試和了解

在[14]裡為幾種不同的資料集提供了CNN各個layer activation的可視化效果示例,在裡頭能夠看到CNN模型在Mnist/CIFAR-10這幾組資料集上,不同layer activation的圖形化效果。

原則上來說,比較理想的layer activation應該具備sparse和localized的特點。

如果訓練出的模型,用于預測某張圖檔時,發現在卷積層裡的某個feature map的activation matrix可視化以後,基本跟原始輸入長得一樣,基本就表明出現了一些問題,因為這意味着這個feature map沒有學到多少有用的東西。

                                           2、Visualize Layer Weights

除了可視化隐藏層的activation以外,可視化隐藏層的模型weight矩陣也能幫助我們獲得一些insights。                                          

                                          這裡是AlexNet的第一個卷積層的weight可視化的示例:

深度學習參數可視化調試和了解

通常,我們期望的良好的卷積層的weight可視化出來會具備smooth的特性(在上圖也能夠明顯看到smooth的特點),參見下圖(源于[13]):

深度學習參數可視化調試和了解

這兩張圖都是将一個神經網絡的第一個卷積層的filter weight可視化出來的效果圖,左圖存在很多的噪點,右圖則比較平滑。出現左圖這個情形,往往意味着我們的模型訓練過程出現了問題。

                        3、Retrieving Images That Maximally Activate a Neuron

為了了解3提到的方法,需要先了解CNN裡Receptive Field的概念,在[5][6]裡關于Receptive Field給出了直覺的介紹:

深度學習參數可視化調試和了解

如果用文字來描述的話,就是對應于卷積核所生成的Feature Map裡的一個neuron,在計算這個neuron的标量數值時,是使用卷積核在輸入層的圖檔上進行卷積計算得來的,對于Feature Map的某個特定neuron,用于計算該neuron的輸入層資料的local patch就是這個neuron的receptive field。

而對于一個特定的卷積層的Feature Map裡的某個神經元,我們可以找到使得這個神經元的activation最大的那些圖檔,然後再從這個Feature Map neuron還原到原始圖檔上的receptive field,即可以看到是哪張圖檔的哪些region maximize了這個neuron的activation。在[7]裡使用這個技巧,對于某個pooling層的輸出進行了activation maximization可視化的工作:

深度學習參數可視化調試和了解

不過,在[9]裡,關于3提到的方法進行了更為細緻的研究,在[9]裡,發現,通過尋找maximizing activation某個特定neuron的方法也許并沒有真正找到本質的資訊。因為即便是對于某一個hidden layer的neurons進行線性權重,也同樣會對一組圖檔表現出相近的semantic親和性,并且,這個發現在不同的資料集上得到了驗證。

                                                        如下面在MNIST和ImageNet資料集上的觀察:

深度學習參數可視化調試和了解
深度學習參數可視化調試和了解
深度學習參數可視化調試和了解
深度學習參數可視化調試和了解

                    4、Embedding the Hidden Layer Neurons with t-SNE

這個方法描述起來比較直覺,就是通過t-SNE[10]對隐藏層進行降維,然後以降維之後的兩維資料分别作為x、y坐标(也可以使用t-SNE将資料降維到三維,将這三維用作x、y、z坐标,進行3d clustering),對資料進行clustering,人工review同一類圖檔在降維之後的低維空間裡是否處于相鄰的區域。t-SNE降維以後的clustering圖往往需要在較高分辨率下才能比較清楚地看到效果,這裡我沒有給出引用圖,大家可以自行前往這裡[15]裡看到相關的demo圖。

使用這個方法,可以讓我們站在一個整體視角觀察模型在資料集上的表現。

                                      5、Occluding Parts of the Image

這個方法在[11]裡被提出。我個人非常喜歡這篇文章,因為這篇文章寫得非常清晰,并且給出的示例也非常直覺生動,是那種非常适合推廣到工業界實際應用場景的論文,能夠獲得ECCV 2014 best paper倒也算在意料之中。

在[11]裡,使用了[12]裡提出的Deconvolutional Network,對卷積層形成的feature map進行reconstruction,将feature map的activation投影到輸入圖檔所在的像素空間,進而提供了更直覺的視角來觀察每個卷積層學習到了什麼東西,一來可以幫助了解模型;二來可以指導模型的調優設計。

[11]的工作主要是在AlexNet這個模型上做的,将Deconvolutional Network引入到AlexNet模型以後的大緻topology如下:

深度學習參數可視化調試和了解

上圖裡,右邊是正常的卷積神經網絡,左邊是Deconv Net,Deconv Net的輸入是卷積神經網絡的某個卷積層/pooling層的輸出,另外,在Deconv Net與右邊的卷積神經網絡之間存在一個Switches連接配接通道,用于執行Deconv net裡的Unpooling操作。注意上圖的一個細節,Deconv Net的Unpooling操作,實際上是pooling操作的一個近似逆函數,而非精确逆函數。

                在AlexNet模型上使用Deconv Net對feature map進行input image space投影的效果示例如下:

深度學習參數可視化調試和了解

從上面這個示例圖裡能夠看得出來,不同的feature map,使用Deconv Net進行reconstruction,會投影出不同描述粒度的圖檔,比如低層的layer reconstruction出來的會是邊緣性質的圖像,而高層的layer reconstruction出來的則可能會是狗的臉部,電腦的輪廓等更general性質的圖像。

另外,通過Deconv Net還可以觀察訓練過程中,feature map的演化情況,基本的作法就是将每個卷積層裡,activation最大的feature map使用Deconv Net進行reconstruction,以epoch為時間粒度,觀察這些feature map reconstructed image的變化趨勢,比如下圖:

深度學習參數可視化調試和了解

能夠看到,低層的feature map比較快就會收斂,而高層的feature map則需要較長epoch的訓練時長才會收斂。

接下來回到[11]裡提出的"Occluding Parts of the Image”的方法,這個方法描述起來并不複雜:對于一張輸入圖檔,使用一個小尺寸的灰階方塊圖作為掩模,對該原始圖檔進行周遊掩模,每作一次掩模,計算一下CNN模型對這張掩模後圖檔的分類預測輸出,同時,找到一個在訓練集上activation最大的feature map,每作一次掩模,記錄下來以掩模圖檔作為輸入資料之後的feature map矩陣,将所有掩模所産生的這些feature map矩陣進行elementwise相加,就可以觀察到掩模圖檔的不同區域對分類預測結果以及feature map的activation value的影響。示例圖如下:

深度學習參數可視化調試和了解

上圖的第一列是原始圖檔。

第二列是在訓練集上選出了layer 5上的activation行為最顯著的一個feature map之後,對第一列的原始圖檔使用一個灰階小色塊進行occluding之後,所生成的該feature map的activation value進行sum up之後的可視圖。

第三列是這個feature map(這個是在沒有occluding的image上應用CNN模型生成的feature map)使用Deconv Net投影到input image space上的圖像。能夠看得出來,第三列所reconstruct出的image與第二列中受occluding操作影響較大的區域明顯是相重合的。

附錄:

[1]. Visualizing what ConvNets Learn. CS231n Convolutional Neural Networks for Visual Recognition

CS231n Convolutional Neural Networks for Visual Recognition

[2]. Matthew Zeiler. Visualizing and Understanding Convolutional Networks. Visualizing and Understanding Convolutional Networks.

[3]. Daniel Bruckner. deepViz: Visualizing Convolutional Neural Networks for Image Classification.

[4]. ConvNetJS MNIST Demo. ConvNetJS MNIST demo

[5]. Receptive Field. CS231n Convolutional Neural Networks for Visual Recognition

[6]. Receptive Field of Neurons in LeNet. deep learning

[7]. Ross Girshick. Rich feature hierarchies for accurate object detection and semantic segmentation

Tech report. Arxiv, 2011.

[8]. CS231n: Convolutional Neural Networks for Visual Recognition. Stanford University CS231n: Convolutional Neural Networks for Visual Recognition

[9]. Christian Szegedy. Intriguing properties of neural networks. Arxiv, 2013.

[10]. t-SNE. t-SNE – Laurens van der Maaten

[11]. Matthew D.Zeiler. Visualizing and Understanding Convolutional Networks. Arxiv, 2011.

[12]. Matthew D.Zeiler. Adaptive Deconvolutional Networks for Mid and High Level Feature Learning, ICCV 2011.

[13]. Neural Networks Part 3: Learning and Evaluation. CS231n Convolutional Neural Networks for Visual Recognition

[14]. ConvNetJS---Deep Learning in Your Browser.ConvNetJS: Deep Learning in your browser

[15]. Colah. Visualizing MNIST: An Exploration of Dimensionality Reduction.

繼續閱讀