一文了解卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ),建議收藏
今天給大家講一下卷積神經(jīng)網(wǎng)絡(luò),主要包括四個(gè)部分:卷積神經(jīng)網(wǎng)絡(luò)的歷史、全連接層、卷積層和池化層。
CNN的英文全稱是Convolutional Neural Network,雛形是LeCun在1998年發(fā)明的LeNet網(wǎng)絡(luò)結(jié)構(gòu)。
LeNet網(wǎng)絡(luò)架構(gòu)
那么到底什么是神經(jīng)網(wǎng)絡(luò)呢?應(yīng)該說只要帶有卷積層的就可以被叫做卷積神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史
1986年:Rumelhart和Hinton等人提出了反向傳播(Back Propagation)算法。
1998年:LeCun基于BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練了LeNet網(wǎng)絡(luò),標(biāo)志著CNN的真正面世。
2006年:Hinton在他們的Science Paper中首次提出了Deep Learning的概念。
2012年:其實(shí)在2006年Hinton提出深度神經(jīng)網(wǎng)絡(luò)之后,受到了很多的質(zhì)疑,但是在2012年Hinton的學(xué)生Alex Krizhevsky在寢室用GPU死磕了一個(gè)Deep Learning模型,一舉拿下了計(jì)算機(jī)視覺TOP領(lǐng)域ILSVRC 2012的冠軍,在百萬量級(jí)的ImageNet數(shù)據(jù)集合上,效果大幅度的超過了傳統(tǒng)的方法,準(zhǔn)確率從70%提升到80%。
全連接層
其實(shí)全連接層就是模仿大腦的神經(jīng)元結(jié)構(gòu),我們可以看到:
輸出值 = 輸入值x經(jīng)過加權(quán)w之后累加的結(jié)果再經(jīng)過激勵(lì)函數(shù)。形式化為:
那么我們將神經(jīng)元按列進(jìn)行排列,列與列之間進(jìn)行全連接,就得到了一個(gè)BP神經(jīng)網(wǎng)絡(luò)。
BP神經(jīng)網(wǎng)絡(luò)算法包括信號(hào)的前向傳播和誤差的反向傳播兩個(gè)過程。即計(jì)算誤差輸出時(shí)按從輸入到輸出的方向進(jìn)行,而調(diào)整權(quán)值和閾值則從輸出到輸入的方向進(jìn)行。
下面我們來看一個(gè)實(shí)例來了解一下BP神經(jīng)網(wǎng)絡(luò)。
實(shí)例:利用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行數(shù)字識(shí)別
我們拿到一張圖片,例如上邊第一張圖所示拿到的是0,這張圖是由若干像素組成,每個(gè)像素有RGB三個(gè)通道,然后經(jīng)過灰度化后變成第二張圖片,然后將灰度化后的圖片進(jìn)行二值化得到第三張圖片。
之后我們對(duì)圖片進(jìn)行概率處理,例如第一個(gè)框中白色塊/全部塊 = 0.2,經(jīng)過相應(yīng)的策略處理之后第一個(gè)數(shù)值為0.2。以此類推,可以得到上圖右邊的矩陣。
然后我們對(duì)這個(gè)矩陣進(jìn)行維度變換和處理,將其變?yōu)?*n的行向量,這樣處理之后的形式可以使得神經(jīng)網(wǎng)絡(luò)更好的輸入處理。
我們知道神經(jīng)網(wǎng)絡(luò)如何輸入了,那么最后應(yīng)該輸出什么才可以更好的辨別數(shù)字呢?One-Hot編碼!
也就是說,每個(gè)數(shù)字都對(duì)應(yīng)一個(gè)編碼,如果輸入1000000000,則判定為數(shù)字0,以此類推。
既然有了輸入,也有了輸出,我們就可以通過神經(jīng)網(wǎng)絡(luò)對(duì)其進(jìn)行訓(xùn)練了。
首先將輸入層的神經(jīng)元數(shù)設(shè)置為25個(gè)節(jié)點(diǎn),將輸出層設(shè)置為10個(gè)節(jié)點(diǎn),將上邊1*n的向量輸入到BP神經(jīng)網(wǎng)絡(luò)中,然后經(jīng)過隱藏層最后到輸出層onehot編碼,輸出層通過softmax激活函數(shù)可以得到每個(gè)數(shù)字出現(xiàn)的概率,即可識(shí)別數(shù)字。
卷積層
到底什么是卷積層?之前的文章中講過了,有興趣的可以直接查看。
漫畫:卷積神經(jīng)網(wǎng)絡(luò)中的卷積核到底是什么?
漫畫:卷積神經(jīng)網(wǎng)絡(luò)為什么適合處理圖片數(shù)據(jù)?
干貨 | 如何入手卷積神經(jīng)網(wǎng)絡(luò)
在卷積層的講解中,想問大家一個(gè)問題,卷積核如果越界了應(yīng)該如何處理?例如下面這樣:
假設(shè)用這么一個(gè)矩陣,我們使用3*3的滑動(dòng)窗口,步長(zhǎng)為2,則出現(xiàn)下面這種情況應(yīng)該如何處理?
我們可以對(duì)其進(jìn)行使用Padding對(duì)其進(jìn)行補(bǔ)0處理,如下所示:
在卷積操作過程中,矩陣經(jīng)過卷積操作之后大小由下面幾個(gè)因數(shù)決定:
- 輸入圖像大小W*W
- Filter大小F*F
- 步長(zhǎng)S
- padding的像素?cái)?shù)P
經(jīng)過卷積后的矩陣尺寸大小是有一個(gè)規(guī)律的,那么給大家一個(gè)通用的公式:
N=(W-F+2P)/S+1
池化層
為什么要存在池化層?因?yàn)楫?dāng)前的輸入數(shù)據(jù)太大,有很多冗余信息,那么我們就要想辦法對(duì)圖像矩陣進(jìn)行下采樣,對(duì)特征圖進(jìn)行稀疏處理,減少數(shù)據(jù)運(yùn)算量。下面通過MaxPooling下采樣來給大家看一下到底什么是池化層。
上圖中紅色部分的值為1 1 5 6,我們使用的是MaxPooling,所以取最大值,則右圖中紅色部分為max(1,1,5,6)=6,以此類推,即可得到下采樣結(jié)果。
類似于最大下采樣,同樣也有平均下采樣層,如下圖所示:
為了大家更好的理解和使用池化層,我總結(jié)了池化層的三個(gè)特點(diǎn):
- 沒有訓(xùn)練參數(shù)
- 只會(huì)改變特征矩陣的w和h,不改變channel
- 一般pool size和卷積核的stride相同
今天講的是卷積神經(jīng)網(wǎng)絡(luò)的整體架構(gòu)基礎(chǔ),包括神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史、全連接層、卷積層和池化層,謝謝大家閱讀~