卷積神經網絡(CNN)新手指南

2021-01-10 雷鋒網
卷積神經網絡(Convolutional Neural Network,CNN)新手指南


引言

卷積神經網絡:聽起來像是生物與數學還有少量計算機科學的奇怪結合,但是這些網絡在計算機視覺領域已經造就了一些最有影響力的創新。2012年神經網絡開始嶄露頭角,那一年Alex Krizhevskyj在ImageNet競賽上(ImageNet可以算是競賽計算機視覺領域一年一度的「奧運會」競賽)將分類錯誤記錄從26%降低到15%,這在當時是一個相當驚人的進步。從那時起許多公司開始將深度學習應用在他們的核心服務上,如Facebook將神經網絡應用到他們的自動標註算法中,Google(谷歌)將其應用到圖片搜索裡,Amazon(亞馬遜)將其應用到產品推薦服務,Pinterest將其應用到主頁個性化信息流中,Instagram也將深度學習應用到它們的圖像搜索架構中。

然而最經典的,或者說最流行的神經網絡使用範例是將其用於圖像處理領域。提到圖像處理,本文主要介紹的是如何使用卷積神經網絡來進行圖像分類。

問題空間

圖像分類是將輸入圖像(貓、狗等)進行分類輸出或者將其分類成最能描述圖像特徵的類別的任務。對於人類來說,認知是我們出生之後就學會的第一個技能,也是作為成年人來說非常自然和輕鬆的技能。我們可以毫不猶豫迅速識別出我們周圍的環境以及物體,當我們看到一張圖片或者觀察周遭環境時,大部分時間我們都能馬上對場景做出判斷並且給每個物體都打上標識,這些甚至都不需要刻意去觀察。這些技能能夠迅速識別其模式,從我們以前的經驗中做出推論,然後將其運用至不同的圖片或者環境中——這些都是我們與機器不同的地方。

輸入與輸出

當計算機看到一張圖片時(即輸入一張圖片),它所看到的是一系列的像素值。根據圖片的解析度與大小,計算機將看到的是一個32×32×3的數字陣列(3指代的是RGB—顏色值)。我們稍微將一下這個,假設我們有一張480 x 480的JPG格式圖片,它的表達陣列即為480 x 480 x 3。這些數字中的每一個值都可以從0取到255,它描述了在這一點上的像素強度。這些數字雖然對於我們進行圖像分類時沒有任何意義,但其卻是計算機在圖像輸入時唯一獲取的數據。這個理念就是你給電腦指定相關數據排列,它將圖像是一個特定的類別的可能性進行輸出(如80—貓,15—狗,05—鳥等)。

我們希望電腦做什麼

現在我們了解到問題是在輸入和輸出上,讓我們來考慮如何解決這個問題。我們希望電腦能做到的是在所有的給定圖像中分辨出不同的類別,它能找到那些「狗之所以是狗」或者「貓之所以是貓」的特性。這個就是在我們的頭腦中潛意識裡進行認知識別的過程,當我們看到一張狗的圖像時,我們能夠將其分類因為圖像上有爪子或者四條腿等明顯的特徵。以類似的方式計算機能夠進行圖像分類任務,通過尋找低層次的特徵如邊緣和曲線,然後運用一系列的卷積層建立一個更抽象的概念。這是卷積神經網絡應用的一個總體概述,接下來我們來探討下細節。

生物聯繫

首先要稍微普及下一點背景知識,當你第一次聽到卷積神經網絡這個詞時,你也許會想這是是不與神經科學或者生物學有關?恭喜你,猜對了一部分。卷積神經網絡的確從生物學上的視覺皮層得到啟發,視覺皮層有微小區域的細胞對於特定區域的視野是十分敏感的。

1962年,Hubel和 Wiesel發現大腦中的部分神經元只對一定的方向的邊緣做出回應。例如,當暴露在垂直邊緣或者一些當水平或對角線邊緣時,一些神經元才會做出回應。Hubel和 Wiesel發現,所有這些神經元都被架構在一個柱狀結構中,這樣的架構使它們能夠產生視覺感知。系統中的特定成員可以完成特定任務這種理念(神經細胞在視覺皮層中尋找特定的特徵)也能很好地應用在機器學習上,這也是卷積神經網絡的基礎。

