當前位置:
首頁 > 新聞 > 直觀理解深度學習卷積部分

直觀理解深度學習卷積部分

雷鋒網按:本文為雷鋒字幕組編譯的技術博客,原標題 Intuitively Understanding Convolutions for Deep Learning,作者為 Irhum Shafkat。

翻譯 | 於志鵬  趙朋飛       校對 |  翟修川       整理 |  凡江

近幾年隨著功能強大的深度學習框架的出現,在深度學習模型中搭建卷積神經網路變得十分容易,甚至只需要一行代碼就可以完成。

但是理解卷積,特別是對第一次接觸卷積神經網路的人來說,經常會對諸如卷積核、濾波器、通道等概念和他們的堆疊架構感到困惑。然而卷積是強大且高度可擴展的概念,在本文中,我們將逐步分解卷積操作的原理,將他與標準的全連接網路聯繫起來,並且探索如何構建一個強大的視覺層次,使其成為高性能的圖像特徵提取器。

2 維卷積:操作

2 維卷積是一個相當簡單的操作:從卷積核開始,這是一個小的權值矩陣。這個卷積核在 2 維輸入數據上「滑動」,對當前輸入的部分元素進行矩陣乘法,然後將結果匯為單個輸出像素。

一個標準的卷積 [1]

卷積核重複這個過程知道遍歷了整張圖片,將一個二維矩陣轉換為另一個二維矩陣。輸出特徵實質上是在輸入數據相同位置上的加權和(權值是卷積核本身的值)

輸入數據是否落入這個「大致相似區域」,直接決定了數據經過卷積核後的輸出。這意味著卷積核的尺寸直接決定了生成新的特徵時匯合了多少(或幾個)輸入特徵。

這與全連接層完全相反。在上面的例子中,我們的輸入特徵為 5*5=25,輸出數據為 3*3=9. 如果我們使用標準的全連接層,就會產生一個 25*9=225 個參數的權值矩陣,每個輸出都是所有輸入數據的加權求和。卷積操作允許我們只用 9 個參數來實現這個變換,每個輸出特性不用「查看」每個輸入特徵,而是只是「查看」來自大致相同位置的輸入特徵。請注意這一點,因為這對我們後面的討論至關重要。

一些常用的技術

在我們繼續介紹卷積神經網路之前,介紹兩種卷積層中常用的技術:Padding 和 Strides

Padding:如果你看到上面的動畫,那麼會注意到在卷積核滑動的過程中,邊緣基本會被「裁剪」掉,將 5*5 特徵矩陣轉換為 3*3 的特徵矩陣。邊緣上的像素永遠不在卷積核的中心,因為內核沒有任何東西可以擴展到邊緣之外。這並不理想,因為我們經常希望輸出的尺寸等於輸入。

一些 padding 操作 [1]

Padding 做了一些非常機智的辦法來解決這個問題:用額外的「假」像素(通常值為 0,因此經常使用的術語「零填充」)填充邊緣。這樣,在滑動時的卷積核可以允許原始邊緣像素位於其中心,同時延伸到邊緣之外的假像素,從而產生與輸入相同大小的輸出。

Striding:運行卷積層時,我們通常希望輸出的尺寸是比輸入更低。這在卷積神經網路中是常見的,在增加信道數量的同時空間尺寸減小。其中一種方法是使用池化層(例如,取每 2×2 網格的平均值/最大值將空間維度減半)。還有一種方法是使用 Striding:

一個步長為 2 的卷積操作 [1]

Stride 的想法是改變卷積核的移動步長跳過一些像素。Stride 是 1 表示卷積核滑過每一個相距是 1 的像素,是最基本的單步滑動,作為標準卷積模式。Stride 是 2 表示卷積核的移動步長是 2,跳過相鄰像素,圖像縮小為原來的 1/2。Stride 是 3 表示卷積核的移動步長是 3,跳過 2 個相鄰像素,圖像縮小為原來的 1/3

越來越多的新網路結構,比如 ResNet,已經完全拋棄了池化層。當需要對圖像進行縮小時會採用 Stride 方法。

多通道版本

當然,上圖僅涉及具有單個輸入通道的圖像。實際上,大多數輸入圖像都是 3 通道的,通道數只會增加你的網路深度。通常會將圖像的通道視作一個整體,強調其整體的一面而不關注各自的差異。

大部分時候,我們都處理 RBG 的三通道圖像 (Credit: Andre Mouton)

濾波器:卷積核的集合

