深度學習筆記------卷積神經網路

yzsorz發表於2020-02-09

相關概念

卷積運算

卷積函式h(x)=f(t)g(xt)dth(x)=\int f(t)g(x-t)dt
該函式定義了一種運算,對於f,gf,g兩個函式進行,先將g(t)g(t)進行一個反轉運算於是g(t)=g(t)g'(t)=g(-t),之後在進行一個平移運算就變為了g(t)=g(xt)g''(t)=g(x-t),之後就是兩個函式的乘積積分,這就是對於一維的兩個函式的卷積運算。

這個函式的來源是對於訊號的處理上,用於描述系統的響應輸出不僅與當前時刻x的輸出有關,還與系統之前的響應有關,但是這個響應是會衰減的,於是當前時刻的實際輸出響應是一個之前訊號衰減函式與當前訊號輸出函式的積分運算,其中g(xt)g(x-t)中的x-t就是一個時間差的描述。

這個函式也有二維形式,也就是將其中的f,gf,g變為二元函式,對應的積分變為二重積分有:
h(x,y)=f(v,u)g(xv,yu)dvduh(x,y)=\iint f(v,u)g(x-v,y-u)dvdu

互相關運算

互相關函式h(x)=f(t)g(x+t)dth(x)=\int f(t)g(x+t)dt
與上面的卷積相比,互相關函式並沒有對g(x)g(x)進行反轉操作,剩下的就與卷積一致了。

對應反轉與否在數學證明中是有影響的,決定了卷積運算的可交換性,但是在機器學習的訓練中反轉與否以及可交換性的影響就十分有限了,所以許多的卷積神經網路是實現的互相關運算,即沒有反轉,但是名字還是叫卷積。

進一步將互相關變為二維形式有:h(x,y)=f(v,u)g(x+v,y+u)dvduh(x,y)=\iint f(v,u)g(x+v,y+u)dvdu

再將積分變為累加有:f(v,u)g(x+v,y+u)\sum \sum f(v,u)g(x+v,y+u)其中x與y為相應的偏移量,進一步細化,累加運算就是兩個同形的矩陣對應元素的乘積和,於是便得到了我們熟悉的卷積層中的運算,其中進行偏移運算的函式gg稱為核函式。

稀疏互動

卷積神經網路處理的大多為影象資料,如果仍舊使用神經網路中的全連線的話,相應的計算量會極其巨大,所以實際的核函式中的引數數量遠小於輸入單元的數量,用這種方式來代替全連線,可以減少相應的計算量與儲存空間。

引數共享

還是相對於一般的神經網路而言,每一層的每一個輸入到下一層之間都需要一個引數,而在卷積神經網路中,我們對核函式進行平移,每一次的平移相應的輸入便會獲得到一個引數進行運算,並將運算的結果傳到下一層,所以在實際的執行中,模型維護的引數都在核函式中了,而核函式中的每一個引數通過卷積核在輸入之間的平移進行共享,多個輸入資料便可以共享同一個引數了。

卷積核

由上面的引數共享與稀疏互動,可以得知卷積神經網路的訓練引數和全連線中的引數相比是有區別的,為了更好的體現資料間的空間關係,我們將這些訓練引數以一個(多維)矩陣的方式(大多都是方陣)定義(是一個函式運算),並結合輸入的資料來進行相關運算,用來獲取輸入資料的相關特徵。
區域性性: 由於稀疏互動與引數共享的要求,卷積核中的引數數量是遠小於輸入資料的,所以實際的運算中,卷積核運算後得到的結果是區域性的特徵。其區域性的程度取決於卷積核的大小。
高維性: 由於我們輸入的資料形式的多樣,比如,影象是二維的,對影象進行rgb的處理後在二維上又會區分為三個通道變為三位的,所以卷積核的形式上也會隨之進行維度的一致(保持與輸入資料的深度一致)。

如圖輸入形狀為444*4,卷積核大小為333*3
過濾器: 卷積核也叫過濾器,在卷積運算的過程中卷積核可以提取特定的特徵,舉個例子,現在有一個333*3的卷積核[111111111]\begin{bmatrix}-1& 1 &-1 \\-1 & 1 &-1\\-1 & 1 & -1 \\\end{bmatrix},其提取的物件是一個圖片,對於與之進行運算的就是一個個333*3的畫素塊了,那麼相應的形狀就是一個豎線,在影象中含有豎線部分比如:[100010010]\begin{bmatrix}1& 0 &0 \\0 & 1 &0\\0 & 1 & 0 \\\end{bmatrix}[010010010]\begin{bmatrix}0& 1 &0 \\0 & 1 &0\\0 & 1 & 0 \\\end{bmatrix}[111111111]\begin{bmatrix}1& 1 &1 \\1 & 1 &1\\1 & 1 & 1 \\\end{bmatrix},在互相關運算之後得到的值為1,3,-3,越接近過濾器形狀的畫素塊得到的值就越高,於是便實現了相關特徵的提取。

填充

填充是在輸入資料的兩側填充元素,一般對於二維的資料,是在每個維度的兩側填充,保證原有的資料位於中央。而填充的目的是為了控制輸出的形狀。

