摘要: 何為卷積神經網絡,它來自何方?又要走向何處?跟著作者的節奏,一起來開始探索CNN吧。
卷積神經網絡聽起來像一個奇怪的生物學和數學的組合,但它是計算機視覺領域最具影響力的創新之一。2012年是卷積神經網絡最流行的一年,因為Alex Krizhevsky用它贏得當年的ImageNet競爭(基本上算得上是計算機視覺的年度奧運),它將分類錯誤記錄從26%降至15%,這是驚人的改善。從那時起,深度學習開始流行起來,Facebook使用神經網絡進行自動標記算法,Google進行照片搜索,亞馬遜的產品推薦,家庭飼料個性化的Pinterest,以及以搜索為基礎設施的Instagram。
?
今天我們來看看在圖像處理中如何使用CNN進行圖像分類。
1.空間問題
圖像分類是輸入圖像并輸出類(貓,狗等)的任務,或是最能描述圖像的類的概率。對于人類來說,這個任務是我們從出生的那一刻開始學習的第一個技能之一。我們人類能夠快速,無縫地識別我們所處的環境以及我們周圍的對象。當我們看到一個圖像,甚至只是看著我們周圍的世界,大多數時候,我們能夠立即刻畫場景,并給每個對象一個標簽,所有這些都沒有意識到注意。能夠快速識別模式的這些技能,從先前的知識推測出來,適應不同的圖像環境是我們的特長。我個人覺得這是人類三維視角的獨特的優勢,相較于機器的二維視角。
?
2.輸入和輸出
當計算機看到圖像(將圖像作為輸入)時,它將看到的是像素值的數組。根據圖像的分辨率和大小,它會看到一個32 x 32 x 3的數組(3是RGB值)。我們假設我們有一個JPG形式的彩色圖像,其大小是480 x 480.代表性的數組將是480 x 480 x 3。這些數字中的每一個都給出一個從0到255的值,它描述某個點的像素強度。這些數字在我們進行圖像分類時對我們毫無意義,但它是計算機可用的唯一輸入。所以,這在人類的潛意識中是非常困難的。
3.我們想要電腦做什么
現在我們知道了問題以及如何輸入和輸出,讓我們考慮一下如何解決這個問題。我們希望電腦能夠區分所有的圖像,并找出識別狗或識別貓的獨特功能。當我們看一只狗的照片時,如果圖片具有可識別的特征,例如爪子或四條腿,我們可以對其進行分類。以類似的方式,計算機能夠通過尋找諸如邊緣和曲線的低級特征,然后通過一系列卷積層來構建更抽象的概念來執行圖像分類。這是CNN功能的總體概述,我們來詳細了解一下。
3.1生物連接
首先你要有一點生物學背景。當你第一次聽到“卷積神經網絡”一詞的時候,你可能會想到與神經科學或生物學有關的東西。CNN確實從生物學中的視覺皮質獲得啟發,視覺皮層是具有對視野的特定區域敏感的細胞區域,而且特定區域一般很小。這個想法在1962年由Hubel和Wiesel的實驗產生的。Hubel和Wiesel發現,所有這些神經元都被組織在一個柱狀結構中,并且它們一起能夠產生視覺感知。具有特定任務(視覺皮層中的神經元細胞尋找特定特征)的系統內的專門組件的想法也是機器使用的構思。也是我們常說的局部感受野:就是輸出圖像某個節點的響應所對應的最初的輸入圖像的區域。這也是CNN的基礎。
4.結構體
接下來我們談談具體細節。對CNN做什么的更詳細的概述將是:拍攝圖像、通過一系列卷積、非線性、池(下采樣)和完全連接的層,并獲得輸出。如我們前面所說,輸出可以是單個類或最能描述圖像的類的概率?,F在,困難的部分是理解這些層中的每一個,首先讓我們進入最重要的一個。
4.1第一層:數學 (Math)
CNN中的第一層總是卷積層。第一件事是要確保你記得是這個轉換的輸入,像我們之前提到的,輸入是一個32 x 32 x 3的像素數組。解釋轉換層的最好方法是想象一下閃光在圖像左上方的手電筒,這個手電筒的光線覆蓋著5×5的區域。而現在,我們可以想象這個手電筒可以滑過輸入圖像的所有區域。在機器學習術語中,這種手電筒被稱為濾波器(或有時稱為神經元或內核),并且其閃爍的區域稱為接收場?,F在這個過濾器也是數字數組(數字稱為權重或參數)。一個非常重要的注意事項是,該濾波器的深度必須與輸入深度相同(這樣才可以確保數學運算),因此濾波器的尺寸為5 x 5 x 3。
譯者注:濾波器:filter(帶著一組固定權重的神經元)對局部輸入數據進行卷積計算。
現在,我們來看看濾波器的第一個位置。當濾波器在輸入圖像周圍滑動或卷積時,它將濾波器中的值與圖像的原始像素值(AKA運算單元乘法)相乘。所以你將等到一個數字,請記住,這個數字只是代表濾波器位于圖像左上方的代表?,F在,我們對每個位置重復此過程。(下一步是將濾鏡向右移動1個單位,然后再次向右移動1個,依此類推。)每個位置都會產生一個數字,濾波器將所有位置的滑動后,你會發現剩下的是28 x 28 x 1的數字數組,我們稱之為激活圖或特征圖。你得到一個28 x 28陣列的原因是,有784個不同的位置,一個5 x 5的過濾器可以適應32 x 32的輸入圖像。這些784個數字被映射到一個28×28陣列。
?
現在我們使用兩個5 x 5 x 3的過濾器,而不是一個。那么我們的輸出將是28 x 28 x 2.通過使用更多的濾鏡,我們可以更好地保留空間維度。
4.2高層次視角(high-level perspective)#e#
4.2高層次視角(high-level perspective)
我們來談一談從高層次視角看這個卷積實際在做什么。這些濾波器中的每一個都可以被認為是特征標識符。當我說特征時,我指的是直邊、簡單的顏色和曲線。假設我們第一個濾波器為7 x 7 x 3,將成為一個曲線檢測器。(在本節中,我們忽略了濾波器為3單位深的事實,為了簡單起見,僅考慮濾波器和圖像的頂層深度)。作為曲線檢測器,濾波器將具有像素結構,其中存在的是沿著曲線形狀的區域的更高的數值(記住,我們正在談論的這些過濾器只是數字?。?。
?
現在,讓我們回想一下數學上的可視化。當我們在輸入的左上角有這個過濾器時,它是該區域中濾波器和像素值之間的計算乘法?,F在,讓我們舉一個我們要分類的圖像的例子,讓我們把過濾器放在左上角。
?
記?。何覀円龅氖菍V波器中的值與圖像的原始像素值相乘。
?
在輸入圖像中,如果存在類似于該濾波器表示的曲線的形狀,則所有乘法相加在一起將導致較大的值!現在我們來看看當我們移動過濾器時會發生什么。
?
值要低得多!這是因為圖像部分中沒有任何響應曲線濾波器中的內容。請記住,此轉換圖層的輸出是激活圖。因此,在一個濾波器卷積的簡單情況下(如果該濾波器是曲線檢測器),那么激活圖將顯示圖像中最可能出現曲線的區域。在這個例子中,我們的28 x 28 x 1激活圖的左上角值將為6600。我們的激活圖中右上角的值將為0,因為輸入中沒有任何內容導致過濾器被激活(或者更簡單地說,原始圖像的該區域中沒有曲線)。記住,這只是一個濾波器。它用于檢測向外和向右彎曲的線條。我們也可以使用其他濾波器,用于向左或直邊彎曲的線條。
?
4.3深入網絡
在傳統的卷積神經網絡架構中,其他層次之間非常分明。我強烈地建議有興趣的人閱讀并理解他們的功能和效果,但總體來說,它們提供了非線性的維度,有助于提高網絡的魯棒性和控制過度。經典的CNN架構如下所示:
然而,最后一層是非常重要的,我稍后會介紹。讓我們回顧一下我們剛剛所學到的東西。
我們討論了第一個轉換層中的濾波器被設計為檢測什么。它們檢測低級特征,如邊緣和曲線??梢韵胂?,為了預測圖像是否是一種對象,我們需要網絡能夠識別更高級別的特征,例如手或爪子或耳朵。所以讓我們考慮第一個轉換層之后的網絡輸出。當我們通過另一個轉換層時,第一個轉換層的輸出成為第二個轉換層的輸入。
當我們談論第一層時,輸入只是原始圖像。然而,當我們談論第二個轉換層時,輸入是從第一層產生的激活圖。因此,輸入的每一層基本上都描述了原始圖像中出現某些低級特征的位置?,F在當你應用一組濾波器(通過第二個轉換層)時,輸出將是表示較高級特征的激活圖。這些特征的類型可以是半圓(曲線和直邊的組合)或正方形(幾條直邊的組合)。當你通過網絡并通過更多的轉換層時,你將獲得代表越來越復雜特征的激活圖。
4.4完全連接層
現在我們可以檢測到這些高級特征,接下來就是一個完全連接的層。該層基本上接收一個輸入卷(volume)(無論是在其前面的conv或ReLU或池層的輸出),并輸出N維向量,其中N是程序必須選擇的類的數量。例如,如果你想要一個數字分類程序,N將是10,因為有10位數字。該N維向量中的每個數字表示某一類的概率。例如,如果用于數字分類程序的結果向量是[0,1,1,75,0,0 ,0,0,0,05],則這表示圖像為1的概率為10%,10%的概率為圖像是2,圖像為3的概率為75%,圖像為9的概率為5%。(注:還有其他方式可以表示輸出,但我只是顯示softmax方法。)
這個完全連接層可以查看上一層的輸出(表示高級特征的激活圖),并確定與特定類最相關的特征。例如,如果程序預測某些圖像是狗,則在激活圖中將具有高值,這些圖表示諸如爪或四條腿等高級特征。類似地,如果程序預測某些圖像是鳥,它將具有高值的激活圖,代表高級特征,如翅膀或喙等。完全連接層最后輸出的是一個概率。
?
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(均方誤差),它是?倍(實際預測)平方。
現在,我們想要達到預測標簽(ConvNet的輸出)與訓練標簽相同的點(這意味著我們的網絡獲得了預測能力)。為了達到目的,我們要盡量減少損失量。將其視為微積分中的優化問題,我們希望了解哪些輸入直接地導致了網絡的丟失。
?
現在,我們想要做的是執行一個向后傳遞的網絡,這是決定哪些權重有助于損失,并找到調整方式,以使損失減少。這是權重更新。這時我們把所有權重和更新,以便它們沿梯度的相反方向改變。
?
向前傳遞>損失函數>向后傳遞>參數更新是一個訓練迭代。該程序將對每組訓練圖像(通常稱為批次)重復此過程以進行固定次數的迭代。一旦完成了最后一個訓練示例的參數更新,網絡應該被訓練得很好,以保證層的權重得到調整。
4.6測試
最后,要看我們的CNN是否有效,我們有一套不同的圖像和標簽,并通過CNN傳遞圖像。我們將輸出與地面事實進行比較,看看我們的網絡是否正常工作!
5.總結:
雖然這篇文章應該是了解CNN的一個好的開始,但絕不是全面的概述。這篇文章中沒有討論包括非線性和匯集層以及網絡的超參數,如濾波器大小,步幅和填充。還沒有討論如網絡架構,批量歸一化,梯度消失,dropout,初始化,非凸優化,偏差,損失函數的選擇,數據增加,正則化方法,反向傳播的修改等問題。如果你想要了解這些,請繼續關注我!
評論
查看更多