深入卷積神經網絡背後的數學原理

2021-02-20 人工智慧頭條

轉載自 | AI科技大本營(id:rgznai100)

【導讀】在計算機神經視覺技術的發展過程中,卷積神經網絡成為了其中的重要組成部分,本文對卷積神經網絡的數學原理進行了介紹。

文章包括四個主要內容:卷積、卷積層、池化層以及卷積神經網絡中的反向傳播原理。在卷積部分的介紹中,作者介紹了卷積的定義、有效卷積和相同卷積、跨步卷積、3D卷積。

在卷積層部分,作者闡述了連接切割和參數共享對降低網絡參數學習量的作用。在池化層部分,作者介紹了池化的含義以及掩膜的使用。


自動駕駛、智能醫療、智能零售,這些曾被認為不可能實現的事情,在計算機視覺技術的幫助下,終於在最近成為了現實。今天,自動駕駛和自動雜貨店的夢想不再像以前那樣遙不可及。

事實上,每天我們都在使用計算機視覺技術幫助我們用人臉解鎖手機,或者對即將發布到社交媒體上的照片進行自動修飾。

在計算機視覺技術應用這一巨大成功的背後,卷積神經網絡(CNN)可能是其中最重要的組成部分。

在本文中,我們將逐步理解,神經網絡是如何與 CNN 特有的思想協作的。本文章包含了相當複雜的數學方程式,但如果您對線性代數和微積分不熟悉,請不要氣餒。

我的目標不是讓您記住那些公式,而是讓您從直覺上去理解這些公式背後隱藏的意義。

01

前言

在之前的系列中,我們學習了密集連接的神經網絡(densely connected neural networks)。

這些網絡的神經元被分成組,形成連續的層,相鄰的兩個層之間的神經元相互連接。下圖展示了一個密集連接的神經網絡的示例。

Figure 1. Densely connected neural network architecture


當我們解決分類問題時,如果我們的特徵是一組有限的並有明確定義的特徵,這種方法是很有效的——例如,根據足球運動員在比賽期間所記錄的統計數據,預測該運動員的位置。

但是,當使用照片來進行預測時,情況會變得更加複雜。我們當然可以將每個像素的亮度視為一個單獨的特徵,並將其作為輸入傳遞給我們的密集網絡(dense network)。

不幸的是,為了使神經網絡能夠處理典型的智慧型手機照片,該網絡必須包含數千萬甚至數億個神經元。

我們也可以通過縮小照片的尺寸來進行處理手機照片,但是這樣做會使我們丟失很多有價值的信息。

可以發現,這種傳統策略的性能很差,因此我們需要一種新的、更加聰明的方法來儘可能多地使用數據,並同時減少必要的計算和參數的數量。CNN 閃亮登場的時候到了。

02

數字圖像的數據結構

首先花一點時間來解釋一下數字圖像的存儲方式。數字圖像實際上是巨大的數字矩陣。矩陣中的每個數字對應於其像素的亮度。

在 RGB 模型中,彩色圖像由三個矩陣組成,分別對應三個顏色通道——紅,綠,藍。而在黑白圖像中,我們只需要一個矩陣。

矩陣中的每個數字的取值區間都是 0 到 255。該範圍是存儲圖像信息的效率(256個值剛好適合1個字節)與人眼的靈敏度(我們區分同種顏色的灰度級別的數量極限)之間的折衷。

 Figure 2. Data structure behind digital images

03

卷積

核卷積(kernel convolution)不僅僅用於 CNN,它還是許多其他計算機視覺算法的關鍵要素。

核卷積就是將一個小數字矩陣(濾波器,也稱作 kernel 或 filter)在圖像上進行滑動,並根據 kernel 的值,對圖像矩陣的值進行轉換的過程。對圖像經過卷積操作後得到的輸出稱為特徵映射(feature map)。

特徵映射的值的計算公式如下,其中 f 代表輸入圖像,h 代表濾波器 。結果矩陣的行數和列數分別用 m 和 n 表示。

       Figure 3. Kernel convolution example


