刷臉背後:卷積神經網絡的數學原理

2020-11-22 千家智客

[導讀]我們每天都在使用計算機視覺技術——我們用自己的面孔解鎖手機,將圖片上傳到社交網絡之前進行自動修圖……卷積神經網絡可能是這一巨大成功背後的關鍵組成模塊。

計算機視覺技術在日常生活中有著非常普遍的應用:發朋友圈之前自動修圖、網上購物時刷臉支付……在這一系列成功的應用背後,卷積神經網絡功不可沒。本文將介紹卷積神經網絡背後的數學原理。

在自動駕駛、醫療以及零售這些領域,計算機視覺讓我們完成了一些直到最近都被認為是不可能的事情。今天,自動駕駛汽車和無人商店聽起來不再那麼夢幻。事實上,我們每天都在使用計算機視覺技術——我們用自己的面孔解鎖手機,將圖片上傳到社交網絡之前進行自動修圖……卷積神經網絡可能是這一巨大成功背後的關鍵組成模塊。這次,我們將要使用卷積神經網絡的思想來拓寬我們對神經網絡工作原理的理解。打個預防針,本文包含相當複雜的數學方程,但是,你也不必為自己不喜歡線性代數和微積分而沮喪。我的目標並不是讓你記住這些公式,而是為你提供一些關於底層原理的直覺認知。

簡介

過去我們接觸到了密集連接的神經網絡。那些神經網絡中,所有的神經元被分成了若干組,形成了連續的層。每個這樣的單元都與相鄰層的每一個單獨的神經元相連接。下圖所示的是這樣一個架構。

圖 1:密集連接的神經網絡架構

當我們基於一個有限的固定特徵集合解決分類問題的時候,這種方法是很奏效的——例如,我們根據足球運動員在比賽中記錄的統計數據來預測他的位置。但是,當處理照片的時候,問題變得更加複雜。當然,我們可以把每個像素的亮度視作一個單獨的特徵,然後將它作為密集網絡的輸入傳遞進去。不幸的是,為了讓它能夠應付一張典型的智慧型手機照片,我們的網絡必須包含數千萬甚至上億的神經元。另一方面,雖然我們可以將照片縮小,但是我們也會在這個過程中損失有價值的信息。所以我們馬上就會發現,傳統的策略是沒有用的——我們需要一種新的聰明的方法,來儘可能多的利用數據,但同時還要減少必需的計算量和參數。這就是 CNN 發揮作用的時候了。

數字照片的數據結構

讓我們先花少許時間解釋一下數字圖像的存儲方式。大多數人可能意識到了,圖像實際上就是巨大的數字矩陣。每個數字代表的是一個單獨像素的亮度。在 RGB 模型中,彩色圖片是由 3 個這樣的矩陣組成的,每個矩陣對應著 3 個顏色通道(紅、綠、藍)中的一個。在黑白圖像中,我們僅使用一個矩陣。每個矩陣都存儲著 0 到 255 的數值。這個數值範圍是圖像存儲信息的效率(256 個數值剛好對應一個字節)和人眼敏感度之間的折中(我們僅能區分同種顏色的幾種有限色度)。

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

卷積

核卷積並不僅僅用在卷積神經經網絡中,它也是很多其他計算機視覺算法的關鍵元素。這個過程是這樣的:我們有一個小的數字矩陣(稱作卷積核或濾波器),我們將它傳遞到我們的圖像上,然後基於濾波器的數值進行變換。後續的特徵圖的值要通過下面的公式計算,其中輸入圖像被記作 f,我們的卷積核為 h。計算結果的行列索引分別記為 m 和 n。

圖 3. 核卷積的例子

在將我們的濾波器放在選中的像素上之後,我們將卷積核中的每一個數值和圖像中對應的數值成對相乘。最後將乘積的結果相加,然後把結果放在輸出特徵圖的正確位置上。我們在上邊的動畫中可以以一個微觀的形式看到這個運算的過程,但是更有趣的是我們在整幅圖像上執行這個運算得到的結果。圖 4 展示了用數個濾波器做卷積的結果。

