1. 程式人生 > >直觀理解深度學習的卷積操作,超讚!

直觀理解深度學習的卷積操作,超讚!

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

轉自 | AI研習社

640?

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

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

下面的機器學習交流群只進行問題的探討、資料分享

發廣告和外連結的勿進 

新增微信:MLAPython,備註(姓名-單位-方向)

即可加入機器學習交流群

  2 維卷積:操作

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

640?

一個標準的卷積 [1]

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

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

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

一些常用的技術

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

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

640?

一些 padding 操作 [1]

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

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

640

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

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

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

多通道版本

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

640?

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

640?

濾波器:卷積核的集合

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

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

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

640

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

640

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

640

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

2 維卷積:直覺

卷積仍然是線性變換

即使有了卷積層的機制,仍然很難將它與標準的前饋網路聯絡起來,而且它仍然不能解釋為什麼卷積會擴充套件到影象資料處理領域,並且在這方面表現的很好。

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

640

總而言之,有 64 個引數。

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

640

這裡有 9 個引數

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

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

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

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

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

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

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

區域性性

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

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

  • 卷積核被應用於整個影象,以產生輸出矩陣。

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

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

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

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

640

使用垂直邊緣檢測卷積核

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

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

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

640

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

640?

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

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

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

感受域

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

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

640?

3×3 卷積,步長 2

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

640?

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

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

640?

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

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

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

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

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

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

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

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

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

關於對抗攻擊的最後說明

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

640?

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

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

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

結論

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

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

640?wx_fmt=png

相關推薦

直觀理解深度學習操作

翻譯 | 於志鵬  趙朋飛       校對 |  翟修川       整理 |  凡江 轉自 | AI研習社 近幾年隨著功能強大的深度學習框架的出現,在深度學習模型中搭建卷積神經網路變得十分容易,甚至只需要一行程式碼就可以完成。 但是理解卷積,特別是對第一次接

深度學習操作理解

本文介紹對了對卷積核、濾波器、通道等概念的理解。 二維卷積 二維卷積就是卷積核(指的是一個小的權值矩陣)在二維輸入資料上滑動遍歷整張圖片,對當前輸入的部分元素進行矩陣乘法,將一個二維矩陣轉換為另一個二維矩陣,然後將結果輸出,輸出特徵實際上是在輸入資料相同位置

動圖形象理解深度學習

動圖形象理解深度學習卷積   https://www.toutiao.com/a6615770434111537667/     理解卷積神經網路CNN,特別是對第一次接觸卷積神經網路的人來說,經常會對諸如卷積核、濾波器、通道等概念和他們的堆疊

深度學習直觀理解

轉自 | AI研習社 註明一下出處。 單通道卷積過程:        從卷積核(圖中3×3的陰影矩陣)開始,它一個小的權值矩陣。這個卷積核在 2 維輸入資料上「滑動」,對當前輸入的部分元素進行矩陣乘法,然後將結果匯為單個輸出畫素。 卷積核重複這個過程知道遍歷了整張

深度學習理解

最優化 span 好的 權重 獨立 邊界 濾波器 基礎 包含 1、參數共享的道理   如果在圖像某些地方探測到一個水平的邊界是很重要的,那麽在其他一些地方也會同樣是有用的,這是因為圖像結構具有平移不變性。所以在卷積層的輸出數據體的55x55個不同位置中,就沒有必要重新學習去

[人工智慧]深度學習神經網路的秒懂各種操作

作者:深度學習思考者 來給大家總結一下卷積神經網路的各種操作 ,大家能夠秒懂! 先來幾個靜態圖: 卷積演算法的一些神奇GIF動畫,包括不同的padding和strides。 上述是四種不同的卷積方式,大家都知道是哪種卷積吧

深度學習-理解

1.這篇文章以賈清揚的ppt說明了卷積的實質,更說明了卷積輸出影象大小應該為: 假設輸入影象尺寸為W,卷積核尺寸為F,步幅(stride)為S(卷積核移動的步幅),Padding使用P(用於填充輸入影象的邊界,一般填充0),那麼經過該卷積層後輸出的影