將 kernel 放在選定的像素上後,我們從 kernel 中依次取出每個值,並將它們成對地與圖像中的相應值相乘。

最後,我們將每個核運算後的結果元素相加,並將求和結果放在輸出特徵圖中的正確位置上。

上圖從微觀角度詳細地展示了這一運算的過程,但在完整圖像上實施該運算的結果可能更加有趣。圖4展示了使用幾個不同 kernel 的卷積結果。

       Figure 4. Finding edges with kernel convolution 

04

有效卷積&相同卷積(Valid and Same Convolution)

正如我們在圖3中看到的,當我們使用 3x3 的 kernel 對 6x6 圖像執行卷積時,我們得到 4x4 的特徵映射。

這是因為在這個圖像中,只有16個位置可以將 kerenl 完整地放在這張圖像中。由於每次執行卷積時我們的圖像都會縮小,因此在我們的圖像完全消失之前,我們只能進行有限次數的卷積。

另外,如果對 kernel 在圖像中移動的過程進行觀察,我們就會發現圖像外圍像素的影響遠小於圖像中心像素的影響。

這樣會導致我們失去圖像中包含的一些信息。下圖展示了像素位置的改變對特徵圖的影響。

       Figure 5. Impact of pixel position


為了解決這兩個問題,我們可以使用額外的邊框來填充圖像(padding)。例如,如果使用 1像素進行填充,我們將圖像的大小增加到 8x8,因此使用 3x3 的 kernel 的卷積,其輸出尺寸將為 6x6 。

在實踐中,我們通常用零值來填充額外的邊界。根據是否使用填充,我們將處理兩種類型的卷積—— Valid 和 Same。

Valid —— 使用原始圖像,Same —— 使用原始圖像並使用它周圍的邊框,以便使輸入和輸出的圖像大小相同。

在第二種情況下,填充寬度應滿足以下等式,其中 p 是填充尺寸,f 是 kernel 尺寸(通常是奇數)。

 

05

跨步卷積(Strided Convolution)

       Figure 6. Example of strided convolution


在前面的例子中,我們總是每次將 kernel 移動一個像素,即步長為1。步長也可以視為卷積層的超參數之一。

圖 6 展示了使用更大步長時的卷積運算。在設計 CNN 架構時,如果希望感知域重疊較少,或者希望讓特徵圖的空間維度更小,我們可以增加步長。

輸出矩陣的尺寸(考慮填充和步長時)可以使用以下公式計算。

    

06

過渡到第三個維度

體積卷積(Convolution over volume)是一個非常重要的概念,這不僅使我們能夠處理彩色圖像,而且更為重要的是,我們能夠在單層網絡中使用多個 kernel 。

第一個規則是 kernel 和圖像必須具有相同數量的通道。一般而言,圖像的處理過程和圖3的示例非常相似,但是這次我們是將三維空間中的值對相乘。

如果想在同一個圖像上使用多個 kernel,首先我們要分別對每個 kernel 執行卷積,然後將結果從頂層向下進行疊加,最後將它們組合成一個整體。

輸出張量的尺寸(可以稱為3D矩陣)滿足以下等式,其中:n - 圖像大小,f  - 濾波器大小,nc  - 圖像中的通道數,p - 填充大小,s -  步幅大小,nf  - kernel 的數量。

       Figure 7. Convolution over volume

07

卷積層

接下來我們將用前面學到的知識來構建 CNN 的一個層。我們將要用到的方法幾乎與構建密集神經網絡時用到的相同,唯一有區別的地方是,我們不再使用簡單的矩陣乘法,而是使用卷積。

前向傳播包括兩個步驟。第一步是計算中間值 Z:首先將前一層的輸入數據與張量 W(包含濾波器)進行卷積,然後將運算後的結果加上偏差 b 。

第二步是將中間值 Z 輸入到非線性激活函數中(使用 g 表示該激活函數)。下面展示了矩陣形式的數學公式。

如果您對公式中的任何部分不太清楚,我強烈推薦您去閱讀一下我之前的文章,文中詳細討論了密集連接的神經網絡的具體內容。

