卷積神經網絡——卷積神經網絡基礎

背景:計算機視覺是一個包含很普遍的領域,包含了平常生活中全部可視化的1維,2維,3維數據,例如心跳脈衝的檢測(1維),目標檢測、人臉識別(2維),3維場景重建、虛擬現實(3維)等,可是處理這些數據時每每須要巨大的內存需求(下面會詳細的說明),普通的神經網絡沒法知足,所以卷積神經網絡應運而生。算法

首先圖片是計算機視覺中最重要的也是發展最快的領域,下面就從圖片入手深刻的講解卷積神經網絡。網絡

圖片介紹:人類能夠看到的不一樣的顏色是由於人的眼睛就像一個三色接收器的體系,而大多數的顏色能夠經過紅、綠、藍三色按照不一樣的比例合成產生。爲何是三種顏色,不是七種顏色?這裏咱們就不得不提一個耳熟能詳的名字——牛頓(How old are you怎麼總是你),牛頓經過三菱鏡首先發明瞭天然光能夠分解爲不一樣顏色的七彩色光,偉人的思想每每是不同凡響的,他們每每不會止步不前,繼續思考 他在想既然天然光能夠分解,那麼七彩色光是否是也能夠被分解或者合成呢? ide

順着這個思路他又通過了無數個晝夜不停的實驗和計算,(至於怎麼實驗的感興趣的能夠本身搜索)終於真理又讓他發明了,在七彩色光中只有紅、綠、藍三種顏色不可以再繼續分解,不能分解也就是原子的這點和事務的特性同樣,因此稱其爲三原色,其它的光能夠經過這三種光來組合疊加和相減算出來。學習

三原色在應用於實際生活中時既能夠相加,也能夠相減,採用相加的方式成爲RGB顏色模型(紅、綠、藍)和CMY模式(品紅、青色、淡黃),也是用的最多的一種,相減爲CMYK模型,他們分別用於繪圖和印刷領域。 現在在咱們電腦上大部分的圖片都是以jpg、jpeg(有損壓縮,體積小)或者png(無損壓縮)格式存儲的,其中它們都支持RGB、CMYK和灰度模式。一般狀況下,RGB每一個顏色各有256級亮度,用數字表示爲從0、一、2...直到255。 按照計算,256級的RGB色彩總共能組合出約1678萬種色彩,即256×256×256=16777216。 一般也被簡稱爲1600萬色或千萬色。也稱爲24位色(2的24次方)。這24位色還有一種較爲怪異的稱呼是8位通道色,爲何這樣稱呼呢? 這裏的所謂通道,實際上就是指三種色光各自的亮度範圍,咱們知道其範圍是256,256是2的8次方,就稱爲8位通道色。 .net

一張圖片在屏幕上面若是無限縮小會看到是由無數個點組成的,其實任何事物都是由無限到有限來組成,無數個點會組成一個平面,當點和點之間的間距足夠小時咱們的肉眼是分不出來的,咱們看到的就是一個圖像,當無限個圖像從咱們眼前閃過就會造成視頻電影,他們都是一個道理,比如幾何中的點組成線、線組成面、面組成立體空間,當分析到這一層次圖像識別就顯着處理簡單了,只要讓計算機計算組成圖片的無數個點的特徵就能夠識別出來類似圖片,固然這也依賴於強大的運算能力,由於像素高的大圖是很是大的,如常見筆記本電腦像素,有1366*768個像素點,數量級別在百萬級,何況以RGB模式來講有三個通道顏色 將會更大。3d

ok,囉囉嗦嗦這麼多(小白一個你們多多見諒),回到正題。code

圖像處理面臨的挑戰:若是咱們對一張圖片進行深度學習,圖片的格式是(64,64,3)的RGB格式(3是通道數也就是紅綠藍),咱們爲了方便計算將須要將其flatten獲得一維數據64\times64\times3=12288,因此輸入層特徵向量x的維度也就是12288。可是64\times64的圖片實在過小,若是要操做更大的清晰度更高的圖片,好比1366*768的圖片,特徵向量X^(^1^)的維度就達到了驚人的3147264(大約三百萬),對於全鏈接的神經網絡來講若是第一層hidden layer的hidden units數量是1000,也就是權值矩陣W^[^1^]的大小就須要達到1000\times3百萬(大約30億個參數)。在參數如此巨大的狀況下,難以得到足夠的數據來防止神經網絡發生過擬合和競爭需求,要處理包含30億參數的神經網絡,巨大的內存需求讓人不太能接受。因此就須要使用卷積神經網絡來減小參數。視頻

