神經網路的每一層網路(針對特定的問題)有什麼實際的意義嗎?
我曾經問過一個做圖片識別的朋友他使用的模型每一層神經網路具體是幹啥的,但是他完全答不上來,只是說別人也這麼用,比如把數據做卷積之類的操作等等。第一個用這些方法的人添加每一層網路時總有他的考慮吧。請各位專業人士介紹一下。
對於CNN來說,目前只能形象地說是自動特徵構造,以及信息壓縮。。。加多層是為了頂層能構建更加全局的特徵,相當於頂層神經元,單獨一個就能司管圖片很大區域的內容。底層的神經元控制著零碎的,局部的特徵。
這篇文章能幫助你理解一下每層的作用,以及生成的特徵:Visualizing and Understanding
Convolutional Networks(https://www.cs.nyu.edu/~fergus/papers/zeilerECCV2014.pdf)
實際上,給定幾種網路,每個網路每層產生的大多數feature map是特有的,之間的共有特徵算不上多。。。可以看這篇文章:Convergent Learning: Do different neural networks learn the same representations?(http://arxiv.org/pdf/1511.07543v3.pdf)
所以,CNN每層的作用還是很含糊的。。。只能粗略地說中間層提取了輸入中對當前任務有用的特徵,越靠近輸出端特徵越抽象。
使用可視化方法可以觀察各個神經元對什麼樣的輸入數據敏感。你會看到,低層的神經元主要提取像邊緣、條紋之類的低級特徵,而高層神經元則可以識別一些物體。
具體的網路層數和結構,是慢慢試出來的,怎麼搞性能最好,就怎麼搞。just deep learning with receptive field
並不是專業人士,只是條找不到實習的鹹魚。
在MIT的DeepLearning那本書講MLP的那一章有張圖:
還有一些書上的話:「By composing these folding operations, we obtain an exponentiallylarge number of piecewise linear regions which can capture all kinds of regular(e.g., repeating) patterns.
」「The mirror axis of symmetry is given by the hyperplane defined by theweights and bias of the unit」我想中間層應該就是為了實現這樣的變換,使得傳遞到最後一層時的數據線性可分吧。其他解釋請大神拍磚。
=============================補充圖片=================================圖摘自Standford的cs231n的slide:http://vision.stanford.edu/teaching/cs231n/slides/winter1516_lecture7.pdf低層的網路可能你還能說清楚或者至少看出來它在提取些什麼類型的特徵,往高層了就不好說了。有好幾個解釋,但都不是太完美。生物學上來說各層對應於人腦的V1、V2
圖像feature角度來說,越接近輸入端就越是底層feature,比如邊界,角點等等;越接近輸出端,輸出越接近語義feature,比如人臉,object形狀。。
有人把識別老鷹的神經網路最後一層拿出來看,發現就是一個鷹的形狀。這方面研究應該不少。可以用scholar搜一搜初級:
你在你QQ空間看到一個好友發了這麼一個心理測試。然後你按著題目答了下去。按照一定的答題順序,你得到了最終答案。我們假設以下回答的每個問題都是神經網路中的一層,那麼與神經網路輸出對應的就是這個心理測試的最終答案。
1.對別人奉承你的話,你持什麼態度?
很樂於接受,有時會覺得對方這麼說肯定有什麼目的3
很高興,而且覺得對方就應該是那麼想的2
2.你比較喜歡用什麼裝飾你的手機?
手機套4
手機掛件3
。
。
。
。
17.你基本上是一個很守時的人嗎?
是的D
不是A
18.總是有很多人愛說你傻嗎?
是的E
不是C
----------------------------------------------------------------------------------------
然後是具體的:
從輸入,經過幾次卷積,到最後的輸出,可以認為每一層卷積都是對應的一個抽象的特徵,例如(上面問題2的答案:手機套/手機掛件),你要是說這個特徵很莫名其妙,有時候就是這麼莫名其妙。得到這個特徵的方式就是一個卷積核,對應上面的問題2(你比較喜歡用什麼裝飾你的手機?)。然後經過權重(通過訓練得到)計算得到下一層的對應位置,例如(手機套→4)。然後繼續走到輸出。
----------------------------------------------------------------------------------------------
繼續更新:
中級:
首先推薦看這個網頁:3D Visualization of a Convolutional Neural Network
這是一個LeNet的可視化版,在左上角的框輸入一個數字,當然不是數字也行。無論怎樣,最後都會識別出一個數字。
截圖:
最下面是輸入層,最上面則是輸出。
這是第一卷積層部分的截圖:
從中可以看出,這一層的不同卷積核對不同的邊緣特徵進行了相應。 這就是lenet里第一層卷積核的意義。
後續的一層是降採樣層。第二層卷積層,第二層降採樣層,第一層全鏈接層,第二層全鏈接層。輸出層。
其中第二層卷積層和第一層卷積層一樣,會響應一些特徵。不過這個特徵會比第一層的抽象,但會更加接近全局特徵。
--------------------------------------------------------------------------------------------------------------
高級:
作者:周筠
鏈接:如何簡單形象又有趣地講解神經網路是什麼? - 周筠的回答
這個回答裡面的樹葉照片。很有用,先貼鏈接在這裡,作者同意的話我把圖也搬過來
--------------------------------------------------------------------------------------------------------------
卷積可以理解成一個濾波器,他會凸顯一種 特徵 並且相應降低其它「雜訊」。以人臉為例,在第一層這個特徵是臉的某些邊緣。在中間可以認為是眼睛的形狀,鼻子的形狀。到最後的卷積層就可以理解成整個臉龐的輪廓了。
題主的問題:神經網路的每一層網路(針對特定的問題)有什麼實際的意義嗎?答:卷積層是尋找特徵,全連接層是對特徵進行統合然後得出結果因為大部分的deep neural network 每一層的參數都是學習出來的,在設計網路結構的時候,並不能預計出得到的每一層所代表的具體含義。另一方面每一層的具體含義也與可視化的方法有關,比如可以分析每個結點對輸入的響應的強度以推測其所代表的具體意義(e.g., Building High-level FeaturesUsing Large Scale Unsupervised Learning),也可以將一層的所有結點一起考慮來對輸入進行重構,從而觀察什麼信號被加強、什麼信號被壓制 (e.g., Visualizing and
Understanding Convolutional Networks )。
先從CNN的角度來嘗試解釋一下。
CNN的結構及工作方式與sliding
window detection 類似,因此,CNN的每一層的每一個feature map (或者channel) 中的一個結點其實可以當成一個放在特定位置的detector。
對於一層的CNN, 我們可以通過直接觀察其學到的filter來解釋其的含義,因為當輸入的patch與filter 越相似,其的響應也就越大。
對於高層的conv layer,
直接研究filter 並不直觀,可以間椄的通過其對不同input的響應強度來研究。
在之前做的一篇人體姿態估計的工作中,我們可視化了前三層convolution的feature ,
第一層網路中,其學到edge
detection, 從而可以用於找到各種所需要的線條信號(比如人的手臂是直的,line detector可用於定位手臂的位置)。
第二層卷積網路可視化中,我們通過尋找使得feature map響應強度大的input來研究其的含義。
每一張圖片對應一個feature map (channel), 總共32個feature map。可以發現,不同的feature map呈現出對於不同輸入的偏好,例如,有的feature map 對頭部數據響應大,有的feature map對肩膀的響應大。
在第二層基礎上,第三層卷積層則能夠用於區分更大區域的軀體。
從可視化可以看出,通過層數的加深,可以學到的概念也會更加複雜。
從理論上分析的話,個人推薦 understanding deep convolutional neural
network.
對於FC layer, 也可以用類似的方法進行可視化。tensorflow的demo做的不錯 (A Neural Network Playground), 可以直觀的體驗加減層數,結點數對於網路每一層學到的特徵以及最終的表達能力的變化。
blackbox
層中的節點可以看作是從輸入側數據空間到輸出側數據空間的一次變換/濾波,類似時域變換進頻域,只不過nn中是任意抽象空間
一層中不同節點代表對輸入數據在不同輸出空間中的變換,相當於針對輸入側數據不同特徵的提取/抽象/分別,怎麼叫都可以。
後面的一層,相當於對前層已經抽象出的特徵的集合所構成的狀態空間再一次進行抽象(針對不同關注點)。
總結來說就是
一層中的每一節點,代表一個關注點/一種模式/一種行為.
每一層代表對不同關注點所有集合進行再次的特徵提取。
具體每個點代表什麼,初始條件時是無法說清的,要看自適應/訓練之後的結果,與初值和loss func有一定關係。
可以類比一個例子,識別一附人的圖,第一層每個點可以識別圖像一階信息,比如顏色,深淺,第二層可以抽象出部位(根據顏色,深淺,邊緣),第三層則可能出相處行為(根據部位的形狀,位置),第四層可以抽象出狀態(根據動作,行為)。每一層比前一層更抽象(把前層狀態空間映射進更高一階的狀態空間)
這裡有可視化TensorFlow卷積層的方法:
用TensorFlow可視化卷積層的方法神經網路的意義,本來就是拒絕人類憑藉其一廂情願的自洽邏輯,在任何一個追求精確的問題上貼出的所有標籤。
不能解釋怎麼了?難道與現實之間距離更小(滴定法)還不是更好的證明嗎?
如果實證不能一直保證精度,勉強解釋,豈非徒勞?這世上沒有那麼多Born to be的物理意義。事實上涉及到複雜運動的問題都是第一性原理解決不了的問題。
建議題主了解一下盧卡斯批判。推薦閱讀:
※聽說你還不懂機器學習?圖片解讀基本概念、五大流派與九種常見演算法
※《淺析感知機(二)--學習演算法及python代碼剖析》
※歷史|文章筆記-從線性分類器到卷積神經網路
※Learn R | AdaBoost of Data Mining(一)
TAG:機器學習 | 神經網路 | 深度學習DeepLearning | 卷積神經網路CNN |