免責(zé)聲明:
原文鏈接:https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

介紹
卷積神經(jīng)網(wǎng)絡(luò)。這聽起來像是生物學(xué)和數(shù)學(xué)的怪異結(jié)合,但這些網(wǎng)絡(luò)已經(jīng)成為計算機視覺領(lǐng)域最具影響力的創(chuàng)新之一。2012年是神經(jīng)網(wǎng)絡(luò)成長的第一年,因為Alex Krizhevsky利用它們贏得了當(dāng)年的圖像網(wǎng)絡(luò)競賽(基本上是每年的計算機視覺),將分類錯誤率從26%下降到15%,這是一個驚人的進步。從那時起,許多公司就一直在他們的服務(wù)核心中使用深度學(xué)習(xí)。Facebook使用神經(jīng)網(wǎng)絡(luò)為他們的自動標(biāo)簽算法,谷歌則用來做他們的照片搜索,亞馬遜用來提供他們的產(chǎn)品推薦,Pinterest用來為他們的家庭提供個性化服務(wù),Instagram用來做他們的搜索基礎(chǔ)設(shè)施。
然而,經(jīng)典的、可以說是最流行的這些網(wǎng)絡(luò)的用例是圖像處理。在圖像處理中,讓我們看一下如何使用這些cnnn來進行圖像分類。
問題提出
圖像分類是接收輸入圖像和輸出類(貓、狗等)的任務(wù),或者是最能描述圖像的類的概率。
對人類來說,這個識別任務(wù)是我們從出生那一刻開始學(xué)習(xí)的第一項技能,它是一個自然而又毫不費力的過程。
不用經(jīng)過思考,我們就能夠快速、無縫地識別我們所處的環(huán)境和周圍的物體。
當(dāng)我們看到一個圖像或者當(dāng)我們看著周圍的世界時,大多數(shù)時候我們能夠立即描述這個場景并給每個物體一個標(biāo)簽,自然而然地。
這些能夠快速識別模式的技能,從先前的知識中歸納出,并適應(yīng)不同的圖像環(huán)境,這些技能是我們與其他機器不共享的。