要學習卷積神經網絡就要知道卷積神經網絡每層都作了什麼,下面就由淺入深的理解卷積神經網絡是如何運算的。blog

邊緣檢測示例:卷積運算是卷積神經網絡最基本的組成部分,使用邊緣檢測做爲入門樣例。下面就來看看卷積是如何進行運算的。下圖展現了卷積神經網絡如何一層一層的檢測到完整的物體圖片

首先神經網絡的前幾層找到了像圖片1這樣的邊緣或者線,而後後面的幾層有可能檢測到物體的部分區域,更靠後的一些層可能檢測到完整的物體,這我的臉識別例子中首先檢測到圖片的邊緣,而後的檢測到更復雜的形狀和模式好比眼睛鼻子,以後檢測到人臉的大部分輪廓。就像素描中由簡單的一筆一劃最後完成複雜的圖畫。那神經網絡又是如何作到這一切的?

讓咱們舉個更加直觀的例子,給了這樣一張圖片,讓電腦去搞清楚這張照片裏有什麼物體,你可能作的第一件事是檢測圖片中的垂直邊緣。好比說,在這張圖片中的欄杆(紅線)就對應垂直線,與此同時,這些行人的輪廓線某種程度上也是垂線,這些線是垂直邊緣檢測器的輸出。一樣,你可能也想檢測水平邊緣,好比說這些欄杆(綠線)就是很明顯的水平線,它們也能被檢測到,因此如何在圖像中檢測這些邊緣?

例如在一個6\times6的灰度圖像(灰度圖像是6\times6\times1矩陣,區別與n_c\timesn_c\times3的RGB三通道)。爲了檢測圖像中的垂直邊緣,你能夠構造一個3×3矩陣。在卷積神經網絡的術語中,它被稱爲filter(過濾器)。我要構造一個3×3的fiilter,像這樣。

更進一步的邊緣檢測:上文已經見識到用卷積運算實現垂直邊緣檢測,在本視頻中,你將學習如何區分正邊和負邊,這實際就是由亮到暗與由暗到亮的區別,也就是邊緣的過渡。

仍是上一個視頻中的例子,這張6×6的圖片,左邊較亮,而右邊較暗,將它與垂直邊緣檢測濾波器進行卷積,檢測結果就顯示在了右邊這幅圖的中間部分。

如今這幅圖有什麼變化呢?它的顏色被翻轉了,變成了左邊比較暗,而右邊比較亮。如今亮度爲10的點跑到了右邊,爲0的點則跑到了左邊。若是你用它與相同的過濾器進行卷積,最後獲得的圖中間會是-30,而不是30。若是你將矩陣轉換爲圖片,就會是該矩陣下面圖片的樣子。如今中間的過渡部分被翻轉了,以前的30翻轉成了-30,代表是由暗向亮過渡,而不是由亮向暗過渡。

若是你不在意這二者的區別,你能夠取出矩陣的絕對值。但這個特定的過濾器確實能夠爲咱們區分這兩種明暗變化的區別。

再來看看更多的邊緣檢測的例子,咱們已經見過這個3×3的過濾器,它能夠檢測出垂直的邊緣。因此,看到右邊這個過濾器,我想你應該猜出來了,它能讓你檢測出水平的邊緣。提醒一下,一個垂直邊緣過濾器是一個3×3的區域,它的左邊相對較亮,而右邊相對較暗。類似的,右邊這個水平邊緣過濾器也是一個3×3的區域,它的上邊相對較亮,而下方相對較暗。

 

再舉個例子,這裏的30(右邊矩陣中綠色方框標記元素)表明了左邊這塊3×3的區域(左邊矩陣綠色方框標記部分),這塊區域確實是上邊比較亮,而下邊比較暗的,因此它在這裏發現了一條正邊緣。而這裏的-30(右邊矩陣中紫色方框標記元素)又表明了左邊另外一塊區域(左邊矩陣紫色方框標記部分),這塊區域確實是底部比較亮,而上邊則比較暗,因此在這裏它是一條負邊。

