卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)概念,主要是卷積層和池化層,并解釋填充、步幅、輸入通道和輸出通道的含義。
二維互相關(guān)運(yùn)算
二維互相關(guān)(cross-correlation)運(yùn)算的輸入是一個(gè)二維輸入數(shù)組和一個(gè)二維核(kernel)數(shù)組,輸出也是一個(gè)二維數(shù)組,其中核數(shù)組通常稱為卷積核或過(guò)濾器(filter)。卷積核的尺寸通常小于輸入數(shù)組,卷積核在輸入數(shù)組上滑動(dòng),在每個(gè)位置上,卷積核與該位置處的輸入子數(shù)組按元素相乘并求和,得到輸出數(shù)組中相應(yīng)位置的元素。圖1展示了一個(gè)互相關(guān)運(yùn)算的例子,陰影部分分別是輸入的第一個(gè)計(jì)算區(qū)域、核數(shù)組以及對(duì)應(yīng)的輸出。
二維卷積層
二維卷積層將輸入和卷積核做互相關(guān)運(yùn)算,并加上一個(gè)標(biāo)量偏置來(lái)得到輸出。卷積層的模型參數(shù)包括卷積核和標(biāo)量偏置。
互相關(guān)運(yùn)算和卷積運(yùn)算
卷積層得名于卷積運(yùn)算,但卷積層中用到的并非卷積運(yùn)算而是互相關(guān)運(yùn)算。我們將核數(shù)組上下翻轉(zhuǎn)、左右翻轉(zhuǎn),再與輸入數(shù)組做互相關(guān)運(yùn)算,這一過(guò)程就是卷積運(yùn)算。由于卷積層的核數(shù)組是可學(xué)習(xí)的,所以使用互相關(guān)運(yùn)算與使用卷積運(yùn)算并無(wú)本質(zhì)區(qū)別。
特征圖與感受野
二維卷積層輸出的二維數(shù)組可以看作是輸入在空間維度(寬和高)上某一級(jí)的表征,也叫特征圖(feature map)。影響元素 x 的前向計(jì)算的所有可能輸入?yún)^(qū)域(可能大于輸入的實(shí)際尺寸)叫做 x 的感受野(receptive field)。
以圖1為例,輸入中陰影部分的四個(gè)元素是輸出中陰影部分元素的感受野。我們將圖中形狀為 2×2 的輸出記為 Y ,將 Y 與另一個(gè)形狀為 2×2 的核數(shù)組做互相關(guān)運(yùn)算,輸出單個(gè)元素 z 。那么, z 在 Y 上的感受野包括 Y 的全部四個(gè)元素,在輸入上的感受野包括其中全部9個(gè)元素??梢?jiàn),我們可以通過(guò)更深的卷積神經(jīng)網(wǎng)絡(luò)使特征圖中單個(gè)元素的感受野變得更加廣闊,從而捕捉輸入上更大尺寸的特征。
填充
填充(padding)是指在輸入高和寬的兩側(cè)填充元素(通常是0元素),圖2里我們?cè)谠斎敫吆蛯挼膬蓚?cè)分別添加了值為0的元素。
如果原輸入的高和寬是 nh 和 nw ,卷積核的高和寬是 kh 和 kw ,在高的兩側(cè)一共填充 ph 行,在寬的兩側(cè)一共填充 pw 列,則輸出形狀為:
(nh+ph?kh+1)×(nw+pw?kw+1)
我們?cè)诰矸e神經(jīng)網(wǎng)絡(luò)中使用奇數(shù)高寬的核,比如 3×3 , 5×5 的卷積核,對(duì)于高度(或?qū)挾龋榇笮?2k+1 的核,令步幅為1,在高(或?qū)挘﹥蓚?cè)選擇大小為 k 的填充,便可保持輸入與輸出尺寸相同。
步幅
如果原輸入的高和寬是 nh 和 nw ,卷積核的高和寬是 kh 和 kw ,在高的兩側(cè)一共填充 ph 行,在寬的兩側(cè)一共填充 pw 列,則輸出形狀為:
(nh+ph?kh+1)×(nw+pw?kw+1)
我們?cè)诰矸e神經(jīng)網(wǎng)絡(luò)中使用奇數(shù)高寬的核,比如 3×3 , 5×5 的卷積核,對(duì)于高度(或?qū)挾龋榇笮?2k+1 的核,令步幅為1,在高(或?qū)挘﹥蓚?cè)選擇大小為 k 的填充,便可保持輸入與輸出尺寸相同。
一般來(lái)說(shuō),當(dāng)高上步幅為 sh ,寬上步幅為 sw 時(shí),輸出形狀為:
?(nh+ph?kh+sh)/sh?×?(nw+pw?kw+sw)/sw?
如果 ph=kh?1 , pw=kw?1 ,那么輸出形狀將簡(jiǎn)化為 ?(nh+sh?1)/sh?×?(nw+sw?1)/sw? 。更進(jìn)一步,如果輸入的高和寬能分別被高和寬上的步幅整除,那么輸出形狀將是 (nh/sh)×(nw/sw) 。
當(dāng) ph=pw=p 時(shí),我們稱填充為 p ;當(dāng) sh=sw=s 時(shí),我們稱步幅為 s 。
多輸入通道和多輸出通道
之前的輸入和輸出都是二維數(shù)組,但真實(shí)數(shù)據(jù)的維度經(jīng)常更高。例如,彩色圖像在高和寬2個(gè)維度外還有RGB(紅、綠、藍(lán))3個(gè)顏色通道。假設(shè)彩色圖像的高和寬分別是 h 和 w (像素),那么它可以表示為一個(gè) 3×h×w 的多維數(shù)組,我們將大小為3的這一維稱為通道(channel)維。
1×1卷積層
1×1 卷積核可在不改變高寬的情況下,調(diào)整通道數(shù)。 1×1 卷積核不識(shí)別高和寬維度上相鄰元素構(gòu)成的模式,其主要計(jì)算發(fā)生在通道維上。假設(shè)我們將通道維當(dāng)作特征維,將高和寬維度上的元素當(dāng)成數(shù)據(jù)樣本,那么 1×1 卷積層的作用與全連接層等價(jià)。
卷積層與全連接層的對(duì)比
二維卷積層經(jīng)常用于處理圖像,與此前的全連接層相比,它主要有兩個(gè)優(yōu)勢(shì):
一是全連接層把圖像展平成一個(gè)向量,在輸入圖像上相鄰的元素可能因?yàn)檎蛊讲僮鞑辉傧噜?,網(wǎng)絡(luò)難以捕捉局部信息。而卷積層的設(shè)計(jì),天然地具有提取局部信息的能力。
二是卷積層的參數(shù)量更少。不考慮偏置的情況下,一個(gè)形狀為 (ci,co,h,w) 的卷積核的參數(shù)量是 ci×co×h×w ,與輸入圖像的寬高無(wú)關(guān)。假如一個(gè)卷積層的輸入和輸出形狀分別是 (c1,h1,w1) 和 (c2,h2,w2) ,如果要用全連接層進(jìn)行連接,參數(shù)數(shù)量就是 c1×c2×h1×w1×h2×w2 。使用卷積層可以以較少的參數(shù)數(shù)量來(lái)處理更大的圖像。
卷積層的簡(jiǎn)潔實(shí)現(xiàn)
二維池化層
池化層主要用于緩解卷積層對(duì)位置的過(guò)度敏感性。同卷積層一樣,池化層每次對(duì)輸入數(shù)據(jù)的一個(gè)固定形狀窗口(又稱池化窗口)中的元素計(jì)算輸出,池化層直接計(jì)算池化窗口內(nèi)元素的最大值或者平均值,該運(yùn)算也分別叫做最大池化或平均池化。圖6展示了池化窗口形狀為 2×2 的最大池化。
池化層的簡(jiǎn)潔實(shí)現(xiàn)
leNet
1.lenet 模型介紹
2.lenet 網(wǎng)絡(luò)搭建
3.運(yùn)用lenet進(jìn)行圖像識(shí)別-fashion-mnist數(shù)據(jù)集
卷積神經(jīng)網(wǎng)絡(luò)
使用全連接層的局限性:
圖像在同一列鄰近的像素在這個(gè)向量中可能相距較遠(yuǎn)。它們構(gòu)成的模式可能難以被模型識(shí)別。
對(duì)于大尺寸的輸入圖像,使用全連接層容易導(dǎo)致模型過(guò)大。
使用卷積層的優(yōu)勢(shì):
卷積層保留輸入形狀。
卷積層通過(guò)滑動(dòng)窗口將同一卷積核與不同位置的輸入重復(fù)計(jì)算,從而避免參數(shù)尺寸過(guò)大。
Let網(wǎng)絡(luò)
LeNet分為卷積層塊和全連接層塊兩個(gè)部分。下面我們分別介紹這兩個(gè)模塊。
卷積層塊里的基本單位是卷積層后接平均池化層:卷積層用來(lái)識(shí)別圖像里的空間模式,如線條和物體局部,之后的平均池化層則用來(lái)降低卷積層對(duì)位置的敏感性。
卷積層塊由兩個(gè)這樣的基本單位重復(fù)堆疊構(gòu)成。在卷積層塊中,每個(gè)卷積層都使用 5×5 的窗口,并在輸出上使用sigmoid激活函數(shù)。第一個(gè)卷積層輸出通道數(shù)為6,第二個(gè)卷積層輸出通道數(shù)則增加到16。
全連接層塊含3個(gè)全連接層。它們的輸出個(gè)數(shù)分別是120、84和10,其中10為輸出的類別個(gè)數(shù)。
下面我們通過(guò)Sequential類來(lái)實(shí)現(xiàn)LeNet模型。
可以看到,在卷積層塊中輸入的高和寬在逐層減小。卷積層由于使用高和寬均為5的卷積核,從而將高和寬分別減小4,而池化層則將高和寬減半,但通道數(shù)則從1增加到16。全連接層則逐層減少輸出個(gè)數(shù),直到變成圖像的類別數(shù)10。
獲取和訓(xùn)練數(shù)據(jù)集
總結(jié)
卷積神經(jīng)網(wǎng)絡(luò)就是含卷積層的網(wǎng)絡(luò)。 LeNet交替使用卷積層和最大池化層后接全連接層來(lái)進(jìn)行圖像分類。
卷積神經(jīng)網(wǎng)絡(luò)進(jìn)階
AlexNet深度卷積神經(jīng)網(wǎng)絡(luò)
LeNet: 在大的真實(shí)數(shù)據(jù)集上的表現(xiàn)并不盡如?意。
1.神經(jīng)網(wǎng)絡(luò)計(jì)算復(fù)雜。
2.還沒(méi)有?量深?研究參數(shù)初始化和?凸優(yōu)化算法等諸多領(lǐng)域。
機(jī)器學(xué)習(xí)的特征提取:手工定義的特征提取函數(shù)
神經(jīng)網(wǎng)絡(luò)的特征提取:通過(guò)學(xué)習(xí)得到數(shù)據(jù)的多級(jí)表征,并逐級(jí)表?越來(lái)越抽象的概念或模式。
神經(jīng)網(wǎng)絡(luò)發(fā)展的限制:數(shù)據(jù)、硬件
Alexnet
首次證明了學(xué)習(xí)到的特征可以超越??設(shè)計(jì)的特征,從而?舉打破計(jì)算機(jī)視覺(jué)研究的前狀。
特征:
8層變換,其中有5層卷積和2層全連接隱藏層,以及1個(gè)全連接輸出層。
將sigmoid激活函數(shù)改成了更加簡(jiǎn)單的ReLU激活函數(shù)。
用Dropout來(lái)控制全連接層的模型復(fù)雜度。
引入數(shù)據(jù)增強(qiáng),如翻轉(zhuǎn)、裁剪和顏色變化,從而進(jìn)一步擴(kuò)大數(shù)據(jù)集來(lái)緩解過(guò)擬合。
VGG使用重復(fù)單元的卷積神經(jīng)網(wǎng)絡(luò)
VGG:通過(guò)重復(fù)使?簡(jiǎn)單的基礎(chǔ)塊來(lái)構(gòu)建深度模型。
Block:數(shù)個(gè)相同的填充為1、窗口形狀為 3×3 的卷積層,接上一個(gè)步幅為2、窗口形狀為 2×2 的最大池化層。
卷積層保持輸入的高和寬不變,而池化層則對(duì)其減半。
NiN網(wǎng)絡(luò)中的網(wǎng)絡(luò)
LeNet、AlexNet和VGG:先以由卷積層構(gòu)成的模塊充分抽取 空間特征,再以由全連接層構(gòu)成的模塊來(lái)輸出分類結(jié)果。
NiN:串聯(lián)多個(gè)由卷積層和“全連接”層構(gòu)成的小?絡(luò)來(lái)構(gòu)建?個(gè)深層?絡(luò)。
?了輸出通道數(shù)等于標(biāo)簽類別數(shù)的NiN塊,然后使?全局平均池化層對(duì)每個(gè)通道中所有元素求平均并直接?于分類。
1×1卷積核作用
1.放縮通道數(shù):通過(guò)控制卷積核的數(shù)量達(dá)到通道數(shù)的放縮。
2.增加非線性。1×1卷積核的卷積過(guò)程相當(dāng)于全連接層的計(jì)算過(guò)程,并且還加入了非線性激活函數(shù),從而可以增加網(wǎng)絡(luò)的非線性。
3.計(jì)算參數(shù)少
NiN重復(fù)使?由卷積層和代替全連接層的1×1卷積層構(gòu)成的NiN塊來(lái)構(gòu)建深層?絡(luò)。
NiN去除了容易造成過(guò)擬合的全連接輸出層,而是將其替換成輸出通道數(shù)等于標(biāo)簽類別數(shù) 的NiN塊和全局平均池化層。
NiN的以上設(shè)計(jì)思想影響了后??系列卷積神經(jīng)?絡(luò)的設(shè)計(jì)。
GoogLeNet
1.由Inception基礎(chǔ)塊組成。
2.Inception塊相當(dāng)于?個(gè)有4條線路的??絡(luò)。它通過(guò)不同窗口形狀的卷積層和最?池化層來(lái)并?抽取信息,并使?1×1卷積層減少通道數(shù)從而降低模型復(fù)雜度。
3.可以?定義的超參數(shù)是每個(gè)層的輸出通道數(shù),我們以此來(lái)控制模型復(fù)雜度。