AI產(chǎn)品:淺談CNN(卷積神經(jīng)網(wǎng)絡(luò))
文章對(duì)卷積神經(jīng)網(wǎng)絡(luò)CNN核心特點(diǎn)以及它的基本原理展開(kāi)簡(jiǎn)要的解讀,希望能夠加深你對(duì)卷積神經(jīng)網(wǎng)絡(luò)的解。
一、卷積神經(jīng)網(wǎng)絡(luò)概述
1.卷積神經(jīng)網(wǎng)絡(luò)要解決的問(wèn)題
傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)與DNN(深度神經(jīng)網(wǎng)絡(luò))不同層神經(jīng)元的連接方式是“全連接”,也就是這一次層的一個(gè)神經(jīng)元的輸入,會(huì)接受上一次每一個(gè)神經(jīng)元的輸出,這種方式即為“全連接神經(jīng)網(wǎng)絡(luò)”。
這樣的連接方式有一個(gè)的缺點(diǎn):因?yàn)闄?quán)值與偏置等參數(shù)量大,導(dǎo)致訓(xùn)練收斂十分緩慢。特別是對(duì)于圖像這樣的訓(xùn)練數(shù)據(jù),動(dòng)不動(dòng)就是數(shù)以百萬(wàn)的像素,理論上雖然可以收斂,但你可能得等上N年才有結(jié)果,而且它的泛化性也會(huì)變差。
2.卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn)
卷積神經(jīng)網(wǎng)絡(luò)CNN就是為了解決這個(gè)問(wèn)題而生,它的核心特點(diǎn)有三個(gè)
局部感受野
一張圖像,我們實(shí)際上并不需要讓每個(gè)神經(jīng)元都接受整個(gè)圖片的信息,而是讓不同區(qū)域的神經(jīng)元對(duì)應(yīng)一整張圖片的不同局部,最后只要再把局部信息整合到一起就可以了。這樣就相當(dāng)于在神經(jīng)元最初的輸入層實(shí)現(xiàn)了一次降維
這有點(diǎn)像我們的眼鏡,左右眼各負(fù)責(zé)看到一部分視野,最后只要通過(guò)神經(jīng)把視野整合到一起,我們看到的依舊是一個(gè)相對(duì)完整的視野
卷積層的權(quán)值共享
這可以說(shuō)是卷積神經(jīng)網(wǎng)絡(luò)的最最最重要也是它牛逼之處,剛剛我們說(shuō)到全連接神經(jīng)網(wǎng)絡(luò)最大的問(wèn)題就是權(quán)值參數(shù)太多,而卷積神經(jīng)網(wǎng)絡(luò)的卷積層,不同神經(jīng)元的權(quán)值是共享的,這使得整個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù)大大減小,提高了整個(gè)網(wǎng)絡(luò)的訓(xùn)練性能,具體的實(shí)現(xiàn)方式我們一會(huì)再說(shuō)
池化層(Pooling Layer)
簡(jiǎn)單理解可以看作是對(duì)圖像的一次“有損壓縮”,因?yàn)樵趯?shí)際的訓(xùn)練中,我們并不需要對(duì)圖像中的每一個(gè)細(xì)節(jié)都進(jìn)行特征提取和訓(xùn)練,所以池化的作用就是更進(jìn)一步的信息抽象和特征提取,當(dāng)然也會(huì)減小數(shù)據(jù)的處理量
二、卷積神經(jīng)網(wǎng)絡(luò)核心概念
我們先來(lái)來(lái)看看所謂的卷積到底是什么
1.卷積核
卷積核表達(dá)式: F(x)=wx+b
簡(jiǎn)單認(rèn)識(shí)一下卷積到底是怎么實(shí)現(xiàn)特征提取的。假設(shè)現(xiàn)在輸入一個(gè)圖片作為x(3×3像素),一個(gè)簡(jiǎn)單的卷積核w=【1,1,1,1,1,1,1,1,1】,b為0,那么這個(gè)圖像經(jīng)過(guò)一次卷積后,實(shí)現(xiàn)的效果如圖
這樣一個(gè)3×3的圖像,通過(guò)卷積后就被壓縮得到一個(gè)點(diǎn)“6”,我們就把這個(gè)點(diǎn)存儲(chǔ)在卷積層的空間里(即 Feature map)。
當(dāng)然在實(shí)際的訓(xùn)練中,卷積核的w與b也是被隨機(jī)賦值并通過(guò)迭代法學(xué)出來(lái)的。而且在卷積后往往還會(huì)跟上一個(gè)激勵(lì)函數(shù)如ReLU或Sigmoid。
2.步長(zhǎng)
剛剛我們所說(shuō)的是最為簡(jiǎn)化的圖像(3×3),而卷積的工作方式,我們理解為“掃描”,加入一個(gè)圖像是9×9像素,而卷積核理解為一個(gè)3×3的方框,那么一次卷積得到一個(gè)數(shù)字,而步長(zhǎng)即為卷積下次移動(dòng)掃描挪動(dòng)的步數(shù)。
假設(shè)stride=1,那么每次就只滑動(dòng)一個(gè)單位,它主要影響卷積對(duì)數(shù)據(jù)掃描的細(xì)密程度,步長(zhǎng)越大,當(dāng)然掃描的越粗糙,通常情況下Stride都會(huì)取“1”
3.卷積濾波器與卷積層
卷積濾波器通常由一個(gè)卷積核和激勵(lì)函數(shù)構(gòu)成,一個(gè)局部圖像經(jīng)過(guò)卷積濾波器提取特征后會(huì)形成一個(gè)Feature map,該平面上所有的神經(jīng)元權(quán)值共享
4.Pooling Layer(池化層)
池化層是在圖像經(jīng)過(guò)卷積處理后的又一次有效特征提取和模糊處理。它和“下采樣”實(shí)際上是一個(gè)意思。下面我們來(lái)看看所謂的“池化處理”或“下采樣過(guò)程”到底是怎么回事。
常見(jiàn)的方式有兩種,一種叫Max pooling(最大化),一種為Mean pooling(平均),它們都是對(duì)前面輸入的數(shù)據(jù)做一次處理,假設(shè)我們用的是2X2的Pooling Filter(池化濾波器)
最大值池化過(guò)程
對(duì)輸入的數(shù)據(jù)進(jìn)行一次取最大值處理
平均值池化過(guò)程
對(duì)輸入的數(shù)據(jù)進(jìn)行一次取平均值處理
池化(下采樣)的作用
這樣的池化處理,在處理圖像的時(shí)候是可以提取更為抽象的特征,減少數(shù)據(jù)處理量的同時(shí)保留有效信息。
當(dāng)然它還可以防止過(guò)擬合,想想過(guò)擬合的原因就是模型過(guò)多開(kāi)始學(xué)習(xí)數(shù)據(jù)中的細(xì)節(jié)導(dǎo)致其泛化性下降,而這樣的處理剛好可以去除掉不怎么重要的細(xì)節(jié),幫助模型更好地學(xué)習(xí)更為抽象的特征
三、參數(shù)減少和共享權(quán)值
下面我們來(lái)看看,CNN到底是以何種方式來(lái)完成權(quán)值共享的,要知道這可是它最大的賣點(diǎn)?。?/p>
1.全連接神經(jīng)網(wǎng)絡(luò)
沒(méi)有對(duì)比就沒(méi)有傷害,不妨先來(lái)看看全連接的神經(jīng)網(wǎng)絡(luò)處理圖像時(shí)候的一番景象!
這密密麻麻交錯(cuò)縱橫的連接線,還僅僅是連接到隱含層的一個(gè)神經(jīng)元,連接次數(shù)已經(jīng)紅字標(biāo)出,不要太多。
2.“局部野”神經(jīng)網(wǎng)絡(luò)效果圖
先聲明本身是沒(méi)有這個(gè)什么“局部野”神經(jīng)網(wǎng)絡(luò)的,只不過(guò)為了能更好地一步一步去理解我們先前說(shuō)的概念
發(fā)現(xiàn)了沒(méi),通過(guò)不同神經(jīng)元去接受局部圖像的信息,這樣它們明顯不會(huì)有那么多的權(quán)值參數(shù)了!但這還不夠
3.卷積層
如果我們?cè)谶@個(gè)基礎(chǔ)上,加上卷積濾波和激勵(lì)函數(shù)的處理,最后會(huì)得到一層Feature map,在這個(gè)層中神經(jīng)元之間的權(quán)值參數(shù)將會(huì)共享,完全一致哦
到這里你應(yīng)該已經(jīng)體會(huì)到卷積神經(jīng)網(wǎng)絡(luò)思想的核心所在:通過(guò)局部感受野、卷積層權(quán)值共享的方法,大大降低了網(wǎng)絡(luò)參數(shù)的數(shù)量,減小網(wǎng)絡(luò)的空間復(fù)雜程度。這就解決了我們最開(kāi)始引出的問(wèn)題,面對(duì)圖像這樣數(shù)以百萬(wàn)像素維度的數(shù)據(jù),全連接神經(jīng)網(wǎng)絡(luò)無(wú)法有效對(duì)其進(jìn)行處理,而卷積神經(jīng)網(wǎng)絡(luò)則剛好是對(duì)癥下藥!
當(dāng)然在整個(gè)神經(jīng)網(wǎng)絡(luò)的宏觀結(jié)構(gòu)上,不同局部對(duì)應(yīng)不同的卷積濾波器,以提取不同的特征。
?四、CNN網(wǎng)絡(luò)架構(gòu)及訓(xùn)練過(guò)程
1.LeNet-5CNN的網(wǎng)絡(luò)模型架構(gòu)
可以看出來(lái),這是一個(gè)識(shí)別字母的神經(jīng)網(wǎng)絡(luò)(大寫(xiě)的“A”有木有)
首先經(jīng)過(guò)一次卷積濾波處理,得到了C1(卷積層 Feature map),然后又經(jīng)過(guò)了一次下采樣(池化)處理得到了S2(下采樣層),之后又是一次卷積濾波得到C3卷積層,依次處理至途中的C5位全連接層,至此卷積的過(guò)程結(jié)束,被抽象的特征輸入至傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò),之后就又是熟悉的節(jié)奏了。
2.訓(xùn)練過(guò)程(有監(jiān)督學(xué)習(xí))
向前傳播階段
- 選取訓(xùn)練樣本(x,y),將x輸入網(wǎng)絡(luò)中
- 隨機(jī)初始化權(quán)值(一般情況下選取小數(shù)),信息從輸入層經(jīng)過(guò)一層一層的特征提取和轉(zhuǎn)換,最后到達(dá)輸出層,得到輸出結(jié)果
反向傳播階段
- 輸出結(jié)果與理想結(jié)果對(duì)比,計(jì)算全局性誤差(即我們之前說(shuō)的Loss)
- 得到的誤差反向傳遞給不同層的神經(jīng)元,按照我們之前所說(shuō)的“迭代法”調(diào)整權(quán)值和偏重,尋找全局性最優(yōu)的結(jié)果
?五、場(chǎng)景應(yīng)用
卷積神經(jīng)網(wǎng)絡(luò)目前最廣泛的應(yīng)用場(chǎng)景為圖像識(shí)別領(lǐng)域,其中一個(gè)原因就是我們最初提到的,權(quán)值共享使得網(wǎng)絡(luò)在處理圖像的時(shí)候大大減少了參數(shù)數(shù)量,使得網(wǎng)絡(luò)的訓(xùn)練速度更快。
當(dāng)然最重要的還不止于此,我們都知道圖像識(shí)別一個(gè)很大的問(wèn)題就是如果圖像中有一些損壞、缺失或變形的話,那么很可能干擾圖像的識(shí)別結(jié)果。
卷積神經(jīng)網(wǎng)絡(luò)的卷積層和池化層在圖像的本質(zhì)都是提取更為抽象的特征,簡(jiǎn)單理解就是“模糊化”壓縮處理,把一個(gè)圖像中不那么重要的細(xì)節(jié)去掉,找到最為重要的特征進(jìn)行學(xué)習(xí)。
那么圖像中小細(xì)節(jié)的變化,反應(yīng)在神經(jīng)網(wǎng)絡(luò)中也就是一些特征向量的變化,但這這個(gè)變化在卷積和池化處理后,對(duì)產(chǎn)生的結(jié)果影響幾乎是微乎其微的,換句話說(shuō)在CNN看來(lái),這兩張圖片幾乎就完全是“一張圖片”了
以上就是對(duì)卷積神經(jīng)網(wǎng)絡(luò)CNN核心特點(diǎn)以及它的基本原理,是不是并沒(méi)有想象中的那么難以理解呢?最后給大家一個(gè)小彩蛋,希望可以幫助你們梳理卷積神經(jīng)網(wǎng)絡(luò)的知識(shí)結(jié)構(gòu):
本文由 @free 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 Unsplash ,基于 CC0 協(xié)議
產(chǎn)品經(jīng)理居然要懂這么多技術(shù)知識(shí)???