總而言之,經過使用不一樣的過濾器,你能夠找出垂直的或是水平的邊緣。但事實上,對於這個3×3的過濾器來講,咱們使用了其中的一種數字組合\begin{bmatrix} 1&1 &1 \\ 0& 0 &0 \\ -1&-1 &-1 \end{bmatrix}或者\begin{bmatrix} 1 &0 &-1 \\ 1& 0 & -1\\ 1& 0 & -1 \end{bmatrix}。但在歷史上,在計算機視覺的文獻中,曾公平地爭論過怎樣的數字組合纔是最好的,因此你還可使用這種:\begin{bmatrix} 1 &0 &-1 \\ 2&0 &-2 \\ 1&0 &-1 \end{bmatrix},叫作Sobel的過濾器,它的優勢在於增長了中間一行元素的權重,這使得結果的魯棒性會更高一些。

但計算機視覺的研究者們也會常用其餘的數字組合,好比這種:\begin{bmatrix} 3 &0 &-3 \\ 10&0 &-10 \\ 3&0 &-3 \end{bmatrix},這叫作Scharr過濾器,它有着和以前徹底不一樣的特性,實際上也是一種垂直邊緣檢測,若是你將其翻轉90度,你就能獲得對應水平邊緣檢測。隨着深度學習的發展,咱們學習的其中一件事就是當你真正想去檢測出複雜圖像的邊緣,你不必定要去使用那些研究者們所選擇的這九個數字,但你能夠從中獲益匪淺。把這矩陣中的9個數字當成9個參數,而且在以後你能夠學習使用反向傳播算法,其目標就是去理解這9個參數.

當你獲得左邊這個6×6的圖片,將其與這個3×3的過濾器進行卷積,將會獲得一個出色的邊緣檢測。這就是你在下節視頻中將會看到的,把這9個數字當成參數的過濾器,經過反向傳播,你能夠學習這種的過濾器\begin{bmatrix} 1 &0 &-1 \\ 1& 0 & -1\\ 1& 0 & -1 \end{bmatrix},或者Sobel過濾器和Scharr過濾器。還有另外一種過濾器,這種過濾器對於數據的捕捉能力甚至能夠賽過任何以前這些手寫的過濾器。相比這種單純的垂直邊緣和水平邊緣,它能夠檢測出45°或70°或73°,甚至是任何角度的邊緣。因此將矩陣的全部數字都設置爲參數,經過數據反饋,讓神經網絡自動去學習它們,咱們會發現神經網絡能夠學習一些低級的特徵,例如這些邊緣的特徵。儘管比起那些研究者們,咱們要更費勁一些,但確實能夠動手寫出這些東西。不過構成這些計算的基礎依然是卷積運算,使得反向傳播算法可以讓神經網絡學習任何它所須要的3×3的過濾器,並在整幅圖片上去應用它,無論是垂直的邊緣,水平的邊緣,還有其餘奇怪角度的邊緣,甚至是其它的連名字都沒有的過濾器。

Padding:

爲了構建深度神經網絡,你須要學會使用的一個基本的卷積操做就是padding,讓咱們來看看它是如何工做的。

咱們在以前講到的,若是你用一個3×3的過濾器卷積一個6×6的圖像,你最後會獲得一個4×4的輸出,也就是一個4×4矩陣。那是由於你的3×3過濾器在6×6矩陣中,只可能有4×4種可能的位置。這背後的數學解釋是,若是咱們有一個n×n的圖像,用f×f的過濾器作卷積,那麼輸出的維度就是(n-f+1)×(n-f+1)。在這個例子裏是6-3+1=4,所以獲得了一個4×4的輸出。

這樣的話會有兩個缺點,第一個缺點是每次作卷積操做,你的圖像就會縮小,從6×6縮小到4×4,你可能作了幾回以後,你的圖像就會變得很小了,可能會縮小到只有1×1的大小。你可不想讓你的圖像在每次識別邊緣或其餘特徵時都縮小,這就是第一個缺點。

第二個缺點時,若是你注意角落邊緣的像素,這個像素點(綠色陰影標記)只被一個輸出所觸碰或者使用,由於它位於這個3×3的區域的一角。但若是是在中間的像素點,好比這個(紅色方框標記),就會有許多3×3的區域與之重疊。因此那些在角落或者邊緣區域的像素點在輸出中採用較少,意味着你丟掉了圖像邊緣位置的許多信息。

