在深度學習的革命中,談談卷積神經網絡(CNN)

2021-02-15 OSC開源社區

#掃描上方二維碼進入報名#

文章連結:https://my.oschina.net/u/876354/blog/1620906

作者:雪餅

首發公眾號:大數據與人工智慧Lab

這幾年深度學習快速發展,在圖像識別、語音識別、物體識別等各種場景上取得了巨大的成功,例如AlphaGo擊敗世界圍棋冠軍,iPhone X內置了人臉識別解鎖功能等等,很多AI產品在世界上引起了很大的轟動。在這場深度學習革命中,卷積神經網絡(Convolutional Neural Networks,簡稱CNN)是推動這一切爆發的主力,在目前人工智慧的發展中有著非常重要的地位。

【問題來了】那什麼是卷積神經網絡(CNN)呢?

1、小白一下,什麼是神經網絡?


這裡的神經網絡,也指人工神經網絡(Artificial Neural Networks,簡稱ANNs),是一種模仿生物神經網絡行為特徵的算法數學模型,由神經元、節點與節點之間的連接(突觸)所構成,如下圖:


 

每個神經網絡單元抽象出來的數學模型如下,也叫感知器,它接收多個輸入(x1,x2,x3...),產生一個輸出,這就好比是神經末梢感受各種外部環境的變化(外部刺激),然後產生電信號,以便於轉導到神經細胞(又叫神經元)。


 

單個的感知器就構成了一個簡單的模型,但在現實世界中,實際的決策模型則要複雜得多,往往是由多個感知器組成的多層網絡,如下圖所示,這也是經典的神經網絡模型,由輸入層、隱含層、輸出層構成。


 

人工神經網絡可以映射任意複雜的非線性關係,具有很強的魯棒性、記憶能力、自學習等能力,在分類、預測、模式識別等方面有著廣泛的應用。

2、重點來了,什麼是卷積神經網絡?


卷積神經網絡在圖像識別中大放異彩,達到了前所未有的準確度,有著廣泛的應用。接下來將以圖像識別為例子,來介紹卷積神經網絡的原理。


(1)案例


假設給定一張圖(可能是字母X或者字母O),通過CNN即可識別出是X還是O,如下圖所示,那怎麼做到的呢


 

(2)圖像輸入


如果採用經典的神經網絡模型,則需要讀取整幅圖像作為神經網絡模型的輸入(即全連接的方式),當圖像的尺寸越大時,其連接的參數將變得很多,從而導致計算量非常大。


而我們人類對外界的認知一般是從局部到全局,先對局部有感知的認識,再逐步對全體有認知,這是人類的認識模式。在圖像中的空間聯繫也是類似,局部範圍內的像素之間聯繫較為緊密,而距離較遠的像素則相關性較弱。

因而,每個神經元其實沒有必要對全局圖像進行感知,只需要對局部進行感知,然後在更高層將局部的信息綜合起來就得到了全局的信息。這種模式就是卷積神經網絡中降低參數數目的重要神器:局部感受野。


 

(3)提取特徵


如果字母X、字母O是固定不變的,那麼最簡單的方式就是圖像之間的像素一一比對就行,但在現實生活中,字體都有著各個形態上的變化(例如手寫文字識別),例如平移、縮放、旋轉、微變形等等,如下圖所示:


 

我們的目標是對於各種形態變化的X和O,都能通過CNN準確地識別出來,這就涉及到應該如何有效地提取特徵,作為識別的關鍵因子。


回想前面講到的「局部感受野」模式,對於CNN來說,它是一小塊一小塊地來進行比對,在兩幅圖像中大致相同的位置找到一些粗糙的特徵(小塊圖像)進行匹配,相比起傳統的整幅圖逐一比對的方式,CNN的這種小塊匹配方式能夠更好的比較兩幅圖像之間的相似性。如下圖:


 

以字母X為例,可以提取出三個重要特徵(兩個交叉線、一個對角線),如下圖所示:


 

假如以像素值"1"代表白色,像素值"-1"代表黑色,則字母X的三個重要特徵如下:


 

那麼這些特徵又是怎麼進行匹配計算呢?(不要跟我說是像素進行一一匹配的,汗!)


(4)卷積(Convolution)


這時就要請出今天的重要嘉賓:卷積。

那什麼是卷積呢,不急,下面慢慢道來。


