閱讀645 返回首頁    go 阿裏雲 go 技術社區[雲棲]


入門篇:卷積神經網絡指南(一)

更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud


卷積神經網絡聽起來像一個奇怪的生物學和數學的組合,但它是計算機視覺領域最具影響力的創新之一。2012年是卷積神經網絡最流行的一年,因為Alex Krizhevsky用它贏得當年的ImageNet競爭(基本上算得上是計算機視覺的年度奧運),它將分類錯誤記錄從26%降至15%,這是驚人的改善。從那時起,深度學習開始流行起來,Facebook使用神經網絡進行自動標記算法,Google進行照片搜索,亞馬遜的產品推薦,家庭飼料個性化的Pinterest,以及以搜索為基礎設施的Instagram

aad4faf62208d4524a156a4e29cc589a179713d5

今天我們來看看在圖像處理中如何使用CNN進行圖像分類。

1.空間問題

圖像分類是輸入圖像並輸出類(貓,狗等)的任務,或是最能描述圖像的類的概率。對於人類來說,這個任務是我們從出生的那一刻開始學習的第一個技能之一。我們人類能夠快速,無縫地識別我們所處的環境以及我們周圍的對象。當我們看到一個圖像,甚至隻是看著我們周圍的世界,大多數時候,我們能夠立即刻畫場景,並給每個對象一個標簽,所有這些都沒有意識到注意。能夠快速識別模式的這些技能,從先前的知識推測出來,適應不同的圖像環境是我們的特長。我個人覺得這是人類三維視角的獨特的優勢,相較於機器的二維視角。

f7810fa581a97c700a524efa9b7d673c7f373ced

2.輸入和輸出

當計算機看到圖像(將圖像作為輸入)時,它將看到的是像素值的數組。根據圖像的分辨率和大小,它會看到一個32 x 32 x 3的數組(3RGB值)。我們假設我們有一個JPG形式的彩色圖像,其大小是480 x 480.代表性的數組將是480 x 480 x 3。這些數字中的每一個都給出一個從0255的值,它描述某個點的像素強度。這些數字在我們進行圖像分類時對我們毫無意義,但它是計算機可用的唯一輸入。所以,這在人類的潛意識中是非常困難的。

3.我們想要電腦做什麼

現在我們知道了問題以及如何輸入和輸出,讓我們考慮一下如何解決這個問題。我們希望電腦能夠區分所有的圖像,並找出識別狗或識別貓的獨特功能。當我們看一隻狗的照片時,如果圖片具有可識別的特征,例如爪子或四條腿,我們可以對其進行分類。以類似的方式,計算機能夠通過尋找諸如邊緣和曲線的低級特征,然後通過一係列卷積層來構建更抽象的概念來執行圖像分類。這是CNN功能的總體概述,我們來詳細了解一下。

3.1生物連接

首先你要有一點生物學背景。當你第一次聽到卷積神經網絡一詞的時候,你可能會想到與神經科學或生物學有關的東西。CNN確實從生物學中的視覺皮質獲得啟發,視覺皮層是具有對視野的特定區域敏感的細胞區域,而且特定區域一般很小。這個想法在1962年由HubelWiesel的實驗產生的。HubelWiesel發現,所有這些神經元都被組織在一個柱狀結構中,並且它們一起能夠產生視覺感知。具有特定任務(視覺皮層中的神經元細胞尋找特定特征)的係統內的專門組件的想法也是機器使用的構思。也是我們常說的局部感受野:就是輸出圖像某個節點的響應所對應的最初的輸入圖像的區域。這也是CNN的基礎。

4.結構體

接下來我們談談具體細節。對CNN做什麼的更詳細的概述將是:拍攝圖像、通過一係列卷積、非線性、池(下采樣)和完全連接的層,並獲得輸出。如我們前麵所說,輸出可以是單個類或最能描述圖像的類的概率。現在,困難的部分是理解這些層中的每一個,首先讓我們進入最重要的一個。

4.1第一層:數學 Math

CNN中的第一層總是卷積層。第一件事是要確保你記得是這個轉換的輸入,像我們之前提到的,輸入是一個32 x 32 x 3的像素數組。解釋轉換層的最好方法是想象一下閃光在圖像左上方的手電筒,這個手電筒的光線覆蓋著5×5的區域。而現在,我們可以想象這個手電筒可以滑過輸入圖像的所有區域。在機器學習術語中,這種手電筒被稱為濾波器(或有時稱為神經元內核),並且其閃爍的區域稱為接收場。現在這個過濾器也是數字數組(數字稱為權重參數)。一個非常重要的注意事項是,該濾波器的深度必須與輸入深度相同(這樣才可以確保數學運算),因此濾波器的尺寸為5 x 5 x 3

譯者注:濾波器:filter(帶著一組固定權重的神經元)對局部輸入數據進行卷積計算。

