DNN & CNN comparison
紀錄傳統DNN(Fully connected)和CNN的差別在哪
以前只知道CNN比較快 較有效率
但最重要的兩點是
1. 權值共享(參數減少)
這張圖基本上解決了我對於兩者(DNN, CNN)差別不懂的困擾,下圖對於權值共享定義解釋得很清楚。
左圖的DNN參數量為(輸入圖攤平的node數量 + 1)*filter node數量
右圖的CNN參數量為(filter shape + 1)* filter數量,跟輸入輸出圖片沒有關係
關於權值共享,可參考深度學習:CNN原理,以下為截取片段:
權值共享
讓我們來想想,今天假如是一般的FC架構,我們輸入一張28*28*1的灰階照片(784個特徵),隱藏層使用100個神經元,那麼我們需要多少個參數?答案是:
100*784 (weights)+100 (bias)= 78500個參數
單單一層隱藏層參數就瞬間爆量!
以CNN來說,參數量則為(filter shape + 1)* filter數量
2. 保留空間資訊
在傳統NN中,必須把圖片攤平成一維矩陣(失去空間資訊),再對每個神經元做計算得出最佳w(參數過多)
在CNN中,透過kernel(權值共享)對整張圖做卷積(保留空間資訊),從下圖可以發現CNN跟Fully connected 的計算差別
另外,之前一直在思索CNN和NN裡的特徵的定義是什麼?
還有CNN和NN神經元的定義是什麼?
關於NN:
我個人認為特徵和神經元是一樣的東西
[ML筆記] Convolutional Neural Network (CNN)是說: “每一個 Neural 都可視為一個簡單的 Classifier”
但我想特徵和classifier在這邊基本上是一樣的意思,透過各個特徵或是classifier訓練整個CNN網路裡他們之間的權重大小
關於CNN:
學過CNN都知道,訓練CNN的過程基本上就是不斷更新神經元之間的權值w來使整個模型對圖片(或其他資料)的判斷更準確
對我來說,在CNN中的特徵就是指經過kernel 在convolution及subsampling計算之後產生的特徵矩陣,也就是下圖的feature maps,透過訓練,模型對於找到特徵能更準確,使擷取出得feature map的資訊更有用
但對於CNN的神經元我卻不太知道要怎麼解釋和跟特徵做連結。因為CNN的圖通常都是像上面那樣,而沒辦法用個別神經元來表示,但我參考下圖
[w11, w12, w21, w22] 和 [h11, h12, h21, h22] 兩者的關係之後
我覺得神經元也是在指圖四的feature map,跟特徵圖是一樣的意思,也就是說,feature map也是由多個神經元(特徵)所組成的
結論:我個人認為 CNN的特徵和神經元也是指一樣的東西,只是相對於NN,CNN的特徵 (or神經元)都多了空間因素,因此不能用單純一個一個的neural(如圖三)來表示
(以上純粹為個人理解,不太確定這樣結論是否正確,歡迎指正😂)
最後,不管是哪種網路,最重要都是要找到特徵間的權值,也就是深度學習一直在做的事情。
介紹完兩者差別,還有一個問題,在CNN最後的Fully connected layer(跟NN一樣的計算方式)目的又是什麼呢?
簡單來說是分類,整個流程如下三張圖所示:
取自:https://zhuanlan.zhihu.com/p/33841176“我們用許多神經元去擬合數據分佈
但是只用一層fully connected layer 有時候沒法解決非線性問題
而如果有兩層或以上fully connected layer就可以很好地解決非線性問題了”
***視覺化CNN: What Neural Networks See***
參考資源:
卷積神經網路(Convolutional neural network, CNN):卷積計算的倒傳遞推導與稀疏矩陣觀點來看卷積計算