卷積神經網絡數學原理解析

2020-12-13 雷鋒網

自動駕駛、智能醫療保健和自助零售這些領域直到最近還被認為是不可能實現的,而計算機視覺已經幫助我們達到了這些事情。如今,擁有自動駕駛汽車或自動雜貨店的夢想聽起來不再那麼遙不可及了。事實上,我們每天都在使用計算機視覺——當我們用面部解鎖手機或在社交媒體上發照片前使用自動修圖。卷積神經網絡可能是這一巨大成功背後最關鍵的構建模塊。這一次,我們將加深理解神經網絡如何工作於CNNs。出於建議,這篇文章將包括相當複雜的數學方程,如果你不習慣線性代數和微分,請不要氣餒。我的目標不是讓你們記住這些公式,而是讓你們對下面發生的事情有一個直觀的認識。 

附註:這是我第一次決定用一個音頻版本來豐富我的作品,誠摯地邀請你來聽一聽,您將在上面找到Soundcloud的連結。在這篇文章中,我主要關注CNNs的一些典型問題。如果您正在尋找關於深度神經網絡更基礎的信息,我建議您閱讀我在本系列文章中的其他文章。與往常一樣,可以在我的GitHub上找到帶有可視化和注釋的完整原始碼,讓我們開始吧!  

  介紹

過去我們已經知道被稱為緊密連接的神經網絡。這些網絡的神經元被分成若干組,形成連續的層。每一個這樣的神經元都與相鄰層的每一個神經元相連。下圖顯示了這種體系結構的一個示例。  

圖1. 密集連接的神經網絡結構 

當我們根據一組有限的人工設計的特徵來解決分類問題時,這種方法很有效。例如,我們根據足球運動員在比賽期間的統計數據來預測他的位置。然而,當處理照片時,情況變得更加複雜。當然,我們可以將每個像素的像素值作為單獨的特徵,並將其作為輸入傳遞給我們的密集網絡。不幸的是,為了讓該網絡適用於一張特定的智慧型手機照片,我們的網絡必須包含數千萬甚至數億個神經元。另一方面,我們可以縮小我們的照片,但在這個過程中,我們會丟失一些有用的信息。我們立馬意識到傳統的策略對我們沒有任何作用,我們需要一個新的有效的方法,以充分利用儘可能多的數據,但同時減少必要的計算和參數量。這就是CNNs發揮作用的時候了。 

  數字圖像的數據結構 

讓我們先花一些時間來解釋數字圖像是如何存儲的。你們大多數人可能知道它們實際上是由很多數字組成的矩陣。每一個這樣的數字對應一個像素的亮度。在RGB模型中,彩色圖像實際上是由三個對應於紅、綠、藍三種顏色通道的矩陣組成的。在黑白圖像中,我們只需要一個矩陣。每個矩陣都存儲0到255之間的值。這個範圍是存儲圖像信息的效率(256之內的值正好可以用一個字節表達)和人眼的敏感度(我們區分有限數量的相同顏色灰度值)之間的折衷。

圖2. 數字圖像的數據結構  

  卷積

核卷積不僅用於神經網絡,而且是許多其他計算機視覺算法的關鍵一環。在這個過程中,我們採用一個形狀較小的矩陣(稱為核或濾波器),我們輸入圖像,並根據濾波器的值變換圖像。後續的特徵map值根據下式來計算,其中輸入圖像用f表示,我們的kernel用h表示,結果矩陣的行和列的索引分別用m和n表示。  

圖3. 核卷積的例子 

將過濾器放置在選定的像素上之後,我們從kernel中提取每個相應位置的值,並將它們與圖像中相應的值成對相乘。最後,我們總結了所有內容,並將結果放在輸出特性圖的對應位置。上面我們可以看到這樣的操作在細節上是怎麼實現的,但是更讓人關注的是,我們通過在一個完整的圖像上執行核卷積可以實現什麼應用。圖4顯示了幾種不同濾波器的卷積結果。  