輸入和輸出
當(dāng)計算機看到一個圖像(將圖像作為輸入)時,它將看到一個像素值數(shù)組。根據(jù)圖像的分辨率和大小,它將看到32 x 32 x 3的數(shù)字數(shù)組(3表示RGB值,即色道)。為了說明這一點,假設(shè)我們有一張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ū)分出它所給出的所有圖像,并找出能辨別出狗的獨特特征,或者說是貓的。這也是我們潛意識里進行的過程。當(dāng)我們看一張狗的照片時,我們可以把它分類,如果這張圖片有可識別的特征,比如爪子或四條腿。通過類似的方法,計算機可以通過尋找邊緣和曲線等較低的特征來執(zhí)行圖像分類,然后通過一系列的卷積層來構(gòu)建更抽象的概念。這是一個關(guān)于CNN的總體概況。讓我們深入了解細節(jié)。
生物學(xué)背景
但首先,有一點背景知識。當(dāng)你第一次聽說卷積神經(jīng)網(wǎng)絡(luò)時,你可能想到了一些與神經(jīng)科學(xué)或生物學(xué)相關(guān)的東西,你是對的。排序的。cnn確實從視覺皮層獲得了生物學(xué)上的靈感。視覺皮質(zhì)有一小部分細胞對視覺區(qū)域的特定區(qū)域敏感。這一想法是由Hubel和Wiesel在1962年的一項令人著迷的實驗(視頻)所做的,他們展示了大腦中的一些神經(jīng)元細胞只在特定的方向上做出反應(yīng)(或被發(fā)射)。例如,當(dāng)暴露于垂直的邊緣時,一些神經(jīng)元會被觸發(fā),而當(dāng)顯示水平或?qū)蔷€的邊緣時,則會觸發(fā)另一些神經(jīng)元。Hubel和Wiesel發(fā)現(xiàn),所有這些神經(jīng)元都是在一個柱狀結(jié)構(gòu)中組織起來的,它們可以產(chǎn)生視覺感知。在一個系統(tǒng)中特定的組成部分部分有特定任務(wù)的這個概念(視覺皮層中的神經(jīng)元細胞尋找特定特征),也被用到的計算機視覺中,這也是cnn背后的基礎(chǔ)。
整體結(jié)構(gòu)
回到了細節(jié)。更詳細的概述是,cnnn的工作是將圖像傳遞給它,通過一系列的卷積、非線性、池(向下采樣)和完全連接的層,并獲得輸出。如前所述,輸出可以是單個類,也可以是最好描述圖像的類的概率?,F(xiàn)在,難點在于理解每一層的作用。讓我們進入最重要的一個。
第一層——數(shù)學(xué)部分
CNN的第一層總是一個卷積層。首先要記住的是,這個conv(卷積的縮寫,我將使用這個縮寫)的輸入層是什么。就像我們之前提到的,輸入是一個32 x 32 x 3數(shù)組的像素值?,F(xiàn)在,解釋一個conv層的最好方法是想象一個閃光的手電筒照在圖像的左上方。假設(shè)這個手電筒的光覆蓋了一個5 x 5的區(qū)域?,F(xiàn)在,讓我們想象一下這個手電筒在輸入圖像的所有區(qū)域滑動。在機器學(xué)習(xí)術(shù)語中,這個手電筒被稱為過濾器(有時被稱為神經(jīng)元或內(nèi)核),而它所照耀的區(qū)域被稱為“接收場”?,F(xiàn)在這個過濾器也是一個數(shù)字數(shù)組(數(shù)字被稱為權(quán)重或參數(shù))。非常重要的一點是,這個過濾器的深度必須與輸入的深度相同(這確保了計算的結(jié)果),所以這個過濾器的尺寸是5 x 5 x 3?,F(xiàn)在,讓我們來看看過濾器的第一個位置。它將會是左上角。當(dāng)過濾器在輸入圖像周圍滑動或卷積時,它會將過濾器中的值與圖像的原始像素值相乘(也就是計算元素的乘法運算)。這些乘數(shù)都是可以總結(jié)的(從數(shù)學(xué)上說,總共是75次)?,F(xiàn)在你有一個單獨的數(shù)字。記住,這個數(shù)字僅僅代表了圖像的左上角?,F(xiàn)在,我們對輸入卷上的每個位置重復(fù)這個過程。(下一步是將過濾器移動到右側(cè)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)絡(luò)和深度學(xué)習(xí)”。強烈推薦)。
假設(shè)現(xiàn)在我們使用兩個5 x 5 x 3個過濾器而不是一個。然后我們的輸出量是28 x 28 x 2。通過使用更多的過濾器,我們能夠更好地保護空間維度。從數(shù)學(xué)上講,這就是卷積層的情況。
第一層——高層次的視角
但是,讓我們來談?wù)勥@個卷積是如何從一個高的水平來做的。每個過濾器都可以被認為是功能標(biāo)識符。當(dāng)我說特征時,我指的是直線,簡單的顏色和曲線這些東西。想一下所有圖像之間的最簡單的特征。假設(shè)我們的第一個濾波器是7 x 7 x 3,它是一個曲線檢測器。(在本節(jié)中,讓我們忽略一個事實,即過濾器是3個深度的,為了簡單起見?,只考慮過濾器和圖像的頂部深度部分。)作為一個曲線檢測器,過濾器將有一個像素結(jié)構(gòu),在這個區(qū)域中,在一個曲線形狀的區(qū)域中會有更高的數(shù)值(記住,我們說的這些過濾器,它們只是數(shù)字罷了!)

現(xiàn)在,讓我們回到數(shù)學(xué)上。當(dāng)我們在輸入量的左上角有這個過濾器時,它就是在那個區(qū)域的過濾器和像素值之間的計算。現(xiàn)在讓我們舉一個我們想要分類的圖像的例子,把我們的過濾器放在左上角。

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

基本上,在輸入圖像中,如果有一個形狀與這個過濾器所代表的曲線很相似,那么所有的乘數(shù)相加將會得到一個很大的值!現(xiàn)在讓我們看看當(dāng)我們移動過濾器時會發(fā)生什么。