深度學習——神經網絡 的經典網絡(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

足夠 論文 ogl 相關性 spa 原因 線性 pad fan 一、CNN卷積神經網絡的經典網絡綜述 下面圖片參照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二、LeNet-5網絡

【讀書1】【2017】MATLAB與深度學習——層(4)

圖6-13 當影象矩陣與濾波器不匹配時,較大的重要元素不會起到顯著的作用Whenthe image matrix does not match the filter, the significant elements are notaligned 這是因為影象矩陣與濾波器不匹配,影象矩

理解影象中操作的含義

上文用生動的例子來解釋卷積記載了卷積的含義,現在就來看看卷積在影象處理中的應用吧。(ps:本文大部分內容系轉載大神的部落格,現在csdn強制圖片水印,實在感到很無奈!!!) 數字影象處理中卷積 數字影象是一個二維的離散訊號,對數字影象做卷積操作其實就是利用卷

深度學習 --- 神經網路CNN(LeNet-5網路學習演算法詳解)

上一節我們詳細探討了LeNet-5網路的架構,但是還沒有解釋該網路是如何進行學習的,如何更新權值的,本節將接著上一節進一步CNN的學習機制和權值更新過程,這裡請大家一定要對CNN網路有一個清晰的認識,知道每一層是做什麼的,為什麼這樣設定。原因在哪等。大家在學習的過程中需要多問自己幾個為什麼,這樣

深度學習 --- 神經網路CNN(LeNet-5網路詳解)

卷積神經網路(Convolutional Neural Network,CNN)是一種前饋型的神經網路,其在大型影象處理方面有出色的表現,目前已經被大範圍使用到影象分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的引數相對較少,使的其能夠廣泛應用。 本節打算先介紹背景和簡單的基本

吳恩達《深度學習-神經網路》2--深度神經網路

1. Why look at case studies本節展示幾個神經網路的例項分析為什麼要講例項?近些年CNN的主要任務就是研究如何將基本構件(CONV、POOL、CF)組合起來形成有效的CNN,而學習瞭解前人的做法可以激發創造2. Classic Networks1)Le

深度學習--神經網路工作原理

萬能的知乎 從知乎上看一篇文章,問題是卷積神經網路工作原理直觀的解釋,知乎大神用各種動圖對卷積神經網路的訓練做了介紹。YJango的回答最為精彩。奉上鍊接,希望你也能從這個回答中對卷積神經網路有更為確切的認識。https://www.zhihu.com/question/

機器學習 -- >深度學習-- >神經網路(CNN)

上一篇我們詳細講解了人工神經網路以及DNN的原理。CNN主要應用在影象處理方面。這一講我們將詳細講解卷積神經網路CNN的原理以及在深度學習框架pytorch上的實現。 在講CNN之前我們需要了解這麼幾個問題? ①人工神經網路能用到計算機視覺上嗎? 答:能

深度學習神經網路大事件一覽

  深度學習(DeepLearning)尤其是卷積神經網路(CNN)作為近幾年來模式識別中的研究重點,受到人們越來越多的關注,相關的參考文獻也是層出不窮,連續幾年都佔據了CVPR的半壁江山,但是萬變不離其宗,那些在深度學習發展過程中起到至關重要的推動作用的經典文獻依然值得回味

深度學習: 核 為什麼都是 奇數size

卷積核一般都把size設為奇數,主要有以下兩個原因: 保護位置資訊:保證了 錨點 剛好在中間,方便以模組中心為標準進行滑動卷積,避免了位置資訊發生 偏移 。 padding時對稱:保證了 paddi

吳恩達-深度學習-神經網路-Stride 筆記

卷積中的步幅是另一個構建卷積神經網路的基本操作,讓我向你展示一個例子。如果你想用3×3的過濾器卷積這個7×7的影象,和之前不同的是,我們把步幅設定成了2。你還和之前一樣取左上方的3×3區域的元素的乘積,再加起來,最後結果為91。只是之前我們移動藍框的步長是1,現在移動的步長是

深度學習——學習部分資料彙總

導言 1. 關於卷積的一個血腥的講解:https://blog.csdn.net/aa578232405/article/details/74839554   網址 1.視覺化工具          http://scs

利用Tensorflow和matplotlib直觀理解CNN的層與池化層

卷積神經網路,CNN(Convolutional Neural Network),卷積神經網路是一種多層神經網路,擅長處理影象相關的深度學習問題。 與普通神經網路的區別在於,卷積神經網路包含了由卷積層(Convolutional layer)和池化層(Pooling lay