免責聲明:
原文鏈接:https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
介紹
卷積神經(jīng)網(wǎng)絡缚俏。這聽起來像是生物學和數(shù)學的怪異結合,但這些網(wǎng)絡已經(jīng)成為計算機視覺領域最具影響力的創(chuàng)新之一。2012年是神經(jīng)網(wǎng)絡成長的第一年氨距,因為Alex Krizhevsky利用它們贏得了當年的圖像網(wǎng)絡競賽(基本上是每年的計算機視覺)斋否,將分類錯誤率從26%下降到15%裙品,這是一個驚人的進步段直。從那時起寓落,許多公司就一直在他們的服務核心中使用深度學習呛谜。Facebook使用神經(jīng)網(wǎng)絡為他們的自動標簽算法在跳,谷歌則用來做他們的照片搜索,亞馬遜用來提供他們的產(chǎn)品推薦隐岛,Pinterest用來為他們的家庭提供個性化服務猫妙,Instagram用來做他們的搜索基礎設施。
然而聚凹,經(jīng)典的割坠、可以說是最流行的這些網(wǎng)絡的用例是圖像處理。在圖像處理中妒牙,讓我們看一下如何使用這些cnnn來進行圖像分類彼哼。
問題提出
圖像分類是接收輸入圖像和輸出類(貓、狗等)的任務湘今,或者是最能描述圖像的類的概率敢朱。
對人類來說,這個識別任務是我們從出生那一刻開始學習的第一項技能象浑,它是一個自然而又毫不費力的過程蔫饰。
不用經(jīng)過思考,我們就能夠快速愉豺、無縫地識別我們所處的環(huán)境和周圍的物體篓吁。
當我們看到一個圖像或者當我們看著周圍的世界時,大多數(shù)時候我們能夠立即描述這個場景并給每個物體一個標簽蚪拦,自然而然地杖剪。
這些能夠快速識別模式的技能,從先前的知識中歸納出驰贷,并適應不同的圖像環(huán)境盛嘿,這些技能是我們與其他機器不共享的。
輸入和輸出
當計算機看到一個圖像(將圖像作為輸入)時括袒,它將看到一個像素值數(shù)組次兆。根據(jù)圖像的分辨率和大小,它將看到32 x 32 x 3的數(shù)字數(shù)組(3表示RGB值锹锰,即色道)芥炭。為了說明這一點漓库,假設我們有一張JPG格式的彩色圖像,它的大小是480 x 480园蝠。這個代表數(shù)組將是480 x 480 x 3渺蒿。每個數(shù)字都有一個從0到255的值,它描述了那個點的像素強度彪薛。這些數(shù)字在我們執(zhí)行圖像分類時對我們?nèi)祟悂碚f毫無意義茂装,但卻是計算機唯一可用的輸入。它的意思是善延,你給計算機這個數(shù)字數(shù)組少态,它會輸出數(shù)字來描述圖像的概率是一個特定的類(貓,80%。狗,15%,5%的鳥等等)挚冤。
我們想讓計算機做什么
現(xiàn)在我們已經(jīng)知道了及輸入和輸出的問題所在况增,我們來考慮一下如何處理這個問題。我們想讓計算機做的是训挡,能夠區(qū)分出它所給出的所有圖像澳骤,并找出能辨別出狗的獨特特征,或者說是貓的澜薄。這也是我們潛意識里進行的過程为肮。當我們看一張狗的照片時,我們可以把它分類肤京,如果這張圖片有可識別的特征颊艳,比如爪子或四條腿。通過類似的方法忘分,計算機可以通過尋找邊緣和曲線等較低的特征來執(zhí)行圖像分類棋枕,然后通過一系列的卷積層來構建更抽象的概念。這是一個關于CNN的總體概況妒峦。讓我們深入了解細節(jié)重斑。
生物學背景
但首先,有一點背景知識肯骇。當你第一次聽說卷積神經(jīng)網(wǎng)絡時窥浪,你可能想到了一些與神經(jīng)科學或生物學相關的東西,你是對的笛丙。排序的漾脂。cnn確實從視覺皮層獲得了生物學上的靈感。視覺皮質(zhì)有一小部分細胞對視覺區(qū)域的特定區(qū)域敏感胚鸯。這一想法是由Hubel和Wiesel在1962年的一項令人著迷的實驗(視頻)所做的骨稿,他們展示了大腦中的一些神經(jīng)元細胞只在特定的方向上做出反應(或被發(fā)射)。例如,當暴露于垂直的邊緣時啊终,一些神經(jīng)元會被觸發(fā)镜豹,而當顯示水平或?qū)蔷€的邊緣時傲须,則會觸發(fā)另一些神經(jīng)元蓝牲。Hubel和Wiesel發(fā)現(xiàn),所有這些神經(jīng)元都是在一個柱狀結構中組織起來的泰讽,它們可以產(chǎn)生視覺感知例衍。在一個系統(tǒng)中特定的組成部分部分有特定任務的這個概念(視覺皮層中的神經(jīng)元細胞尋找特定特征),也被用到的計算機視覺中已卸,這也是cnn背后的基礎佛玄。
整體結構
回到了細節(jié)。更詳細的概述是累澡,cnnn的工作是將圖像傳遞給它梦抢,通過一系列的卷積、非線性愧哟、池(向下采樣)和完全連接的層奥吩,并獲得輸出。如前所述蕊梧,輸出可以是單個類霞赫,也可以是最好描述圖像的類的概率。現(xiàn)在肥矢,難點在于理解每一層的作用端衰。讓我們進入最重要的一個。
第一層——數(shù)學部分
CNN的第一層總是一個卷積層甘改。首先要記住的是旅东,這個conv(卷積的縮寫,我將使用這個縮寫)的輸入層是什么十艾。就像我們之前提到的抵代,輸入是一個32 x 32 x 3數(shù)組的像素值。現(xiàn)在疟羹,解釋一個conv層的最好方法是想象一個閃光的手電筒照在圖像的左上方主守。假設這個手電筒的光覆蓋了一個5 x 5的區(qū)域。現(xiàn)在榄融,讓我們想象一下這個手電筒在輸入圖像的所有區(qū)域滑動参淫。在機器學習術語中,這個手電筒被稱為過濾器(有時被稱為神經(jīng)元或內(nèi)核)愧杯,而它所照耀的區(qū)域被稱為“接收場”∠巡牛現(xiàn)在這個過濾器也是一個數(shù)字數(shù)組(數(shù)字被稱為權重或參數(shù))。非常重要的一點是,這個過濾器的深度必須與輸入的深度相同(這確保了計算的結果)耍铜,所以這個過濾器的尺寸是5 x 5 x 3∫毓耄現(xiàn)在,讓我們來看看過濾器的第一個位置棕兼。它將會是左上角陡舅。當過濾器在輸入圖像周圍滑動或卷積時,它會將過濾器中的值與圖像的原始像素值相乘(也就是計算元素的乘法運算)伴挚。這些乘數(shù)都是可以總結的(從數(shù)學上說靶衍,總共是75次)。現(xiàn)在你有一個單獨的數(shù)字茎芋。記住颅眶,這個數(shù)字僅僅代表了圖像的左上角。現(xiàn)在田弥,我們對輸入卷上的每個位置重復這個過程涛酗。(下一步是將過濾器移動到右側1個單元,然后再右移1個單位偷厦,以此類推)商叹。輸入卷上的每個惟一位置都會產(chǎn)生一個數(shù)字。在所有的位置滑動過濾器之后沪哺,你會發(fā)現(xiàn)你剩下的是一個28 x 28 x 1的數(shù)字數(shù)組沈自,我們稱它為激活映射或特征映射。你得到一個28 x 28的數(shù)組的原因是有784個不同的位置5個x 5的過濾器可以裝在32 x 32的輸入圖像上辜妓。這些784個數(shù)字被映射到一個28 x 28的數(shù)組枯途。
(請注意:我使用的一些圖片,包括上面的圖片籍滴,來自邁克爾尼爾森的這本很棒的書酪夷,“神經(jīng)網(wǎng)絡和深度學習”。強烈推薦)孽惰。
假設現(xiàn)在我們使用兩個5 x 5 x 3個過濾器而不是一個晚岭。然后我們的輸出量是28 x 28 x 2。通過使用更多的過濾器勋功,我們能夠更好地保護空間維度坦报。從數(shù)學上講,這就是卷積層的情況狂鞋。
第一層——高層次的視角
但是片择,讓我們來談談這個卷積是如何從一個高的水平來做的。每個過濾器都可以被認為是功能標識符骚揍。當我說特征時字管,我指的是直線啰挪,簡單的顏色和曲線這些東西。想一下所有圖像之間的最簡單的特征嘲叔。假設我們的第一個濾波器是7 x 7 x 3亡呵,它是一個曲線檢測器。(在本節(jié)中硫戈,讓我們忽略一個事實锰什,即過濾器是3個深度的,為了簡單起見?掏愁,只考慮過濾器和圖像的頂部深度部分歇由。)作為一個曲線檢測器,過濾器將有一個像素結構果港,在這個區(qū)域中,在一個曲線形狀的區(qū)域中會有更高的數(shù)值(記住糊昙,我們說的這些過濾器辛掠,它們只是數(shù)字罷了!)
現(xiàn)在释牺,讓我們回到數(shù)學上萝衩。當我們在輸入量的左上角有這個過濾器時,它就是在那個區(qū)域的過濾器和像素值之間的計算∶涣現(xiàn)在讓我們舉一個我們想要分類的圖像的例子猩谊,把我們的過濾器放在左上角。
記住祭刚,我們要做的是將過濾器中的值與圖像的原始像素值相乘牌捷。
基本上,在輸入圖像中涡驮,如果有一個形狀與這個過濾器所代表的曲線很相似暗甥,那么所有的乘數(shù)相加將會得到一個很大的值!現(xiàn)在讓我們看看當我們移動過濾器時會發(fā)生什么捉捅。
價值要低得多撤防!這是因為圖像部分中沒有對曲線檢測器濾波器做出響應的任何東西。記住棒口,這個conv層的輸出是一個激活映射寄月。所以,在一個簡單的情況下无牵,一個濾波器卷積(如果那個濾波器是一個曲線檢測器)漾肮,激活圖會顯示出圖像中大部分可能是曲線的區(qū)域。在本例中合敦,我們26 x 26 x 1激活映射的左上角值(26因為7x7過濾器而不是5x5)將是6600初橘。這個高值意味著,在輸入卷中可能有某種曲線導致了過濾器的激活。在我們的激活圖中保檐,最右的值是0耕蝉,因為在輸入卷中沒有任何東西導致過濾器被激活(或者更簡單地說,原始圖像的那個區(qū)域沒有一條曲線)夜只。記住垒在,這只是一個過濾器。這只是一個過濾器扔亥,用來檢測向外向右的線场躯。我們還可以對曲線向左或直邊的直線進行其他濾鏡。過濾器越多旅挤,激活映射的深度越深踢关,我們對輸入卷的信息也越多。
免責聲明:我在這一節(jié)描述的過濾器過于簡單粘茄,主要用于描述在卷積過程中進行的數(shù)學運算签舞。在下面的圖中,您將看到一些實際可視化的示例柒瓣,這些示例是經(jīng)過訓練的網(wǎng)絡的第一個conv層的過濾器的實際可視化儒搭。盡管如此,主要的爭論還是一樣的芙贫。第一層的過濾器圍繞輸入圖像進行卷積搂鲫,當它要查找的特定特性在輸入卷中,“激活”(或計算高值)磺平。
(快速注意:上面的圖片來自于Andrej Karpathy和賈斯汀約翰遜教授的斯坦福大學課程魂仍。推薦給任何想要了解cnnn的人。)
深入了解
現(xiàn)在褪秀,在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡體系結構中蓄诽,在這些conv層之間還有其他的層。我強烈建議那些有興趣閱讀的人媒吗,了解他們的功能和效果仑氛,但是從一般意義上說,他們提供了非線性和維保闸英,這有助于提高網(wǎng)絡的健壯性和對過度擬合的控制锯岖。一個典型的CNN架構是這樣的。
然而甫何,最后一層是很重要的一層出吹,我們稍后會深入討論。讓我們回顧一下到目前為止所學到的知識辙喂。我們討論了第一個conv層中的過濾器是如何被設計來檢測的捶牢。他們檢測到低水平的特征鸠珠,例如邊緣和曲線。正如人們想象的那樣秋麸,為了預測圖像是否是一種對象類型渐排,我們需要網(wǎng)絡能夠識別出更高水平的特征,例如手灸蟆、爪或耳朵驯耻。我們來想想第一個conv層后網(wǎng)絡的輸出是什么。它是28 x 28 x 3的體積(假設我們使用3個5 x 5 x 3個過濾器)炒考。當我們穿過另一個conv層時可缚,第一個conv層的輸出就變成了第二個conv層的輸入。現(xiàn)在斋枢,這個更難想象了帘靡。當我們討論第一個層時,輸入只是原始圖像杏慰。但是测柠,當我們討論第二個conv層時,輸入是來自第一個層的激活映射(s)缘滥。因此,輸入的每一層都是描述原始圖像中的位置谒主,以顯示某些低水平的特征〕螅現(xiàn)在,當您在上面應用一組過濾器時(將它傳遞到第二個conv層)霎肯,輸出將是表示更高級別特性的激活擎颖。這些特征的類型可以是半邊形(曲線和直邊的組合)或正方形(幾個直邊的組合)。當您瀏覽網(wǎng)絡并瀏覽更多的conv層時观游,您會得到代表了越來越復雜的特性的激活映射搂捧。你可能會有一些過濾器,激活有筆跡圖像時,過濾器,激活當他們看到粉紅色的對象,等等。如果你想要更多的信息可視化在回旋網(wǎng)過濾器,馬特Zeiler和羅伯·費格斯有一個優(yōu)秀的研究論文討論的話題懂缕。Jason 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 .1 .75 0 0 0 0 0 .05],那么這意味著10%的概率是1的圖片,圖像2 10%的概率,75%的概率,圖像是一個3,和5%的概率圖像是一個9(注:還有其他的方法可以代表輸出,但我只是顯示將softmax方法)。這個完全連接層的工作方式是矗晃,它查看前一層的輸出(我們記得它應該表示高級特性的激活映射)仑嗅,并確定哪些特性與某個特定的類相關聯(lián)。例如,如果項目是預測,一些形象是一只狗,它會有高值代表高水平的激活地圖功能,如爪或4條腿,等等张症。同樣,如果程序預計,一些形象是一只鳥,它會有高值代表高水平的激活地圖功能,像翅膀或嘴,等等仓技。基本上,FC層看著最高度特性強關聯(lián)到一個特定的類,有特定的權重,所以當你計算重量和前面的層之間的產(chǎn)品,你會得到正確的概率為不同的類俗他。
訓練(也就是:是什么讓這些東西起作用)
現(xiàn)在脖捻,這是神經(jīng)網(wǎng)絡的一個方面我還沒有提到,它可能是最重要的部分兆衅。在閱讀的時候可能會有很多問題地沮。第一個conv層中的過濾器是如何知道尋找邊和曲線的?完全連接層如何知道激活映射要看什么?每個層中的過濾器是如何知道要使用什么值的?
計算機能夠調(diào)整其濾波器值(或權重)的方法是通過一個稱為反向傳播的訓練過程。
在進行反向傳播之前羡亩,我們必須先退一步摩疑,討論一下神經(jīng)網(wǎng)絡需要什么才能工作。在我們都出生的那一刻畏铆,我們的頭腦是新鮮的雷袋。我們不知道貓、狗或鳥是什么辞居。同樣的楷怒,在CNN開始之前,權重或過濾值是隨機的瓦灶。濾光器不知道尋找邊緣和曲線鸠删。更高層次的過濾器不知道要尋找爪子和喙。然而贼陶,隨著年齡的增長刃泡,我們的父母和老師給我們展示了不同的圖片和圖片,并給我們一個相應的標簽每界。這個被賦予一個形象和一個標簽的想法是cnn的訓練過程捅僵。在深入研究之前,我們先說我們有一個訓練集里面有成千上萬的狗眨层,貓庙楚,和鳥的圖片,每一張圖片都有一個動物圖片的標簽趴樱÷疲回到backprop酪捡。
因此,反向傳播可以分為4個不同的部分纳账,向前傳遞逛薇、損失函數(shù)、向后傳遞和權重更新疏虫。在前進的過程中永罚,你會得到一個訓練圖像,我們記得它是32 x 32 x 3的數(shù)字數(shù)組并通過整個網(wǎng)絡卧秘。在我們的第一個培訓示例中呢袱,由于所有的權重或篩選值都是隨機初始化的,輸出可能是類似的翅敌。1羞福。1。1蚯涮。1治专。1。1遭顶。1张峰。1。1棒旗。1挟炬,基本上是一個輸出,它不會對任何數(shù)字有偏好嗦哆。這個網(wǎng)絡,由于它的當前權重婿滓,無法尋找那些低層次的特性老速,或者因此無法得出任何關于分類的合理結論。這是反向傳播的損失函數(shù)的一部分凸主。請記住橘券,我們現(xiàn)在正在使用的是訓練數(shù)據(jù)。這個數(shù)據(jù)有一個圖像和一個標簽卿吐。比如說旁舰,第一個訓練的圖像是3。圖像的標簽是0 0 0 0 0 0 0 0 0嗡官。損失函數(shù)可以用許多不同的方式定義箭窜,但常見的是MSE(平均平方誤差),這是時間(實際的-預測的)平方衍腥。
我們設變量L等于這個值磺樱。正如你所想象的纳猫,在最初的幾張訓練圖片中,損失將會非常高≈褡剑現(xiàn)在芜辕,讓我們直觀地思考一下。我們想要達到一個點块差,預測的標簽(卷積的輸出)和訓練標簽一樣(這意味著我們的網(wǎng)絡得到了它的預測)侵续。為了達到這個目的,我們想要最小化我們所擁有的損失憨闰。把這看作是微積分中的一個優(yōu)化問題状蜗,我們想找出哪些輸入(在我們的例子中是權重)最直接地導致了網(wǎng)絡的損失(或錯誤)。
這是一個數(shù)學上的等價于dl/dw起趾,其中W是一個特定層的權重∈ⅲ現(xiàn)在,我們要做的是在網(wǎng)絡中做一個逆向的傳遞训裆,這個網(wǎng)絡決定了哪些權重對損失做出了最大的貢獻眶根,并找到了調(diào)整它們的方法,從而使損失減小边琉。一旦我們計算了這個導數(shù)属百,我們就到了最后一步,就是重量更新变姨。這是我們?nèi)∷械臑V光器的重量并更新它們的地方族扰,使它們在梯度的相反方向上改變。
學習速率是由程序員選擇的一個參數(shù)定欧。高學習率意味著在權重更新中會采取更大的步驟渔呵,因此,模型在最優(yōu)權重集上的收斂可能會花費更少的時間砍鸠。然而扩氢,一個太高的學習速率會導致跳得太大而不夠精確以至于無法達到最佳點。
轉發(fā)傳遞爷辱、丟失功能录豺、反向傳遞和參數(shù)更新的過程是一個訓練迭代。這個程序?qū)⒅貜瓦@個過程饭弓,為每組訓練圖像(通常稱為批處理)進行固定次數(shù)的迭代双饥。一旦在上一個培訓示例中完成了參數(shù)更新,希望網(wǎng)絡應該得到足夠的訓練弟断,從而使各個層的權重得到正確的調(diào)優(yōu)咏花。
測試
最后,為了看看我們的CNN是否工作夫嗓,我們有一組不同的圖片和標簽(不能在訓練和測試之間翻倍)迟螺,并通過CNN的圖片冲秽。我們將輸出與地面的真相進行比較,看看我們的網(wǎng)絡是否有效矩父!
互聯(lián)網(wǎng)公司如何使用CNN
數(shù)據(jù),數(shù)據(jù),數(shù)據(jù)锉桑。有大量數(shù)據(jù)的公司是那些在競爭中擁有固有優(yōu)勢的公司。你可以給一個網(wǎng)絡提供的訓練數(shù)據(jù)越多窍株,你可以做的訓練次數(shù)越多民轴,你就能做出越多的體重更新,而當它進入到生產(chǎn)環(huán)境時球订,你就能更好地適應網(wǎng)絡后裸。Facebook(和Instagram)可以使用它目前擁有的10億用戶的所有照片,Pinterest可以使用其網(wǎng)站上的500億個pin信息冒滩,谷歌可以使用搜索數(shù)據(jù)微驶,而亞馬遜可以使用每天購買的數(shù)以百萬計的產(chǎn)品的數(shù)據(jù)。現(xiàn)在你知道了他們是如何使用它的开睡。
免責聲明
雖然這篇文章應該是理解cnnn的一個很好的開始因苹,但它絕不是一個全面的概述。本文中沒有討論的內(nèi)容包括了非線性和池層以及網(wǎng)絡的超參數(shù)篇恒,如過濾大小扶檐、跨步和填充。主題網(wǎng)絡架構,批處理規(guī)范化,梯度消失,輟學,初始化技術,非凸優(yōu)化胁艰、偏見,損失函數(shù)的選擇,數(shù)據(jù),正則化方法,計算考慮,修改反向傳播,(還)沒有討論和更多款筑。