爲了解決這兩個問題,一是輸出縮小。當咱們創建深度神經網絡時,你就會知道你爲何不但願每進行一步操做圖像都會縮小。好比當你有100層深層的網絡,若是圖像每通過一層都縮小的話,通過100層網絡後,你就會獲得一個很小的圖像,因此這是個問題。另外一個問題是圖像邊緣的大部分信息都丟失了。

爲了解決這些問題,你能夠在卷積操做以前填充這幅圖像。在這個案例中,你能夠沿着圖像邊緣再填充一層像素。若是你這樣操做了,那麼6×6的圖像就被你填充成了一個8×8的圖像。若是你用3×3的圖像對這個8×8的圖像卷積,你獲得的輸出就不是4×4的,而是6×6的圖像,你就獲得了一個尺寸和原始圖像6×6的圖像。習慣上,你能夠用0去填充,若是是p填充的數量,在這個案例中,p=1,由於咱們在周圍都填充了一個像素點,輸出也就變成了(n+2p-f+1)×(n+2p-f+1),因此就變成了(6+2-3+1)×(6+2-3+1)=6×6,和輸入的圖像同樣大。這個塗綠的像素點(左邊矩陣)影響了輸出中的這些格子(右邊矩陣)。這樣一來,丟失信息或者更準確來講角落或圖像邊緣的信息發揮的做用較小的這一缺點就被削弱了。

剛纔我已經展現過用一個像素點來填充邊緣,若是你想的話,也能夠填充兩個像素點,也就是說在這裏填充一層。實際上你還能夠填充更多像素。我這裏畫的這種狀況,填充後p=2。

至於選擇填充多少像素,一般有兩個選擇,分別叫作Valid卷積和Same卷積。

Valid卷積意味着不填充,這樣的話,若是你有一個的n×n圖像,用一個f×f的過濾器卷積,它將會給你一個(n-f+1)×(n-f+1)維的輸出。這相似於咱們在前面的視頻中展現的例子,有一個6×6的圖像,經過一個3×3的過濾器,獲得一個4×4的輸出。

另外一個常常被用到的填充方法叫作Same卷積,那意味你填充後,你的輸出大小和輸入大小是同樣的。根據這個公式(n-f+1),當你填充個p像素點,n就變成了n+2p ,最後公式變爲(n+2p-f+1)。所以若是你有一個n×n的圖像,用個p像素填充邊緣,輸出的大小就是這樣的(n+2p-f+1)×(n+2p-f+1)。若是你想讓(n+2p-f+1)=n的話,使得輸出和輸入大小相等,若是你用這個等式求解p,那麼p=(f-1)/2。因此當f是一個奇數的時候,只要選擇相應的填充尺寸,你就能確保獲得和輸入相同尺寸的輸出。這也是爲何前面的例子,當過濾器是3×3時,和上一張幻燈片的例子同樣,使得輸出尺寸等於輸入尺寸,所須要的填充是(3-1)/2,也就是1個像素。另外一個例子,當你的過濾器是5×5,若是f=5,而後代入那個式子,你就會發現須要2層填充使得輸出和輸入同樣大,這是過濾器5×5的狀況。

習慣上,計算機視覺中,f一般是奇數,甚至可能都是這樣。你不多看到一個偶數的過濾器在計算機視覺裏使用,我認爲有兩個緣由。

其中一個多是,若是f是一個偶數,那麼你只能使用一些不對稱填充。只有f是奇數的狀況下,Same卷積纔會有天然的填充,咱們能夠以一樣的數量填充四周,而不是左邊填充多一點,右邊填充少一點,這樣不對稱的填充。

第二個緣由是當你有一個奇數維過濾器,好比3×3或者5×5的,它就有一箇中心點。有時在計算機視覺裏,若是有一箇中心像素點會更方便,便於指出過濾器的位置。

也許這些都不是f爲何一般是奇數的充分緣由,但若是你看了卷積的文獻,你常常會看到3×3的過濾器,你也可能會看到一些5×5,7×7的過濾器。後面咱們也會談到1×1的過濾器,以及何時它是有意義的。可是習慣上,我推薦你只使用奇數的過濾器。我想若是你使用偶數f也可能會獲得不錯的表現,若是遵循計算機視覺的慣例,我一般使用奇數值的f。

你已經看到如何使用padding卷積,爲了指定卷積操做中的padding,你能夠指定p的值。也可使用Valid卷積,也就是p=0。也可以使用Same卷積填充像素,使你的輸出和輸入大小相同。以上就是padding,在接下來咱們討論如何在卷積中設置步長。