現在,我們來看看濾波器的第一個位置。當濾波器在輸入圖像周圍滑動或卷積時,它將濾波器中的值與圖像的原始像素值(AKA運算單元乘法)相乘。所以你將等到一個數字,請記住,這個數字隻是代表濾波器位於圖像左上方的代表。現在,我們對每個位置重複此過程。(下一步是將濾鏡向右移動1個單位,然後再次向右移動1個,依此類推。)每個位置都會產生一個數字,濾波器將所有位置的滑動後,你會發現剩下的是28 x 28 x 1的數字數組,我們稱之為激活圖特征圖。你得到一個28 x 28陣列的原因是,有784個不同的位置,一個5 x 5的過濾器可以適應32 x 32的輸入圖像。這些784個數字被映射到一個28×28陣列。

8c54a11dec42e5b7606b58663adbc7b901850574

現在我們使用兩個5 x 5 x 3的過濾器,而不是一個。那麼我們的輸出將是28 x 28 x 2.通過使用更多的濾鏡,我們可以更好地保留空間維度。

4.2高層次視角(high-level perspective)

我們來談一談從高層次視角看這個卷積實際在做什麼。這些濾波器中的每一個都可以被認為是特征標識符。當我說特征時,我指的是直邊、簡單的顏色和曲線。假設我們第一個濾波器為7 x 7 x 3,將成為一個曲線檢測器。(在本節中,我們忽略了濾波器為3單位深的事實,為了簡單起見,僅考慮濾波器和圖像的頂層深度)。作為曲線檢測器,濾波器將具有像素結構,其中存在的是沿著曲線形狀的區域的更高的數值(記住,我們正在談論的這些過濾器隻是數字!)。         c6c0aa0c419011024b9d42d0001a13b105e36380

現在,讓我們回想一下數學上的可視化。當我們在輸入的左上角有這個過濾器時,它是該區域中濾波器和像素值之間的計算乘法。現在,讓我們舉一個我們要分類的圖像的例子,讓我們把過濾器放在左上角。

d7a6c51eb776724159522d73e22e881d450701ba

記住:我們要做的是將濾波器中的值與圖像的原始像素值相乘。

5edc4945a4f22947d7d68899a85608059dad5504

在輸入圖像中,如果存在類似於該濾波器表示的曲線的形狀,則所有乘法相加在一起將導致較大的值!現在我們來看看當我們移動過濾器時會發生什麼。

49322674790237af7ee3c79205e53401d23320da

值要低得多!這是因為圖像部分中沒有任何響應曲線濾波器中的內容。請記住,此轉換圖層的輸出是激活圖。因此,在一個濾波器卷積的簡單情況下(如果該濾波器是曲線檢測器),那麼激活圖將顯示圖像中最可能出現曲線的區域。在這個例子中,我們的28 x 28 x 1激活圖的左上角值將為6600。我們的激活圖中右上角的值將為0,因為輸入中沒有任何內容導致過濾器被激活(或者更簡單地說,原始圖像的該區域中沒有曲線)。記住,這隻是一個濾波器。它用於檢測向外和向右彎曲的線條。我們也可以使用其他濾波器,用於向左或直邊彎曲的線條。

8839396f88b39e42d758842d52525e045eb4b480

4.3深入網絡

在傳統的卷積神經網絡架構中,其他層次之間非常分明。我強烈地建議有興趣的人閱讀並理解他們的功能和效果,但總體來說,它們提供了非線性的維度,有助於提高網絡的魯棒性和控製過度。經典的CNN架構如下所示:

dc4f8b0b1cbf8b9f15d747bea024fca4916872c8

然而,最後一層是非常重要的,我稍後會介紹。讓我們回顧一下我們剛剛所學到的東西。

我們討論了第一個轉換層中的濾波器被設計為檢測什麼。它們檢測低級特征,如邊緣和曲線。可以想象,為了預測圖像是否是一種對象,我們需要網絡能夠識別更高級別的特征,例如手或爪子或耳朵。所以讓我們考慮第一個轉換層之後的網絡輸出。當我們通過另一個轉換層時,第一個轉換層的輸出成為第二個轉換層的輸入。 

當我們談論第一層時,輸入隻是原始圖像。然而,當我們談論第二個轉換層時,輸入是從第一層產生的激活圖。因此,輸入的每一層基本上都描述了原始圖像中出現某些低級特征的位置。現在當你應用一組濾波器(通過第二個轉換層)時,輸出將是表示較高級特征的激活圖。這些特征的類型可以是半圓(曲線和直邊的組合)或正方形(幾條直邊的組合)。當你通過網絡並通過更多的轉換層時,你將獲得代表越來越複雜特征的激活圖。

4.4完全連接層