圖 4. 用卷積核尋找邊緣

Valid 和 Same 的卷積

如圖 3 所示,當我們在用 3x3 的卷積核在 6x6 的圖像上執行卷積時,我們得到了 4x4 的特徵圖。這是因為在我們的圖像裡面,只有 16 個獨特的位置來放置卷積核。由於我們的圖像的尺寸在每次卷積的時候都會收縮,在圖像完全消失之前,我們只能做有限次的卷積。此外,如果我們注意一下卷積核是如何在圖像上移動的,我們會發現,邊緣的像素會比中央的像素影響更小。這樣的話我們會損失圖片中包含的一些信息,你可以在下圖看到,像素的位置是如何改變它對特徵圖的影響的。

圖 5. 像素位置的影響

為了解決這兩個問題,我們可以使用一個額外的邊界來填充圖像。例如,如果我們使用 1 像素的填充,我們將圖像的尺寸增大到了 8x8,這樣,3x3 的濾波器的輸出將會成為 6x6。通常在實際中我們用 0 來做額外的填充。根據我們是否使用填充,我們會進行兩種類型的卷積——Valid 和 Same。命名相當令人費解,所以在這裡解釋一下:valid 代表我們使用的是原始圖像,same 代表我們在圖像周圍使用了邊界,因此輸入和輸出的圖像大小相同。在第二種情況下,擴充的寬度應該滿足下面的方程,其中 p 是 padding(填充),f 是濾波器的維度(通常是奇數)。

跨步卷積

圖 6. 跨步卷積的例子

在之前的例子中,我們總是將卷積核移動一個像素。但是,步長也可以看做是卷積層的一個參數。在圖 6 中,我們可以看到,如果我們使用更大的步長,卷積會成為什麼樣子。在設計 CNN 結構時,如果我們想讓接受域有更少的重疊或者想讓特徵圖有更小的空間維度,那麼我們可以決定增大步長。考慮到擴充和跨步,輸出矩陣的維度可以使用下面的公式計算:

轉換到第三個維度

立體卷積是一個非常重要的概念,它不僅讓我們能夠處理彩色圖像,而且更重要的是,可以在一個單獨的層上使用多個濾波器。最重要的規則是,濾波器和你想在其上應用濾波器的圖像必須擁有相同的通道數。基本上,我們繼續使用和圖 3 類似的示例,儘管我們這次從第三個維度讓矩陣中的數值對相乘。如果我們想在同一張圖像上應用多個濾波器,我們會為每個濾波器獨立地計算卷積,然後將計算結果逐個堆疊,最後將他們組合成一個整體。得到的張量(3D 矩陣可以被稱作張量)滿足下面的方程,其中:n 是圖像的大小,f 是濾波器的大小,n_c 是圖像中的通道數,p 是所用的填充,s 是所用的步長,n_f 是濾波器的數量。

圖 7. 立體卷積

卷積層

使用我們今天所學內容構造一個卷積層的時間到了。我們的方法幾乎與用在密集連接神經網絡上的方法相同,唯一的差別就是不使用簡單的矩陣相乘,這一次我們將會使用卷積。前向傳播包含兩個步驟。第一步是計算中間結果 Z,它是由前一層的輸入數據與張量 W(包含濾波器)的卷積結果,加上偏置項 b 得到的。第二步是給我們的中間結果應用一個非線性的激活函數(我們的激活函數記作 g)。矩陣方程的愛好者將在下面找到合適的數學公式。在下面的插圖中,你可以看見一個小型的可視化,它描述了我們方程中用到的張量的維度。

圖 8. 張量維度

連接剪切和參數共享

在本文開始,由於需要學習的參數數量巨大,我提到密集連接神經網絡在處理圖像方面是很弱的。既然我們已經了解了關於卷積的所有內容,讓我們來考慮一下它是如何優化計算的吧。在下圖中,2D 卷積以一種稍微不同的方式進行了可視化——用數字 1-9 標記的神經元組成接收後續像素亮度的輸入層,A-D 這 4 個單元代表的是計算得到的特徵圖元素。最後但同等重要的是,I-IV 是卷積核中的數值——它們必須被學習到。

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