價值要低得多!這是因為圖像部分中沒有對曲線檢測器濾波器做出響應(yīng)的任何東西。記住,這個conv層的輸出是一個激活映射。所以,在一個簡單的情況下,一個濾波器卷積(如果那個濾波器是一個曲線檢測器),激活圖會顯示出圖像中大部分可能是曲線的區(qū)域。在本例中,我們26 x 26 x 1激活映射的左上角值(26因為7x7過濾器而不是5x5)將是6600。這個高值意味著,在輸入卷中可能有某種曲線導(dǎo)致了過濾器的激活。在我們的激活圖中,最右的值是0,因為在輸入卷中沒有任何東西導(dǎo)致過濾器被激活(或者更簡單地說,原始圖像的那個區(qū)域沒有一條曲線)。記住,這只是一個過濾器。這只是一個過濾器,用來檢測向外向右的線。我們還可以對曲線向左或直邊的直線進行其他濾鏡。過濾器越多,激活映射的深度越深,我們對輸入卷的信息也越多。
免責(zé)聲明:我在這一節(jié)描述的過濾器過于簡單,主要用于描述在卷積過程中進行的數(shù)學(xué)運算。在下面的圖中,您將看到一些實際可視化的示例,這些示例是經(jīng)過訓(xùn)練的網(wǎng)絡(luò)的第一個conv層的過濾器的實際可視化。盡管如此,主要的爭論還是一樣的。第一層的過濾器圍繞輸入圖像進行卷積,當(dāng)它要查找的特定特性在輸入卷中,“激活”(或計算高值)。
(快速注意:上面的圖片來自于Andrej Karpathy和賈斯汀約翰遜教授的斯坦福大學(xué)課程。推薦給任何想要了解cnnn的人。)
深入了解
現(xiàn)在,在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)中,在這些conv層之間還有其他的層。我強烈建議那些有興趣閱讀的人,了解他們的功能和效果,但是從一般意義上說,他們提供了非線性和維保,這有助于提高網(wǎng)絡(luò)的健壯性和對過度擬合的控制。一個典型的CNN架構(gòu)是這樣的。

然而,最后一層是很重要的一層,我們稍后會深入討論。讓我們回顧一下到目前為止所學(xué)到的知識。我們討論了第一個conv層中的過濾器是如何被設(shè)計來檢測的。他們檢測到低水平的特征,例如邊緣和曲線。正如人們想象的那樣,為了預(yù)測圖像是否是一種對象類型,我們需要網(wǎng)絡(luò)能夠識別出更高水平的特征,例如手、爪或耳朵。我們來想想第一個conv層后網(wǎng)絡(luò)的輸出是什么。它是28 x 28 x 3的體積(假設(shè)我們使用3個5 x 5 x 3個過濾器)。當(dāng)我們穿過另一個conv層時,第一個conv層的輸出就變成了第二個conv層的輸入?,F(xiàn)在,這個更難想象了。當(dāng)我們討論第一個層時,輸入只是原始圖像。但是,當(dāng)我們討論第二個conv層時,輸入是來自第一個層的激活映射(s)。因此,輸入的每一層都是描述原始圖像中的位置,以顯示某些低水平的特征?,F(xiàn)在,當(dāng)您在上面應(yīng)用一組過濾器時(將它傳遞到第二個conv層),輸出將是表示更高級別特性的激活。這些特征的類型可以是半邊形(曲線和直邊的組合)或正方形(幾個直邊的組合)。當(dāng)您瀏覽網(wǎng)絡(luò)并瀏覽更多的conv層時,您會得到代表了越來越復(fù)雜的特性的激活映射。你可能會有一些過濾器,激活有筆跡圖像時,過濾器,激活當(dāng)他們看到粉紅色的對象,等等。如果你想要更多的信息可視化在回旋網(wǎng)過濾器,馬特Zeiler和羅伯·費格斯有一個優(yōu)秀的研究論文討論的話題。Jason Yosinski還在YouTube上有一段視頻,提供了一個很好的視覺表現(xiàn)。另一個需要注意的有趣的事情是,當(dāng)你深入到網(wǎng)絡(luò),過濾器開始有越來越大的接受域,這意味著他們能夠考慮原始輸入量的信息從一個更大的區(qū)域(把它的另一種方法是,他們更敏感更大區(qū)域的像素空間)。
完全連接層
現(xiàn)在我們可以檢測到這些高水平的特性,蛋糕上的糖衣是在網(wǎng)絡(luò)的末端附加一個完全連接的層。這一層基本上是一個輸入量(無論在它之前的conv或ReLU或pool層的輸出是什么),并輸出一個N維向量,其中N是程序必須選擇的類的數(shù)量。例如,如果你想要一個數(shù)字分類程序,N是10,因為有10個數(shù)字。這個N維向量中的每個數(shù)表示某個類的概率。例如,如果一個數(shù)字分類程序的結(jié)果向量是[0 .1 .1 .75 0 0 0 0 0 .05],那么這意味著10%的概率是1的圖片,圖像2 10%的概率,75%的概率,圖像是一個3,和5%的概率圖像是一個9(注:還有其他的方法可以代表輸出,但我只是顯示將softmax方法)。這個完全連接層的工作方式是,它查看前一層的輸出(我們記得它應(yīng)該表示高級特性的激活映射),并確定哪些特性與某個特定的類相關(guān)聯(lián)。例如,如果項目是預(yù)測,一些形象是一只狗,它會有高值代表高水平的激活地圖功能,如爪或4條腿,等等。同樣,如果程序預(yù)計,一些形象是一只鳥,它會有高值代表高水平的激活地圖功能,像翅膀或嘴,等等?;旧?FC層看著最高度特性強關(guān)聯(lián)到一個特定的類,有特定的權(quán)重,所以當(dāng)你計算重量和前面的層之間的產(chǎn)品,你會得到正確的概率為不同的類。

