這些題目來自知識星球【cv技術指南(免費版)】的日常作業
,專注於計算機視覺的技術總結、最新技術跟蹤、經典**解讀、cv招聘資訊。
我們說的網路越深,模型效果越好,指的是可訓練引數越多,模型的特徵提取能力或表示能力更好。
因此,神經網路的層數只與可訓練引數的層數有關,層數等於卷積層+全連線層數量。bn層、池化層、flatten層都不算在內。
例如下方的vgg-16。層數為:2+2+3+3+3(卷積層) + 3(全連線)。中間5層最大池化都是不算的。
從單個卷積來說,它的作用是很明顯的,卷積核引數是具有特定含義的矩陣,輸入影象與該矩陣進行逐元素相乘,可以產生該矩陣所對應輸出。
我最常舉的例子就是sobel運算元,對於乙個如下的3x3的矩陣,其與輸入影象的畫素值進行逐元素相乘,可得到該影象在豎直方向上的一階梯度,該梯度對於邊緣區域有較大的值,而非邊緣區域則為零。因此通過下面3x3卷積可以提取影象豎直方向的邊緣特徵。
當3x3卷積中的引數變成其它的情況時,可以提取別的情況的特徵。當很多個卷積組合時,可以提取很多種特徵。當很多卷積層堆疊時,卷積區域的感受野越來越大,可以提取更大範圍的一些特徵。
將其放到神經網路上來說,舉個例子,給定乙個對映函式y = sign(x),當x 為正時,y=1,當x為負時,y=-1。在這個對映函式下,所有的正數都為同乙個類,所有的負數為另乙個類。y = sign(x) 這個函式也可以理解為特徵提取器,它提取了所有待測 x 的特徵,這裡的特徵是待測x的正負號,然後同乙個類的具有相同特徵得到同乙個輸出,不同類得到不同的輸出。
訓練過後的神經網路就是這個對映函式,也是特徵提取器,當卷積核的引數固定時,不同類的兩張,可以被這個由很多卷積堆疊組成的特徵提取器提取影象的特徵,然後得到不同的輸出。結合上面的sobel的例子,任何經過sobel豎直方向的運算元,都會被提取豎直方向的邊緣特徵,輸出豎直方向的邊緣特徵圖。
因此,卷積由於引數的之間的特性,可以實現不同的經過這個卷積時,提取同樣的特徵,不同的輸出不同的特徵圖,當很多卷積組合在一起時,可以提取影象的很多種特徵,當卷積堆疊起來時,可以提取更大範圍的特徵和更深層次的特徵。
池化層的操作是將乙個視窗內的畫素按照平均值加權或選擇最大值來作為輸出,乙個視窗內僅有乙個輸出資料。因此,當經過池化層後,影象的尺寸會變小,計算量也會變小,相比於在池化前使用卷積,池化後同樣的卷積大小具有更大的感受野。
但僅僅從縮小影象尺寸,減少計算量,獲取更大感受野這個作用來說,也可以使用步長大於1的卷積來替代池化層。這在少部分模型中就有所應用。
但實際上池化層還有別的作用。
當使用最大池化時,乙個視窗中僅有最大的畫素值才會進入下一層,而其它位置的畫素就被暫時拋棄了。之所以說暫時拋棄了,是因為在訓練過程中是不斷更新的,可能在下一次前傳時,由於卷積核權重更新,最大的畫素值就在另乙個位置取到了。
那這種取最大的畫素值的好處在哪呢。
結合前面我們提到的卷積核提取特徵的理解,當一張經過sobel豎直方向的運算元時,僅在豎直邊緣區域輸出較大的值,而其它平整區域都為零或接近為零了。如果此時經過乙個最大池化層,就會發現平整區域的畫素被丟下了,僅留下了豎直邊緣區域的畫素。接下來就僅剩下豎直邊緣區域的特徵繼續卷積提取進一步的特徵了。如果是還有其它型別的卷積核,則經過卷積+池化後,僅留下了那個型別卷積核提取的特徵。
因此最大池化除了前面那兩個作用,還有乙個去除冗餘資訊、去除雜訊的作用。
說到這裡,理解池化的使用也很簡單了,在神經網路的backbone部分使用最大池化,用於去除雜訊,去除干擾因素,在全連線層前,使用平均池化,避免丟失資訊。
再給大家擴充套件乙個知識點,如果要視覺化乙個訓練過的卷積核,應該怎麼視覺化?
根據這裡的理論,每張經過同乙個卷積核時,會提取同乙個型別的特徵,而不符合這個特徵的,輸出的畫素值就為零或很小了。那我們只需要隨機初始化一張,所有畫素值隨機,在經過這個待視覺化的卷積核時,輸出的值越大,則說明越符合這個卷積核的所提取的特徵,然後我們就可以利用梯度上公升法,來調整畫素值,不更新卷積核引數,以使得該在經過待視覺化卷積核後輸出的畫素值更大。當模型收斂後,此時的顯示的就是該卷積核所認可的特徵,從而達到了視覺化卷積核的目的。
池化另外還有幾個特性,比較好理解,這裡也列舉一下,
具有平移不變性、旋轉不變性。
防止過擬合。
第一種解釋
假設輸入資料報含多個特徵x1,x2,…xn。每個功能可能具有不同的值範圍。例如,特徵x1的值可能在1到5之間,而特徵x2的值可能在1000到99999之間。
如下左圖所示,由於兩個資料不在同一範圍,但它們是使用相同的學習率,導致梯度下降軌跡沿一維來回振盪,從而需要更多的步驟才能達到最小值。且此時學習率不容易設定,學習率過大則對於範圍小的資料來說來回**,學習率過小則對範圍大的資料來說基本沒什麼變化。
如下右圖所示,當進行歸一化後,特徵都在同乙個大小範圍,則loss landscape像乙個碗,學習率更容易設定,且梯度下降比較平穩
第二種解釋(來自bn**)
訓練深度神經網路非常複雜,因為在訓練過程中,隨著先前各層的引數發生變化,各層輸入的分布也會發生變化,圖層輸入分布的變化帶來了乙個問題,因為圖層需要不斷適應新的分布,因此訓練變得複雜,隨著網路變得更深,網路引數的細微變化也會放大。
由於要求較低的學習率和仔細的引數初始化,這減慢了訓練速度,並且眾所周知,訓練具有飽和非線性的模型非常困難。我們將此現象稱為內部協變數偏移,並通過歸一化層輸入來解決該問題。
數字影象是一堆0-255的數值組合而成,很神奇的是,就是這麼一堆數字就形成了各種各樣的影象,例如一張人臉,乙個籃球,乙隻貓。但這僅僅是我們人肉眼看到的影象,而神經網路則是面對這些數字,並要從這對數字中得到它的類別,因此關於神經網路有另一種理論,數字影象中的影象畫素值其實是在畫素空間,神經網路是將影象從畫素空間對映到特徵空間,再從特徵空間對資料進行分類。
這種對映需要通過非線性函式來實現,想想如果是線性函式,會發現仍然是在畫素空間,而不管堆疊多少層的線性函式,都等同於只有乙個線性函式。因此需要通過非線性函式來實現這個對映。
接下來從機器學習的角度來解釋這個理論,對於二維座標中的資料很好理解,資料之間的距離就是兩個座標差值的平方。對於高維中的資料就不能這麼計算了。例如乙個球,如果要從球的表面從乙個點走到另乙個點,不能通過3維的歐式距離來計算,可以通過極座標來表示成乙個二維的空間。
流形學習的觀點:認為我們所能觀察到的資料實際上是由乙個低維流行對映到高維空間的。由於資料內部特徵的限制,一些高維中的資料會產生維度上的冗餘,實際上這些資料只要比較低的維度就能唯一的表示。所以直觀上來講,乙個流形好比是乙個d維的空間,在乙個m維的空間中(m>d)被扭曲之後的結果。需要注意的是流形並不是乙個形狀,而是乙個空間。舉個例子來說,比如說一塊布,可以把它看成乙個二維的平面,這是乙個二維的空間,現在我們把它扭一扭(三維空間),它就變成了乙個流形,當然不扭的時候,它也是乙個流形,歐式空間是流形的一種特殊情況。如下圖所示
根據影象畫素值是在畫素空間的這個理論,數字影象也是這樣的高維空間,需要將它對映到另乙個空間,才能將它進行分類。
損失函式用來表現**資料與實際資料的差距程度。
根據前面兩種理論,全連線層的作用都是對資料進行分類。第一種是影象通過卷積層提取了很多特徵,第二種是將影象從畫素空間對映到了特徵空間,在特徵空間可以像在二維平面上對兩類資料進行分類那樣,全連線層就是相當於乙個超平面,將各個類別在特徵空間將它們分開。
星球內每天都會布置一些作業,這些作業會引導大家去學一些東西。如果有人覺得自己乙個學習沒有動力,或想要養成乙個很好的學習習慣,每天完成在知識星球內的作業是乙個不錯的做法。
,專注於計算機視覺的技術總結、最新技術跟蹤、經典**解讀、cv招聘資訊。
理解神經網路
了解了什麼是神經單元,就很容易理解神經網路,神經網路就是一系列神經單元連線而成構成的網路結構,如下圖 這是乙個5層神經網路,包括輸入層和輸出層,輸入層也叫做資料層,一般接收資料的輸入。這裡每一層的神經單元都與相鄰層的神經單元連線,而與本層的神經單元無連線,因此也叫全連線神經網路。使用神經網路訓練影象...
神經網路 神經網路中的矩陣的理解
在 深度學習入門 基於python的理論與實現 書中,看到講解矩陣的章節,加深了我對矩陣的理解。脫離應用理解數學是很難的。將矩陣放在深度學習的環境裡可以較好的理解矩陣的含義。這裡假設你已經學過矩陣。對於神經網路,我更傾向於理解為 因素 輸入層 影響因子 權重 結果 輸出層 這更貼近實際中的因果關係。...
神經網路 mask的作用
對句子填補之後,就要輸入到embedding層中,將token由id轉換成對應的vector.我們希望被填補的0值在後續的計算中不產生影響,就可以在初始化embedding層時指定引數mask zero為true,意思就是遮蔽0值,即填補的0值。在embedding層中的compute mask方法...