假設輸入為nhnwn_h*n_w,卷積核形狀為mhmwm_h*m_w,預設步幅為1,於是生成的輸出形狀為(nhmh+1)(nwmw+1)(n_h-m_h+1)*(n_w-m_w+1)

假設在每個維度的兩側填充p行(列),於是原先的輸入形狀為(p+nh+p)(p+nw+p)(p+n_h+p)*(p+n_w+p),輸出就變為了(p+nh+pmh+1)(p+nw+pmw+1)(p+n_h+p-m_h+1)*(p+n_w+p-m_w+1)

填充一般以常數0進行填充,由於卷積核的形狀常常是奇數*奇數,所以一般在維度的兩側填充相同數量的常數。

步幅

在互相關或卷積運算中,會有一個相應的平移操作,對應的每次平移的數量就是步幅了,步幅與填充相結合可以控制輸出時的形狀,對於不同的維度可以設定不同的步幅.

假設寬上步幅為sws_w,高上的步幅為shs_h,按照之前的填充為2p2*p,於是實際的輸出形狀為(p+nh+pmh+sh)/sh(p+nw+pmw+sw)/sw\lfloor(p+n_h+p-m_h+s_h)/s_h\rfloor*\lfloor(p+n_w+p-m_w+s_w)/s_w\rfloor(向下取整)

填充可以增加輸出的高和寬,步幅可以減少輸出的高和寬。

卷積核為333*3,輸入為555*5,填充之後為999*9,步幅為1。
卷積運算的過程實際就是卷積核視窗不斷滑動計算的過程。

多輸入通道

輸入的資料是圖片時,還會考慮不同顏色層級之間的關係,將原先的色彩分為rgb三色通道,有的時候還會有灰化處理,產生灰度圖,所以輸入的資料變為了三個維度,同樣的為了對這些資料進行特徵提取,我們的卷積核也要保持三維的。

核函式與輸入通道保持一致,每一個通道產生一個輸出,最終將各個通道相加得到輸出。

多輸出通道

從上面的多輸入通道可以瞭解,無論我們的輸入資料的形狀如何,在經過卷積核的處理後都會變為一個二維的輸出(特徵圖)。一個卷積核對應了一個輸出通道,我們可以設計多個卷積核構建出多個輸出通道。

層級分佈

卷積層

卷積層的輸入一般為多維的資料,一般為二維或者三維的,除此之外就是相應的卷積核函式了,一般一個卷積層可能會包含多個卷積核函式,用來獲得資料的不同特徵,最後就是輸出了,每一次的相關運算都會產生一個結果,這些資料保持原有資料的位置構成輸出結果(即特徵圖),是具有相應特徵的卷積核對原資料的特徵提取,特徵圖的數量與卷積核的數量一致。

卷積運算或者是互相關運算構造的模型實質還是線性的,只不過相比於全連線,卷積層中的運算考慮到了資料的空間位置,將全連線中的一維變成了二維甚至多維。同樣在卷積或者互相關操作之後,也需要加上相應的偏置值。

歸一化

在實際的運用中,在完成卷積後與進行啟用函式前,往往還需要進行歸一化以防止在訓練中出現梯度爆炸與梯度消失,所以在整流之前可以加一個歸一化層,常用的有BN批標準化。

整流(啟用函式)

同樣的,在之前的卷積運算中與一般的神經網路一樣僅只考慮了線性的部分,需要引入非線性的部分來提高模型的擬合能力,所以在卷積運算完成後需要通過非線性的啟用函式,這裡與一般的神經網路是一致的。

池化層

卷積層獲得了卷積核處理之後的特徵圖,但是在這些資料中並不是都為相應的特徵資料,有些邊緣資料或者是不符合卷積核特徵的資料是我們不需要的(特徵資料並不是在任何位置都有),所以我們需要從處理過的資料中篩選出符合特徵的資料(消除卷積層處理後對位置的敏感性,減少過擬合的可能),方便之後的判斷,同時可以減少相應的無效資料,減小之後的計算壓力。

與卷積運算相似,池化也需要一個視窗來劃分一個範圍,在這個範圍中對資料進行篩選,並且這個視窗也可以進行移動,也有步幅與填充,相應的可以控制池化操作的輸出資料尺寸。對於池化視窗的運算常用的有取最大值與取平均值,分別對應為最大池化層與平均池化層。

最大池化層: 從池化視窗中選出最大的值傳到下一層,捨棄未選中的。
平均池化層: 將池化視窗中的平均值傳到下一層。
多通道池化: 在處理多個特徵圖輸入時,池化操作僅僅只是改變每個特徵圖的尺寸與其中的資料,具體的通道數量不變(不改變特徵圖的數量)。所以輸入資料與輸出資料的特徵圖個數一致。

全連線層

在多層次的卷積池化之後,可以看到資料量會不斷減少,到最後會得到數量合適的資料,(但是還是多維的)將資料展開成為一維的資料,再對應到全連線的神經網路中進行訓練,完成相應的分類或者預測處理。

在實際的應用中卷積神經網路會由多層的卷積與池化層組合,組合的過程中也不僅僅是在一維的線性中變化順序,會有空間上的結構,多個層次的輸出間會有分叉與交叉,訓練的難度與實際的能力也會相應的提高。

相關文章