卷積神經(jīng)網(wǎng)絡。這聽起來像是一個奇怪的生物學和數(shù)學的結合,但是這些網(wǎng)絡已經(jīng)成為計算機視覺領域最具影響力的創(chuàng)新之一。2012年是神奇網(wǎng)絡成長的第一年,Alex Krizhevsky用它們贏得了當年的ImageNet競賽(基本上是計算機視覺年度奧運會),把分類錯誤記錄從26%降到了15%,這個驚人的提高從那以后,許多公司一直在以服務為核心進行深度學習。Facebook使用自動標記算法的神經(jīng)網(wǎng)絡,谷歌的照片搜索,亞馬遜的產(chǎn)品推薦,Pinterest的家庭飼料個性化和Instagram的搜索基礎設施。
然而,經(jīng)典的,可以說是最流行的,這些網(wǎng)絡的用例是用于圖像處理。在圖像處理中,讓我們來看看如何使用這些CNN進行圖像分類。
問題空間
圖像分類是獲取輸入圖像和輸出類(貓,狗等)或類的概率最好描述圖像的任務。對于人類來說,承認這項任務是我們從出生那一刻起學到的第一個技能之一,并且是成年人自然而不費吹灰之力的人。即使沒有兩次思考,我們也能夠快速無縫地識別我們所處的環(huán)境以及周圍的物體。當我們看到一張圖像或者只是看著周圍的世界時,大部分時間我們都能夠立刻刻畫這個場景,給每個對象一個標簽,所有這些都沒有自覺地注意到。這些能夠快速識別模式的技能,從先前的知識概括,
投入和產(chǎn)出
當一臺電腦看到一個圖像(以圖像作為輸入)時,它會看到一個像素值的數(shù)組。根據(jù)圖像的分辨率和大小,它將看到一個32×32×3的數(shù)字數(shù)組(3指的是RGB值)。為了說明這一點,假設我們有一個JPG格式的彩色圖像,它的大小是480 x 480.代表性的數(shù)組將是480 x 480 x 3.這些數(shù)字中的每一個都有一個從0到255的值,它描述該點的像素強度。這些數(shù)字對于我們進行圖像分類時毫無意義,這是計算機唯一可用的輸入。這個想法是,你給計算機這個數(shù)組的數(shù)組,它會輸出的數(shù)字,描述了圖像是一個類的概率(.80為貓,.15為狗,0.05為鳥等)。
我們想要計算機做什么
現(xiàn)在我們知道這個問題以及輸入和輸出了,我們來思考如何解決這個問題。我們希望計算機做的是能夠區(qū)分所有的圖像,并找出使狗成為狗或使貓成為貓的獨特功能。這也是下意識地在我們的腦海中繼續(xù)的過程。當我們看一張狗的照片時,如果照片具有可識別的特征,例如爪子或四條腿,我們可以將其分類。以類似的方式,計算機能夠通過查找諸如邊緣和曲線等低級特征來執(zhí)行圖像分類,然后通過一系列卷積層來構建更抽象的概念。這是一個CNN的一般概述。我們來詳細說明一下。
生物連接
但首先,有一點背景。當你第一次聽說卷積神經(jīng)網(wǎng)絡這個術語的時候,你可能已經(jīng)想到了一些與神經(jīng)科學或生物學有關的東西,你會是對的。有點。CNNs確實從視覺皮層中獲得了生物啟發(fā)。視覺皮層具有對視野特定區(qū)域敏感的細胞區(qū)域。這個想法是由1962年在一個迷人的實驗由胡貝爾和威塞爾(在擴展視頻)在那里他們表明,大腦中的一些個體神經(jīng)元細胞只有在某個方位的邊緣存在的情況下才會響應(或發(fā)射)。例如,一些神經(jīng)元在暴露于垂直邊緣時發(fā)射,而另一些在顯示水平或對角邊緣時發(fā)射。Hubel和Wiesel發(fā)現(xiàn),所有這些神經(jīng)元都是以柱狀結構組織的,并且能夠產(chǎn)生視覺感知。在具有特定任務的系統(tǒng)內(nèi)部(視覺皮層中尋找特定特征的神經(jīng)元細胞)內(nèi)部的專門組件的想法也是機器使用的,并且是CNN背后的基礎。
結構體
回到具體細節(jié)。有關CNN做的更詳細的概述是,您將圖像傳遞給一系列卷積,非線性,匯聚(下采樣)和完全連接的圖層,并獲得輸出。正如我們前面所說的那樣,輸出可以是一個類或者一個最能描述圖像的類的概率?,F(xiàn)在,困難的部分是了解每個層次都做了什么。所以讓我們進入最重要的一個。
第一層 - 數(shù)學部分
CNN中的第一層始終是一個卷積層。首先要確保你記得這個轉換(我將使用這個縮寫很多)的輸入是什么。就像我們之前提到的那樣,輸入是一個32×32×3的像素值數(shù)組?,F(xiàn)在,解釋一個conv層的最好方法就是想象一個閃爍在圖像左上角的手電筒。假設這個手電筒照射的光線覆蓋了5×5的區(qū)域?,F(xiàn)在,讓我們想象這個手電筒滑過輸入圖像的所有區(qū)域。在機器學習方面,這種手電筒被稱為濾波器(有時也稱為神經(jīng)元或內(nèi)核),而它所照射的區(qū)域稱為接受場?,F(xiàn)在這個過濾器也是一個數(shù)組數(shù)組(數(shù)字稱為權重或參數(shù))。一個非常重要的注意事項是,這個過濾器的深度必須和輸入的深度相同(這可以確保數(shù)學運算出來),所以這個過濾器的尺寸是5 x 5 x 3?,F(xiàn)在,我們來看看例如過濾器的第一個位置。這將是左上角。當濾波器在輸入圖像周圍滑動或卷積時,它將濾波器中的值與圖像的原始像素值相乘(也稱為計算元素智能乘法)。所有這些乘法都被總結出來(從數(shù)學上講,這將是總共75次乘法)。所以,現(xiàn)在你有一個單一的數(shù)字。記住,這個數(shù)字只是過濾器位于圖像左上角的代表?,F(xiàn)在,我們對輸入音量上的每個位置重復這個過程。(下一步將過濾器向右移動1個單位,然后再向右移動1,依此類推)。輸入卷上的每個唯一位置都會生成一個數(shù)字。將過濾器滑過所有位置后,您將發(fā)現(xiàn)所剩下的是一個28 x 28 x 1的數(shù)字數(shù)組,我們稱之為激活圖或功能圖。你得到一個28×28陣列的原因是有一個5×5的濾波器可以放在一個32×32輸入圖像上的784個不同的位置。這784個數(shù)字被映射到一個28×28數(shù)組。
(快速注意:我使用的一些圖像,包括上面的圖像,來自Michael Nielsen的"Neural Networks and Deep Learning",強烈推薦)。
假設我們現(xiàn)在使用兩個5 x 5 x 3濾鏡而不是一個。那么我們的輸出量將是28 x 28 x 2.通過使用更多的過濾器,我們能夠更好地保留空間尺寸。在數(shù)學上,這是卷積層中發(fā)生的事情。
第一層 - 高層次的視角
但是,讓我們從高層次談論這個卷積實際上在做什么。每個這些過濾器都可以被認為是功能標識符。當我說功能時,我正在談論的是直線邊緣,簡單的顏色和曲線。想想所有圖像的共同點,最簡單的特點。假設我們的第一個過濾器是7 x 7 x 3并且將成為曲線檢測器。(在本節(jié)中,為了簡單起見,讓我們忽略過濾器深度為3單位的事實,并且只考慮過濾器和圖像的頂部深度切片)。作為曲線檢測器,過濾器將具有像素結構,沿曲線形狀的區(qū)域是更高的數(shù)值(請記住,我們正在討論的這些濾波器只是數(shù)字?。?/p>
現(xiàn)在,讓我們回到數(shù)學上的可視化。當我們在輸入體積的左上角有這個濾波器時,它將計算該區(qū)域的濾波器和像素值之間的乘法。現(xiàn)在讓我們舉一個想要分類的圖像的例子,讓我們把我們的過濾器放在左上角。
請記住,我們所要做的就是將濾鏡中的值與圖像的原始像素值相乘。
基本上,在輸入圖像中,如果有一個通常類似于這個濾波器所代表的曲線的形狀,那么所有相乘的相加將會產(chǎn)生一個大的值!現(xiàn)在讓我們看看當我們移動過濾器時會發(fā)生什么。
價值低得多!信息信息范范信息亦范范范范范辛辛區(qū)信息預范信息 記住,這個conv層的輸出是一個激活圖。因此,在單一濾波器卷積的簡單情況下(如果該濾波器是曲線檢測器),激活圖將顯示圖片中最有可能是曲線的區(qū)域。在這個例子中,我們的26 x 26 x 1激活圖的左上角(26是因為7x7濾鏡而不是5x5)將是6600.這個高值意味著在輸入中可能有某種曲線導致過濾器激活的音量。在我們的激活地圖右上角的值將是0,因為沒有任何東西在輸入音量導致過濾器激活(或者更簡單的說,在原始圖像的該區(qū)域中沒有曲線)。請記住,這只是一個過濾器。信息范范范讀范范范亦內(nèi)范亦會信息及信息范信信息范辛辛 我們可以有其他的過濾器,用于向左彎曲或為直線邊緣的線條。更多的過濾器,激活圖的深度越大,我們對輸入量的信息也越多。
免責聲明:本節(jié)中描述的過濾器對描述卷積過程中數(shù)學的主要目的是簡單的。在下面的圖片中,您將看到一些經(jīng)過訓練的網(wǎng)絡的第一個conv層過濾器的實際可視化示例。盡管如此,主要論點仍然是一樣的。第一層上的過濾器在輸入圖像周圍進行卷積,并在其正在查找的特定功能位于輸入體積中時"激活"(或計算高值)。
(快速提示:上面的圖片來自斯坦福大學的由Andrej Karpathy和Justin Johnson教授,推薦給那些希望更深入了解CNN的人。)
越來越深入的網(wǎng)絡
現(xiàn)在在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡架構中,在這些conv層之間還有其他層。我強烈鼓勵有興趣的讀者了解他們的功能和效果,但是從一般意義上說,他們提供了非線性和維度維度,有助于提高網(wǎng)絡的魯棒性和控制過擬合。一個經(jīng)典的CNN架構看起來就像這樣。
然而,最后一層是一個重要的層面,我們稍后會介紹。讓我們退一步看看迄今為止我們已經(jīng)學到了什么。我們討論了第一個conv層中的過濾器是用來檢測的。他們檢測低級功能,如邊緣和曲線。正如人們所想象的,為了預測圖像是否是一種對象,我們需要網(wǎng)絡能夠識別更高層次的特征,如手或爪子或耳朵。那么讓我們來思考第一個conv層之后的網(wǎng)絡輸出結果。這將是一個28×28×3的體積(假設我們使用三個5×5×3濾波器)。當我們經(jīng)過另一個conv層時,第一個conv層的輸出成為第二個的輸入conv層?,F(xiàn)在,這看起來有點難以想象。當我們在談論第一層時,輸入只是原始圖像。然而,當我們談論第二層次的時候,輸入是第一層產(chǎn)生的激活圖。因此,輸入的每一層都基本上描述了原始圖像中某些低級特征出現(xiàn)的位置?,F(xiàn)在當你在上面應用一組過濾器時(通過第二個過濾器)conv層),則輸出將是代表更高級特征的激活。這些特征的類型可以是半圓(曲線和直邊的組合)或正方形(幾個直邊的組合)。當您瀏覽網(wǎng)絡并通過更多的轉發(fā)層時,您將獲得代表越來越復雜功能的激活地圖。在網(wǎng)絡結束時,您可能會有一些過濾器在圖像中有手寫時激活,過濾器在看到粉紅色的物體時激活,等等。如果您想要了解關于在ConvNets中可視化過濾器的更多信息,Matt Zeiler和Rob Fergus一個很好的研究論文討論的話題。杰森Yosinski也有一個視頻在YouTube上提供了一個很好的視覺表現(xiàn)。另一個值得注意的事情是,當你深入到網(wǎng)絡中時,過濾器開始具有越來越大的接受范圍,這意味著他們能夠從原始輸入量的較大區(qū)域中考慮信息(另一種放置方式它們對像素空間的較大區(qū)域更敏感)。
完全連接層
現(xiàn)在,我們可以檢測到這些高級功能,蛋糕上的糖霜就是連接一個完全連接的層到網(wǎng)絡的盡頭。這個圖層基本上需要一個輸入量(無論輸出是在其之前的conv或ReLU還是pool層),并輸出一個N維向量,其中N是程序必須從中選擇的類的數(shù)量。例如,如果你想要一個數(shù)字分類程序,N將是10,因為有10個數(shù)字。這個N維向量中的每個數(shù)字表示某個類別的概率。例如,如果用于數(shù)字分類程序的結果向量是[0.1.175 0 0 0 0 0 .05],那么這代表10%的概率,即圖像是1,10%的概率圖像是2,圖像是3的概率是75%,圖像是9的概率是5%(注意:還有其他方法可以表示輸出,但我只是展示了softmax方法)。完全連接圖層的工作方式是查看上一層的輸出(我們記得它應該代表高級特征的激活圖),并確定哪些特征與特定類最相關。例如,如果程序預測某些圖像是狗,則在激活圖中將具有高值,例如爪子或4條腿等的高級特征。類似地,如果程序預測某圖像是鳥,它將在激活地圖中具有很高的價值,代表像翅膀或喙等高級特征?;旧希現(xiàn)C層看著什么高級特征與特定類最強關聯(lián),并具有特定的權重,以便當你計算權重與上一層之間的乘積,
培訓(又名:什么使這個東西工作)
現(xiàn)在,這是我故意沒有提到的神經(jīng)網(wǎng)絡的一個方面,它可能是最重要的部分。閱讀時可能有很多問題。第一個conv層中的過濾器如何知道要查找邊和曲線?完全連接的圖層如何知道要查看的激活圖?每層中的過濾器如何知道有什么值?計算機能夠調整其過濾值(或權重)的方式是通過稱為反向傳播的訓練過程。
在我們進入反向傳播之前,我們必須先退后一步,討論神經(jīng)網(wǎng)絡的工作需求?,F(xiàn)在我們都出生了,我們的思想是新鮮的。我們不知道什么是貓,狗或鳥。以類似的方式,在CNN開始之前,權重或篩選值是隨機的。過濾器不知道尋找邊緣和曲線。在更高層的過濾器不知道尋找爪子和喙。然而,隨著年齡的增長,我們的父母和老師向我們展示了不同的圖片和圖片,并給了我們相應的標簽。被賦予形象和標簽的想法是CNN經(jīng)歷的培訓過程。在深入研究之前,我們假設我們有一套訓練集,其中包含成千上萬的狗,貓和鳥的圖像,每個圖像都有一個這個圖像是什么動物的標簽。
所以反向傳播可以分為4個不同的部分,正向傳遞,丟失函數(shù),反向傳遞和權重更新。在正向傳球過程中,您將會看到一張訓練圖像,我們記得這是一個32 x 32 x 3的數(shù)字數(shù)組,并將其傳遞給整個網(wǎng)絡。在我們的第一個訓練樣例中,由于所有的權值或過濾值都是隨機初始化的,因此輸出結果可能類似[.1.1.1.1.1.1.1.1.1.1],基本上是輸出不特別優(yōu)先考慮任何數(shù)字。網(wǎng)絡以其當前的權重無法查找這些低級特征,因此無法就分類的可能性作出任何合理的結論。這轉到損失功能反向傳播的一部分。請記住,我們現(xiàn)在使用的是培訓數(shù)據(jù)。這個數(shù)據(jù)有一個圖像和一個標簽。例如,假設輸入的第一個訓練圖像是3,圖像的標簽是[0 0 0 1 0 0 0 0 0 0]。損失函數(shù)可以用許多不同的方式來定義,但常見的是MSE(均方誤差),是實際預測的平方的1.5倍。
假設變量L等于該值。正如你可以想象的那樣,第一對訓練圖像的損失將非常高?,F(xiàn)在,讓我們直觀地思考這個問題。我們希望達到預測的標簽(ConvNet的輸出)與訓練標簽相同的點(這意味著我們的網(wǎng)絡得到了預測權)。為了達到這個目的,我們希望最小化損失量我們有。將這看作是微積分中的一個優(yōu)化問題,我們想要找出哪些輸入(權重在我們的情況下)是最直接導致網(wǎng)絡損失(或錯誤)的因素。
這是dL / dW的數(shù)學等價物,其中W是特定層的權重?,F(xiàn)在,我們要做的是通過網(wǎng)絡進行反向傳遞,即確定哪些權重對損失貢獻最大,并設法調整損失,從而減少損失。一旦我們計算出這個導數(shù),我們就會進入權重更新的最后一步。這是我們?nèi)〉盟羞^濾器的權重,并更新它們,使它們在梯度的相反方向變化。
該學習速率是由程序員選擇的參數(shù)。高學習率意味著在權重更新中采取更大的步驟,因此,模型可能花費較少的時間來收斂于最優(yōu)權重集合。但是,如果學習速度過高,可能會導致跳躍過大,不夠精確,無法達到最佳點。
正向傳遞,丟失函數(shù),反向傳遞和參數(shù)更新的過程是一次訓練迭代。程序將重復這個過程,對每組訓練圖像(通常稱為批次)進行固定次數(shù)的迭代。一旦你完成了最后一個訓練樣例的參數(shù)更新,希望網(wǎng)絡應該被訓練得足夠好,這樣層的權重才能被正確地調整。
測試
最后,為了看看我們的CNN是否有效,我們有一套不同的圖像和標簽(在訓練和測試之間不能一蹴而就),并通過CNN傳遞圖像。我們將輸出與實際情況進行比較,看看我們的網(wǎng)絡是否正常工作!
公司如何使用CNNs
數(shù)據(jù),數(shù)據(jù),數(shù)據(jù)。那些擁有這個神奇的4字母詞的公司就是那些比其他競爭者具有內(nèi)在優(yōu)勢的公司。您可以為網(wǎng)絡提供的培訓數(shù)據(jù)越多,您可以進行的培訓迭代次數(shù)越多,您可以進行的權重更新越多,調整到網(wǎng)絡的時間越長。Facebook(和Instagram)可以使用目前擁有的十億用戶的所有照片,Pinterest可以使用其網(wǎng)站上500億個引腳的信息,Google可以使用搜索數(shù)據(jù),Amazon可以使用數(shù)百萬個產(chǎn)品每天都買。現(xiàn)在你知道他們?nèi)绾问褂盟哪Х恕?/p>
-
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4749瀏覽量
100434 -
深度學習
+關注
關注
73文章
5471瀏覽量
120904 -
cnn
+關注
關注
3文章
350瀏覽量
22139
原文標題:深度學習初學者了解CNN卷積神經(jīng)網(wǎng)絡的黃金指南
文章出處:【微信號:worldofai,微信公眾號:worldofai】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論