現在我們可以檢測到這些高級特征,接下來就是一個完全連接的層。該層基本上接收一個輸入卷(volume)(無論是在其前麵的convReLU或池層的輸出),並輸出N維向量,其中N是程序必須選擇的類的數量。例如,如果你想要一個數字分類程序,N將是10,因為有10位數字。該N維向量中的每個數字表示某一類的概率。例如,如果用於數字分類程序的結果向量是[0117500 00005],則這表示圖像為1的概率為10%,10%的概率為圖像是2,圖像為3的概率為75%,圖像為9的概率為5%。(:還有其他方式可以表示輸出,但我隻是顯示softmax方法。)

這個完全連接層可以查看上一層的輸出(表示高級特征的激活圖),並確定與特定類最相關的特征。例如,如果程序預測某些圖像是狗,則在激活圖中將具有高值,這些圖表示諸如爪或四條腿等高級特征。類似地,如果程序預測某些圖像是鳥,它將具有高值的激活圖,代表高級特征,如翅膀或喙等。完全連接層最後輸出的是一個概率。

67c06d06529087bd7462399714068f5c6d7f6425

4.5訓練

這是我有意沒有提到的神經網絡的另一個方麵,它可能是最重要的部分。第一個轉換層中的濾波器如何查找邊和曲線?完全連接層如何看激活圖?每個層中的濾波器如何知道這是什麼值?計算機能夠調整其濾波器值(或權重)的方式是通過稱為反向傳播的訓練過程。

在進行反向傳播之前,我們必須先退後一步,談一談神經網絡為了工作需要什麼。現在我們都出生了,我們不知道什麼是貓或狗或鳥。以類似的方式,在CNN啟動之前,權重或濾波器值被隨機化。過濾器不知道如何尋找邊緣和曲線。然而,隨著年齡的增長,我們的父母和老師向我們展示了不同的圖片,並給了我們相應的標簽。給予圖像和標簽其實就是CNN的訓練過程。我們有一個訓練集,有成千上萬的狗,貓和鳥的圖像,而且每個圖像都有一個標簽。

回到backprop(反向傳播)

反向傳播可以分為四個不同的部分:正向傳遞,損失函數,後向傳遞和權重更新。在我們的第一個訓練中,由於所有權重或濾波器值都被隨機初始化,所以輸出可能會像[.1 .1 .1 .1 .1 .1 .1 .1 .1]。具有當前權重的網絡不能尋找那些低級特征,因此不能對分類有什麼合理的結論。記住,我們現在正在使用的是訓練數據,該數據同時具有圖像和標簽。例如,輸入的第一個訓練圖像為3,圖像的標簽為[0 0 0 1 0 0 0 0 0 0]。損失函數可以以許多不同的方式定義,但常見的是MSE(均方誤差),它是½倍(實際預測)平方。

5705baa72c3cbb663ae0db71ec1cf51fbc2a4f2f

現在,我們想要達到預測標簽(ConvNet的輸出)與訓練標簽相同的點(這意味著我們的網絡獲得了預測能力)。為了達到目的,我們要盡量減少損失量。將其視為微積分中的優化問題,我們希望了解哪些輸入直接地導致了網絡的丟失。

60799d2fce7926dc655938fe20b19d78528ed951

現在,我們想要做的是執行一個向後傳遞的網絡,這是決定哪些權重有助於損失,並找到調整方式,以使損失減少。這是權重更新。這時我們把所有權重和更新,以便它們沿梯度的相反方向改變。

18d7dab110888321cf0c88629b97e9044d6fc140

向前傳遞>損失函數>向後傳遞>參數更新是一個訓練迭代。該程序將對每組訓練圖像(通常稱為批次)重複此過程以進行固定次數的迭代。一旦完成了最後一個訓練示例的參數更新,網絡應該被訓練得很好,以保證層的權重得到調整。

4.6測試

最後,要看我們的CNN是否有效,我們有一套不同的圖像和標簽,並通過CNN傳遞圖像。我們將輸出與地麵事實進行比較,看看我們的網絡是否正常工作!

5.總結:

雖然這篇文章應該是了解CNN的一個好的開始,但絕不是全麵的概述。這篇文章中沒有討論包括非線性和匯集層以及網絡的超參數,如濾波器大小,步幅和填充。還沒有討論如網絡架構,批量歸一化,梯度消失,dropout,初始化,非凸優化,偏差,損失函數的選擇,數據增加,正則化方法,反向傳播的修改等問題。如果你想要了解這些,請繼續關注我!

作者:Adit Deshpande加州大學洛杉磯分校計算機科學專業

本文由阿裏雲雲社區組織翻譯。

文章原標題《A Beginner's Guide to Understanding Convolutional Neural Networks

作者: Adit Deshpande

 譯者:虎說八道,審閱:

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-11-03 23:33:35

  上一篇:go  數據科學家需要掌握的10項統計技術,快來測一測吧
  下一篇:go  waf的使用必看