下文的插圖很好地展示了公式中各張量的維數,以助於理解。

       Figure 8. Tensors dimensions

連接切割和參數共享(Connections Cutting and Parameters Sharing)

在本文的開頭曾提到,由於需要學習大量的參數,密集連接的神經網絡在處理圖像方面的能力很差,而卷積卻為該問題提供了一種解決方案,下面我們一起來看看卷積是如何優化圖像處理的計算的。

在下圖中,我們用一種略微不同的方式對 2D 卷積進行了可視化——用數字 1-9 標記的神經元構成輸入層,用於接收輸入圖像的像素亮度,單元 A-D 表示經過卷積計算後得到的特徵映射。

最後,I-IV 表示來自 kernel 的後續值,這些值是需要網絡進行學習的。

       Figure 9. Connections cutting and parameters sharing


現在,讓我們關注卷積層的兩個非常重要的屬性。第一,從圖中可以看到,並非兩個相鄰層中的所有神經元都相互連接。

例如,神經元 1 僅影響 A 的值。第二,我們可以發現一些神經元使用了相同的權重。這兩個屬性意味著在 CNN 中我們需要學習的參數要少得多。

值得一提的是,kernel 中的任一單值都會影響輸出特徵映射的每一個元素——這在反向傳播的過程中是至關重要的。

08

卷積層的反向傳播(Convolutional Layer Backpropagation)

任何曾經試圖從頭開始編寫神經網絡的人都知道,前向傳播還不到最終成功的一半。當你開始向回推算時,真正的樂趣才剛剛開始。

如今,我們不需要為反向傳播而煩惱——因為深度學習框架已經為我們做好了,但是我覺得有必要弄明白它背後發生的事情。

就像在密集連接的神經網絡中一樣,我們的目標是計算導數,然後在梯度下降的過程中,用這些導數去更新我們的參數值。

在下面的計算中,我們將用到鏈式法則 —— 這在我之前的文章中提到過。我們想要評估參數的變化對結果特徵映射的影響,以及隨之對最終結果的影響。

在開始詳細討論之前,我們需要將數學符號統一 —— 為了表示方便,我不會使用偏導數的完整符號,而是用下面提到的縮符號。

但是請記住,當我使用這種表示法時,這將始終代表著成本函數的偏導。

            Figure 10. Input and output data for a single convolution layer in forward and backward propagation


我們的任務是計算 dW [1] 和 db [l] (它們是與當前層參數相關的導數),以及 dA[l-1](它將被傳遞給前一層)。

如圖10所示,dA[l] 作為輸入,張量 dW 和 W,db 和 b 以及 dA 和 A 的維度分別相同。第一步是求激活函數關於輸入張量的導數,將其結果記為 dZ [1] 。根據鏈式法則,該運算的結果將在後面用到。

    

現在,我們需要處理卷積自身的反向傳播。為了實現這個目標,我們將利用一個稱為全卷積的矩陣運算,該運算的可視化解釋如下圖所示。

請注意,在此過程中我們要使用 kernel,而我們之前用到的 kernel 是該 kernel 旋轉了180度所得到的。

該操作可以用以下公式表示,其中 kernel 由 W 表示,dZ[m,n] 是一個標量,該標量屬於從前一層所獲得的偏導數。

   

       Figure 11. Full convolution

09

池化層(Pooling Layers)

除了卷積層之外,CNN 經常使用一個稱為池化層的網絡層,它們主要用於減小張量的大小並加快計算速度。

這個層的結構很簡單,我們只需要將圖像劃分成不同的區域,然後對每個部分執行一些操作即可。

例如,對於最大池化層(Max Pool Layer),我們從每個區域中選擇一個最大值,並將其放在輸出中的相應位置即可。

與卷積層的情況一樣,我們有兩個超參數——kernel 的尺寸和步長。

最後值得一提是,如果要為多通道圖像執行池化操作,則每個通道都應該分別執行池化操作。

      Figure 12. Max pooling example

10

池化層的反向傳播(Pooling Layers Backpropagation)