當給定一張新圖時,CNN並不能準確地知道這些特徵到底要匹配原圖的哪些部分,所以它會在原圖中把每一個可能的位置都進行嘗試,相當於把這個feature(特徵)變成了一個過濾器。這個用來匹配的過程就被稱為卷積操作,這也是卷積神經網絡名字的由來。


卷積的操作如下圖所示:


 

是不是很像把毛巾沿著對角捲起來,下圖形象地說明了為什麼叫「卷」積


 

在本案例中,要計算一個feature(特徵)和其在原圖上對應的某一小塊的結果,只需將兩個小塊內對應位置的像素值進行乘法運算,然後將整個小塊內乘法運算的結果累加起來,最後再除以小塊內像素點總個數即可(註:也可不除以總個數的)。


如果兩個像素點都是白色(值均為1),那麼1*1 = 1,如果均為黑色,那麼(-1)*(-1) = 1,也就是說,每一對能夠匹配上的像素,其相乘結果為1。類似地,任何不匹配的像素相乘結果為-1。具體過程如下(第一個、第二個……、最後一個像素的匹配結果):


 
 
 

根據卷積的計算方式,第一塊特徵匹配後的卷積計算如下,結果為1


 

對於其它位置的匹配,也是類似(例如中間部分的匹配)


 
計算之後的卷積如下


 

以此類推,對三個特徵圖像不斷地重複著上述過程,通過每一個feature(特徵)的卷積操作,會得到一個新的二維數組,稱之為feature map。其中的值,越接近1表示對應位置和feature的匹配越完整,越是接近-1,表示對應位置和feature的反面匹配越完整,而值接近0的表示對應位置沒有任何匹配或者說沒有什麼關聯。如下圖所示:


 

可以看出,當圖像尺寸增大時,其內部的加法、乘法和除法操作的次數會增加得很快,每一個filter的大小和filter的數目呈線性增長。由於有這麼多因素的影響,很容易使得計算量變得相當龐大。


(5)池化(Pooling)


為了有效地減少計算量,CNN使用的另一個有效的工具被稱為「池化(Pooling)」。池化就是將輸入圖像進行縮小,減少像素信息,只保留重要信息。


池化的操作也很簡單,通常情況下,池化區域是2*2大小,然後按一定規則轉換成相應的值,例如取這個池化區域內的最大值(max-pooling)、平均值(mean-pooling)等,以這個值作為結果的像素值。


下圖顯示了左上角2*2池化區域的max-pooling結果,取該區域的最大值max(0.77,-0.11,-0.11,1.00),作為池化後的結果,如下圖:


 

池化區域往左,第二小塊取大值max(0.11,0.33,-0.11,0.33),作為池化後的結果,如下圖:


 

其它區域也是類似,取區域內的最大值作為池化後的結果,最後經過池化後,結果如下:


 

對所有的feature map執行同樣的操作,結果如下:


 

最大池化(max-pooling)保留了每一小塊內的最大值,也就是相當於保留了這一塊最佳的匹配結果(因為值越接近1表示匹配越好)。也就是說,它不會具體關注窗口內到底是哪一個地方匹配了,而只關注是不是有某個地方匹配上了。


通過加入池化層,圖像縮小了,能很大程度上減少計算量,降低機器負載。


(6)激活函數ReLU (Rectified Linear Units)


常用的激活函數有sigmoid、tanh、relu等等,前兩者sigmoid/tanh比較常見於全連接層,後者ReLU常見於卷積層。


回顧一下前面講的感知機,感知機在接收到各個輸入,然後進行求和,再經過激活函數後輸出。激活函數的作用是用來加入非線性因素,把卷積層輸出結果做非線性映射。


 

在卷積神經網絡中,激活函數一般使用ReLU(The Rectified Linear Unit,修正線性單元),它的特點是收斂快,求梯度簡單。計算公式也很簡單,max(0,T),即對於輸入的負值,輸出全為0,對於正值,則原樣輸出。


下面看一下本案例的ReLU激活函數操作過程:


第一個值,取max(0,0.77),結果為0.77,如下圖


 

第二個值,取max(0,-0.11),結果為0,如下圖


 

以此類推,經過ReLU激活函數後,結果如下:


 

對所有的feature map執行ReLU激活函數操作,結果如下:


 

(7)深度神經網絡


通過將上面所提到的卷積、激活函數、池化組合在一起,就變成下圖:


 

通過加大網絡的深度,增加更多的層,就得到了深度神經網絡,如下圖:


 

