【關(guān)于 CNN】那些你不知道的事(上)
貢獻(xiàn)者:天驕,小豬呼嚕,沐風(fēng),楊夕,芙蕖,李玲
NLP論文學(xué)習(xí)筆記:https://github.com/km1994/nlp_paper_study
個(gè)人介紹:大佬們好,我叫楊夕,該項(xiàng)目主要是本人在研讀頂會(huì)論文和復(fù)現(xiàn)經(jīng)典論文過程中,所見、所思、所想、所聞,可能存在一些理解錯(cuò)誤,希望大佬們多多指正。
NLP 百面百搭 地址:https://github.com/km1994/NLP-Interview-Notes
推薦系統(tǒng) 百面百搭 地址:https://github.com/km1994/RES-Interview-Notes
關(guān)注公眾號(hào) 【關(guān)于NLP那些你不知道的事】 加入 【NLP && 推薦學(xué)習(xí)群】一起學(xué)習(xí)!!!

一、動(dòng)機(jī)篇
全連接網(wǎng)絡(luò):任意一對(duì)輸入與輸出神經(jīng)元間都存在連接,現(xiàn)成稠密結(jié)構(gòu)
局部特征存在相關(guān)性
二、CNN 卷積層篇
2.1 卷積層的本質(zhì)是什么?
稀疏交互
動(dòng)機(jī):全連接網(wǎng)絡(luò),任意一對(duì)輸入與輸出神經(jīng)元間都存在連接,現(xiàn)成稠密結(jié)構(gòu)
思路:卷積核尺度遠(yuǎn)小于輸入維度,每個(gè)輸出神經(jīng)元僅與前一層特定局部區(qū)域內(nèi)的神經(jīng)元存在連接
優(yōu)點(diǎn):全連接層的 參數(shù) 為 mn;卷積層為 kn (m為輸入,n為輸出,k 為 卷積維度)
參數(shù)共享
NN:計(jì)算每層輸出時(shí),權(quán)值參數(shù)矩陣中每個(gè)元素只作用于每個(gè)輸入元素一次
CNN:卷積核中每個(gè)元素將作用于每個(gè)局部輸入的特定位置上
思路:在同一模型的不同模塊中使用相同參數(shù),為卷積運(yùn)算的固有屬性
區(qū)別
物理意義:使卷積層具有平移不變性 (滿足 f(g(x)) = g(f(x)) 時(shí),稱 f(x) 關(guān)于g 具有等變性)
2.2 CNN 卷積層與全連接層的聯(lián)系?
卷積核中的權(quán)值每次滑動(dòng)計(jì)算時(shí)只是局部連接,且在卷積列中的神經(jīng)元共享參數(shù)——計(jì)算局部信息,而全連接層神經(jīng)元的權(quán)值與所有輸入相連——計(jì)算全局信息。
兩者都是采用的矩陣點(diǎn)積運(yùn)算,具有相似的計(jì)算形式,能夠?qū)崿F(xiàn)互相轉(zhuǎn)化。
卷積——>全連接:?權(quán)重矩陣參數(shù)增大,權(quán)重補(bǔ)0,由于參數(shù)共享性質(zhì),在其中大部分塊中,存在大量相等參數(shù)。
全連接——>全卷積:?將卷積核的尺寸設(shè)置為和輸入數(shù)據(jù)體的尺寸一致(NxWxHxC)。除第一層全連接外,其他通道數(shù)都為1,N表示本層神經(jīng)元的個(gè)數(shù),為一個(gè)提前設(shè)定的超參數(shù),結(jié)果與初始的那個(gè)全連接層一致。
一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò)模型通常由若干卷積層疊加若干全連接層組成,中間也包含各種非線性操作以及池化操作。卷積層的作用是從輸入數(shù)據(jù)中采集關(guān)鍵數(shù)據(jù)內(nèi)容。全連接層在深度卷積神經(jīng)網(wǎng)絡(luò)中的作用是將前面經(jīng)過多次卷積后高度抽象的特征進(jìn)行整合。最后一層作歸一化,然后輸出概率。卷積層提供了一個(gè)有意義、低維度且?guī)缀醪蛔兊奶卣骺臻g,然后全連接層在這個(gè)空間里學(xué)習(xí)一個(gè)非線性的方程。通俗的說,卷積層是特征提取器,全連接層執(zhí)行分類操作。
全連接層可以視作一種特殊的卷積。考慮下面兩種情況:
(1) 特征圖和全連接層相連,AlexNet經(jīng)過五次池化后得到7*7*512的特征圖,下一層全連接連向4096個(gè)神經(jīng)元,這個(gè)過程可以看作有4096個(gè)7*7*512的卷積核和7*7*512的特征圖進(jìn)行卷積操作,最終得到1*1*4096的特征圖,等價(jià)于全連接得到4096個(gè)神經(jīng)元。
(2) 全連接層和全連接層相連,AlexNet的再下一層依然是4096個(gè)神經(jīng)元,即4096個(gè)神經(jīng)元和4096個(gè)神經(jīng)元全連接,由(1)得到了1*1*4096的特征圖,本次全連接過程可以看作存在4096個(gè)1*1*4096的卷積核,依次和1*1*4096的特征圖進(jìn)行卷積操作,等價(jià)于全連接。
2.3 channel的含義是什么?
在卷積神經(jīng)網(wǎng)絡(luò)中,channel的含義是每個(gè)卷積層中卷積核的數(shù)量。卷積層的卷積個(gè)數(shù)就等于卷積層輸出的out_channels。這個(gè)值也與下一層卷積的in_channels相同。下面舉例說明。
如下圖,假設(shè)現(xiàn)有一個(gè)為 6×6×3 的圖片樣本,使用 3×3×3 的卷積核(filter)進(jìn)行卷積操作。此時(shí)輸入圖片的?channels?為 3 ,而卷積核中的?in_channels?與 需要進(jìn)行卷積操作的數(shù)據(jù)的?channels?一致(這里就是圖片樣本,為3)。