訓(xùn)練(也就是:是什么讓這些東西起作用)
現(xiàn)在,這是神經(jīng)網(wǎng)絡(luò)的一個方面我還沒有提到,它可能是最重要的部分。在閱讀的時候可能會有很多問題。第一個conv層中的過濾器是如何知道尋找邊和曲線的?完全連接層如何知道激活映射要看什么?每個層中的過濾器是如何知道要使用什么值的?
計算機能夠調(diào)整其濾波器值(或權(quán)重)的方法是通過一個稱為反向傳播的訓(xùn)練過程。
在進行反向傳播之前,我們必須先退一步,討論一下神經(jīng)網(wǎng)絡(luò)需要什么才能工作。在我們都出生的那一刻,我們的頭腦是新鮮的。我們不知道貓、狗或鳥是什么。同樣的,在CNN開始之前,權(quán)重或過濾值是隨機的。濾光器不知道尋找邊緣和曲線。更高層次的過濾器不知道要尋找爪子和喙。然而,隨著年齡的增長,我們的父母和老師給我們展示了不同的圖片和圖片,并給我們一個相應(yīng)的標(biāo)簽。這個被賦予一個形象和一個標(biāo)簽的想法是cnn的訓(xùn)練過程。在深入研究之前,我們先說我們有一個訓(xùn)練集里面有成千上萬的狗,貓,和鳥的圖片,每一張圖片都有一個動物圖片的標(biāo)簽?;氐絙ackprop。
因此,反向傳播可以分為4個不同的部分,向前傳遞、損失函數(shù)、向后傳遞和權(quán)重更新。在前進的過程中,你會得到一個訓(xùn)練圖像,我們記得它是32 x 32 x 3的數(shù)字數(shù)組并通過整個網(wǎng)絡(luò)。在我們的第一個培訓(xùn)示例中,由于所有的權(quán)重或篩選值都是隨機初始化的,輸出可能是類似的。1。1。1。1。1。1。1。1。1。1,基本上是一個輸出,它不會對任何數(shù)字有偏好。這個網(wǎng)絡(luò),由于它的當(dāng)前權(quán)重,無法尋找那些低層次的特性,或者因此無法得出任何關(guān)于分類的合理結(jié)論。這是反向傳播的損失函數(shù)的一部分。請記住,我們現(xiàn)在正在使用的是訓(xùn)練數(shù)據(jù)。這個數(shù)據(jù)有一個圖像和一個標(biāo)簽。比如說,第一個訓(xùn)練的圖像是3。圖像的標(biāo)簽是0 0 0 0 0 0 0 0 0。損失函數(shù)可以用許多不同的方式定義,但常見的是MSE(平均平方誤差),這是時間(實際的-預(yù)測的)平方。

