本文記錄的是台灣大學李宏毅老師對CNN卷積神經網絡的講解,圖解非常易懂。涉及到的知識點:
- 卷積神經網絡如何運用到圖片分類問題
- 感受野 Receptive Field
- 步長Stride
- 填充padding
- 參數共享share parameter
- 最大池化MaxPooling
- CNN全過程
僅個人理解學習
引言
CNN卷積神經網絡最初主要是用於計算機視覺和圖像處理中,比如圖像分類:
最終的分類數絕對維度:
在模型中交叉熵的使用:最終通過概率分布求得每個類的概率值,最大值所在類作為最終的輸出。
圖片組成
圖片一般是有RGB組成的,通常是3維:(height, width,channels)。
在輸入卷積神經網絡之前需要將3維的向量拉直,變成一維向量(flatten操作):
拉直之後餵入全連接層:
CNN概念-感受野
什麼是感受野
卷積神經網絡CNN中存在一個概念:感受野Receptive Field。
感受野:用來表示網絡內部的不同位置的神經元對原始圖像的感受範圍的大小。
上圖解釋:上面右邊的一個神經元關注自己的範圍(左邊紅色框)
感受野作用
單個神經元將自己感受野內的內容拉直成3*3*3的27維向量
然後將27維的向量作為輸入和權重W做內積,並加上偏置bias;這個隱藏層的結果作為下個隱藏層的輸入。
也就是說,每個神經元只考慮值得感受野
感受野如何確定?
- 不同的感受也允許有重疊部分;
- 多個神經元Neuron共用同一個感受野;
感受野設置
下面是一種經典的設置方式:查看全部通道channels
高和寬合起來叫做kernel_size,常見的設置是3*3
通常一個感受也不是只有一個神經元關注,通常是多個。比如常見的64個或者128個:
CNN概念-步長stride
上面介紹的單個感受野,不同的感受野之間具有什麼關係?將上面的紅色部分向右移動stride個單位。
下面的圖形中步長是2,移動2個單位。常見值是1或者2。
在移動的過程中發現不同的感受野之間有重疊部分(交集)。
CNN概念-填充padding
在感受野不斷移動的過程中,可能出現超出邊界的現象,如何處理?
使用Padding填充方法。常見的填充方法:
- 填充現有數據的均值
- 全部填充0
- 填充邊界的相同值
除了水平移動,還可以垂直移動:
這樣感受也能夠掃描一張圖片的全部區域。
CNN概念-參數共享
在不同的圖片中,鳥嘴(某個特徵)可能出現在不同的位置:
即便不同位置,但肯定是有某個神經元的感受也能夠掃描到。
問題來了:相同的特徵在不同的位置,需要在不同的位置使用不同的神經元嗎?
李宏毅老師舉例子:台灣大學教務處為什麼會推大型的課程?假設每個院系都需要編程(機器學習)相關的課程,那麼需要在每個院系都開設這門課嗎?
回答:不需要。只需要開一門大課,讓不同院系的學生都可以修課。避免重複
類比圖像處理,在不同感受野的神經元上可以實現共享參數:
什麼是共享參數?就是兩個神經元(感受野區域不同)的參數是完全相同的:
注意右側兩個神經元不同輸入下的顏色
雖然兩個Neuron的weight相同,但是輸入不同,也就是說最終輸出是不同的:
CNN特點
- Fully Connected Layer:全連接層;決定看整張圖片還是部分
- Receptive Field:感受野,不需要全部圖片,通過部分區域能夠識別分類
- Parameter Sharing:參數共享;不同的Neuron之間共享相同的參數
- 當感受野 + 參數共享 之後就構成了卷積層Convolutional Layer
CNN概念-Filter過濾器
在卷積中存在不同的Filters,大小通常是3*3*chanels的
- 黑白:channels=1
- 彩色:channels=3
問題:每個Filter如何去圖像中抓取某個特徵pattern?
以Filter1為例:
依次向右和向下移動,得到不同的值:
在圖片的不同位置上什麼值最大?可以通過過濾器來判斷:
CNN概念-特徵圖Feature Map
使用Filter2的結果:
通過Filter和原圖的內積得到的結果組成了特徵圖 Feature Map
這個Feature Map就可以看成是一張新的圖片,具有64個channels(假設有64個Filters)
Convolution由來
對比兩種不同方式下的顏色:在單個感受野生成的列向量對應的權重和Fliters中的數值是一一對應。
不同的神經元能夠實現參數共享share parameters,從而作用域不同的感受野區域。
參數共享的過程其實就是一個Filter不斷地掃過整張圖片,這個過程也就是Convolution。
筆記:
- 不同的神經元Neuron能共享參數
- 共享的參數其實就是Filter
- Filter不斷掃描圖片的過程就是卷積
CNN概念-池化Pooling
在圖片的處理,對圖片的欠採樣(縮放)不改變圖片的本質:
池化有多種方式,最常用的Max Pooling:
1、 假設我們通過Filter先生成了一個Feature Map特徵圖(可以看做一個新圖片)
2、將特徵圖進行分組
下面是以2*2為例:
3、MaxPooling選擇最大的值
所以一般在做完卷積之後會再做pooling的過程,將圖片變小;二者一般是交替repeat使用:
池化的缺陷:池化的作用是將圖片變小,做了subsampling之後減小運算量。當圖片本身就細微的時候,池化削弱了原信息,導致網絡可能表現得更差。
池化的缺陷:池化的作用是將圖片變小,做了subsampling之後減小運算量。當圖片本身就細微的時候,池化削弱了原信息,導致網絡可能表現的更差。
CNN全過程
- 對圖片不斷地進行卷積和池化
- 再經過Flatten:將矩陣拉直成一維向量
- 再將向量餵入全連接層FCL
- 最後加入一個softmax層,得到概率分布的結果,最後確定類別。
來自:李宏毅老師-卷積神經網絡