接下來,進(jìn)行卷積操作,卷積核中的27個(gè)數(shù)字與分別與樣本對(duì)應(yīng)相乘后,再進(jìn)行求和,得到第一個(gè)結(jié)果。依次進(jìn)行,最終得到 4×4的結(jié)果。

上面步驟完成后,由于只有一個(gè)卷積核,所以最終得到的結(jié)果為 4×4×1,?out_channels?為 1 。
在實(shí)際應(yīng)用中,都會(huì)使用多個(gè)卷積核。這里如果再加一個(gè)卷積核,就會(huì)得到 4×4×2 的結(jié)果。

總結(jié)一下,?channels?分為三種:
最初輸入的圖片樣本的?
channels?,取決于圖片類型,比如RGB;卷積操作完成后輸出的?
out_channels?,取決于卷積核的數(shù)量。此時(shí)的?out_channels?也會(huì)作為下一次卷積時(shí)的卷積核的?in_channels;卷積核中的?
in_channels?,就是上一次卷積的?out_channels?,如果是第一次做卷積,就是樣本圖片的?channels?。
三、CNN 池化層篇
3.1 池化層針對(duì)區(qū)域是什么?
池化層針對(duì)區(qū)域是非重疊區(qū)域。
3.2 池化層的種類有哪些?
均值池化
思路:對(duì)領(lǐng)域內(nèi)特征值取平均
優(yōu)點(diǎn):抑制由領(lǐng)域大小受限造成的估計(jì)值方差增大現(xiàn)象
特點(diǎn):對(duì)背景的保留效果好
最大值池化
思路:取領(lǐng)域內(nèi)最大值
優(yōu)點(diǎn):抑制網(wǎng)絡(luò)參數(shù)誤差造成估計(jì)均值偏移問題
特點(diǎn):更好提取紋理信息
3.3 池化層的作用是什么?
除降低參數(shù)量外,能夠保持對(duì)平移、伸縮、旋轉(zhuǎn)操作的不變性
3.4 池化層 反向傳播 是什么樣的?
動(dòng)機(jī):由于 Pooling 操作容易改變 feature map 的 尺寸大小,使得 Pooling 層不可導(dǎo);
舉例說明:假定 22 的 池化,會(huì)生成 2222 = 16 個(gè)梯度,即梯度無法傳遞到對(duì)應(yīng)的位置;
方法:將一個(gè)像素的loss (梯度) 傳遞給4個(gè)像素,且需要保證傳遞的 loss (梯度)總和不變。
3.5 mean pooling 池化層 反向傳播 是什么樣的?
mean pooling 前向傳播介紹:將 patch 中的值求平均來做 pooling;
mean pooling 反向傳播介紹:將值的梯度均等分為 n*n 份 分配給上一層,以保證 池化 前后 梯度之和保存不變;

3.6 max pooling 池化層 反向傳播 是什么樣的?
max pooling 前向傳播介紹:將 patch 中的值取 max 來做 pooling 結(jié)果 傳遞給下一層;
max pooling 反向傳播介紹:把梯度直接傳給前一層 值最大的一個(gè)像素,而其他像素不接受梯度,也就是為0;

待續(xù)!!!
參考
理解為什么要將全連接層轉(zhuǎn)化為卷積層
What do the fully connected layers do in CNNs?
CNN全連接層和卷積層的轉(zhuǎn)化
【CNN】理解卷積神經(jīng)網(wǎng)絡(luò)中的通道 channel
萬字長(zhǎng)文概述NLP中的深度學(xué)習(xí)技術(shù)