我們設(shè)變量L等于這個值。正如你所想象的,在最初的幾張訓(xùn)練圖片中,損失將會非常高?,F(xiàn)在,讓我們直觀地思考一下。我們想要達到一個點,預(yù)測的標(biāo)簽(卷積的輸出)和訓(xùn)練標(biāo)簽一樣(這意味著我們的網(wǎng)絡(luò)得到了它的預(yù)測)。為了達到這個目的,我們想要最小化我們所擁有的損失。把這看作是微積分中的一個優(yōu)化問題,我們想找出哪些輸入(在我們的例子中是權(quán)重)最直接地導(dǎo)致了網(wǎng)絡(luò)的損失(或錯誤)。

這是一個數(shù)學(xué)上的等價于dl/dw,其中W是一個特定層的權(quán)重。現(xiàn)在,我們要做的是在網(wǎng)絡(luò)中做一個逆向的傳遞,這個網(wǎng)絡(luò)決定了哪些權(quán)重對損失做出了最大的貢獻,并找到了調(diào)整它們的方法,從而使損失減小。一旦我們計算了這個導(dǎo)數(shù),我們就到了最后一步,就是重量更新。這是我們?nèi)∷械臑V光器的重量并更新它們的地方,使它們在梯度的相反方向上改變。

學(xué)習(xí)速率是由程序員選擇的一個參數(shù)。高學(xué)習(xí)率意味著在權(quán)重更新中會采取更大的步驟,因此,模型在最優(yōu)權(quán)重集上的收斂可能會花費更少的時間。然而,一個太高的學(xué)習(xí)速率會導(dǎo)致跳得太大而不夠精確以至于無法達到最佳點。

轉(zhuǎn)發(fā)傳遞、丟失功能、反向傳遞和參數(shù)更新的過程是一個訓(xùn)練迭代。這個程序?qū)⒅貜?fù)這個過程,為每組訓(xùn)練圖像(通常稱為批處理)進行固定次數(shù)的迭代。一旦在上一個培訓(xùn)示例中完成了參數(shù)更新,希望網(wǎng)絡(luò)應(yīng)該得到足夠的訓(xùn)練,從而使各個層的權(quán)重得到正確的調(diào)優(yōu)。
測試
最后,為了看看我們的CNN是否工作,我們有一組不同的圖片和標(biāo)簽(不能在訓(xùn)練和測試之間翻倍),并通過CNN的圖片。我們將輸出與地面的真相進行比較,看看我們的網(wǎng)絡(luò)是否有效!
互聯(lián)網(wǎng)公司如何使用CNN
數(shù)據(jù),數(shù)據(jù),數(shù)據(jù)。有大量數(shù)據(jù)的公司是那些在競爭中擁有固有優(yōu)勢的公司。你可以給一個網(wǎng)絡(luò)提供的訓(xùn)練數(shù)據(jù)越多,你可以做的訓(xùn)練次數(shù)越多,你就能做出越多的體重更新,而當(dāng)它進入到生產(chǎn)環(huán)境時,你就能更好地適應(yīng)網(wǎng)絡(luò)。Facebook(和Instagram)可以使用它目前擁有的10億用戶的所有照片,Pinterest可以使用其網(wǎng)站上的500億個pin信息,谷歌可以使用搜索數(shù)據(jù),而亞馬遜可以使用每天購買的數(shù)以百萬計的產(chǎn)品的數(shù)據(jù)?,F(xiàn)在你知道了他們是如何使用它的。
免責(zé)聲明
雖然這篇文章應(yīng)該是理解cnnn的一個很好的開始,但它絕不是一個全面的概述。本文中沒有討論的內(nèi)容包括了非線性和池層以及網(wǎng)絡(luò)的超參數(shù),如過濾大小、跨步和填充。主題網(wǎng)絡(luò)架構(gòu),批處理規(guī)范化,梯度消失,輟學(xué),初始化技術(shù),非凸優(yōu)化、偏見,損失函數(shù)的選擇,數(shù)據(jù),正則化方法,計算考慮,修改反向傳播,(還)沒有討論和更多。