架構

對於捲曲神經網絡更詳細的介紹是將圖片通過一系列的卷積、非線性、池(採樣)、全連接層,然後得到一個輸出。正如我們前面所說的,輸出是一個類或者一個圖像類別的可能性概率。現在,困難的部分是了解每一層的任務。

第一層—數學

卷積神經網絡的第一層是卷積層,第一件事是你要記住捲曲層的輸入時什麼。像我們之前提到的,輸入的是一個32×32×3的系列像素值。解釋卷積層的最好方式是想像一個手電筒正在圖像的左上方進行照射,假設手電照射的區域是5 x 5的範圍。再想像下這個手電筒在輸入圖像的各個區域進行滑動。在機器學習術語中,這個手電筒叫做過濾器(有時候也稱為神經元或者核心),它照射著的區域被稱為接受場。這個過濾器也是一系列的數據(這些數據被稱為權重或者參數)。必須提到的是這個過濾器的深度必須是和輸入的深度相同(這樣才能保證數學正常工作),所以這個過濾器的尺寸是5×5×3。現在,讓我們先拿第一個位置的過濾器為例。由於過濾器在輸入圖像上是滑動或卷積的,它是相乘的值在濾波器的原始圖像的像素值(又名計算元素的乘法),這些乘法全部相加(從數學上講,這將是75次乘法總和)。所以現在你有一個數字。請記住,這個數字只是當過濾器在圖像的左上角時才有代表性,現在我們在每一個位置上重複這個過程。(下一步將過濾器移動到右邊的1個單位,然後再向右移動1個單位,等等),每一個輸入層上獨特的位置都會產生一個數字。將過濾器滑動完所有位置的,你會發現剩下的是一個28×28×1的系列數字,我們稱之為激活圖或者特徵圖。你得到一個28×28陣列的原因是有784個不同的位置,一個5×5的過濾器可以適配一個32×32的輸入圖像,這組784個數字可以被映射到一個28×28陣列。


目前我們使用兩個5 x 5 x 3的過濾器,我們的輸出量將是28×28×2。通過使用更多的過濾器,我們能夠更好地維持空間尺寸。在數學層面上來說,這些是在一個卷積層中進行的任務。

第一層—高階視角

讓我們從高階角度來談談這個卷積層的任務,這些過濾器中每個都可以被認為是特徵標識符。當我說特徵時,我說的是如直邊、簡單的顏色和曲線等。思考一下,所有的圖像都有同樣的最簡單的特徵。我們的第一個過濾器是7×7×3,而且是一個曲線探測器。(在這一部分讓我們忽略一個事實,過濾器是3個單位深的,只考慮頂部過濾器的深度和圖像。)作為一個曲線檢測器,過濾器將有一個更高的數值且有曲線的形狀的像素結構(記住關於這些過濾器,我們考慮的只是數字)。


現在,讓我們回到數學可視化部分。當我們在輸入的左上角有了這種濾波器後,它會在哪個區域的過濾器和像素值之間計算乘積。現在讓我們以一個我們要分類的圖像為例,把我們的過濾器放在左上角。


記住,我們需要做的是使用圖像中的原始像素值在過濾器中進行乘積。


基本上在輸入圖像中,如果有一個形狀是類似於這種濾波器的代表曲線,那麼所有的乘積累加在一起會導致較大的值!現在讓我們看看當我們移動我們的過濾器時會發生什麼。