卷積步長(Strided convolutions)

卷積中的步幅是另外一個構建卷積神經網絡的基本操做,讓我向你展現一個例子。

若是你想用3×3的過濾器卷積這個7×7的圖像,和以前不一樣的是,咱們把步幅設置成了2。你還和以前同樣取左上方的3×3區域的元素的乘積,再加起來,最後結果爲91。

只是以前咱們移動藍框的步長是1,如今移動的步長是2,咱們讓過濾器跳過2個步長,注意一下左上角,這個點移動到其後兩格的點,跳過了一個位置。而後你仍是將每一個元素相乘並求和,你將會獲得的結果是100。

如今咱們繼續,將藍色框移動兩個步長,你將會獲得83的結果。當你移動到下一行的時候,你也是使用步長2而不是步長1,因此咱們將藍色框移動到這裏:

注意到咱們跳過了一個位置,獲得69的結果,如今你繼續移動兩個步長,會獲得91,127,最後一行分別是44,72,74。

因此在這個例子中,咱們用3×3的矩陣卷積一個7×7的矩陣,獲得一個3×3的輸出。輸入和輸出的維度是由下面的公式決定的。若是你用一個f×f的過濾器卷積一個n×n的圖像,你的padding爲p,步幅爲s,在這個例子中s=2,你會獲得一個輸出,由於如今你不是一次移動一個步子,而是一次移動s個步子,輸出因而變爲\frac{n+2p-f}{s}+1 × \frac{n+2p-f}{s}+1

在咱們的這個例子裏,n=7,p=0,f=3,s=2,\frac{7+0-3}{2}+1=3,即3×3的輸出。

如今只剩下最後的一個細節了,若是商不是一個整數怎麼辦?在這種狀況下,咱們向下取整。這是向下取整的符號,這也叫作對進行地板除(floor),這意味着向下取整到最近的整數。這個原則實現的方式是,你只在藍框徹底包括在圖像或填充完的圖像內部時,纔對它進行運算。若是有任意一個藍框移動到了外面,那你就不要進行相乘操做,這是一個慣例。你的3×3的過濾器必須徹底處於圖像中或者填充以後的圖像區域內才輸出相應結果,這就是慣例。所以正確計算輸出維度的方法是向下取整,以避免\frac{n+2p-f}{s}+1不是整數。

 

能夠選擇全部的數使結果是整數是挺不錯的,儘管一些時候,你沒必要這樣作,只要向下取整也就能夠了。你也能夠本身選擇一些n,f,p和s的值來驗證這個輸出尺寸的公式是對的。

 

池化層(Pooling layers)

除了卷積層,卷積網絡也常用池化層來縮減模型的大小,提升計算速度,同時提升所提取特徵的魯棒性,咱們來看一下。

先舉一個池化層的例子,而後咱們再討論池化層的必要性。假如輸入是一個4×4矩陣,用到的池化類型是最大池化(max pooling)。執行最大池化的樹池是一個2×2矩陣。執行過程很是簡單,把4×4的輸入拆分紅不一樣的區域,我把這個區域用不一樣顏色來標記。對於2×2的輸出,輸出的每一個元素都是其對應顏色區域中的最大元素值。

左上區域的最大值是9,右上區域的最大元素值是2,左下區域的最大值是6,右下區域的最大值是3。爲了計算出右側這4個元素值,咱們須要對輸入矩陣的2×2區域作最大值運算。這就像是應用了一個規模爲2的過濾器,由於咱們選用的是2×2區域,步幅是2,這些就是最大池化的超參數。

由於咱們使用的過濾器爲2×2,最後輸出是9。而後向右移動2個步幅,計算出最大值2。而後是第二行,向下移動2步獲得最大值6。最後向右移動3步,獲得最大值3。這是一個2×2矩陣,即f=2,步幅是2,即s=2。