(8)全連接層(Fully connected layers)


全連接層在整個卷積神經網絡中起到「分類器」的作用,即通過卷積、激活函數、池化等深度網絡後,再經過全連接層對結果進行識別分類。


首先將經過卷積、激活函數、池化的深度網絡後的結果串起來,如下圖所示:


 

由於神經網絡是屬於監督學習,在模型訓練時,根據訓練樣本對模型進行訓練,從而得到全連接層的權重(如預測字母X的所有連接的權重)


 


在利用該模型進行結果識別時,根據剛才提到的模型訓練得出來的權重,以及經過前面的卷積、激活函數、池化等深度網絡計算出來的結果,進行加權求和,得到各個結果的預測值,然後取值最大的作為識別的結果(如下圖,最後計算出來字母X的識別值為0.92,字母O的識別值為0.51,則結果判定為X)

 


上述這個過程定義的操作為」全連接層「(Fully connected layers),全連接層也可以有多個,如下圖:

 


(9)卷積神經網絡(Convolutional Neural Networks)


將以上所有結果串起來後,就形成了一個「卷積神經網絡」(CNN)結構,如下圖所示:

最後,再回顧總結一下,卷積神經網絡主要由兩部分組成,一部分是特徵提取(卷積、激活函數、池化),另一部分是分類識別(全連接層),下圖便是著名的手寫文字識別卷積神經網絡結構圖:


相關焦點

  • 【深度學習】卷積神經網絡-CNN簡單理論介紹
    當然,這裡默認讀者對神經網絡有一定的了解和認識,如果有疑問可留言,本文也不介紹太多關於數學的內容,以便於讀者理解,如有需要後期更新相關數學推導。1 卷積神經網絡簡介通常有:當然也還包括神經網絡常用的激活層,正則化層等。
  • Matlab編程之——卷積神經網絡CNN代碼解析
    deepLearnToolbox-master是一個深度學習matlab包,裡面含有很多機器學習算法,如卷積神經網絡CNN,深度信念網絡DBN,
  • CNN卷積神經網絡實例(基於pytorch)
    1.關於卷積神經網絡卷積神經網絡(Convolutional Neural Network,CNN) 是一種具有局部連接、權重共享等特徵的深層前饋神經網絡
  • 典型的深度學習算法(一):卷積神經網絡(CNN)
    通過上一篇文章,相信大家對深度學習的概念、原理已經有了大致了解,近期企通查將會對深度學習中的幾種典型算法進行介紹。在深度學習領域中,已經驗證的典型成熟算法有卷積神經網絡(CNN)、循環神經網絡(RNN)、生成對抗網絡(GAN)、深度強化學習(DRL)等,下面企通查將帶領大家對典型的深度學習算法之一——卷積神經網絡(CNN)一探究竟。
  • 深度學習—應用於機器視覺領域的卷積神經網絡(CNN)簡介
    深度學習受到神經學的啟示,模擬人腦的認知與表達過程,通過低層信號到高層特徵的函數映射,來建立學習數據內部隱含關係的邏輯層次模型。深度學習相比於一般的淺層模型的機器學習方法具有多隱層結構,對大數據具有更好的擬合性。
  • 卷積神經網絡(CNN)新手指南
    從那時起許多公司開始將深度學習應用在他們的核心服務上,如Facebook將神經網絡應用到他們的自動標註算法中,Google(谷歌)將其應用到圖片搜索裡,Amazon(亞馬遜)將其應用到產品推薦服務,Pinterest將其應用到主頁個性化信息流中,Instagram也將深度學習應用到它們的圖像搜索架構中。
  • 卷積神經網絡(CNN)綜述
    LeNet-5模型的幾個特性在2010年初的卷積神經網絡研究中被廣泛的使用-其中一個就是權值共享。在卷積神經網絡中,卷積層中的卷積核(或稱之為濾波器)類似於一個滑動窗口,在整個輸入圖像中以特定的步長來回滑動,經過卷積運算之後,從而得到輸入圖像的特徵圖,這個特徵圖就是卷積層提取出來的局部特徵,而這個卷積核是共享參數的。在整個網絡的訓練過程中,包含權值的卷積核也會隨之更新,直到訓練完成。
  • 卷積神經網絡CNN與深度學習常用框架的介紹與使用
    神經網絡其實就是使用AND和OR操作把樣本點中得那一塊摳出來。正如下圖,最上面的綠色區域的每一個變都可以看成一個線性分類器,把樣本分成正例和負例,那這些分類器做AND操作,得出的結果就是一個綠色的區域,然後把多個綠色的區域再用OR操作。而一個神經元就可以實現AND操作或者OR操作,我們只需要提供樣本,神經網絡就可以自己學到。這也就是它的優點所在。
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。針對這些問題,人們提出了卷積神經網絡,從而很好地解決了上面的三個問題。與常規神經網絡不同,卷積神經網絡的各層中的神經元是3維排列的:寬度、高度和深度(這個深度指的是某層數據的第三個維度,而不是整個網絡的深度,整個網絡的深度指的是網絡的層數)。下圖是一個卷積神經網絡,它的神經元被排列在3個維度(寬、高和深度)。
  • 深度學習之CNN簡介
    深度學習概述傳統的機器學習和深度學習一個很重要的差別就是特徵的自動提取。深度學習現在更適合處理一些原始信息的特徵,比如圖片識別,音頻,視頻等。比如圖片可以通過像素作為原始的特徵,通過卷積神經網絡不斷的提取特徵,最後再在這些特徵上進行學習。對於音頻就是通過聲音的聲波作為特徵。
  • 深度學習網絡之CNN
    深度學習的提出:2006年,Hinton提出了深度學習,兩個主要的觀點是:深度學習取得成功的原因:深度學習的思想:深度神經網絡的基本思想是通過構建多層網絡,對目標進行多層表示,以期通過多層的高層次特徵來表示數據的抽象語義信息,獲得更好的特徵魯棒性。
  • 深度學習入門筆記系列 ( 六 ) ——卷積神經網絡(CNN)學習筆記
    卷積神經網絡(CNN)學習筆記本系列將分為 8 篇 。
  • CNN卷積神經網絡
    CNN卷積神經網絡卷積神經網絡通常包含以下幾種層:卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積單元組成
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    一、簡介百度百科中對深度學習的定義是深度學習(DL, Deep Learning)是機器學習(ML, Machine Learning)領域中一個新的研究方向,它被引入機器學習使其更接近於最初的目標——人工智慧(AI, Artificial Intelligence)。
  • 深度學習初學者了解CNN卷積神經網絡的黃金指南
    介紹卷積神經網絡。這聽起來像是一個奇怪的生物學和數學的結合,但是這些網絡已經成為計算機視覺領域最具影響力的創新之一。2012年是神奇網絡成長的第一年,Alex Krizhevsky用它們贏得了當年的ImageNet競賽(基本上是計算機視覺年度奧運會),把分類錯誤記錄從26%降到了15%,這個驚人的提高從那以後,許多公司一直在以服務為核心進行深度學習。
  • CNN卷積神經網絡— LeNet(二)
    卷積神經網絡( Convolutional Neural Network, CNN):是一種常見的深度學習架構,受生物自然視覺認知機制(
  • 如何設計卷積神經網絡CNN?
    簡而言之,遵循以下規則:如何設計卷積神經網絡1如何設計卷積神經網絡?怎樣設計最優的卷積神經網絡內容總結:1.提升CNN表現的操作:增加圖片解析度,增加網絡寬度,增加網絡深度,增加跳過連接(密集塊或殘差塊)2.NAS神經架構搜索+隨機連接神經網絡:探索新的網絡架構和神經元連接方式
  • 教程 | 基於Matlab的卷積神經網絡(CNN)
    (CNN)講解及代碼版權聲明:本文為CSDN博主「walegahaha」的原創文章,遵循 CC 4.0 BY-SA 版權協議經典反向傳播算法公式詳細推導(https://blog.csdn.net/walegahaha/article/details/51867904)卷積神經網絡(CNN)反向傳播算法公式詳細推導(https
  • 卷積神經網絡小白入門手冊
    學習深度學習,最常接觸到的就是各式各樣的神經網絡了,其中卷積神經網絡是諸多神經網絡中最典型最常用的神經網絡了。本文原始素材來源於freecodecamp博客,經本人翻譯首發於此。希望能幫助到大家!覺得不錯就點個讚,或者關注下我吧,後續我還會分享更多相關的精彩內容。
  • 【深度學習系列】卷積神經網絡詳解(二)——自己手寫一個卷積神經網絡
    ,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理上篇文章中我們講解了卷積神經網絡的基本原理,包括幾個基本層的定義