檢測值竟然要低得多!這是因為在圖像中沒有任何部分響應曲線檢測過濾器。記住,這個卷積層的輸出是一個激活圖。因此,在簡單的情況下一個過濾器的卷積(如果該過濾器是一個曲線檢測器),激活圖將顯示其中大部分可能是在圖片中的曲線區域。在這個例子中,我們的28×28×1激活圖左上方的值將是6600,這種高值意味著很可能是在輸入中有某種曲線導致了過濾器的激活。因為沒有任何東西在輸入使過濾器激活(或更簡單地說,在該地區的原始圖像沒有一個曲線),其在我們的激活圖右上方的值將是0。記住,這僅僅只是一個過濾器。這個過濾器將檢測線向外和右邊的曲線,我們可以有其他的曲線向左或直接到邊緣的過濾器線條。過濾器越多,激活圖越深,我們從於輸入中獲取的信息也就越多。

聲明:在這一節中描述的過濾器是簡化的,其主要目的是描述在一個卷積過程中的數學過程。在下圖中你會看到一些對訓練過的網絡中第一個卷積層的過濾器的實際顯示示例,儘管如此,主要的論據仍然是相同的。


進一步深入網絡

現在展示一個傳統的卷積神經網絡結構,還有其他層在這些層之間穿插轉換。強烈建議那些有興趣的讀者去了解他們的功能和作用,但一般來說他們提供的非線性和尺寸留存有助於提高網絡的魯棒性,同時還能控制過度擬合。一個經典的卷積神經網絡架構看起來是這樣的:


然而,最後一層是非常重要的內容,不過我們將在後面提到。讓我們退後一步,回顧一下我們目前提到的東西。我們談到了第一個卷積層的過濾器被設計用來探測。他們檢測到低階的特徵如邊緣和曲線。正如想像的那樣,為了預測圖像的類型,我們需要神經網絡能夠識別更高階的特徵,如手、爪子、耳朵。讓我們考慮經過第一層卷積層後網絡的輸出是什麼,這將是一個28×28×3的體量(假設我們使用三個5×5×3過濾器)。當穿過另一個卷積層時,卷積層的第一輸出成為第二卷積層的輸入,這有難以視覺化想像。當我們談論第一層時,輸入的只是原始圖像。然而,當我們談論第二個卷積層時,輸入是第一層的結果激活圖(S)。因此,每一層的輸入基本上是描述某些低階特徵在原始圖像中的位置。現在當你應用一組過濾器(通過第二卷積層),輸出將被激活且代表更高階的特徵。這些特徵的類型可能是半圓(曲線和直線邊緣的組合)或方形(幾個直邊的組合)。當通過網絡、更多的卷積層,可以激活地圖,代表更多和更複雜的特徵。在神經網絡的結束,可能有一些激活的過濾器,表示其在圖像中看到手寫字跡或者粉紅色的物體時等等。另一個有趣的事情是當你在網絡往更深的地方探索時,過濾器開始有越來越大的接受場,這意味著他們能夠從一個更大的區域或者更多的原始輸入量接收信息。

全連接層

現在我們可以檢測到這些高階特徵,錦上添花的是在神經網絡的末端連接一個全連接層。這層基本上將一個輸入量(無論輸出是卷積或ReLU或池層)和輸出一個N是程序選擇類別的N維向量,具體過程如下圖所示。這個全連接層的工作方式是,它著眼於前一層的輸出(代表高階特徵的激活圖),並確定哪些功能是最相關特定的類。例如如果該程序預測,一些圖像是一隻狗,它在激活圖中會有高的值,代表高階特徵如一個爪子或4條腿等。類似地,如果該程序是預測一些圖像是鳥的功能,它在激活圖中會有高階值,代表高階特徵如如翅膀或喙等。


訓練過程

訓練工程作為神經網絡的一個部分,我之前故意沒有提到,因為它有可能是最重要的一部分。閱讀時你可能會遇到有很多問題,例如第一個卷積層中過濾器如何知道尋找邊緣和曲線?全連接層如何知道激活圖在哪裡?每一層的過濾器如何知道有什麼樣的值?計算機能夠調整其過濾值(或權重)的方式是通過一個稱為反向傳播的訓練過程。