這是對最大池化功能的直觀理解,你能夠把這個4×4輸入看做是某些特徵的集合,也許不是。你能夠把這個4×4區域看做是某些特徵的集合,也就是神經網絡中某一層的非激活值集合。數字大意味着可能探測到了某些特定的特徵,左上象限具備的特徵多是一個垂直邊緣,一隻眼睛,或是你們懼怕遇到的CAP特徵。顯然左上象限中存在這個特徵,這個特徵多是一隻貓眼探測器。然而,右上象限並不存在這個特徵。最大化操做的功能就是隻要在任何一個象限內提取到某個特徵,它都會保留在最大化的池化輸出裏。因此最大化運算的實際做用就是,若是在過濾器中提取到某個特徵,那麼保留其最大值。若是沒有提取到這個特徵,可能在右上象限中不存在這個特徵,那麼其中的最大值也仍是很小,這就是最大池化的直觀理解。

必須認可,人們使用最大池化的主要緣由是此方法在不少實驗中效果都很好。儘管剛剛描述的直觀理解常常被引用,不知你們是否徹底理解它的真正緣由,不知你們是否理解最大池化效率很高的真正緣由。

其中一個有意思的特色就是,它有一組超參數,但並無參數須要學習。實際上,梯度降低沒有什麼可學的,一旦肯定了f和s,它就是一個固定運算,梯度降低無需改變任何值。

咱們來看一個有若干個超級參數的示例,輸入是一個5×5的矩陣。咱們採用最大池化法,它的過濾器參數爲3×3,即f=3,步幅爲1,s=1,輸出矩陣是3×3.以前講的計算卷積層輸出大小的公式一樣適用於最大池化,即\frac{n+2p-f}{s}+1,這個公式也能夠計算最大池化的輸出大小。

此例是計算3×3輸出的每一個元素,咱們看左上角這些元素,注意這是一個3×3區域,由於有3個過濾器,取最大值9。而後移動一個元素,由於步幅是1,藍色區域的最大值是9.繼續向右移動,藍色區域的最大值是5。而後移到下一行,由於步幅是1,咱們只向下移動一個格,因此該區域的最大值是9。這個區域也是9。這兩個區域的最大值都是5。最後這三個區域的最大值分別爲8,6和9。超參數f=3,s=1,最終輸出如圖所示。

以上就是一個二維輸入的最大池化的演示,若是輸入是三維的,那麼輸出也是三維的。例如,輸入是5×5×2,那麼輸出是3×3×2。計算最大池化的方法就是分別對每一個通道執行剛剛的計算過程。如上圖所示,第一個通道依然保持不變。對於第二個通道,我剛纔畫在下面的,在這個層作一樣的計算,獲得第二個通道的輸出。通常來講,若是輸入是5×5×n_c,輸出就是3×3×n_cn_c​​​​​​​個通道中每一個通道都單獨執行最大池化計算,以上就是最大池化算法。

另外還有一種類型的池化,平均池化,它不太經常使用。我簡單介紹一下,這種運算顧名思義,選取的不是每一個過濾器的最大值,而是平均值。示例中,紫色區域的平均值是3.75,後面依次是1.2五、4和2。這個平均池化的超級參數f=2,s=2,咱們也能夠選擇其它超級參數。

目前來講,最大池化比平均池化更經常使用。但也有例外,就是深度很深的神經網絡,你能夠用平均池化來分解規模爲7×7×1000的網絡的表示層,在整個空間內求平均值,獲得1×1×1000,一會咱們看個例子。但在神經網絡中,最大池化要比平均池化用得更多。

總結一下,池化的超級參數包括過濾器大小f和步幅s,經常使用的參數值爲f=2,s=2,應用頻率很是高,其效果至關於高度和寬度縮減一半。也有使用f=3,s=2的狀況。至於其它超級參數就要看你用的是最大池化仍是平均池化了。你也能夠根據本身意願增長表示padding的其餘超級參數,雖然不多這麼用。最大池化時,每每不多用到超參數padding,固然也有例外的狀況,咱們下週會講。大部分狀況下,最大池化不多用padding。p目前最經常使用的值是0,即p=0。最大池化的輸入就是n_H \times n_W\times n_C,假設沒有padding,則輸出\frac{n+2p-f}{s}+1 × \frac{n+2p-f}{s}+1​​​​​​​。輸入通道與輸出通道個數相同,由於咱們對每一個通道都作了池化。須要注意的一點是,池化過程當中沒有須要學習的參數。執行反向傳播時,反向傳播沒有參數適用於最大池化。只有這些設置過的超參數,多是手動設置的,也多是經過交叉驗證設置的。

除了這些,池化的內容就所有講完了。最大池化只是計算神經網絡某一層的靜態屬性,沒有什麼須要學習的,它只是一個靜態屬性。