卷積層和全連線層之間的關係

MoSalah發表於2021-11-13

1 卷積層和全連線層的概念

https://towardsdatascience.com/convolutional-neural-network-17fb77e76c05

2 卷積層和全連線層間關係

2.1 1 × 1卷積核的卷積層和全連線層

假設有一個三維圖片輸入,大小為 3 × 3 × 3, 其中 3 為 channel 顏色維度,3 × 3 長和寬畫素維度。下面分別通過卷積層和全連線層進行計算。

2.1.1 通過卷積層計算圖片

下面通過一個卷積層計算,其中卷積層中 卷積核為 3 × 1 × 1, 擴充為0,步長為 1,輸入通道為 3,輸出通道為2。

顯然,Kernel中有 6 個引數,這是我們需要資料迭代去訓練的引數。

2.1.2 通過全連線層計算圖片

我們根據輸入影像和輸出影像,建立一個全連線層:

首先將圖片資料轉化為一維向量,向量長為 3,該向量作為輸入層。同樣轉化卷積層結果( 2 × 3 × 3 張量) 為長度 18 的一維向量,作為輸出層。

通過計算可以知道,此全連線層的引數數量為 486 個 ( 27 * 18 )。

很明顯全連線層的引數遠遠比卷積層的核函式中的引數多很多,下面我們將根據卷積層的計算原理逐步搭建一個全連線層,以此來搞清楚全連線層引數數量高的原因。

首先,根據卷積層計算原理,可知:

    Y000  X000 * K0000 + X100 * K0100 + X200 * K0200

根據此式可構建全連線層:

同理,構建輸出層中 channel = 0 的關係。

    Y[0] = X[0] * K[0] + X[1] * K[0] + X[2] * K[0] + X[3] * K[0] + X[4] * K[0] + X[5] * K[0] + X[6] * K[0] + X[7] * K[0] + X[8] * K[0]

可以看出全連線層的引數數量是之前的 9 倍,但是僅僅是 K[0] 的三個引數複製使用而已。(這也是卷積層的特點之一,權值共享)

相同顏色的引數代表權重相同。

然後,對輸出層上的剩餘的 channel 做同樣的計算。

    Y[1] = X[0] * K[1] + X[1] * K[1] + X[2] * K[1] + X[3] * K[1] + X[4] * K[1] + X[5] * K[1] + X[6] * K[1] + X[7] * K[1] + X[8] * K[1]

可以發現計算涉及的引數,只有 K[1] 改變了,這是由卷積層計算的原理有關,由卷積核的輸出通道數量決定輸出的維度,在全連線層中,表現為輸出層的大小。

顯然,因為改變了卷積核的引數,全連線層的引數也應當改變,所以完整的全連線層如下,構建完成。

相同顏色的引數代表在同一個卷積核的同一個維度,一共有 54 個引數。

2.1.3 對比與總結

根據卷積層計算構建的全連線層實質等效於卷積層,因此,卷積層所做的計算次數(乘法)相等於全連線層的引數數量(54個,2組引數,每組3個引數重複使用9次),卷積核的引數數量(6個)相等於全連線層的有效引數(不為0的引數)數量(2組,每組3個引數)。而此全連線層的引數(54個)相較於不考慮計算的全連線層的引數(486個)同樣少很多,那麼可以將剩下沒有在卷積層計算中體現出來的引數均視為0,這樣就滿足了全連線層應有的引數數量。

2.2 輸入資料的spatial維度和卷積核相同的卷積層和全連線層

假設有一個三維圖片輸入,大小為 3 × 3 × 3, 其中 3 為 channel 顏色維度,3 × 3 長和寬畫素維度。下面分別通過卷積層和全連線層進行計算。

2.1.1 通過卷積層計算圖片

下面通過一個卷積層計算,其中卷積層中 卷積核為 3 × 3 × 3, 擴充為0,步長為 1,輸入通道為 3,輸出通道為2。

 

顯然,Kernel中有 54 個引數,這是我們需要資料迭代去訓練的引數。

2.1.2 通過全連線層計算圖片

我們根據輸入影像和輸出影像,建立一個全連線層:

首先將圖片資料轉化為一維向量,向量長為 33  ,該向量作為輸入層。同樣轉化卷積層結果( 2 × 1 張量) 為長度 2 的一維向量,作為輸出層。

 

觀察得知,可以發現此全連線層引數於卷積核的引數相同。此外,該全連線層的計算和卷積層的計算也是相同的。

因此,可以說此全連線層等效於卷積層。

2.1.3 對比與總結

可以看出,如果卷積核和輸入資料的spatial維度相同時,卷積層等價於全連線層。

2.3 n1 × n2 卷積核的卷積層和全連線層

假設有一個三維圖片輸入,大小為 channel1 × h × w, 其中 channel 為 顏色維度,h × w 長和寬畫素維度。通過一個核函式為 channel2 × channel1 × n1 × n2 的卷積層,那麼會輸出大小為 channel2 × r1 × r2 的張量,其中 r1 = ⌊(h - n1)/s⌋ + 1,r2 = ⌊(h - n2)/s⌋ + 1

其中,最終輸出的張量,包含 channel2 * r1 * r2 個項,其中每一項都是通過 channel1 次卷積運算後相求和得到的,每一次卷積運算會涉及 n1 * n2 次乘法運算,所以一共會涉及 channel1 * channel2 * n* n* r1 * r2 次計算。

如果將該卷積層轉換為全連線層,因為輸入層是大小為 channel1 × h × w 的向量,輸出大小為 channel2 × r1 × r的向量,全連線層就會有 channel1 * channel2 *  h * w * r1 * r個引數,其中大部分均為0,channel1 * channel2 * n* n* r1 * r個為存在值的有效引數,有效引數是由 channel1 * channel2 * n* n2 個引數重複 r* r2 次組成的。

這 channel1 * channel2 * n* n2 個核心有效引數即是卷積層的卷積核內的引數。

3 總結

下面做個簡單的歸納,對比全連線層和卷積層,可以發現:

  • 當 h * w == n* n且 n≤ h && n2 ≤ w 時,即 h == n1 && w == n2 時,全連線層即可完全等價於卷積層,並且 r1 == r2 == 1,不會存在重複的有效引數。
  • 當 n< h || n2 < w 時,n1 和 n2 的值分別越接近 h 和 w,那麼全連線層的有效引數率越高。
  • 全連線層的引數數量是卷積層的引數數量的 (h / n1) / (w / n2) 倍,n1 和 n2 的值分別越接近 h 和 w,全連線層的引數數量就越接近卷積層,相反,n1 和 n2 的值分別越遠離 h 和 w 時,全連線層的引數數量就會越來越大於卷積層。
  • 當 r1 > 1 || r> 1 時,r和 r的值越大,有效引數的重複率越高。

 

相關文章