在我們介紹反向傳播之前,我們必須先回顧下談談神經網絡運行所需要的是什麼。在我們出生的那一刻,我們的思想是全新的,我們不知道什麼是貓,什麼是鳥。類似地,在卷積神經網絡開始之前,權重或過濾器的值是隨機的,過濾器並不知道去尋找邊緣和曲線,在更高階的層過濾器不知道去尋找爪子和喙。然而當我們稍微大了一點之後,我們的父母和老師給我們展示了不同的圖片和圖像,並給了我們一個相應的標籤。給圖像以標籤這個想法既是卷積神經網絡(CNNs)的訓練過程。在講到它之前,讓我們稍微介紹下我們有一個訓練集,其中有成千上萬的狗,貓和鳥類的圖像,每一個圖像有一個標籤對應它是什麼動物的圖片。

反向傳播可以分為4個不同的部分:前向傳播、損失計算、反向傳播、權重更新。在前向傳播的過程中,你需要一個數字陣列為32×32×3的訓練圖像,並將其傳遞通過整個網絡。在我們的第一個訓練例子中,所有的權重或過濾器的值被隨機初始化,輸出可能是類似[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的東西,基本上是一個不能優先考慮任何數字的輸出。目前權重的網絡是無法尋找那些低階的功能,因此也無法對分類可能性作出任何合理的結論。這就到了反向傳播中的損失計算部分。我們現在使用的是訓練數據,此數據有一個圖像和一個標籤。比方說,第一個輸入的訓練圖像是一個3,則該圖像的標籤將是[ 0 0 1 0 0 0 0 0 ]。損失計算可以按許多不同的方式定義,但常見的是MSE(均方差)—½倍(實際預測)的平方。


假設變量L等於這個值,正如你想像的,對於第一組訓練圖像來說損失將是非常高的。現在,讓我們更直觀地來進行思考。我們想得到一個點的預測標籤(ConvNet的輸出)作為訓練相同的訓練標籤(這意味著我們的網絡預測正確)。為了實現則這個,我們要儘量減少我損失量。可視化在微積分上只是一個優化問題,我們需要找出哪些輸入是(在我們的例子中的權重)最直接導致網絡的損失(或錯誤)所在。


這是一個dL/DW的數學等價,其中W是在一個特定層的權重。現在我們要做的通過網絡是執行一個反向傳播過程,檢測哪個權重損失最大並且尋找方法來調整它們使損失降低。一旦我們將這個計算過程進行完,就可以到最後一步—權重更新。把所有的過濾器的權重進行更新,使它們在梯度方向上進行改變。


學習速率是由程式設計師選擇的一個參數。一個高的學習率意味著更多步驟是在權重更新部分,因此它可能需要更少的時間為最佳的權重在模型上進行收斂。然而學習率太高,可能會導致跨越太大而不夠精準達到最佳點。


前向傳播、損失計算、反向傳播、參數更新的過程也稱為一個epoch。程序會對於每一個固定數量的epoch、每個訓練圖像重複這一過程。在最後一個訓練例子中完成了參數更新後,網絡應該都訓練的足夠好了,各層的權重也應該調參正確了。

測試

最後要來測試我們的卷積神經網絡是否工作,將不同的圖片和標籤集通過卷積神經網絡,將輸出結果與真實值進行對比,即可測試出其是否正常運行。

業界如何使用卷積神經網絡

數據,數據,數據。給一個卷積神經網絡的更多的訓練數據,可以做的更多的訓練迭代,也就能實現更多的權重更新,對神經網絡進行更好的調參。Facebook(還有Instagram)可以使用數以億計的用戶目前的所有照片,Pinterest可以使用在其網站上的500億的信息,谷歌可以使用搜索數據,亞馬遜可以使用每天數以百萬計的產品購買數據。

現在你知道他們是如何使用這些的魔法了,有興趣的話可以自己嘗試一下。

PS : 本文由雷鋒網(公眾號:雷鋒網)獨家編譯,未經許可拒絕轉載!

via Adit Deshpande

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

相關焦點

  • 卷積神經網絡新手指南之二
    卷積神經網絡新手指南之二引言本文將進一步探討有關卷積神經網絡的更多細節,註:以下文章中部分內容較為複雜,為了保證其簡明性降層(Dropout Layers)降層在神經網絡中有一個十分特別的功能。在上一節中,我們討論了過度擬合的問題。在訓練之後,網絡的權重被調整到給定的訓練樣本上,這樣的話當給定新的樣本時神經網絡的表現並不好。降層這個理念在自然中過分單純的。
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    根據美國貝爾實驗室(belllaboratory)2018年5月19日最新出版的《新創新指南》(newentrepreneursguide),人工智慧能力的發展與突破,有望提高生產性能和生產效率。maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 9大主題卷積神經網絡(CNN)的PyTorch實現
    上文聚焦於源碼和論文,對於各種卷積神經網絡模型的實現,本文將介紹它們的 PyTorch 實現,非常有用!這份資源已經開源在了 GitHub 上,連結如下:https://github.com/shanglianlm0525/PyTorch-Networks先來個總結介紹,該系列的卷積神經網絡實現包含了 9 大主題,目錄如下:1. 典型網絡2. 輕量級網絡3. 目標檢測網絡4.
  • 圖像識別技術——卷積神經網絡CNN詳解
    前言卷積神經網絡不同於神經網絡,在圖片處理這方面有更好的表現。本文主要對神經網絡和卷積神經網絡做了簡要的對比,著重介紹了卷積神經網絡的層次基礎,同時也簡要介紹了卷積神經網絡參數更新方式和其優缺點,並結合具體實例對卷積神經網絡的工作方式做了介紹。
  • 卷積神經網絡中的參數共享/權重複制
    但是了解這個簡單的概念有助於更廣泛地理解卷積神經網絡的內部。卷積神經網絡(cnn)能夠使那些通過網絡饋送的圖像在進行仿射變換時具有不變性。 這個特點提供了識別偏移圖案、識別傾斜或輕微扭曲的圖像的能力。仿射不變性的這些特徵是由於CNN架構的三個主要屬性而引入的。
  • 使用TensorFlow構建卷積神經網絡CNN
    卷積神經網絡(CNN)是計算機視覺應用背後的架構。本文將闡述CNN和計算機視覺的基礎,例如卷積運算,填充,跨步卷積和池化層。然後,我們將使用TensorFlow構建用於圖像識別的CNN。理解卷積該卷積運算是卷積神經網絡的積木。現在,在計算機視覺領域,圖像可以表示為RGB值的矩陣。這個概念實際上是在之前的文章中介紹。要完成卷積操作,我們需要一個圖像和一個過濾器。
  • 三種卷積神經網絡模型:Light-CNN,雙分支CNN和預先訓練的CNN
    打開APP 三種卷積神經網絡模型:Light-CNN,雙分支CNN和預先訓練的CNN 發表於 2020-04-17 10:55:01
  • CNN卷積神經網絡(超詳解析)
    1、神經網絡首先了解神經網絡,大家移步這倆篇博客,一篇為純理論,一篇為實戰加理論。機器學習之神經網絡學習及其模型入門講解:使用numpy實現簡單的神經網絡(BP算法)2、卷積神經網絡之層級結構cs231n課程裡給出了卷積神經網絡各個層級結構,如下圖上圖中CNN要做的事情是:給定一張圖片,是車還是馬未知,是什麼車也未知,現在需要模型判斷這張圖片裡具體是一個什麼東西,總之輸出一個結果:如果是車那是什麼車所以最左邊是數據輸入層
  • 卷積神經網絡 物體檢測 Faster-RCNN
    >回顧一下fast rcnn的過程,先通過selective search在每張圖片選2k個region proposal,將原圖通過cnn得到feature map,然後通過SPP或RoI pooling將不同region proposal的feature map轉化為固定的長度給全連接層,通過分類和位置組合Loss學習;在fast rcnn裡除了region
  • 華人博士卷積網絡可視化項目火了:點滑鼠就能看懂的掃盲神器
    Convolutional Neural Network,中文譯為「卷積神經網絡」。這個常見但有些深奧的詞彙,只可意會,不能言傳。如果打開教材,會看到這樣一些解釋:卷積層是深度神經網絡在處理圖像時十分常用的一種層。當一個深度神經網絡以卷積層為主體時,我們也稱之為卷積神經網絡。
  • 了解1D和3D卷積神經網絡|Keras
    當我們說卷積神經網絡(CNN)時,通常是指用於圖像分類的2維CNN。但是,現實世界中還使用了其他兩種類型的卷積神經網絡,即1維CNN和3維CNN。在本指南中,我們將介紹1D和3D CNN及其在現實世界中的應用。我假設你已經大體上熟悉卷積網絡的概念。
  • 改進卷積神經網絡,你需要這14種設計模式
    然而,訓練神經網絡的技巧並不容易掌握。與之前的機器學習方法一樣,細節是最恐怖的地方,然而在卷積神經網絡中有更多的細節需要去管理:你所用的數據和硬體的限制是什麼?你應該以哪種網絡作為開始呢?AlexNet、VGG、GoogLeNet 還是 ResNet 呢?甚至 ResNet 裡面還有 ResNet 分支選項。你應當建立多少與卷積層相對應的密集層?
  • 基於卷積神經網絡的目標檢測算法簡介
    什麼是卷積神經網絡?卷積神經網絡是一個層次模型,主要包括輸入層,卷積層,池化層、全連接層以及輸出層。卷積神經網絡是專門針對圖像而設計,主要特點在於卷積層的特徵是由前一層的局部特徵通過卷積共享的權重得到。
  • 卷積神經網絡理解(一):濾波器的意義
    卷積神經網絡的發展二. 卷積神經網絡的重要性三. 卷積神經網絡與圖像識別四.濾波器一.卷積神經網絡的發展卷積神經網絡受到視覺細胞研究的啟發,1962年,Hubel和Wiesel發現初級視覺皮層中的神經元會響應視覺環境中特定的簡單特徵(比如有向的邊等)。
  • 「範例卷積神經網絡」和信息最大化
    這一方法也能被理解為「卷積神經網絡範例」。本文內容摘要:本文對「範例卷積神經網絡」的訓練方法僅作了簡單簡單的概述,所以如果想要獲得更多、更真實的信息,請閱讀論文原文。本文簡要介紹了「變分信息最大化」,並將其運用到了「範例卷積神經網絡」的案例中。
  • 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程乾貨...
    如下圖所示:人工神經網絡可以映射任意複雜的非線性關係,具有很強的魯棒性、記憶能力、自學習等能力,在分類、預測、模式識別等方面有著廣泛的應用。四、卷積神經網絡4.1、CNN定義主角登場,其他人退讓!!!如下圖所示:重點來了,什麼是卷積神經網絡?
  • 卷積神經網絡的卷積到底是什麼
    打開APP 卷積神經網絡的卷積到底是什麼 人工智慧遇見磐創 發表於 2020-05-05 08:40:00 卷積神經網絡是一種特殊的神經網絡結構,是自動駕駛汽車、人臉識別系統等計算機視覺應用的基礎,其中基本的矩陣乘法運算被卷積運算取代。
  • YJango的卷積神經網絡——介紹
    PS:YJango是我的網名,意思是我寫的教程,並不是一種網絡結構。。關於卷積神經網絡的講解,網上有很多精彩文章,且恐怕難以找到比斯坦福的CS231n還要全面的教程。 所以這裡對卷積神經網絡的講解主要是以不同的思考側重展開,通過對卷積神經網絡的分析,進一步理解神經網絡變體中「因素共享」這一概念。注意:該文會跟其他的現有文章有很大的不同。
  • 深度學習入門:淺析卷積神經網絡
    至今已有數種深度學習方法,如卷積神經網絡(CNN)、自編碼神經網絡(包括Auto encoder和Sparse Coding)和深度置信網絡(DBN),並在各個領域中取得了極好的效果。卷積神經網絡概述在了解卷積神經網絡之前,我們先簡單了解最基本的神經網絡。