在本文中,我們僅討論最大池化的反向傳播(max pooling backpropagation),但是通過將該方法稍作調整,便可運用到其他所有類型的池化層。

由於在池化層這種類型的層中,我們不用更新任何參數,我們的任務只是適度地分配梯度值。

前文講到,在最大池化的前向傳播中,我們從每個區域中選擇最大值並將它們傳輸到下一層。

因此很明顯,在反向傳播期間,梯度不會影響未在前向傳播中使用的矩陣元素。

在實際操作中,該過程是通過創建一個掩膜(mask)來實現的,該掩膜會記住在前向傳播中所使用的元素的位置,隨後我們就可以用該掩膜來傳遞梯度。

       Figure 13. Max pooling backward pass

原文地址:

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

作者 | Piotr Skalski

譯者 | Monanfei

編輯 | 十月Rachel、Jane

# 點擊「閱讀原文」 技術書限時特價中 #

相關焦點

  • 卷積神經網絡數學原理解析
    事實上,我們每天都在使用計算機視覺——當我們用面部解鎖手機或在社交媒體上發照片前使用自動修圖。卷積神經網絡可能是這一巨大成功背後最關鍵的構建模塊。這一次,我們將加深理解神經網絡如何工作於CNNs。出於建議,這篇文章將包括相當複雜的數學方程,如果你不習慣線性代數和微分,請不要氣餒。我的目標不是讓你們記住這些公式,而是讓你們對下面發生的事情有一個直觀的認識。
  • 卷積神經網絡概念與原理
    近年來卷積神經網絡在多個方向持續發力,在語音識別、人臉識別、通用物體識別、運動分析、自然語言處理甚至腦電波分析方面均有突破。       卷積神經網絡與普通神經網絡的區別在於,卷積神經網絡包含了一個由卷積層和子採樣層構成的特徵抽取器。在卷積神經網絡的卷積層中,一個神經元只與部分鄰層神經元連接。
  • 卷積神經網絡工作原理直觀的解釋
    隨意地應用神經網絡是一回事,理解它是什麼以及背後的發生機制是另外一回事。今天,我將與你共享我的心得,展示我如何上手卷積神經網絡並最終弄明白了它。我將做一個通盤的展示,從而使你對 CNN 的工作機制有一個深入的了解。
  • 卷積神經網絡CNN:卷積的來源和原理
    卷積神經網絡(Convolutional Neural Network,簡稱為CNN或ConvNet)是一種具有
  • 卷積神經網絡(CNN)
    1.卷積神經網絡是在CNN也運用前向傳播與反向傳播求解參數卷積神經網絡(Convolutional Neural Networks,CNN)由若干個卷積層和池化層組成的深度神經網絡,它屬於深度神經網絡的一個特例,它用於圖像識別和自然語言處理
  • 卷積神經網絡學習路線(五)| 卷積神經網絡參數設置,提高泛化能力?
    type:優化算法的選擇,一共有六種可選:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默認為SGD。原理建議看看史丹福大學的CS231N視頻課程。這樣做下來最後的輸入值域為[-1,1],一般減均值是最常用的,後面的除以方差用不用可能需要自己動手試驗一下看看效果。殘差結構和密集連接。
  • 一文看懂卷積神經網絡-CNN(基本原理+獨特價值+實際應用)
    卷積神經網絡 - CNN 最擅長的就是圖片的處理。它受到人類視覺神經系統的啟發。
  • 卷積神經網絡(CNN)新手指南
    引言卷積神經網絡:聽起來像是生物與數學還有少量計算機科學的奇怪結合,但是這些網絡在計算機視覺領域已經造就了一些最有影響力的創新。以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。生物聯繫首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。
  • 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理
    打開APP 神奇GIF動畫讓你秒懂各種深度學習卷積神經網絡操作原理 深度學習思考者 發表於 2017-11-15 18:58:34
  • 一文讀懂卷積神經網絡CNN
    卷積神經網絡簡介(Convolutional Neural Networks,簡稱CNN)卷積神經網絡是近年發展起來,並引起廣泛重視的一種高效識別方法。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網絡避免了對圖像的複雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。K.Fukushima在1980年提出的新識別機是卷積神經網絡的第一個實現網絡。隨後,更多的科研工作者對該網絡進行了改進。
  • 梯度上升可視化卷積神經網絡
    通過分析CNN網絡模型中的卷積核,我們將會看到每一層卷積核到底提取的是什麼樣的內容、紋理、特徵。當我們深入了解CNN模型提取特徵背後的意義,就可以有足夠信心去修改卷積神經網絡CNN的參數。下面我們將會利用已經訓練好的VGG16網絡模型,來系統地可視化各個網絡層的各個卷積核,看看CNN是對輸入進行逐層分解提取特徵的到底都是些什麼。
  • CNN卷積神經網絡— LeNet(二)
    一般神經網絡VS卷積神經網絡:相同點:卷積神經網絡也使用一種反向傳播算法(BP)來進行訓練不同點:網絡結構不同。卷積神經網絡的網絡連接具有局部連接、參數共享的特點。局部連接:是相對於普通神經網絡的全連接而言的,是指這一層的某個節點只與上一層的部分節點相連。參數共享:是指一層中多個節點的連接共享相同的一組參數。
  • 怎樣設計最優的卷積神經網絡架構?|NAS原理剖析
    但是,關於如何才能設計出最優的卷積神經網絡架構這個問題仍在處於探索階段。其中一大部分原因是因為當前那些取得成功的神經網絡的架構設計原理仍然是一個黑盒。雖然我們有著關於改進神經網絡表現的豐富心得,但其實並沒有真正了解神經網絡是如何達到當前這麼優秀的表現。關於CNNs的一些線索我們從如下幾點開始剖析。
  • 深入卷積神經網絡:高級卷積層原理和計算的可視化
    在計算機視覺的深度學習研究方面,許多流行的高級卷積神經網絡實現都使用了這些層。這些層中的每一層都有不同於原始卷積層的機制,這使得每種類型的層都有一個特別特殊的功能。在進入這些高級的卷積層之前,讓我們先快速回顧一下原始的卷積層是如何工作的。
  • CNN卷積神經網絡原理講解+圖片識別應用(附源碼)
    畢竟這些內容大多都是不可查的,我們看到的都只是輸入輸出的東西,裡面的內部運作以及工作原理,都需要沉心靜思。這篇CNN卷積神經網絡的原理介紹,也是自己通過收集來的資料閱讀、理解、操練後,有了一定的見解後才拙筆,裡面的內容我會儘量詳盡,不清楚明白的地方,望大家慧眼指出。
  • 【卷積神經網絡】04-1VGG網絡結構詳解與原理分析
    我們看最初的兩個卷積神經網絡LeNet和AlexNet,他們都是將一個n×n×c的圖像最終變成了1×1×k的矩陣。其中n表示的是輸入圖像的尺寸(行與列),c表示圖像的通道數(深度),取值為1或3,k表示的是最終分類的個數。
  • 第六講 走進卷積神經網絡
    從本講開始,我們正式進入卷積神經網絡(Conventional Neural Networks, CNN)的學習了
  • 卷積神經網絡(CNN,ConvNet)及其原理詳解
    卷積神經網絡(CNN,有時被稱為 ConvNet)是很吸引人的。
  • 【深度學習】卷積神經網絡-CNN簡單理論介紹
    當然,這裡默認讀者對神經網絡有一定的了解和認識,如果有疑問可留言,本文也不介紹太多關於數學的內容,以便於讀者理解,如有需要後期更新相關數學推導。1 卷積神經網絡簡介通常有:當然也還包括神經網絡常用的激活層,正則化層等。
  • 「範例卷積神經網絡」和信息最大化
    這一方法也能被理解為「卷積神經網絡範例」。本文內容摘要:本文對「範例卷積神經網絡」的訓練方法僅作了簡單簡單的概述,所以如果想要獲得更多、更真實的信息,請閱讀論文原文。本文簡要介紹了「變分信息最大化」,並將其運用到了「範例卷積神經網絡」的案例中。