這兩個術語之間有著本質的區別:僅在 1 通道的情況下,濾波器和內核這兩個術語等價,在一般情況下,它們是不同的。每個過濾器實際上是卷積核的集合,圖層的每個輸入通道都有一個卷積核,並且是唯一的。

卷積層中的每個濾波器都只輸出一個通道,他們是這樣實現的:

濾波器的每個卷積核在各自的輸入通道上「滑動」,產生各自的計算結果。一些內核可能比其他內核具有更大的權重,以便比某些內核更強調某些輸入通道(例如,濾波器的紅色通道卷積核可能比其他通道的卷積核有更大的權重,因此,對紅色通道特徵的反應要強於其他通道)。

然後將每個通道處理的結果匯在一起形成一個通道。濾波器的卷積核各自產生一個對應通道的輸出,最後整個濾波器產生一個總的輸出通道。

最後一個術語:偏置。偏置在這裡的作用是對每個輸出濾波器增加偏置項以便產生最終輸出通道。

其他數量濾波器的生成都和單濾波器相同:每個濾波器使用不同的卷積核集合和具有上述過程的標量偏差項來處理輸入數據,最終產生一個輸出通道。然後將它們連接在一起以產生總輸出,其中輸出通道的數量是過濾器的數量。在輸出數據送入另一個卷積層之前,通常還要應用非線性激活函數。重複上述操作即可完成網路的搭建。

2 維卷積:直覺

卷積仍然是線性變換

即使有了卷積層的機制,仍然很難將它與標準的前饋網路聯繫起來,而且它仍然不能解釋為什麼卷積會擴展到圖像數據處理領域,並且在這方面表現的很好。

假設我們有一個 4×4 的輸入,我們需要將其轉換成 2×2 的陣列。如果我們使用前饋網路,我們會先將 4×4 的輸入轉換成長度為 16 的向量,然後輸入一個擁有 16 個輸入和 4 個輸出的密集連接層。可以為這一層想像一個權值矩陣 W :

總而言之,有 64 個參數。

儘管卷積核運算一開始看起來很奇怪,但它仍然是一個線性變換,有一個等價的變換矩陣。如果我們將大小為 3 的核 K 應用於變換後的 4×4 輸入,來得到 2×2 的輸出,等價的變換矩陣將是:

這裡有 9 個參數

(注意:雖然上面的矩陣是一個等價的變換矩陣,但實際操作通常是作為一個非常不同的矩陣乘法來實現的 [2])

卷積,作為一個整體,仍然是一個線性變換,但同時,這也是一種與眾不同的變換。一個有 64 個元素的矩陣,只有 9 個參數被重複使用。每個輸出節點只能看到特定輸入的數量(核內部的輸入)。與其他輸入沒有任何交互,因為權值被設置為 0。

將卷積操作看作是權值矩陣的先驗是很有用的。在這篇文章中,我預先定義了網路參數。例如,當你使用預先訓練的模型做圖像分類時,前提是使用預先訓練的網路參數,作為密集鏈接層的一個特徵提取器。

從這層意義上說,有一個直覺就是為什麼兩個都很有效呢(與他們的替代者比較)。遷移學習的效率比隨機初始化高出多個數量級,因為你只需要優化最終全連接層的參數,這意味著您可以擁有出色的性能,每個類只有幾十個圖像。

這裡,你不需要優化所有 64 個參數,因為我們將其中的大部分設置為 0(而且始終保持這個值),剩餘的轉化成共享參數,這將導致實際上只需要優化 9 個參數。這個效率很重要,當從 MNIST 的 784 個輸入轉換成實際的 224×224×3 個圖像時,將會有 150000 個輸入。密集層視圖將輸入減半為 75000 個,這仍然需要 100 億個參數。相比而言,ResNet-50 總共只有 2 千 500 萬個參數。

所以,將一些參數固定為 0,邦定參數提高效率,但與遷移學習不同,在遷移學習中,我們知道先驗是不是好的,因為它依賴於大量的圖像,我們如何知道這個的好壞呢?

答案就在特徵組合中,前面的參數是要學習的參數。

局部性

在這片文章的開始,我們討論了以下問題:

卷積核只從一個小的局部區域組合像素來形成輸出。也就是說,輸出特性只從一個小的局部區域「看到」輸入特性。

卷積核被應用於整個圖像,以產生輸出矩陣。

所以隨著反向傳播從網路的分類節點一路過來,卷積核擁有一個有趣的任務,從局部輸入中學習權值,生成特徵。此外,因為卷積核本身被應用於整個圖像,卷積核學習的特徵必須足夠通用,可以來自於圖像的任何部分。

