神經網路各個部分的作用 & 徹底理解神經網路
- 2022 年 5 月 31 日
- 筆記
這些題目來自知識星球【CV技術指南(免費版)】的日常作業
歡迎關注公眾號
1. 神經網路的層數是如何數的?
我們說的網路越深,模型效果越好,指的是可訓練參數越多,模型的特徵提取能力或表示能力更好。
因此,神經網路的層數只與可訓練參數的層數有關,層數等於卷積層+全連接層數量。BN層、池化層、Flatten層都不算在內。
例如下方的VGG-16。層數為:2+2+3+3+3(卷積層) + 3(全連接)。中間5層最大池化都是不算的。
2. 卷積操作的作用是什麼?(為什麼卷積層堆疊可以提取特徵)
從單個卷積來說,它的作用是很明顯的,卷積核參數是具有特定含義的矩陣,輸入影像與該矩陣進行逐元素相乘,可以產生該矩陣所對應輸出。
我最常舉的例子就是sobel運算元,對於一個如下的3x3的矩陣,其與輸入影像的像素值進行逐元素相乘,可得到該影像在豎直方向上的一階梯度,該梯度對於邊緣區域有較大的值,而非邊緣區域則為零。因此通過下面3x3卷積可以提取影像豎直方向的邊緣特徵。
當3x3卷積中的參數變成其它的情況時,可以提取別的情況的特徵。當很多個卷積組合時,可以提取很多種特徵。當很多卷積層堆疊時,卷積區域的感受野越來越大,可以提取更大範圍的一些特徵。
將其放到神經網路上來說,舉個例子,給定一個映射函數y = sign(x),當x 為正時,y=1,當x為負時,y=-1。在這個映射函數下,所有的正數都為同一個類,所有的負數為另一個類。y = sign(x) 這個函數也可以理解為特徵提取器,它提取了所有待測 x 的特徵,這裡的特徵是待測x的正負號,然後同一個類的具有相同特徵得到同一個輸出,不同類得到不同的輸出。
訓練過後的神經網路就是這個映射函數,也是特徵提取器,當卷積核的參數固定時,不同類的兩張圖片,可以被這個由很多卷積堆疊組成的特徵提取器提取影像的特徵,然後得到不同的輸出。結合上面的sobel的例子,任何圖片經過sobel豎直方向的運算元,都會被提取豎直方向的邊緣特徵,輸出豎直方向的邊緣特徵圖。
因此,卷積由於參數的之間的特性,可以實現不同的圖片經過這個卷積時,提取同樣的特徵,不同的圖片輸出不同的特徵圖,當很多卷積組合在一起時,可以提取影像的很多種特徵,當卷積堆疊起來時,可以提取更大範圍的特徵和更深層次的特徵。
3. 池化層的作用是什麼?(為什麼需要池化層)
池化層的操作是將一個窗口內的像素按照平均值加權或選擇最大值來作為輸出,一個窗口內僅有一個輸出數據。因此,當經過池化層後,影像的尺寸會變小,計算量也會變小,相比於在池化前使用卷積,池化後同樣的卷積大小具有更大的感受野。
但僅僅從縮小影像尺寸,減少計算量,獲取更大感受野這個作用來說,也可以使用步長大於1的卷積來替代池化層。這在少部分模型中就有所應用。
但實際上池化層還有別的作用。
當使用最大池化時,一個窗口中僅有最大的像素值才會進入下一層,而其它位置的像素就被暫時拋棄了。之所以說暫時拋棄了,是因為在訓練過程中是不斷更新的,可能在下一次前傳時,由於卷積核權重更新,最大的像素值就在另一個位置取到了。
那這種取最大的像素值的好處在哪呢。
結合前面我們提到的卷積核提取特徵的理解,當一張圖片經過sobel豎直方向的運算元時,僅在豎直邊緣區域輸出較大的值,而其它平整區域都為零或接近為零了。如果此時經過一個最大池化層,就會發現平整區域的像素被丟下了,僅留下了豎直邊緣區域的像素。接下來就僅剩下豎直邊緣區域的特徵繼續卷積提取進一步的特徵了。如果是還有其它類型的卷積核,則經過卷積+池化後,僅留下了那個類型卷積核提取的特徵。
因此最大池化除了前面那兩個作用,還有一個去除冗餘資訊、去除雜訊的作用。
說到這裡,理解池化的使用也很簡單了,在神經網路的Backbone部分使用最大池化,用於去除雜訊,去除干擾因素,在全連接層前,使用平均池化,避免丟失資訊。
再給大家擴展一個知識點,如果要可視化一個訓練過的卷積核,應該怎麼可視化?
根據這裡的理論,每張圖片經過同一個卷積核時,會提取同一個類型的特徵,而不符合這個特徵的,輸出的像素值就為零或很小了。那我們只需要隨機初始化一張圖片,所有像素值隨機,在經過這個待可視化的卷積核時,輸出的值越大,則說明越符合這個卷積核的所提取的特徵,然後我們就可以利用梯度上升法,來調整像素值,不更新卷積核參數,以使得該圖片在經過待可視化卷積核後輸出的像素值更大。當模型收斂後,此時的圖片顯示的就是該卷積核所認可的特徵,從而達到了可視化卷積核的目的。
池化另外還有幾個特性,比較好理解,這裡也列舉一下,
具有平移不變性、旋轉不變性。
防止過擬合。
4. 歸一化層的作用是什麼?(為什麼需要歸一化層)
第一種解釋
假設輸入數據包含多個特徵x1,x2,…xn。每個功能可能具有不同的值範圍。例如,特徵x1的值可能在1到5之間,而特徵x2的值可能在1000到99999之間。
如下左圖所示,由於兩個數據不在同一範圍,但它們是使用相同的學習率,導致梯度下降軌跡沿一維來回振蕩,從而需要更多的步驟才能達到最小值。且此時學習率不容易設置,學習率過大則對於範圍小的數據來說來回震蕩,學習率過小則對範圍大的數據來說基本沒什麼變化。
如下右圖所示,當進行歸一化後,特徵都在同一個大小範圍,則loss landscape像一個碗,學習率更容易設置,且梯度下降比較平穩
第二種解釋(來自BN論文)
訓練深度神經網路非常複雜,因為在訓練過程中,隨著先前各層的參數發生變化,各層輸入的分布也會發生變化,圖層輸入分布的變化帶來了一個問題,因為圖層需要不斷適應新的分布,因此訓練變得複雜,隨著網路變得更深,網路參數的細微變化也會放大。
由於要求較低的學習率和仔細的參數初始化,這減慢了訓練速度,並且眾所周知,訓練具有飽和非線性的模型非常困難。我們將此現象稱為內部協變數偏移,並通過歸一化層輸入來解決該問題。
4. 激活函數層的作用是什麼?(為什麼需要激活函數層)
數字影像是一堆0-255的數值組合而成,很神奇的是,就是這麼一堆數字就形成了各種各樣的影像,例如一張人臉,一個籃球,一隻貓。但這僅僅是我們人肉眼看到的影像,而神經網路則是面對這些數字,並要從這對數字中得到它的類別,因此關於神經網路有另一種理論,數字影像中的影像像素值其實是在像素空間,神經網路是將影像從像素空間映射到特徵空間,再從特徵空間對數據進行分類。
這種映射需要通過非線性函數來實現,想想如果是線性函數,會發現仍然是在像素空間,而不管堆疊多少層的線性函數,都等同於只有一個線性函數。因此需要通過非線性函數來實現這個映射。
接下來從機器學習的角度來解釋這個理論,對於二維坐標中的數據很好理解,數據之間的距離就是兩個坐標差值的平方。對於高維中的數據就不能這麼計算了。例如一個球,如果要從球的表面從一個點走到另一個點,不能通過3維的歐式距離來計算,可以通過極坐標來表示成一個二維的空間。
流形學習的觀點:認為我們所能觀察到的數據實際上是由一個低維流行映射到高維空間的。由於數據內部特徵的限制,一些高維中的數據會產生維度上的冗餘,實際上這些數據只要比較低的維度就能唯一的表示。所以直觀上來講,一個流形好比是一個d維的空間,在一個m維的空間中(m>d)被扭曲之後的結果。需要注意的是流形並不是一個形狀,而是一個空間。舉個例子來說,比如說一塊布,可以把它看成一個二維的平面,這是一個二維的空間,現在我們把它扭一扭(三維空間),它就變成了一個流形,當然不扭的時候,它也是一個流形,歐式空間是流形的一種特殊情況。如下圖所示
此處流形學習的部分參考鏈接://blog.csdn.net/weixin_43751558/article/details/112910899
根據影像像素值是在像素空間的這個理論,數字影像也是這樣的高維空間,需要將它映射到另一個空間,才能將它進行分類。
5. 損失函數的作用是什麼?
損失函數用來表現預測數據與實際數據的差距程度。
6. 全連接層的作用是什麼?
根據前面兩種理論,全連接層的作用都是對數據進行分類。第一種是影像通過卷積層提取了很多特徵,第二種是將影像從像素空間映射到了特徵空間,在特徵空間可以像在二維平面上對兩類數據進行分類那樣,全連接層就是相當於一個超平面,將各個類別在特徵空間將它們分開。
星球內每天都會布置一些作業,這些作業會引導大家去學一些東西。如果有人覺得自己一個學習沒有動力,或想要養成一個很好的學習習慣,每天完成在知識星球內的作業是一個不錯的做法。
另外,我們建立了一個交流群,群內會經常發布最近幾天出來的最新高峰會論文,大家可以下載這些論文去閱讀,如果看完寫一個解讀,可以給我們投稿,我們將付稿費。既可以保持閱讀最新高峰會、持續輸出的習慣,又能提高寫作能力,日後還可以在簡歷上寫在公眾號CV技術指南上投稿幾十、一百餘篇文章,對於提高能力、保持學習態度、個人履歷等方面會是一大作用。
歡迎關注公眾號
關注公眾號添加編輯的微訊號可邀請加入技術群和免費版知識星球。
其它文章