現在,讓我們聚焦於卷積層的兩個重要屬性。第一,你可以看到,連續兩層中,並不是所有的神經元都是彼此相連的。例如,單元 1 僅僅會影響到 A 的值。第二,我們發現,一些神經元會共享相同的權重。這兩個屬性都意味著我們要學習的參數數量要少很多。順便說一下,值得注意的是,濾波器中的每個值都會影響到特徵圖中的每個元素——這在反向傳播中是特別重要的。

卷積層反向傳播

任何一個曾經試圖從零編寫自己的神經網絡的人都知道,前向傳播遠遠不到成功的一半。真正有趣的是當你開始反向傳播的時候。現在,我們不必在反向傳播上花心思——深度學習框架都為我們做好了,但是我認為,了解背後發生的東西是很值得的。就像在密集連接神經網絡中一樣,我們的目標是在一個叫做梯度下降的過程中計算導數,然後使用它們來更新參數值。

在計算中我們會使用鏈式法則——這個我在之前的文章中提到過。我們想要評估參數的變化對結果特徵圖的影響,然後評估它對最終結果的影響。在開始進入細節之前,讓我們來統一一下將會用到的數學符號——為了讓事情變得容易一些,我會放棄偏導數的完整符號,而會使用下面的簡寫符號。但是請記住,這個符號始終代表代價函數的偏導數。

圖 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. 全卷積

池化層

除了卷積層,CNN 通常會用到所謂的池化層。它們最早被用來減小張量的大小以及加速運算。這些層是比較簡單的——我們需要將我們的圖像分成不同的區域,然後在每一個部分上執行一些運算。例如,對 Max Pool 層而言,我們會選擇每個區域的最大值,並將它放到對應的輸出區域。與卷積層的情況一樣,我們有兩個可用的超參數——濾波器大小和步長。最後但同樣重要的一點是,如果你對一個多通道的圖像執行池化操作,那麼每一個通道的池化應該單獨完成。

圖 12. 最大池化(max pooling)的例子

池化層反向傳播

我們在這篇文章中只討論最大池化反向傳播,但是我們學到的規則是適用於所有類型的池化層的——只需要做微小的調整即可。因為在這種層中,我們沒有任何必須更新的參數,所以我們的任務就是合適地分配梯度。我們記得,在最大池化的前向傳播中,我們選擇的是每個區域的最大值,並將它傳遞到了下一層。所以在反向傳播中也是很清晰的,梯度不應該影響前向傳播中不包含的矩陣的元素。實際上,這是通過創建一個掩膜來完成的,這個掩膜記住了前一階段數值的位置,我們可以在後面轉移梯度的時候用到。

圖 13. 最大池化反向傳播