圖4. 通過核卷積得到邊緣[原圖像:https://www.maxpixel.net/Idstein-Historic-Center-Truss-Facade-Germany-3748512] 

  有效卷積和相同卷積

如圖3所示,當我們用3x3核對6x6的圖像進行卷積時,我們得到了4x4特徵圖。這是因為只有16個不同的位置可以讓我們把濾波器放在這個圖片裡。因為每次卷積操作,圖像都會縮小,所以我們只能做有限次數的卷積,直到圖像完全消失。更重要的是,如果我們觀察卷積核如何在圖像中移動,我們會發現位於圖像邊緣的像素的影響要比位於圖像中心的像素小得多。這樣我們就丟失了圖片中包含的一些信息。通過下圖,您可以知道像素的位置如何改變其對特徵圖的影響。

圖5. 像素位置的影響 

為了解決這兩個問題,我們可以用額外的邊框填充圖像。例如,如果我們使用1px填充,我們將照片的大小增加到8x8,那麼與3x3濾波器卷積的輸出將是6x6。在實踐中,我們一般用0填充額外的填充區域。這取決於我們是否使用填充,我們要根據兩種卷積來判斷-有效卷積和相同卷積。這樣命名並不是很合適,所以為了清晰起見:Valid表示我們僅使用原始圖像,Same表示我們同時也考慮原圖像的周圍邊框,這樣輸入和輸出的圖像大小是相同的。在第二種情況下,填充寬度應該滿足以下方程,其中p為填充寬度和f是濾波器維度(一般為奇數)。

  步幅卷積

圖6. 步幅卷積的例子 

在前面的例子中,我們總是將卷積核每次移動一個像素。但是,步幅也可以看作卷積層超參數之一。在圖6中,我們可以看到,如果我們使用更大的步幅,卷積看起來是什麼樣的。在設計CNN架構時,如果希望感知區域的重疊更少,或者希望feature map的空間維度更小,我們可以決定增加步幅。輸出矩陣的尺寸——考慮到填充寬度和步幅——可以使用以下公式計算。 

  過渡到三維

空間卷積是一個非常重要的概念,它不僅能讓我們處理彩色圖像,更重要的是在單層中應用多個卷積核。第一個重要的原則是,過濾器和要應用它的圖像必須具有相同通道數。基本上,這種方式與圖3中的示例非常相似,不過這次我們將三維空間中的值與卷積核對應相乘。如果我們想在同一幅圖像上使用多個濾波器,我們分別對它們進行卷積,將結果一個疊在一起,並將它們組合成一個整體。接收張量的維數(即我們的三維矩陣)滿足如下方程:n-圖像大小,f-濾波器大小,nc-圖像中通道數,p-是否使用填充,s-使用的步幅,nf-濾波器個數。  

  卷積層

現在是時候運用我們今天所學的知識來構建我們的CNN層了。我們的方法和我們在密集連接的神經網絡中使用的方法幾乎是一樣的,唯一的不同是這次我們將使用卷積而不是簡單的矩陣乘法。正向傳播包括兩個步驟。第一步是計算中間值Z,這是利用輸入數據和上一層權重W張量(包括所有濾波器)獲得的卷積的結果,然後加上偏置b。第二步是將非線性激活函數的應用到獲得的中間值上(我們的激活函數表示為g)。對矩陣方程感興趣的讀者可以在下面找到對應的數學公式。如果您不清楚其中的操作細節,我強烈推薦我的前一篇文章,在那篇文章中,我詳細討論了緊密連接的神經網絡的原理。順便說一下,在下圖中你可以看到一個簡單的可視化,描述了方程中使用的張量的維數。  

圖8. 張量維度

  連接剪枝和參數共享

在文章的開頭,我提到密集連接的神經網絡不擅長處理圖像,這是因為需要學習大量的參數。既然我們已經理解了卷積是什麼,讓我們現在考慮一下它是如何優化計算的。在下面的圖中,以稍微不同的方式顯示了二維卷積,以數字1-9標記的神經元組成了輸入層,並接受圖像像素亮度值,而A - D單元表示計算出的特徵map元素。最後,I-IV是需要經過學習的卷積核的值。

圖9. 連接剪枝和參數共享

現在,讓我們關注卷積層的兩個非常重要的屬性。首先,你可以看到,並不是所有連續兩層的神經元都相互連接。例如,神經元1隻影響A的值。其次,我們看到一些神經元共享相同的權重。這兩個性質都意味著我們需要學習的參數要少得多。順便說一下,值得注意的是,濾波器中的一個值會影響特徵map中的每個元素——這在反向傳播過程中非常重要。

  卷積層反向傳播

任何嘗試過從頭編寫自己的神經網絡代碼的人都知道,完成正向傳播還沒有完成整個算法流程的一半。真正的樂趣在於你想要進行反向傳播得到時候。現在,我們不需要為反向傳播這個問題所困擾,我們可以利用深度學習框架來實現這一部分,但是我覺得了解底層是有價值的。就像在密集連接的神經網絡中,我們的目標是計算導數,然後用它們來更新我們的參數值,這個過程叫做梯度下降。

在我們的計算中需要用到鏈式法則——我在前面的文章中提到過。我們想評估參數的變化對最終特徵map的影響,以及之後對最終結果的影響。在我們開始討論細節之前,讓我們就對使用的數學符號進行統一——為了讓過程更加簡化,我將放棄偏導的完整符號,而使用如下所示的更簡短的符號來表達。但記住,當我用這個符號時,我總是指的是損失函數的偏導數。  

圖10. 單卷積層的輸入和輸出的正向和反向傳播 

我們的任務是計算dW[l]和db[l]——它們是與當前層參數相關的導數,以及dA[l -1]的值——它們將被傳遞到上一層。如圖10所示,我們接收dA[l]作為輸入。當然,張量dW和W、db和b以及dA和A的維數是相同的。第一步是通過對輸入張量的激活函數求導得到中間值dZ[l]。根據鏈式法則,後面將使用這個操作得到的結果。

現在,我們需要處理卷積本身的反向傳播,為了實現這個目的,我們將使用一個矩陣運算,稱為全卷積,如下圖所示。注意,在這個過程中,對於我們使用卷積核,之前我們將其旋轉了180度。這個操作可以用下面的公式來描述,其中濾波器用W表示,dZ[m,n]是一個標量,屬於上一層偏導數。 

圖11. 全卷積

  池化層

除了卷積層,CNNs還經常使用所謂的池化層。池化層主要用於減小張量的大小和加速計算。這種網絡層很簡單——我們需要將圖像分割成不同的區域,然後對每個部分執行一些操作。例如,對於最大值池化層,我們從每個區域中選擇一個最大值,並將其放在輸出中相應的位置。在卷積層的情況下,我們有兩個超參數——濾波器大小和步長。最後一個比較重要的一點是,如果要為多通道圖像進行池化操作,則應該分別對每個通道進行池化。 

圖12. 最大值池化的例子  

  池化層反向傳播

在本文中,我們將只討論最大值池化的反向傳播,但是我們將學習的規則只需要稍加調整就可以適用於所有類型的池化層。由於在這種類型的層中,我們沒有任何必須更新的參數,所以我們的任務只是適當地分布梯度。正如我們所記得的,在最大值池化的正向傳播中,我們從每個區域中選擇最大值,並將它們傳輸到下一層。因此,很明顯,在反向傳播過程中,梯度不應該影響矩陣中沒有包含在正向傳播中的元素。實際上,這是通過創建一個掩碼來實現的,該掩碼可以記住第一階段中使用的值的位置,稍後我們可以使用該掩碼來傳播梯度。 

圖13.  最大值池化的反向傳播  

  結論

恭喜你能來這裡。非常感謝您花時間閱讀本文。如果你喜歡這個帖子,您可以考慮向你的朋友,或者兩個或五個朋友分享。如果你注意到任何錯誤的思維方式,公式,動畫或代碼,請讓我知道。  

本文是「神經網絡之謎」系列文章的另一部分,

如果你還想閱讀其他文章,點擊【卷積神經網絡數學原理分析】即可訪問~

via https://towardsdatascience.com/gentle-dive-into-math-behind-convolutional-neural-networks-79a07dd44cf9

各位小夥伴好,AI 研習社今天將繼續為大家全網獨家直播 IJCAI 2019,以下是今天(15號)的具體直播場次及日程,歡迎大家關注收看~

8:30~9:20(直播進行中)

Invited Talk

Hadas Kress-Gazit - Formal Synthesis for Robots 

11:00~12:30

Panel

Highly refereed AI conferences

14:00~14:50

Invited Talk

Giuseppe de Giacomo - Queryable Self-Deliberating Dynamic Systems 

直播觀看地址:https://ai.yanxishe.com/page/meeting/47

雷鋒網(公眾號:雷鋒網)雷鋒網雷鋒網


雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 卷積神經網絡概念與原理
    近年來卷積神經網絡在多個方向持續發力,在語音識別、人臉識別、通用物體識別、運動分析、自然語言處理甚至腦電波分析方面均有突破。       卷積神經網絡與普通神經網絡的區別在於,卷積神經網絡包含了一個由卷積層和子採樣層構成的特徵抽取器。在卷積神經網絡的卷積層中,一個神經元只與部分鄰層神經元連接。
  • 深入卷積神經網絡背後的數學原理
    ,本文對卷積神經網絡的數學原理進行了介紹。文章包括四個主要內容:卷積、卷積層、池化層以及卷積神經網絡中的反向傳播原理。在卷積部分的介紹中,作者介紹了卷積的定義、有效卷積和相同卷積、跨步卷積、3D卷積。在卷積層部分,作者闡述了連接切割和參數共享對降低網絡參數學習量的作用。在池化層部分,作者介紹了池化的含義以及掩膜的使用。
  • 卷積神經網絡CNN:卷積的來源和原理
    卷積神經網絡(Convolutional Neural Network,簡稱為CNN或ConvNet)是一種具有
  • 薦書丨周志華力薦新書《解析深度學習:卷積神經網絡原理與視覺實踐》
    周志華2018 年10 月於南京 編輯推薦《解析深度學習:卷積神經網絡原理與視覺實踐》是對治深度學習恐懼症的一劑良藥。作者魏秀參博士,畢業於著名的南京大學LAMDA研究所,現為曠視科技南京研究院負責人。
  • 卷積神經網絡工作原理直觀的解釋
    3.定義卷積神經網絡4.小結5.使用 CNN 分類圖像1. 機器如何看圖?3.定義一個卷積神經網絡我們需要三個基本的元素來定義一個基本的卷積網絡1. 卷積層2. 池化層(可選)3. 實際上,這樣可以使參數在卷積神經網絡中被共享。下面我們以一個真實圖像為例。
  • 卷積神經網絡學習路線(五)| 卷積神經網絡參數設置,提高泛化能力?
    type:優化算法的選擇,一共有六種可選:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默認為SGD。原理建議看看史丹福大學的CS231N視頻課程。這樣做下來最後的輸入值域為[-1,1],一般減均值是最常用的,後面的除以方差用不用可能需要自己動手試驗一下看看效果。殘差結構和密集連接。
  • 一文看懂卷積神經網絡-CNN(基本原理+獨特價值+實際應用)
    卷積神經網絡 - CNN 最擅長的就是圖片的處理。它受到人類視覺神經系統的啟發。
  • CNN卷積神經網絡原理講解+圖片識別應用(附源碼)
    畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。這篇CNN卷積神經網絡的原理介紹,也是自己通過收集來的資料閱讀、理解、操練後,有了一定的見解後才拙筆,裡面的內容我會儘量詳盡,不清楚明白的地方,望大家慧眼指出。
  • 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理
    打開APP 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理 深度學習思考者 發表於 2017-11-15 18:58:34
  • 一文讀懂卷積神經網絡CNN
    卷積神經網絡簡介(Convolutional Neural Networks,簡稱CNN)卷積神經網絡是近年發展起來,並引起廣泛重視的一種高效識別方法。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網絡避免了對圖像的複雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。K.Fukushima在1980年提出的新識別機是卷積神經網絡的第一個實現網絡。隨後,更多的科研工作者對該網絡進行了改進。
  • CNN卷積神經網絡— LeNet(二)
    一般神經網絡VS卷積神經網絡:相同點:卷積神經網絡也使用一種反向傳播算法(BP)來進行訓練不同點:網絡結構不同。卷積神經網絡的網絡連接具有局部連接、參數共享的特點。局部連接:是相對於普通神經網絡的全連接而言的,是指這一層的某個節點只與上一層的部分節點相連。參數共享:是指一層中多個節點的連接共享相同的一組參數。
  • 卷積神經網絡(CNN)新手指南
    引言卷積神經網絡:聽起來像是生物與數學還有少量計算機科學的奇怪結合,但是這些網絡在計算機視覺領域已經造就了一些最有影響力的創新。以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。生物聯繫首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。
  • 【卷積神經網絡】04-1VGG網絡結構詳解與原理分析
    我們看最初的兩個卷積神經網絡LeNet和AlexNet,他們都是將一個n×n×c的圖像最終變成了1×1×k的矩陣。其中n表示的是輸入圖像的尺寸(行與列),c表示圖像的通道數(深度),取值為1或3,k表示的是最終分類的個數。
  • 「範例卷積神經網絡」和信息最大化
    這一方法也能被理解為「卷積神經網絡範例」。本文內容摘要:本文對「範例卷積神經網絡」的訓練方法僅作了簡單簡單的概述,所以如果想要獲得更多、更真實的信息,請閱讀論文原文。本文簡要介紹了「變分信息最大化」,並將其運用到了「範例卷積神經網絡」的案例中。
  • 卷積神經網絡(CNN)
    1.卷積神經網絡是在CNN也運用前向傳播與反向傳播求解參數卷積神經網絡(Convolutional Neural Networks,CNN)由若干個卷積層和池化層組成的深度神經網絡,它屬於深度神經網絡的一個特例,它用於圖像識別和自然語言處理
  • 在深度學習的革命中,談談卷積神經網絡(CNN)
    #掃描上方二維碼進入報名#文章連結:https://my.oschina.net/u/876354/blog/1620906作者:雪餅首發公眾號:大數據與人工智慧Lab這幾年深度學習快速發展,在圖像識別、語音識別、物體識別等各種場景上取得了巨大的成功,例如AlphaGo擊敗世界圍棋冠軍,iPhone X內置了人臉識別解鎖功能等等,很多AI產品在世界上引起了很大的轟動。
  • 卷積神經網絡(CNN)綜述
    卷積神經網絡概念2. 卷積神經網絡的特點   2.1 局部區域連接   2.2 權值共享   2.3 降採樣3. 卷積神經網絡的結構   3.1 卷積層   3.2 池化層4. 卷積神經網絡的研究進展1.
  • 給你一個卷積神經網絡工作原理最直觀的解釋
    卷積神經網絡(Convolutional Neural Network, CNN)是人工神經網絡的一種,是當下語音分析和圖像識別領域的研究熱點。這篇文章用最簡明的語言和最直觀的圖像,帶你入門CNN。準備好了嗎?Let’s go——我們先從最基礎的內容說起。對二維數位訊號(圖像)的操作,可以寫成矩陣形式。
  • 圖解:卷積神經網絡數學原理解析
    卷積神經網絡可能是這一巨大成功背後最關鍵的構建模塊。這一次,我們將加深理解神經網絡如何工作於CNNs。出於建議,這篇文章將包括相當複雜的數學方程,如果你不習慣線性代數和微分,請不要氣餒。我的目標不是讓你們記住這些公式,而是讓你們對下面發生的事情有一個直觀的認識。附註:在這篇文章中,我主要關注CNNs的一些典型問題。
  • 怎樣設計最優的卷積神經網絡架構?|NAS原理剖析
    但是,關於如何才能設計出最優的卷積神經網絡架構這個問題仍在處於探索階段。其中一大部分原因是因為當前那些取得成功的神經網絡的架構設計原理仍然是一個黑盒。雖然我們有著關於改進神經網絡表現的豐富心得,但其實並沒有真正了解神經網絡是如何達到當前這麼優秀的表現。關於CNNs的一些線索我們從如下幾點開始剖析。