怎麼可視化深層網路的深層權重?


謝邀。

通常是兩類方法。一個是用內積的方法還原到輸入層,即用需要可視化那一層的響應逐層「還原」成相應的輸入,一開始DNN的方法是直接做權值內積,而近幾年針對CNN也有人發現考慮非線性和pooling(尤其是max pooling)的作用會得到更好的可視化結果。另一種方法是類似神經科學的試探響應的方法,即針對某個feature,改變輸入以最大化其響應;當響應最大化的時候,認為當時的輸入是這個feature可視化的結果。這種方法的一個衍生是求某個feature在輸入上的梯度,作為其可視化結果。


目前的主流方法是用梯度上升法尋找使得某feature(或feature vector)響應最大的輸入圖像(一般還要加上自然圖像先驗作為regularizer)。例如:

Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps

Understanding Deep Image Representations by Inverting Them

還有一篇比較有趣的文章通過訓練一個deconvolutional net來從深層的feature中重建輸入圖像. 重建的結果反映了該層feature還保留了原圖的哪些信息:

Inverting Convolutional Networks with Convolutional Networks


可參考最近的一篇文章,Understanding neural networks through deep visulization

http://yosinski.com/deepvis


前面的回答都給出了答案:極大化神經元的response,重建輸入圖像,就可以表示神經元學習到的特徵,這個過程也是需要學習的。http://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf中使用了一個小trick來可視化神經元特徵,把所有或抽樣一部分訓練樣本在模型里跑一邊,將要可視化的神經元的response排序,選出response最大的k個,用肉眼看看這k張圖片有什麼共同特徵就大概知道這個神經元學到的是什麼特徵了。這個在可視化很high-level的特徵的時候應該是有用的,因為越high-level的特徵,各個圖片越不同。

附一張文章中的圖,每一行是某個神經元response最大的若干圖片:


答案是:沒有辦法,甚至無法給出「可視化深層網路權重」的定義。

卷積神經網路的權重尺寸如下:

c_{l-1} * w*h*c_l

如果上一層是輸入層,c_{l-1}=3,那很好辦,顯示c_l個w*h的3通道圖像即可。

可如果是某個中間層呢?人眼如何辨別16、32通道的圖像?即便顯示出來了,又能代表什麼意義呢?跟這個權重相乘的,又不是RGB,怎麼能再用RGB去渲染它?

但可視化某一個特徵還是可行的,通過梯度上升法增強這個特徵,看在什麼圖像下,這一個特徵會取得很大的值。

因為已經是深層的特徵,所以可能有很多圖像能使這個特徵達到很高的響應,可以多隨機幾次試試。

參考文獻:

http://arxiv.org/abs/1506.06579


推薦閱讀:

TAG:深度學習DeepLearning |