?姓名:樊松松
?學(xué)號:17021211234
?轉(zhuǎn)載自https://www.leiphone.com/news/201807/RQ4sBWYqLkGV4ZAW.html,有刪節(jié)
【嵌牛導(dǎo)讀】:在本文中影晓,我們將逐步分解卷積操作的原理,將他與標(biāo)準(zhǔn)的全連接網(wǎng)絡(luò)聯(lián)系起來婚肆,并且探索如何構(gòu)建一個強(qiáng)大的視覺層次默怨,使其成為高性能的圖像特征提取器骗奖。
【嵌牛鼻子】:?全連接網(wǎng)絡(luò)??圖像特征提取器
【嵌牛提問】:卷積操作是如何與全連接網(wǎng)絡(luò)聯(lián)系起來的蓝晒?如何通過卷積操作構(gòu)建一個圖像特征提取器少态?
【嵌牛正文】:
近幾年隨著功能強(qiáng)大的深度學(xué)習(xí)框架的出現(xiàn)惰聂,在深度學(xué)習(xí)模型中搭建卷積神經(jīng)網(wǎng)絡(luò)變得十分容易凿滤,甚至只需要一行代碼就可以完成。
但是理解卷積庶近,特別是對第一次接觸卷積神經(jīng)網(wǎng)絡(luò)的人來說,經(jīng)常會對諸如卷積核眷蚓、濾波器鼻种、通道等概念和他們的堆疊架構(gòu)感到困惑。然而卷積是強(qiáng)大且高度可擴(kuò)展的概念沙热,在本文中叉钥,我們將逐步分解卷積操作的原理罢缸,將他與標(biāo)準(zhǔn)的全連接網(wǎng)絡(luò)聯(lián)系起來,并且探索如何構(gòu)建一個強(qiáng)大的視覺層次投队,使其成為高性能的圖像特征提取器枫疆。
2 維卷積:操作
2 維卷積是一個相當(dāng)簡單的操作:從卷積核開始,這是一個小的權(quán)值矩陣敷鸦。這個卷積核在 2 維輸入數(shù)據(jù)上「滑動」息楔,對當(dāng)前輸入的部分元素進(jìn)行矩陣乘法,然后將結(jié)果匯為單個輸出像素扒披。
一個標(biāo)準(zhǔn)的卷積 [1]
卷積核重復(fù)這個過程知道遍歷了整張圖片值依,將一個二維矩陣轉(zhuǎn)換為另一個二維矩陣。輸出特征實質(zhì)上是在輸入數(shù)據(jù)相同位置上的加權(quán)和(權(quán)值是卷積核本身的值)
輸入數(shù)據(jù)是否落入這個「大致相似區(qū)域」碟案,直接決定了數(shù)據(jù)經(jīng)過卷積核后的輸出愿险。這意味著卷積核的尺寸直接決定了生成新的特征時匯合了多少(或幾個)輸入特征。
這與全連接層完全相反价说。在上面的例子中辆亏,我們的輸入特征為 5*5=25,輸出數(shù)據(jù)為 3*3=9. 如果我們使用標(biāo)準(zhǔn)的全連接層鳖目,就會產(chǎn)生一個 25*9=225 個參數(shù)的權(quán)值矩陣扮叨,每個輸出都是所有輸入數(shù)據(jù)的加權(quán)求和。卷積操作允許我們只用 9 個參數(shù)來實現(xiàn)這個變換疑苔,每個輸出特性不用「查看」每個輸入特征甫匹,而是只是「查看」來自大致相同位置的輸入特征。請注意這一點惦费,因為這對我們后面的討論至關(guān)重要兵迅。
一些常用的技術(shù)
在我們繼續(xù)介紹卷積神經(jīng)網(wǎng)絡(luò)之前,介紹兩種卷積層中常用的技術(shù):Padding 和 Strides
Padding:如果你看到上面的動畫薪贫,那么會注意到在卷積核滑動的過程中恍箭,邊緣基本會被「裁剪」掉,將 5*5 特征矩陣轉(zhuǎn)換為 3*3 的特征矩陣瞧省。邊緣上的像素永遠(yuǎn)不在卷積核的中心扯夭,因為內(nèi)核沒有任何東西可以擴(kuò)展到邊緣之外。這并不理想鞍匾,因為我們經(jīng)常希望輸出的尺寸等于輸入交洗。
一些 padding 操作 [1]
Padding 做了一些非常機(jī)智的辦法來解決這個問題:用額外的「假」像素(通常值為 0,因此經(jīng)常使用的術(shù)語「零填充」)填充邊緣橡淑。這樣构拳,在滑動時的卷積核可以允許原始邊緣像素位于其中心,同時延伸到邊緣之外的假像素,從而產(chǎn)生與輸入相同大小的輸出置森。
Striding:運(yùn)行卷積層時斗埂,我們通常希望輸出的尺寸是比輸入更低。這在卷積神經(jīng)網(wǎng)絡(luò)中是常見的凫海,在增加信道數(shù)量的同時空間尺寸減小呛凶。其中一種方法是使用池化層(例如,取每 2×2 網(wǎng)格的平均值/最大值將空間維度減半)行贪。還有一種方法是使用 Striding:
一個步長為 2 的卷積操作 [1]
Stride 的想法是改變卷積核的移動步長跳過一些像素漾稀。Stride 是 1 表示卷積核滑過每一個相距是 1 的像素,是最基本的單步滑動瓮顽,作為標(biāo)準(zhǔn)卷積模式县好。Stride 是 2 表示卷積核的移動步長是 2,跳過相鄰像素暖混,圖像縮小為原來的 1/2缕贡。Stride 是 3 表示卷積核的移動步長是 3,跳過 2 個相鄰像素拣播,圖像縮小為原來的 1/3
越來越多的新網(wǎng)絡(luò)結(jié)構(gòu)晾咪,比如 ResNet,已經(jīng)完全拋棄了池化層贮配。當(dāng)需要對圖像進(jìn)行縮小時會采用 Stride 方法谍倦。
多通道版本
當(dāng)然,上圖僅涉及具有單個輸入通道的圖像泪勒。實際上昼蛀,大多數(shù)輸入圖像都是 3 通道的,通道數(shù)只會增加你的網(wǎng)絡(luò)深度圆存。通常會將圖像的通道視作一個整體叼旋,強(qiáng)調(diào)其整體的一面而不關(guān)注各自的差異。
大部分時候沦辙,我們都處理 RBG 的三通道圖像 (Credit: Andre Mouton)
濾波器:卷積核的集合
這兩個術(shù)語之間有著本質(zhì)的區(qū)別:僅在 1 通道的情況下夫植,濾波器和內(nèi)核這兩個術(shù)語等價,在一般情況下油讯,它們是不同的详民。每個過濾器實際上是卷積核的集合,圖層的每個輸入通道都有一個卷積核陌兑,并且是唯一的沈跨。
卷積層中的每個濾波器都只輸出一個通道,他們是這樣實現(xiàn)的:
濾波器的每個卷積核在各自的輸入通道上「滑動」兔综,產(chǎn)生各自的計算結(jié)果谒出。一些內(nèi)核可能比其他內(nèi)核具有更大的權(quán)重隅俘,以便比某些內(nèi)核更強(qiáng)調(diào)某些輸入通道(例如,濾波器的紅色通道卷積核可能比其他通道的卷積核有更大的權(quán)重笤喳,因此,對紅色通道特征的反應(yīng)要強(qiáng)于其他通道)碌宴。
然后將每個通道處理的結(jié)果匯在一起形成一個通道杀狡。濾波器的卷積核各自產(chǎn)生一個對應(yīng)通道的輸出,最后整個濾波器產(chǎn)生一個總的輸出通道贰镣。
最后一個術(shù)語:偏置呜象。偏置在這里的作用是對每個輸出濾波器增加偏置項以便產(chǎn)生最終輸出通道。
其他數(shù)量濾波器的生成都和單濾波器相同:每個濾波器使用不同的卷積核集合和具有上述過程的標(biāo)量偏差項來處理輸入數(shù)據(jù)碑隆,最終產(chǎn)生一個輸出通道恭陡。然后將它們連接在一起以產(chǎn)生總輸出,其中輸出通道的數(shù)量是過濾器的數(shù)量上煤。在輸出數(shù)據(jù)送入另一個卷積層之前休玩,通常還要應(yīng)用非線性激活函數(shù)。重復(fù)上述操作即可完成網(wǎng)絡(luò)的搭建劫狠。
2 維卷積:直覺
卷積仍然是線性變換
即使有了卷積層的機(jī)制拴疤,仍然很難將它與標(biāo)準(zhǔn)的前饋網(wǎng)絡(luò)聯(lián)系起來,而且它仍然不能解釋為什么卷積會擴(kuò)展到圖像數(shù)據(jù)處理領(lǐng)域独泞,并且在這方面表現(xiàn)的很好呐矾。
假設(shè)我們有一個 4×4 的輸入,我們需要將其轉(zhuǎn)換成 2×2 的陣列懦砂。如果我們使用前饋網(wǎng)絡(luò)蜒犯,我們會先將 4×4 的輸入轉(zhuǎn)換成長度為 16 的向量,然后輸入一個擁有 16 個輸入和 4 個輸出的密集連接層荞膘》K妫可以為這一層想象一個權(quán)值矩陣 W :
總而言之,有 64 個參數(shù)衫画。
盡管卷積核運(yùn)算一開始看起來很奇怪毫炉,但它仍然是一個線性變換,有一個等價的變換矩陣削罩。如果我們將大小為 3 的核 K 應(yīng)用于變換后的 4×4 輸入瞄勾,來得到 2×2 的輸出,等價的變換矩陣將是:
這里有 9 個參數(shù)
(注意:雖然上面的矩陣是一個等價的變換矩陣弥激,但實際操作通常是作為一個非常不同的矩陣乘法來實現(xiàn)的 [2])
卷積进陡,作為一個整體,仍然是一個線性變換微服,但同時趾疚,這也是一種與眾不同的變換。一個有 64 個元素的矩陣,只有 9 個參數(shù)被重復(fù)使用糙麦。每個輸出節(jié)點只能看到特定輸入的數(shù)量(核內(nèi)部的輸入)辛孵。與其他輸入沒有任何交互,因為權(quán)值被設(shè)置為 0赡磅。
將卷積操作看作是權(quán)值矩陣的先驗是很有用的魄缚。在這篇文章中,我預(yù)先定義了網(wǎng)絡(luò)參數(shù)焚廊。例如冶匹,當(dāng)你使用預(yù)先訓(xùn)練的模型做圖像分類時,前提是使用預(yù)先訓(xùn)練的網(wǎng)絡(luò)參數(shù)咆瘟,作為密集鏈接層的一個特征提取器嚼隘。
從這層意義上說,有一個直覺就是為什么兩個都很有效呢(與他們的替代者比較)袒餐。遷移學(xué)習(xí)的效率比隨機(jī)初始化高出多個數(shù)量級飞蛹,因為你只需要優(yōu)化最終全連接層的參數(shù),這意味著您可以擁有出色的性能匿乃,每個類只有幾十個圖像桩皿。
這里,你不需要優(yōu)化所有 64 個參數(shù)幢炸,因為我們將其中的大部分設(shè)置為 0(而且始終保持這個值)泄隔,剩余的轉(zhuǎn)化成共享參數(shù),這將導(dǎo)致實際上只需要優(yōu)化 9 個參數(shù)宛徊。這個效率很重要佛嬉,當(dāng)從 MNIST 的 784 個輸入轉(zhuǎn)換成實際的 224×224×3 個圖像時,將會有 150000 個輸入闸天。密集層視圖將輸入減半為 75000 個暖呕,這仍然需要 100 億個參數(shù)。相比而言苞氮,ResNet-50 總共只有 2 千 500 萬個參數(shù)湾揽。
所以,將一些參數(shù)固定為 0笼吟,邦定參數(shù)提高效率库物,但與遷移學(xué)習(xí)不同,在遷移學(xué)習(xí)中贷帮,我們知道先驗是不是好的戚揭,因為它依賴于大量的圖像,我們?nèi)绾沃肋@個的好壞呢撵枢?
答案就在特征組合中民晒,前面的參數(shù)是要學(xué)習(xí)的參數(shù)精居。
局部性
在這片文章的開始,我們討論了以下問題:
卷積核只從一個小的局部區(qū)域組合像素來形成輸出潜必。也就是說靴姿,輸出特性只從一個小的局部區(qū)域「看到」輸入特性。
卷積核被應(yīng)用于整個圖像磁滚,以產(chǎn)生輸出矩陣空猜。
所以隨著反向傳播從網(wǎng)絡(luò)的分類節(jié)點一路過來,卷積核擁有一個有趣的任務(wù)恨旱,從局部輸入中學(xué)習(xí)權(quán)值,生成特征坝疼。此外搜贤,因為卷積核本身被應(yīng)用于整個圖像,卷積核學(xué)習(xí)的特征必須足夠通用钝凶,可以來自于圖像的任何部分仪芒。
如果這是任何其他種類的數(shù)據(jù),例如耕陷,APP 安裝的分類數(shù)據(jù)掂名,這將會是一場災(zāi)難,因為你的應(yīng)用程序安裝數(shù)量和應(yīng)用類型是相鄰的哟沫,并不意味著它們有任何與應(yīng)用安裝日期和使用時間一樣常見的「本地的饺蔑、共享的特性」。當(dāng)然嗜诀,它們可能有一個可被發(fā)現(xiàn)的潛在高層次的特征(例如猾警。人們最需要的是哪些應(yīng)用程序),但這并沒有給我們足夠的理由相信前兩個的參數(shù)和后兩個的參數(shù)完全相同隆敢。這四種可能是任意的(一致的)順序发皿,并且仍然有效!
然而拂蝎,像素總是以一致的順序出現(xiàn)穴墅,而且附近的像素互相影響。例如温自,如果某像素附近所有像素都是紅色的玄货,那么該像素極有可能也是紅色的。如果有偏差捣作,這是一個有趣的反秤幔現(xiàn)象,可以轉(zhuǎn)化成一個特征券躁,所有這些偏差可以通過與周圍像素的比較檢測出來惩坑。
這個想法實際上是很多早期的計算機(jī)視覺特征提取方法的基礎(chǔ)掉盅。例如,對于邊緣檢測以舒,你可以使用 Sobel 邊緣檢測濾波器趾痘,這是一個具有固定參數(shù)的核,運(yùn)算過程和標(biāo)準(zhǔn)的單通道卷積一樣:
使用垂直邊緣檢測卷積核
對于沒有邊緣的陣列(例如天空背景)蔓钟,大部分像素是一樣的值永票,所以卷積核在這些點輸出為 0。對于有垂直邊緣的陣列滥沫,邊緣左右兩側(cè)的像素是不同的侣集,卷積核的計算結(jié)果也是非零的,從而揭示邊緣兰绣。在檢測局部范圍內(nèi)異常時世分,卷積核一次只作用于 3 × 3 的陣列,但是當(dāng)應(yīng)用到整個圖像時缀辩,也足以在全局范圍內(nèi)檢測到來自于在圖像的任何位置的某個特定的特征臭埋,!
所以我們在深度學(xué)習(xí)中所做的關(guān)鍵區(qū)別是問這個問題:有用的核能被學(xué)習(xí)嗎臀玄?對于以原始像素為基礎(chǔ)的初始層瓢阴,我們可以合理地期望具有相當(dāng)?shù)退教卣鞯奶卣鳈z測器,如邊健无、線等荣恐。
深度學(xué)習(xí)研究有一個專注于神經(jīng)網(wǎng)絡(luò)可解釋性的完整分支。這一分支最強(qiáng)大的工具之一是使用優(yōu)化方法可視化特征 [3]睬涧。核心思想很簡單:優(yōu)化圖像(通常是使用隨機(jī)噪聲初始化)來激活濾波器募胃,使其盡可能強(qiáng)壯。這確實很直觀:如果經(jīng)過優(yōu)化的圖像完全被邊緣填充畦浓,這就是過濾器本身所尋找并被激活的強(qiáng)有力的證據(jù)痹束。使用這個,我們可以窺視到學(xué)習(xí)的過濾器讶请,結(jié)果是驚人的:
來自 GoogLeNet[3] 第一個卷積層的 3 個不同通道的特征可視化祷嘶,注意,即便它們檢測到不同的邊緣類型時夺溢,它們?nèi)匀皇呛艿图壍倪吘墮z測器论巍。
來自第二和第三個卷積的通道 12 的特征可視化。
這里需要注意的一個重要的事情是經(jīng)過卷積的圖像仍然是圖像风响。來自圖像左上角的小陣列像素輸出依然位于左上角嘉汰。所以你可以在另一個上面運(yùn)行另一個卷積層(比如左邊的兩個)來提取更深層的特征,這我們可以想象到状勤。
然而鞋怀,無論我們的特征探測器能檢測到多深双泪,沒有任何進(jìn)一步的改變,它們?nèi)匀恢荒茉诜浅P〉膱D像上運(yùn)行密似。無論你的探測器有多深焙矛,你都無法從 3×3 陣列中檢測到人臉。這就是感受域的概念残腌。
感受域
任何 CNN 架構(gòu)的一個基本的設(shè)計選擇是輸入的大小從開始到網(wǎng)絡(luò)的末端變得越來越小村斟,而通道的數(shù)量越來越深。如之前所述抛猫,這個經(jīng)常是通過步長或池化層完成的蟆盹。Locality 決定了輸出層看到的前一層的輸入。感受域決定了從輸出的角度看到的整個網(wǎng)絡(luò)的原始輸入?yún)^(qū)域闺金。
條紋卷積的概念是我們只處理一個固定的距離日缨,而忽略中間的那些。從不同的視角掖看,我們只保持固定距離的輸出,而移去剩余部分 [1]面哥。
3×3 卷積哎壳,步長 2
然后我們對輸出應(yīng)用非線性,然后根據(jù)通常情況困檩,在上面疊加另一個新的卷積層帅刊。這就是有趣的地方码泞。即使我們將有相同大小和相同局部區(qū)域的核(3×3),應(yīng)用到條紋卷積的輸出刹泄,核將會擁有更大的感受域:
這是因為條紋層的輸出仍然代表相同圖像。它不像調(diào)整大小那樣裁剪怎爵,唯一的問題是特石,輸出中的每個像素都是一個較大區(qū)域(其他像素被丟棄)的「代表性」,從原始輸入的相同的粗糙位置鳖链。因此姆蘸,當(dāng)下一層的核在輸出上運(yùn)行時,它實際運(yùn)行于從更大的區(qū)域收集的像素上芙委。
(注意:如果你熟悉擴(kuò)張卷積逞敷,注意上面的不是擴(kuò)張卷積。兩個都是增加感受域的方法灌侣,擴(kuò)張卷積是一個單獨(dú)層推捐,而這是發(fā)生在一個正規(guī)卷積上,之后是條紋卷積侧啼,中間幀是非線性)
對每個主要的卷積塊集合的通道進(jìn)行可視化牛柒,顯示復(fù)雜性的逐步增加 [3]
這個感受域的擴(kuò)展允許卷積層將低層次的特性(線堪簿,邊)與更高層次的特征(曲線,紋理)組合焰络,就像我們在 mixed3a 層中看到的那樣戴甩。
緊接著是池化/ 跨越層 , 網(wǎng)絡(luò)繼續(xù)為更高級別的特性(部件、模式)創(chuàng)建檢測器闪彼。如我們在 mixed4a 所看到的甜孤。
網(wǎng)絡(luò)中,圖像尺寸的重復(fù)減小畏腕,導(dǎo)致在卷積的第五個塊中缴川,其輸入大小僅 7×7,與 224×224 的輸入相比描馅。從這點來看把夸,每個單獨(dú)像素代表了 32×32 像素陣列,這是相當(dāng)大的铭污。
與前面的層相比恋日,對前面的層來說,一個激活意味著檢測一個邊界嘹狞,而這里岂膳,7×7 上的激活就是一個高級的特征,例如鳥類磅网。
整個網(wǎng)絡(luò)從少量的濾波器(GoogLeNet 有 64 個)谈截,只能檢測低級的特征,發(fā)展到擁有大量濾波器(在最終的卷積網(wǎng)絡(luò)中有 1024 個)涧偷,每個濾波器用于查找特定的高級特征簸喂。之后是池化層,將每個 7×7 陣列精簡成 1 個像素燎潮,每個通道都是一個擁有一個與整個圖像對應(yīng)的感受域的特征檢測器喻鳄。
與前向傳播網(wǎng)絡(luò)所完成的工作相比,這里的輸出令人驚訝确封。一個標(biāo)準(zhǔn)前向傳播網(wǎng)絡(luò)從圖像的像素集合中生成抽象的特征向量诽表,需要大量難以處理的數(shù)據(jù)進(jìn)行訓(xùn)練。
卷積神經(jīng)網(wǎng)絡(luò)隅肥,with the priors imposed on it, 通過學(xué)習(xí)低級別的特征檢測器開始竿奏,它的感受域逐層擴(kuò)展,學(xué)習(xí)將那些低級的特征逐漸與高層的特征融合腥放;不是每個單個像素的抽象結(jié)合泛啸,而是強(qiáng)大的視覺層次的概念。
通過檢測第級別的特征秃症,并使用它們檢測高級別特征候址,隨著視覺層次的發(fā)展吕粹,最終能夠檢測整個視覺概念,例如人臉岗仑、鳥類匹耕、樹木等,這就是為什么它們?nèi)绱藦?qiáng)大荠雕,但卻能有效地利用圖像數(shù)據(jù)稳其。
關(guān)于對抗攻擊的最后說明
有了視覺層次卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建,我們可以很合理地假設(shè)他們的視覺系統(tǒng)與人類相似炸卑。他們在處理真實世界的圖像時表現(xiàn)很棒既鞠,但是它們在某些方面也失敗了,這強(qiáng)烈地表明他們的視覺系統(tǒng)和人類的并不完全相似盖文。最主要的問題:對抗樣本 [4]嘱蛋,這些樣本被做了特別修改導(dǎo)致模型被愚弄。
對人類來說五续,兩張圖片明顯都是熊貓洒敏,但對模型來說,并不是這樣疙驾。[4]
如果人類能夠注意到那些導(dǎo)致模型失敗的被篡改的例子桐玻,那么對抗樣本就不是問題了。問題是荆萤,這些模型容易受到樣本的攻擊,這些樣本只被稍微修改過铣卡,而且顯然不會欺騙任何人類链韭。這為模型打開了一扇門,很小的失敗煮落,對于從自動駕駛汽車到醫(yī)療保健的廣泛應(yīng)用來說敞峭,是相當(dāng)危險的。
對抗攻擊的魯棒性是目前高度活躍的研究領(lǐng)域蝉仇,許多論文旋讹、甚至競賽和解決方案的課題肯定會改善 CNN 的架構(gòu),使其變得更安全轿衔、更可靠沉迹。
結(jié)論
卷積神經(jīng)網(wǎng)絡(luò)是允許計算機(jī)視覺從簡單的應(yīng)用程序擴(kuò)展到為復(fù)雜的產(chǎn)品和服務(wù)提供動力的模型,從你的照片庫中的人臉檢測到做出更好的醫(yī)學(xué)診斷害驹。它可能會是計算機(jī)視覺向前發(fā)展的關(guān)鍵方法鞭呕,或者一些新的突破。