相關焦點

  • 人工智慧之卷積神經網絡(CNN)
    ^_^本文引用地址:http://www.eepw.com.cn/article/201806/381807.htm  20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於局部敏感和方向選擇的神經元時發現其獨特的網絡結構可以有效地降低反饋神經網絡的複雜性,繼而提出了卷積神經網絡CNN(Convolutional Neural Networks)。
  • 卷積神經網絡數學原理解析
    卷積神經網絡可能是這一巨大成功背後最關鍵的構建模塊。這一次,我們將加深理解神經網絡如何工作於CNNs。出於建議,這篇文章將包括相當複雜的數學方程,如果你不習慣線性代數和微分,請不要氣餒。我的目標不是讓你們記住這些公式,而是讓你們對下面發生的事情有一個直觀的認識。
  • 萬字長文|如何直觀解釋卷積神經網絡的工作原理?
    作者:YJango 日本會津大學|人機互動實驗室博士生 量子位 已獲授權編輯發布 該文是對卷積神經網絡的介紹,並假設你理解前饋神經網絡。 如果不是,強烈建議讀完《如何簡單形象又有趣地講解神經網絡是什麼?》
  • 深入理解卷積網絡的卷積
    卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。它們專門處理具有網格狀拓撲結構的數據。例如,時間序列數據和圖像數據可以看作是一個二維像素網格。
  • AI入門:卷積神經網絡
    講到AI不得不講深度學習,而講到深度學習,又不能不講卷積神經網絡。如果把深度學習比作中國的網際網路界,那捲積神經網絡和循環神經網絡就是騰訊和阿里級別的地位。今天我們主要討論的卷積神經網絡,到底卷積神經網絡能解決什麼問題,它的結構是怎樣的?是怎麼學習的?應用在哪些具體的產品上?本文將為大家一一解答。
  • 環信人工智慧專家李理:詳解卷積神經網絡
    深度學習受到大家的關注很大一個原因就是Alex等人實現的AlexNet(一種深度卷積神經網絡)在LSVRC-2010 ImageNet這個比賽中取得了非常好的成績。此後,卷積神經網絡及其變種被廣泛應用於各種圖像相關任務。 這裡主要參考了Neural Networks and Deep Learning和cs231n的課程來介紹CNN,兩部分都會有理論和代碼。
  • 孫啟超:卷積神經網絡在人臉識別技術中的應用 | AI研習社第51期猿...
    而人臉識別中的關鍵技術就是卷積神經網絡。近日,在雷鋒網 AI 研習社公開課上,法國蒙彼利埃大學孫啟超就講述了卷積神經網絡的基本原理以及人臉識別技術是如何運行的。公開課回放視頻網址:http://www.mooc.ai/open/course/524孫啟超:法國蒙彼利埃大學 MBA 在讀,CSDN 百萬博客專家。
  • 機器視角:長文揭秘圖像處理和卷積神經網絡架構
    我嘗試去理解神經網絡及其變體,但依然感到困難。接著有一天,我決定一步一步,從基礎開始。我把技術操作的步驟分解開來,並手動執行這些步驟(和計算),直到我理解它們如何工作。這相當費時,且令人緊張,但是結果非凡。現在,我不僅對深度學習有了全面的理解,還在此基礎上有了好想法,因為我的基礎很紮實。隨意地應用神經網絡是一回事,理解它是什麼以及背後的發生機制是另外一回事。
  • PyTorch可視化理解卷積神經網絡
    造就機器能夠獲得在這些視覺方面取得優異性能可能是源於一種特定類型的神經網絡——卷積神經網絡(CNN)。如果你是一個深度學習愛好者,你可能早已聽說過這種神經網絡,並且可能已經使用一些深度學習框架比如caffe、TensorFlow、pytorch實現了一些圖像分類器。然而,這仍然存在一個問題:數據是如何在人工神經網絡傳送以及計算機是如何從中學習的。
  • 深度學習之卷積神經網絡經典模型
    LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一個成功大規模應用在手寫數字識別問題的卷積神經網絡,在MNIST數據集中的正確率可以高達99.2%。下面詳細介紹一下LeNet-5模型工作的原理。LeNet-5模型一共有7層,每層包含眾多參數,也就是卷積神經網絡中的參數。
  • 如何從信號分析角度理解卷積神經網絡的複雜機制?
    機器之心原創作者:Qintong Wu參與:Jane W隨著複雜和高效的神經網絡架構的出現,卷積神經網絡(CNN)的性能已經優於傳統的數字圖像處理方法,如 SIFT 和 SURF。在計算機視覺領域,學者們開始將研究重點轉移到 CNN,並相信 CNN 是這一領域的未來趨勢。但是,人們對成效卓著的 CNN 背後的機理卻缺乏了解。
  • 一文了解卷積神經網絡基礎,建議收藏
    今天給大家講一下卷積神經網絡,主要包括四個部分:卷積神經網絡的歷史、全連接層、卷積層和池化層。CNN的英文全稱是Convolutional Neural Network,雛形是LeCun在1998年發明的LeNet網絡結構。
  • 卷積神經網絡的卷積到底是什麼
    卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。神經網絡的研究經歷了一個寒冷的冬天,直到2012年,多倫多大學的一組研究人員在著名的ImageNet挑戰賽中進入了一個基於CNN的模型(AlexNet),最終以16.4%的錯誤率贏得了比賽。此後,卷積神經網絡不斷向前發展,基於CNN的體系結構不斷贏得ImageNet, 2015年,基於卷積神經網絡的體系結構ResNet的誤差率超過人類水平的5.1%,誤差率為3.57%。
  • 從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡 (二)
    在從圖(Graph)到圖卷積(Graph Convolution): 漫談圖神經網絡 (一)中,我們簡單介紹了基於循環圖神經網絡的兩種重要模型,在本篇中,我們將著大量筆墨介紹圖卷積神經網絡中的卷積操作。接下來,我們將首先介紹一下圖卷積神經網絡的大概框架,藉此說明它與基於循環的圖神經網絡的區別。
  • 一文讓你徹底了解卷積神經網絡
    卷積神經網絡(Convolutional Neural Network,CNN)是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型圖像處理有出色表現。 它包括卷積層(convolutional layer)和池化層(pooling layer)。
  • 知識普及:卷積神經網絡模型是怎樣工作的?可以做些什麼?
    知識普及:卷積神經網絡模型是怎樣工作的?可以做些什麼? 眾所周知,在過去的幾年裡,卷積神經網絡(CNN或ConvNet)在深度學習領域取得了許多重大突破,但對於大多數人而言,這個描述是相當不直觀的。因此,要了解模型取得了怎樣大的突破,我們應該先了解卷積神經網絡是怎樣工作的。 卷積神經網絡可以做些什麼? 卷積神經網絡用於在圖像中尋找特徵。在CNN的前幾層中,神經網絡可以進行簡單的「線條」和「角」的識別。
  • 深度卷積神經網絡應用於量子計算機
    另一方面,機器學習,尤其是神經網絡,正在粗略地使用向量和矩陣來理解或處理數據。量子機器學習(QML)旨在使用量子系統對向量進行編碼,並使用新的量子算法對其進行學習。一個關鍵的概念是在許多矢量上使用量子疊加,我們可以同時處理它們。
  • 神經網絡及其背後的數學——簡化概念,人人都可以理解
    網絡架構是一個活躍的研究領域,每年都有許多這樣的論文發表。一般來說,神經網絡有5大類:1、前饋神經網絡:這些神經網絡是最簡單人工神經網絡形式之一,其中的數據被饋送到網絡,並只在一個方向移動。數據通過輸入節點並在輸出節點上退出。這個神經網絡可以有,也可以沒有隱含層,這就是為什麼我們叫它前饋網絡。
  • PyTorch中的傅立葉卷積:通過FFT計算大核卷積的數學原理和代碼
    卷積卷積在數據分析中無處不在。 幾十年來,它們已用於信號和圖像處理。 最近,它們已成為現代神經網絡的重要組成部分。在數學上,卷積表示為:儘管離散卷積在計算應用程式中更為常見,但由於本文使用連續變量證明卷積定理(如下所述)要容易得多,因此在本文的大部分內容中,我將使用連續形式。 之後,我們將返回離散情況,並使用傅立葉變換在PyTorch中實現它。 離散卷積可以看作是連續卷積的近似值,其中連續函數在規則網格上離散化。
  • 了解CNN這一篇就夠了:卷積神經網絡技術及發展
    在不同類型的神經網絡當中,卷積神經網絡是得到最深入研究的。早期由於缺乏訓練數據和計算能力,要在不產生過擬合的情況下訓練高性能卷積神經網絡是很困難的。標記數據和近來GPU的發展,使得卷積神經網絡研究湧現並取得一流結果。本文中,我們將縱覽卷積神經網絡近來發展,同時介紹卷積神經網絡在視覺識別方面的一些應用。