如果這是任何其他種類的數據,例如,APP 安裝的分類數據,這將會是一場災難,因為你的應用程序安裝數量和應用類型是相鄰的,並不意味著它們有任何與應用安裝日期和使用時間一樣常見的「本地的、共享的特性」。當然,它們可能有一個可被發現的潛在高層次的特徵(例如。人們最需要的是哪些應用程序),但這並沒有給我們足夠的理由相信前兩個的參數和後兩個的參數完全相同。這四種可能是任意的(一致的)順序,並且仍然有效!

然而,像素總是以一致的順序出現,而且附近的像素互相影響。例如,如果某像素附近所有像素都是紅色的,那麼該像素極有可能也是紅色的。如果有偏差,這是一個有趣的反常現象,可以轉化成一個特徵,所有這些偏差可以通過與周圍像素的比較檢測出來。

這個想法實際上是很多早期的計算機視覺特徵提取方法的基礎。例如,對於邊緣檢測,你可以使用 Sobel 邊緣檢測濾波器,這是一個具有固定參數的核,運算過程和標準的單通道卷積一樣:

使用垂直邊緣檢測卷積核

對於沒有邊緣的陣列(例如天空背景),大部分像素是一樣的值,所以卷積核在這些點輸出為 0。對於有垂直邊緣的陣列,邊緣左右兩側的像素是不同的,卷積核的計算結果也是非零的,從而揭示邊緣。在檢測局部範圍內異常時,卷積核一次只作用於 3 × 3 的陣列,但是當應用到整個圖像時,也足以在全局範圍內檢測到來自於在圖像的任何位置的某個特定的特徵,!

所以我們在深度學習中所做的關鍵區別是問這個問題:有用的核能被學習嗎?對於以原始像素為基礎的初始層,我們可以合理地期望具有相當低水平特徵的特徵檢測器,如邊、線等。

深度學習研究有一個專註於神經網路可解釋性的完整分支。這一分支最強大的工具之一是使用優化方法可視化特徵 [3]。核心思想很簡單:優化圖像(通常是使用隨機雜訊初始化)來激活濾波器,使其儘可能強壯。這確實很直觀:如果經過優化的圖像完全被邊緣填充,這就是過濾器本身所尋找並被激活的強有力的證據。使用這個,我們可以窺視到學習的過濾器,結果是驚人的:

來自 GoogLeNet[3] 第一個卷積層的 3 個不同通道的特徵可視化,注意,即便它們檢測到不同的邊緣類型時,它們仍然是很低級的邊緣檢測器。

來自第二和第三個卷積的通道 12 的特徵可視化。

這裡需要注意的一個重要的事情是經過卷積的圖像仍然是圖像。來自圖像左上角的小陣列像素輸出依然位於左上角。所以你可以在另一個上面運行另一個卷積層(比如左邊的兩個)來提取更深層的特徵,這我們可以想像到。

然而,無論我們的特徵探測器能檢測到多深,沒有任何進一步的改變,它們仍然只能在非常小的圖像上運行。無論你的探測器有多深,你都無法從 3×3 陣列中檢測到人臉。這就是感受域的概念。

感受域

任何 CNN 架構的一個基本的設計選擇是輸入的大小從開始到網路的末端變得越來越小,而通道的數量越來越深。如之前所述,這個經常是通過步長或池化層完成的。Locality 決定了輸出層看到的前一層的輸入。感受域決定了從輸出的角度看到的整個網路的原始輸入區域。

條紋卷積的概念是我們只處理一個固定的距離,而忽略中間的那些。從不同的視角,我們只保持固定距離的輸出,而移去剩餘部分 [1]。

3×3 卷積,步長 2

然後我們對輸出應用非線性,然後根據通常情況,在上面疊加另一個新的卷積層。這就是有趣的地方。即使我們將有相同大小和相同局部區域的核(3×3),應用到條紋卷積的輸出,核將會擁有更大的感受域:

這是因為條紋層的輸出仍然代表相同圖像。它不像調整大小那樣裁剪,唯一的問題是,輸出中的每個像素都是一個較大區域(其他像素被丟棄)的「代表性」,從原始輸入的相同的粗糙位置。因此,當下一層的核在輸出上運行時,它實際運行於從更大的區域收集的像素上。

(注意:如果你熟悉擴張卷積,注意上面的不是擴張卷積。兩個都是增加感受域的方法,擴張卷積是一個單獨層,而這是發生在一個正規卷積上,之後是條紋卷積,中間幀是非線性)

