【技术综述】“看透”神经网络
本文是深度神經(jīng)網(wǎng)絡(luò)可視化的一點東西
言有三
畢業(yè)于中國科學(xué)院,計算機視覺方向從業(yè)者,有三工作室等創(chuàng)始人
作者 | 言有三
編輯 | 言有三
大家最詬病深度學(xué)習(xí)的一點就是理論基礎(chǔ)不夠系統(tǒng),模型就像一個黑盒子,這就更加凸顯了深度學(xué)習(xí)模型可視化的重要性了。
本文以實戰(zhàn)經(jīng)驗為主,除去數(shù)據(jù)的可視化部分,我們說以下幾個主要的方向(1)模型結(jié)構(gòu)的可視化(2)卷積參數(shù)的可視化(3)激活區(qū)域的可視化(4)訓(xùn)練過程的可視化。
01
模型結(jié)構(gòu)的可視化
所謂模型結(jié)構(gòu)的可視化,就是為了方便更直觀的看到模型的結(jié)構(gòu),從而方便進行調(diào)試,下面對2個主流的框架進行展示。
1.1 caffe網(wǎng)絡(luò)結(jié)構(gòu)可視化
定義一個簡單的3層的模型(模型可以查看我們git,代碼太長此處不展示),我們可以采用幾種方案進行可視化;第一種,利用caffe自帶的可視化方法;第二種,利用開源項目netscope;由于netscope可視化效果更好,因此我們采用netscope進行可視化,工具網(wǎng)址如下
相關(guān)鏈接:
http://ethereon.github.io/netscope/#/editor
可視化后的結(jié)果如上圖,可以看到網(wǎng)絡(luò)的結(jié)構(gòu)是通過卷積+激活函數(shù)的堆疊,同時網(wǎng)絡(luò)的數(shù)據(jù)輸入層和最后的全連接層作為了loss層和acc層的輸入。
當(dāng)我們想要看每一層的參數(shù)時,就可以將鼠標(biāo)放上相應(yīng)的結(jié)構(gòu)塊;
當(dāng)然,還可以使用caffe自帶的腳本進行可視化,在caffe根目錄下的python目錄下有draw_net.py這個腳本。
draw_net.py執(zhí)行的時候帶三個參數(shù),第一個參數(shù)是網(wǎng)絡(luò)模型的prototxt文件,第二個參數(shù)是保存的圖片路徑及名字,第三個參數(shù)是rankdirx,他有四種選項,分別是LR, RL, TB, BT。用來表示網(wǎng)絡(luò)的方向,分別是從左到右,從右到左,從上到小,從下到上。默認為LR。
1.2 tensorflow網(wǎng)絡(luò)結(jié)構(gòu)可視化
在tensorflow中要進行可視化,必須使用name scope來確定模塊的作用范圍,添加部分名稱和作用域,否則網(wǎng)絡(luò)圖會非常復(fù)雜。與上面類似,我們同樣定義一個三層的卷積網(wǎng)絡(luò)(代碼還是看git)。
要想利用tensorboard進行可視化,必須在session中通過summary存儲網(wǎng)絡(luò)圖,只需要在訓(xùn)練代碼中添加命令即可,summary = tf.summary.FileWriter("output", sess.graph)
最后利用tensorboard命令來查看訓(xùn)練結(jié)果和可視化結(jié)果,網(wǎng)絡(luò)的可視化結(jié)果如下。
可以看出,網(wǎng)絡(luò)的結(jié)構(gòu)可視化和caffe的差不多。除了caffe的網(wǎng)絡(luò)結(jié)構(gòu)可視化是輸入模型配置文件,大部分的深度學(xué)習(xí)框架都使用了python進行開發(fā),模型結(jié)構(gòu)的可視化與tensorflow結(jié)果差不多。相比較來說,caffe的模型可視化方法更加簡單直接,獨立于代碼,可以更便捷地看到每一層的參數(shù)配置。
02
卷積參數(shù)可視化
前面我們可視化了網(wǎng)絡(luò)的結(jié)構(gòu),從而對要訓(xùn)練的網(wǎng)絡(luò)就有了整體的把握。當(dāng)我們得到了訓(xùn)練結(jié)果之后,一個模型常有百萬千萬級別的參數(shù),我們能否通過可視化的方法,來評判一下這個網(wǎng)絡(luò)結(jié)構(gòu)的好壞呢?通常情況下,我們希望網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)到的權(quán)重,模式足夠豐富,這樣才有強大的表征能力。
2.1 淺層卷積參數(shù)可視化
網(wǎng)絡(luò)的早期卷積學(xué)習(xí)到的是通用的特征,由于大部分網(wǎng)絡(luò)的輸入都是彩色圖,所以數(shù)據(jù)層的通道數(shù)為3。正好我們平時用的彩色圖的通道就是3維,這時候如果直接將這3組通道轉(zhuǎn)換為一個彩色圖,我們就可以很直觀的可視化這第一層的卷積參數(shù),對于任意以輸入圖為3通道彩色圖的網(wǎng)絡(luò)結(jié)構(gòu)來說,這都是通用的。
下面是alexnet學(xué)習(xí)到的權(quán)重的第一層卷積的可視化。
這其中有一些卷積核為灰度圖,說明三個通道的對應(yīng)參數(shù)相近,學(xué)習(xí)到的是與顏色無關(guān)的特征。有的為彩色圖,說明3個通道的特征差異大,學(xué)習(xí)到的是與顏色有關(guān)的特征。這與上面人眼和感知特性也是相通的,在底層,學(xué)習(xí)到的是邊緣,形狀,顏色等敏感等信息。
細心的讀者應(yīng)該可以注意到,上面的參數(shù),具有一定的互補性和對稱性。
2.2 高層卷積參數(shù)可視化
到了高層,由于輸入的通道數(shù)不再為3,所以無法像第一層那樣,將其投射到圖像空間進行直觀的可視化。
這時候就有了兩種思路。分別是dataset-centric和network-centric方法。他們的區(qū)別就是,第一個要可視化核函數(shù),必須要使用真實的輸入數(shù)據(jù)。第二個,則是通過生成一個隨機圖片,然后進行迭代的方法,來最大化響應(yīng)層的神經(jīng)元的激活,這個時候為使得輸入的圖片更加平滑,可以考慮使用GAN等方法。
主要的研究方法包括兩種,反卷積法【2】和梯度計算法【3】。
反卷積方法的核心思想就是利用上采樣從特征空間逐步恢復(fù)到圖像空間。假設(shè)我們要可視化第1個feature map的一個unit,即特征圖的一個像素的activation,則首先從數(shù)據(jù)集中計算一下多個輸入圖像各自經(jīng)過前向傳播后在這個unit上產(chǎn)生的activation,取出activation最大的一些圖像,這些圖像作為輸入圖。
然后將輸入圖分別在這個unit上產(chǎn)生的activation進行反向傳播,其他位置置為零。其中與pooling對應(yīng)的就是uppooling,它通過在max pooling的時候記錄下最大激活位置,在反卷積的時候進行恢復(fù)。與卷積對應(yīng)的操作就是轉(zhuǎn)置卷積操作,這是被用于圖像分割的方法,也是通常意義上所說的反卷積。
反卷積的結(jié)果,就是一個重建的圖。
梯度計算法包括標(biāo)準(zhǔn)的梯度計算法以及它的一些改進版本integrated gradients,guided backprop,基本原理如下,在訓(xùn)練的過程中固定網(wǎng)絡(luò)的參數(shù)不變,學(xué)習(xí)輸入。
反卷積法和梯度計算法可視化出來的結(jié)果,可以反映出神經(jīng)元學(xué)習(xí)到的類別的輪廓,但是結(jié)果不夠精細。GoogleBrain團隊的deep dream【4】研究,對inception網(wǎng)絡(luò)進行了逐層的特征可視化,揭示了每一個網(wǎng)絡(luò)層的特性。該項目是通過輸入隨機噪聲和想讓網(wǎng)絡(luò)學(xué)習(xí)的圖像的先驗知識,最后可視化網(wǎng)絡(luò)學(xué)習(xí)到的該類的結(jié)果,雖然不是現(xiàn)實存在的圖像,但是卻具有該類別的特性,如同人類夢境中生成的不真實卻又有辨識度的場景一樣。
?下面展示了layer 4c層的一個神經(jīng)元的結(jié)果。
03
激活熱圖可視化
可視化了卷積參數(shù),它可以反映出所學(xué)習(xí)到的網(wǎng)絡(luò)的參數(shù)本身有什么樣的特點,它是從神經(jīng)元的角度解釋了 CNN,而激活熱圖可視化考慮從輸入圖像的角度解釋CNN。它從輸入圖像中找出激活卷積層中特定神經(jīng)元的選擇性模式,來反應(yīng)網(wǎng)絡(luò)到底學(xué)習(xí)到了什么信息。
特征圖可視化的結(jié)果是sensitivity map,也叫saliency maps,以CAM(Class Activation Mapping)【5】方法及其變種為代表。
CAM利用GAP(Global Average Pooling)替換掉了全連接層,將輸出通道調(diào)整為輸出類別數(shù),再加權(quán)然后通過softmax層得到結(jié)果,可視化原理圖如下:
看上圖,最后輸入softmax的特征圖,等于k個featuremap的加權(quán)和,其中w系數(shù)包括c維,c等于類別數(shù)目。等到了熱力圖之后,直接上采樣到原圖中就能得到激活區(qū)域,因為featuremap保留了原圖的空間關(guān)系。
04
訓(xùn)練過程可視化
最后,我們通過tensorflow可視化開源框架來展示在項目中的可視化,由于我們前面已經(jīng)有許多期文章講述過可視化的各個模塊細節(jié),所以此處就不再做技術(shù)細節(jié)展示,而只展示結(jié)果。
項目是這個:
https://github.com/carpedm20/DCGAN-tensorflow,我們用來生成了一批嘴唇數(shù)據(jù)。
4.1 loss可視化
loss等標(biāo)量指標(biāo)可視化可以反應(yīng)網(wǎng)絡(luò)的學(xué)習(xí)情況,是必須關(guān)注的。
4.2 中間結(jié)果可視化
對于圖像生成任務(wù),沒有什么比查看中間結(jié)果更加有說服力的了。
4.3 網(wǎng)絡(luò)結(jié)構(gòu)可視化
tensorflow可視化網(wǎng)絡(luò)結(jié)果雖然比caffe更加復(fù)雜,但也更加細致,關(guān)注關(guān)注沒有壞處。
另外,還可以查看權(quán)重的直方圖分布等等,對于網(wǎng)絡(luò)的性能判斷也有輔助作用。
5
總結(jié)
正所謂一圖勝千言,可視化起來high啊,這個坑遠遠沒有這么簡單。
如果你想了解更多,有一篇綜述文章【6】做了分類,不過對于大部分人來說那個分類并不好理解,所以我還是按照本文的組織形式。
參考文章
[1] Erhan D, Bengio Y, Courville A, et al. Visualizing higher-layer features of a deep network[J]. University of Montreal, 2009, 1341(3): 1.
[2]?Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.
[3]?Simonyan K, Vedaldi A, Zisserman A. Deep inside convolutional networks: Visualising image classification models and saliency maps[J]. arXiv preprint arXiv:1312.6034, 2013.
[4] https://distill.pub/2017/feature-visualization/
[5]?Zhou B, Khosla A, Lapedriza A, et al. Learning deep features for discriminative localization[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 2921-2929.
[6]?How convolutional neural network see the world - A survey of convolutional neural network visualization methods
十月開始,我們有三AI學(xué)院開啟了“稷”劃和“濟”劃,幫助想入行以及想取得更多實戰(zhàn)經(jīng)驗的同學(xué)。內(nèi)容覆蓋從自動駕駛到美顏直播等領(lǐng)域的實戰(zhàn)項目,從圖像基礎(chǔ)到深度學(xué)習(xí)理論的系統(tǒng)知識,歡迎關(guān)注。
有三AI“【濟】劃”,從圖像基礎(chǔ)到深度學(xué)習(xí)
有三AI“十月【稷】劃”,從自動駕駛到模型優(yōu)化
如果想加入我們,后臺留言吧
微信
Longlongtogo
公眾號內(nèi)容
1 圖像基礎(chǔ)|2 深度學(xué)習(xí)|3 行業(yè)信息
往期綜述精選
【技術(shù)綜述】閑聊圖像分割這件事兒
【技術(shù)綜述】一文道盡softmax loss及其變種
【技術(shù)綜述】有三說GANs(上)
往期學(xué)員分享
【技術(shù)綜述】人臉表情識別研究
如何降低遮擋對人臉識別的影響
【技術(shù)綜述】人臉年齡估計研究現(xiàn)狀
往期開源框架
【mxnet速成】mxnet圖像分類從模型自定義到測試
【pytorch速成】Pytorch圖像分類從模型自定義到測試
【tensorflow速成】Tensorflow圖像分類從模型自定義到測試
總結(jié)
以上是生活随笔為你收集整理的【技术综述】“看透”神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【方法杂谈】你真的了解CVPR吗?
- 下一篇: 【有三说图像】图像简史与基础