對每個主要的卷積塊集合的通道進行可視化,顯示複雜性的逐步增加 [3]

這個感受域的擴展允許卷積層將低層次的特性(線,邊)與更高層次的特徵(曲線,紋理)組合,就像我們在 mixed3a 層中看到的那樣。

緊接著是池化/ 跨越層 , 網路繼續為更高級別的特性(部件、模式)創建檢測器。如我們在 mixed4a 所看到的。

網路中,圖像尺寸的重複減小,導致在卷積的第五個塊中,其輸入大小僅 7×7,與 224×224 的輸入相比。從這點來看,每個單獨像素代表了 32×32 像素陣列,這是相當大的。

與前面的層相比,對前面的層來說,一個激活意味著檢測一個邊界,而這裡,7×7 上的激活就是一個高級的特徵,例如鳥類。

整個網路從少量的濾波器(GoogLeNet 有 64 個),只能檢測低級的特徵,發展到擁有大量濾波器(在最終的卷積網路中有 1024 個),每個濾波器用於查找特定的高級特徵。之後是池化層,將每個 7×7 陣列精簡成 1 個像素,每個通道都是一個擁有一個與整個圖像對應的感受域的特徵檢測器。

與前向傳播網路所完成的工作相比,這裡的輸出令人驚訝。一個標準前向傳播網路從圖像的像素集合中生成抽象的特徵向量,需要大量難以處理的數據進行訓練。

卷積神經網路,with the priors imposed on it, 通過學習低級別的特徵檢測器開始,它的感受域逐層擴展,學習將那些低級的特徵逐漸與高層的特徵融合;不是每個單個像素的抽象結合,而是強大的視覺層次的概念。

通過檢測第級別的特徵,並使用它們檢測高級別特徵,隨著視覺層次的發展,最終能夠檢測整個視覺概念,例如人臉、鳥類、樹木等,這就是為什麼它們如此強大,但卻能有效地利用圖像數據。

關於對抗攻擊的最後說明

有了視覺層次卷積神經網路的構建,我們可以很合理地假設他們的視覺系統與人類相似。他們在處理真實世界的圖像時表現很棒,但是它們在某些方面也失敗了,這強烈地表明他們的視覺系統和人類的並不完全相似。最主要的問題:對抗樣本 [4],這些樣本被做了特別修改導致模型被愚弄。

對人類來說,兩張圖片明顯都是熊貓,但對模型來說,並不是這樣。[4]

如果人類能夠注意到那些導致模型失敗的被篡改的例子,那麼對抗樣本就不是問題了。問題是,這些模型容易受到樣本的攻擊,這些樣本只被稍微修改過,而且顯然不會欺騙任何人類。這為模型打開了一扇門,很小的失敗,對於從自動駕駛汽車到醫療保健的廣泛應用來說,是相當危險的。

對抗攻擊的魯棒性是目前高度活躍的研究領域,許多論文、甚至競賽和解決方案的課題肯定會改善 CNN 的架構,使其變得更安全、更可靠。

結論

卷積神經網路是允許計算機視覺從簡單的應用程序擴展到為複雜的產品和服務提供動力的模型,從你的照片庫中的人臉檢測到做出更好的醫學診斷。它可能會是計算機視覺向前發展的關鍵方法,或者一些新的突破可能就在眼前。

無論如何,有一件事是肯定的:它們都是令人驚嘆的東西,是當今許多創新應用的核心,而且最值得深入理解。

參考文獻

A guide to convolution arithmetic for deep learning(https://arxiv.org/abs/1603.07285)

CS231n Convolutional Neural Networks for Visual Recognition?—?Convolutional Neural Networks(http://cs231n.github.io/convolutional-networks/)

Feature Visualization?—?How neural networks build up their understanding of images (of note: the feature visualizations here were produced with the Lucid library, an open source implementation of the techniques from this journal article)(https://distill.pub/2017/feature-visualization/)

Attacking Machine Learning with Adversarial Examples(https://blog.openai.com/adversarial-example-research/)

更多資源

fast.ai?—?Lesson 3: Improving your Image Classifier(http://course.fast.ai/lessons/lesson3.html)

Conv Nets: A Modular Perspective(http://colah.github.io/posts/2014-07-Conv-Nets-Modular/)

Building powerful image classification models using very little data(https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html)

雷鋒網雷鋒網


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

AI 在谷歌,如何「不作惡」
中國商務部或已經批准高通收購恩智浦 全球晶元史上最大併購案有多曲折?

TAG:雷鋒網 |