Part 1:圖像識別任務 介紹 卷積神經網(wǎng)絡,聽起來像是計算機科學、生物學和數(shù)學的詭異組合,但它們已經成為計算機視覺領域中最具影響力的革新的一部分。神經網(wǎng)絡在 2012 年嶄露頭角,Alex Krizhevsky 憑借它們贏得了那一年的 ImageNet 挑戰(zhàn)賽(大體上相當于計算機視覺的年度奧林匹克),他把分類誤差記錄從 26% 降到了 15%,在當時震驚了世界。自那之后,大量公司開始將深度學習用作服務的核心。Facebook 將神經網(wǎng)絡用于自動標注算法、谷歌將它用于圖片搜索、亞馬遜將它用于商品推薦、Pinterest 將它用于個性化主頁推送、Instagram 將它用于搜索架構。 然而,應用這些網(wǎng)絡最經典最流行的案例是進行圖像處理。在圖像處理任務中,讓我們看一下如何使用卷積神經網(wǎng)絡進行圖像分類。 問題空間 圖像分類是對輸入圖像的操作,最終輸出一組最好地描述了圖像內容的分類(如貓、狗等)或分類的概率。對人類來說,識別是打出生便開始學習的技能之一,對成人來說更是信手拈來,毫不費力。我們只需一眼便能快速識別我們所處的環(huán)境以及環(huán)繞在我們身邊的物體。當我們看到一張圖片或是環(huán)看四周的時候,無需刻意觀察,多數(shù)時候也能立即描述出場景特征并標記出每一個對象??焖僮R別不同模式、根據(jù)早前知識進行歸納、以及適應不同的圖像環(huán)境一直都是人類的專屬技能,機器尚未享有。 輸入與輸出 當計算機看到一張圖像(輸入一張圖像)時,它看的是一大堆像素值。根據(jù)圖片的分辨率和尺寸,它將看到一個 32 x 32 x 3 的數(shù)組(3 指代的是 RGB 值)。為了講清楚這一點,假設我們有一張 JPG 格式的 480 x 480 大小的彩色圖片,那么它對應的數(shù)組就有 480 x 480 x 3 個元素。其中每個數(shù)字的值從 0 到 255 不等,其描述了對應那一點的像素灰度。當我們人類對圖像進行分類時,這些數(shù)字毫無用處,可它們卻是計算機可獲得的唯一輸入。其中的思想是:當你提供給計算機這一數(shù)組后,它將輸出描述該圖像屬于某一特定分類的概率的數(shù)字(比如:80% 是貓、15% 是狗、5% 是鳥)。 我們想要計算機做什么 現(xiàn)在我們知道了問題所在以及輸入與輸出,就該考慮如何處理了。我們想要計算機能夠區(qū)分開所有提供給它的圖片,以及搞清楚貓貓狗狗各自的特有特征。這也是我們人類的大腦中不自覺進行著的過程。當我們看到一幅狗的圖片時,如果有諸如爪子或四條腿之類的明顯特征,我們便能將它歸類為狗。同樣地,計算機也可以通過尋找諸如邊緣和曲線之類的低級特點來分類圖片,繼而通過一系列卷積層級建構出更為抽象的概念。這是 CNN(卷積神經網(wǎng)絡)工作方式的大體概述,下面是具體細節(jié)。 生物學連接 首先介紹些背景。當你第一次聽到卷積神經網(wǎng)絡這一術語,可能會聯(lián)想到神經科學或生物學,那就對了??梢赃@樣說。CNN 的確是從視覺皮層的生物學上獲得啟發(fā)的。視覺皮層有小部分細胞對特定部分的視覺區(qū)域敏感。Hubel 和 Wiesel 于 1962 年進行的一項有趣的試驗詳細說明了這一觀點,他們驗證出大腦中的一些個體神經細胞只有在特定方向的邊緣存在時才能做出反應(即放電)。例如,一些神經元只對垂直邊緣興奮,另一些對水平或對角邊緣興奮。Hubel 和 Wisesl 發(fā)現(xiàn)所有這些神經元都以柱狀結構的形式進行排列,而且一起工作才能產生視覺感知。這種一個系統(tǒng)中的特定組件有特定任務的觀點(視覺皮層的神經元細胞尋找特定特征)在機器中同樣適用,這就是 CNN 的基礎。 結構 回到細節(jié)上來。更為詳細的 CNN 工作概述指的是你挑一張圖像,讓它歷經一系列卷積層、非線性層、池化(下采樣(downsampling))層和完全連接層,最終得到輸出。正如之前所說,輸出可以是最好地描述了圖像內容的一個單獨分類或一組分類的概率。如今,難點在于理解其中每一層的工作方法。我們先來看最重要的部分。 第一層——數(shù)學部分 CNN 的第一層通常是卷積層(Convolutional Layer)。首先需要了解卷積層的輸入內容是什么。如上所述,輸入內容為一個 32 x 32 x 3 的像素值數(shù)組?,F(xiàn)在,解釋卷積層的最佳方法是想象有一束手電筒光正從圖像的左上角照過。假設手電筒光可以覆蓋 5 x 5 的區(qū)域,想象一下手電筒光照過輸入圖像的所有區(qū)域。在機器學習術語中,這束手電筒被叫做過濾器(filter,有時候也被稱為神經元(neuron)或核(kernel)),被照過的區(qū)域被稱為感受野(receptive field)。過濾器同樣也是一個數(shù)組(其中的數(shù)字被稱作權重或參數(shù))。重點在于過濾器的深度必須與輸入內容的深度相同(這樣才能確??梢赃M行數(shù)學運算),因此過濾器大小為 5 x 5 x 3。現(xiàn)在,以過濾器所處在的第一個位置為例,即圖像的左上角。當篩選值在圖像上滑動(卷積運算)時,過濾器中的值會與圖像中的原始像素值相乘(又稱為計算點積)。這些乘積被加在一起(從數(shù)學上來說,一共會有 75 個乘積)?,F(xiàn)在你得到了一個數(shù)字。切記,該數(shù)字只是表示過濾器位于圖片左上角的情況。我們在輸入內容上的每一位置重復該過程。(下一步將是將過濾器右移 1 單元,接著再右移 1 單元,以此類推。)輸入內容上的每一特定位置都會產生一個數(shù)字。過濾器滑過所有位置后將得到一個 28 x 28 x 1 的數(shù)組,我們稱之為激活映射(activation map)或特征映射(feature map)。之所以得到一個 28 x 28 的數(shù)組的原因在于,在一張 32 x 32 的輸入圖像上,5 x 5 的過濾器能夠覆蓋到 784 個不同的位置。這 784 個位置可映射為一個 28 x 28 的數(shù)組。 (注意:包括上圖在內的一些圖片來自于 Micheal Nielsen 的 「神經網(wǎng)絡與深度學習( Neural Networks and Deep Learning)」一書。我強烈推薦這本書。這本書可免費在線瀏覽:http:///) 當我們使用兩個而不是一個 5 x 5 x 3 的過濾器時,輸出總量將會變成 28 x 28 x 2。采用的過濾器越多,空間維度( spatial dimensions)保留得也就越好。數(shù)學上而言,這就是卷積層上發(fā)生的事情。 第一層——高層次角度 不過,從高層次角度而言卷積是如何工作的?每個過濾器可以被看成是特征標識符( feature identifiers)。這里的特征指的是例如直邊緣、原色、曲線之類的東西。想一想所有圖像都共有的一些最簡單的特征。假設第一組過濾器是 7 x 7 x 3 的曲線檢測器。(在這一節(jié),為了易于分析,暫且忽略該過濾器的深度為 3 個單元,只考慮過濾器和圖像的頂層層面。)作為曲線過濾器,它將有一個像素結構,在曲線形狀旁時會產生更高的數(shù)值(切記,我們所討論的過濾器不過是一組數(shù)值!) 左圖:過濾器的像素表示;右圖:曲線檢測器過濾器的可視化;對比兩圖可以看到數(shù)值和形狀的對應 回到數(shù)學角度來看這一過程。當我們將過濾器置于輸入內容的左上角時,它將計算過濾器和這一區(qū)域像素值之間的點積。拿一張需要分類的照片為例,將過濾器放在它的左上角。 左圖:原始圖像;右圖:圖像上過濾器的可視化 切記,我們要做的是將過濾器與圖像的原始像素值相乘。 左圖:感受野的可視化;右圖:感受野的像素表示 * 過濾器的像素表示 簡單來說,如果輸入圖像上某個形狀看起來很像過濾器表示的曲線,那么所有點積加在一起將會得出一個很大的值!讓我們看看移動過濾器時會發(fā)生什么。 這個值小了很多!這是因為圖像的這一部分和曲線檢測器過濾器不存在對應。記住,這個卷積層的輸出是一個激活映射(activation map)。因此,在這個帶有一個過濾器卷積的例子里(當篩選值為曲線檢測器),激活映射將會顯示出圖像里最像曲線的區(qū)域。在該例子中,28 x 28 x 1 的激活映射的左上角的值為 6600。高數(shù)值意味著很有可能是輸入內容中的曲線激活了過濾器。激活地圖右上角的值將會是 0,因為輸入內容中沒有任何東西能激活過濾器(更簡單地說,原始圖片中的這一區(qū)域沒有任何曲線)。這僅僅是一組檢測右彎曲線的過濾器。還有其它檢測左彎曲線或直線邊緣的過濾器。過濾器越多,激活映射的深度越大,我們對輸入內容的了解也就越多。 聲明:我在本小節(jié)中描繪的過濾器(filter)只是為了描述卷積中的數(shù)學過程。在下圖中你可以看到訓練后的網(wǎng)絡中第一個卷積層的過濾器的實際可視化。盡管如此,主要觀點仍舊不變。當在輸入內容中尋找特定特征時,第一層上的過濾器在輸入圖像上進行卷積運算和「激活」(即計算高數(shù)值)。 上圖來自于斯坦福大學由 Andrej Karpathy 和 Justin Johnson 授課的 CS 231N 課程,推薦給渴望更深層理解 CNN 的人們:http://cs231n./ 網(wǎng)絡中的更深處 在傳統(tǒng)卷積神經網(wǎng)絡架構中,卷積層之間還有其它類型的層。我強烈建議有興趣的人閱讀和它們有關的材料,并理解相應的功能和作用;但總的來說,它們提供的非線性和維度保留有助于提高網(wǎng)絡的穩(wěn)健性(robustness)并控制過擬合。一個典型的 CNN 結構看起來是這樣的: 輸入→卷積→ReLU→卷積→ReLU→池化→ReLU→卷積→ReLU→池化→全連接 我們稍后再來討論關鍵的最后一層,先回顧一下學到了哪些。我們討論了過濾器是如何在第一個卷積層檢測特征的。它們檢測邊緣和曲線一類的低級特征。正如想象的那樣,為了預測出圖片內容的分類,網(wǎng)絡需要識別更高級的特征,例如手、爪子與耳朵的區(qū)別。第一個卷積層的輸出將會是一個 28 x 28 x 3 的數(shù)組(假設我們采用三個 5 x 5 x 3 的過濾器)。當我們進入另一卷積層時,第一個卷積層的輸出便是第二個卷積層的輸入。解釋這一點有些困難。第一層的輸入是原始圖像,而第二卷積層的輸入正是第一層輸出的激活映射。也就是說,這一層的輸入大體描繪了低級特征在原始圖片中的位置。在此基礎上再采用一組過濾器(讓它通過第 2 個卷積層),輸出將是表示了更高級的特征的激活映射。這類特征可以是半圓(曲線和直線的組合)或四邊形(幾條直線的組合)。隨著進入網(wǎng)絡越深和經過更多卷積層后,你將得到更為復雜特征的激活映射。在網(wǎng)絡的最后,可能會有一些過濾器會在看到手寫筆跡或粉紅物體等時激活。如果你想知道更多關于可視化卷積網(wǎng)絡中過濾器的內容,可以查看 Matt Zeiler 和 Rob Fergus 的一篇討論該問題的頗為杰出的研究論文。在 YouTube 上,Jason Yosinski 有一段視頻十分視覺化地呈現(xiàn)了這一過程(如下)。有趣的是,越深入網(wǎng)絡,過濾器的感受野越大,意味著它們能夠處理更大范圍的原始輸入內容(或者說它們可以對更大區(qū)域的像素空間產生反應)。 完全連接層 檢測高級特征之后,網(wǎng)絡最后的完全連接層就更是錦上添花了。簡單地說,這一層處理輸入內容(該輸入可能是卷積層、ReLU 層或是池化層的輸出)后會輸出一個 N 維向量,N 是該程序必須選擇的分類數(shù)量。例如,如果你想得到一個數(shù)字分類程序,如果有 10 個數(shù)字,N 就等于 10。這個 N 維向量中的每一數(shù)字都代表某一特定類別的概率。例如,如果某一數(shù)字分類程序的結果矢量是 [0 .1 .1 .75 0 0 0 0 0 .05],則代表該圖片有 10% 的概率是 1、10% 的概率是 2、75% 的概率是 3、還有 5% 的概率是 9(注:還有其他表現(xiàn)輸出的方式,這里只展示了 softmax 的方法)。完全連接層觀察上一層的輸出(其表示了更高級特征的激活映射)并確定這些特征與哪一分類最為吻合。例如,如果該程序預測某一圖像的內容為狗,那么激活映射中的高數(shù)值便會代表一些爪子或四條腿之類的高級特征。同樣地,如果程序測定某一圖片的內容為鳥,激活映射中的高數(shù)值便會代表諸如翅膀或鳥喙之類的高級特征。大體上來說,完全連接層觀察高級特征和哪一分類最為吻合和擁有怎樣的特定權重,因此當計算出權重與先前層之間的點積后,你將得到不同分類的正確概率。 一種全卷積神經網(wǎng)絡(LeNet),從左至右依次為卷積→子采樣→卷積→子采樣→全連接→全連接→高斯連接 訓練(也就是:什么能讓其有效) 下面是神經網(wǎng)絡中的一個我尚未提及但卻最為重要的部分。閱讀過程中你可能會提出許多問題。第一卷積層中的濾波器是如何知道尋找邊緣與曲線的?完全連接層怎么知道觀察哪些激活圖?每一層級的濾波器如何知道需要哪些值?計算機通過一個名為反向傳播的訓練過程來調整過濾器值(或權重)。 在探討反向傳播之前,我們首先必須回顧一下神經網(wǎng)絡工作起來需要什么。在我們剛出生的時候,大腦一無所知。我們不曉得貓啊狗啊鳥啊都是些什么東西。與之類似的是 CNN 剛開始的時候,權重或過濾器值都是隨機的。濾波器不知道要去尋找邊緣和曲線。更高層的過濾器值也不知道要去尋找爪子和鳥喙。不過隨著年歲的增長,父母和老師向我們介紹各式各樣的圖片并且一一作出標記。CNN 經歷的便是一個介紹圖片與分類標記的訓練過程。在深入探討之前,先設定一個訓練集,在這里有上千張狗、貓、鳥的圖片,每一張都依照內容被標記。下面回到反向傳播的問題上來。 反向傳播可分為四部分,分別是前向傳導、損失函數(shù)、后向傳導,以及權重更新。在前向傳導中,選擇一張 32×32×3 的數(shù)組訓練圖像并讓它通過整個網(wǎng)絡。在第一個訓練樣例上,由于所有的權重或者過濾器值都是隨機初始化的,輸出可能會是 [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1],即一個不偏向任何數(shù)字的輸出。一個有著這樣權重的網(wǎng)絡無法尋找低級特征,或者說是不能做出任何合理的分類。接下來是反向傳播的損失函數(shù)部分。切記我們現(xiàn)在使用的是既有圖像又有標記的訓練數(shù)據(jù)。假設輸入的第一張訓練圖片為 3,標簽將會是 [0 0 0 1 0 0 0 0 0 0]。損失函數(shù)有許多種定義方法,常見的一種是 MSE (均方誤差)。 假設變量 L 等同該數(shù)值。正如所料,前兩張訓練圖片的損失將會極高?,F(xiàn)在,我們直觀地想一下。我們想要預測標記(卷積網(wǎng)絡的輸出)與訓練標記相同(意味著網(wǎng)絡預測正確)。為了做到這一點,我們想要將損失數(shù)量最小化。將其視為微積分優(yōu)化問題的話,也就是說我們想要找出是哪部分輸入(例子中的權重)直接導致了網(wǎng)絡的損失(或錯誤)。 這是一個 dL/dW 的數(shù)學等式,W 是特定層級的權重。我們接下來要做的是在網(wǎng)絡中進行后向傳導,測定出是哪部分權重導致了最大的損失,尋找調整方法并減少損失。一旦計算出該導數(shù),將進行最后一步也就是權重更新。所有的過濾器的權重將會更新,以便它們順著梯度方向改變。 學習速率是一個由程序員決定的參數(shù)。高學習速率意味著權重更新的動作更大,因此可能該模式將花費更少的時間收斂到最優(yōu)權重。然而,學習速率過高會導致跳動過大,不夠準確以致于達不到最優(yōu)點。 總的來說,前向傳導、損失函數(shù)、后向傳導、以及參數(shù)更新被稱為一個學習周期。對每一訓練圖片,程序將重復固定數(shù)目的周期過程。一旦完成了最后訓練樣本上的參數(shù)更新,網(wǎng)絡有望得到足夠好的訓練,以便層級中的權重得到正確調整。 測試 最后,為了檢驗 CNN 能否工作,我們準備不同的另一組圖片與標記集(不能在訓練和測試中使用相同的?。┎⒆屗鼈兺ㄟ^這個 CNN。我們將輸出與實際情況(ground truth )相比較,看看網(wǎng)絡是否有效! 企業(yè)如何使用 CNN 數(shù)據(jù)、數(shù)據(jù)、數(shù)據(jù)。數(shù)據(jù)越多的企業(yè)在競爭中越發(fā)彰顯優(yōu)勢。你提供給網(wǎng)絡的訓練數(shù)據(jù)越多,你能進行的訓練迭代也越多,緊接著權重更新也多,那么當用于產品時調整出的網(wǎng)絡自然就好。Facebook (和 Instagram)可以使用它如今擁有的十幾億用戶的圖片,Pinterest 可以使用它站點上 500 億花瓣的信息,谷歌可以使用搜索數(shù)據(jù),亞馬遜可以使用每天銷售的數(shù)以百萬計的商品數(shù)據(jù)。而你現(xiàn)在也知道它們使用數(shù)據(jù)背后的神奇之處了。 Part 2:卷積神經網(wǎng)絡中的部分問題 引言 在這篇文章中,我們將更深入地介紹有關卷積神經網(wǎng)絡(ConvNet)的詳細情況。聲明:我確實知道本文中一部分內容相當復雜,可以用一整篇文章進行介紹。但為了在保持全面性的同時保證簡潔,我會在文章中相關位置提供一些更詳細解釋該相關主題的論文鏈接。 步幅和填充 好了,現(xiàn)在來看一下我們的卷積神經網(wǎng)絡。還記得過濾器、感受野和卷積嗎?很好?,F(xiàn)在,要改變每一層的行為,有兩個主要參數(shù)是我們可以調整的。選擇了過濾器的尺寸以后,我們還需要選擇步幅(stride)和填充(padding)。 步幅控制著過濾器圍繞輸入內容進行卷積計算的方式。在第一部分我們舉的例子中,過濾器通過每次移動一個單元的方式對輸入內容進行卷積。過濾器移動的距離就是步幅。在那個例子中,步幅被默認設置為1。步幅的設置通常要確保輸出內容是一個整數(shù)而非分數(shù)。讓我們看一個例子。想象一個 7 x 7 的輸入圖像,一個 3 x 3 過濾器(簡單起見不考慮第三個維度),步幅為 1。這是一種慣常的情況。 還是老一套,對吧?看你能不能試著猜出如果步幅增加到 2,輸出內容會怎么樣。 所以,正如你能想到的,感受野移動了兩個單元,輸出內容同樣也會減小。注意,如果試圖把我們的步幅設置成 3,那我們就會難以調節(jié)間距并確保感受野與輸入圖像匹配。正常情況下,程序員如果想讓接受域重疊得更少并且想要更小的空間維度(spatial dimensions)時,他們會增加步幅。 現(xiàn)在讓我們看一下填充(padding)。在此之前,想象一個場景:當你把 5 x 5 x 3 的過濾器用在 32 x 32 x 3 的輸入上時,會發(fā)生什么?輸出的大小會是 28 x 28 x 3。注意,這里空間維度減小了。如果我們繼續(xù)用卷積層,尺寸減小的速度就會超過我們的期望。在網(wǎng)絡的早期層中,我們想要盡可能多地保留原始輸入內容的信息,這樣我們就能提取出那些低層的特征。比如說我們想要應用同樣的卷積層,但又想讓輸出量維持為 32 x 32 x 3 。為做到這點,我們可以對這個層應用大小為 2 的零填充(zero padding)。零填充在輸入內容的邊界周圍補充零。如果我們用兩個零填充,就會得到一個 36 x 36 x 3 的輸入卷。 如果我們在輸入內容的周圍應用兩次零填充,那么輸入量就為 32×32×3。然后,當我們應用帶有 3 個 5×5×3 的過濾器,以 1 的步幅進行處理時,我們也可以得到一個 32×32×3 的輸出 如果你的步幅為 1,而且把零填充設置為 K 是過濾器尺寸,那么輸入和輸出內容就總能保持一致的空間維度。 計算任意給定卷積層的輸出的大小的公式是 其中 O 是輸出尺寸,K 是過濾器尺寸,P 是填充,S 是步幅。 選擇超參數(shù) 我們怎么知道要用多少層、多少卷積層、過濾器尺寸是多少、以及步幅和填充值多大呢?這些問題很重要,但又沒有一個所有研究人員都在使用的固定標準。這是因為神經網(wǎng)絡很大程度上取決于你的數(shù)據(jù)類型。圖像的大小、復雜度、圖像處理任務的類型以及其他更多特征的不同都會造成數(shù)據(jù)的不同。對于你的數(shù)據(jù)集,想出如何選擇超參數(shù)的一個方法是找到能創(chuàng)造出圖像在合適尺度上抽象的正確組合。 ReLU(修正線性單元)層 在每個卷積層之后,通常會立即應用一個非線性層(或激活層)。其目的是給一個在卷積層中剛經過線性計算操作(只是數(shù)組元素依次(element wise)相乘與求和)的系統(tǒng)引入非線性特征。過去,人們用的是像雙曲正切和 S 型函數(shù)這樣的非線性方程,但研究者發(fā)現(xiàn) ReLU 層效果好得多,因為神經網(wǎng)絡能夠在準確度不發(fā)生明顯改變的情況下把訓練速度提高很多(由于計算效率增加)。它同樣能幫助減輕梯度消失的問題——由于梯度以指數(shù)方式在層中消失,導致網(wǎng)絡較底層的訓練速度非常慢。ReLU 層對輸入內容的所有值都應用了函數(shù) f(x) = max(0, x)。用基本術語來說,這一層把所有的負激活(negative activation)都變?yōu)榱?。這一層會增加模型乃至整個神經網(wǎng)絡的非線性特征,而且不會影響卷積層的感受野。
池化層 在幾個 ReLU 層之后,程序員也許會選擇用一個池化層(pooling layer)。它同時也被叫做下采樣(downsampling)層。在這個類別中,也有幾種可供選擇的層,最受歡迎的就是最大池化( max-pooling)。它基本上采用了一個過濾器(通常是 2x2 的)和一個同樣長度的步幅。然后把它應用到輸入內容上,輸出過濾器卷積計算的每個子區(qū)域中的最大數(shù)字。 帶有 2×2 和過濾器的且步幅為 2 的最大池化的例子 池化層還有其他選擇,比如平均池化(average pooling)和 L2-norm 池化 。這一層背后的直觀推理是:一旦我們知道了原始輸入(這里會有一個高激活值)中一個特定的特征,它與其它特征的相對位置就比它的絕對位置更重要??上攵?,這一層大幅減小了輸入卷的空間維度(長度和寬度改變了,但深度沒變)。這到達了兩個主要目的。第一個是權重參數(shù)的數(shù)目減少到了75%,因此降低了計算成本。第二是它可以控制過擬合(overfitting)。這個術語是指一個模型與訓練樣本太過匹配了,以至于用于驗證和檢測組時無法產生出好的結果。出現(xiàn)過擬合的表現(xiàn)是一個模型在訓練集能達到 100% 或 99% 的準確度,而在測試數(shù)據(jù)上卻只有50%。 Dropout 層 如今,Dropout 層在神經網(wǎng)絡有了非常明確的功能。上一節(jié),我們討論了經過訓練后的過擬合問題:訓練之后,神經網(wǎng)絡的權重與訓練樣本太過匹配以至于在處理新樣本的時候表現(xiàn)平平。Dropout 的概念在本質上非常簡單。Dropout 層將「丟棄(drop out)」該層中一個隨機的激活參數(shù)集,即在前向通過(forward pass)中將這些激活參數(shù)集設置為 0。簡單如斯。既然如此,這些簡單而且似乎不必要且有些反常的過程的好處是什么?在某種程度上,這種機制強制網(wǎng)絡變得更加冗余。這里的意思是:該網(wǎng)絡將能夠為特定的樣本提供合適的分類或輸出,即使一些激活參數(shù)被丟棄。此機制將保證神經網(wǎng)絡不會對訓練樣本「過于匹配」,這將幫助緩解過擬合問題。另外,Dropout 層只能在訓練中使用,而不能用于測試過程,這是很重要的一點。
網(wǎng)絡層中的網(wǎng)絡 網(wǎng)絡層中的網(wǎng)絡指的是一個使用了 1 x 1 尺寸的過濾器的卷積層?,F(xiàn)在,匆匆一瞥,你或許會好奇為何這種感受野大于它們所映射空間的網(wǎng)絡層竟然會有幫助。然而,我們必須謹記 1x1 的卷積層跨越了特定深度,所以我們可以設想一個1 x 1 x N 的卷積層,此處 N 代表該層應用的過濾器數(shù)量。該層有效地使用 N 維數(shù)組元素依次相乘的乘法,此時 N 代表的是該層的輸入的深度。
分類、定位、檢測、分割 本系列第一部分使用的案例中,我們觀察了圖像分類任務。這個過程是:獲取輸入圖片,輸出一套分類的類數(shù)(class number)。然而當我們執(zhí)行類似目標定位的任務時,我們要做的不只是生成一個類標簽,而是生成一個描述圖片中物體suo所在位置的邊界框。 我們也有目標檢測的任務,這需要圖片上所有目標的定位任務都已完成。 因此,你將獲得多個邊界框和多個類標簽。 最終,我們將執(zhí)行目標分割的任務:我們需要輸出類標簽的同時輸出圖片中每個目標的輪廓。 關于目標檢測、定位、分割的論文有很多,這里就不一一列出了。 遷移學習 如今,深度學習領域一個常見的誤解在于沒有谷歌那樣的巨量數(shù)據(jù),你將沒有希望創(chuàng)建一個有效的深度學習模型。盡管數(shù)據(jù)是創(chuàng)建網(wǎng)絡中至關重要的部分,遷移學習的思路將幫助我們降低數(shù)據(jù)需求。遷移學習指的是利用預訓練模型(神經網(wǎng)絡的權重和參數(shù)都已經被其他人利用更大規(guī)模的數(shù)據(jù)集訓練好了)并用自己的數(shù)據(jù)集將模型「微調」的過程。這種思路中預訓練模型扮演著特征提取器的角色。你將移除網(wǎng)絡的最后一層并用你自有的分類器置換(取決于你的問題空間)。然后凍結其他所有層的權重并正常訓練該網(wǎng)絡(凍結這些層意味著在梯度下降/最優(yōu)化過程中保持權值不變)。 讓我們探討一下為什么做這項工作。比如說我們正在討論的這個預訓練模型是在 ImageNet (一個包含一千多個分類,一千四百萬張圖像的數(shù)據(jù)集)上訓練的 。當我們思考神經網(wǎng)絡的較低層時,我們知道它們將檢測類似曲線和邊緣這樣的特征。現(xiàn)在,除非你有一個極為獨特的問題空間和數(shù)據(jù)集,你的神經網(wǎng)絡也會檢測曲線和邊緣這些特征。相比通過隨機初始化權重訓練整個網(wǎng)絡,我們可以利用預訓練模型的權重(并凍結)聚焦于更重要的層(更高層)進行訓練。如果你的數(shù)據(jù)集不同于 ImageNet 這樣的數(shù)據(jù)集,你必須訓練更多的層級而只凍結一些低層的網(wǎng)絡。
數(shù)據(jù)增強技術 現(xiàn)在我們對卷積網(wǎng)絡中數(shù)據(jù)的重要性可能已經感到有些麻木了,所以我們來談下如何利用一些簡單的轉換方法將你現(xiàn)有的數(shù)據(jù)集變得更大。正如我們之前所提及的,當計算機將圖片當作輸入時,它將用一個包含一列像素值的數(shù)組描述(這幅圖)。若是圖片左移一個像素。對你和我來說,這種變化是微不可察的。然而對計算機而已,這種變化非常顯著:這幅圖的類別和標簽保持不變,數(shù)組卻變化了。這種改變訓練數(shù)據(jù)的數(shù)組表征而保持標簽不變的方法被稱作數(shù)據(jù)增強技術。這是一種人工擴展數(shù)據(jù)集的方法。人們經常使用的增強方法包括灰度變化、水平翻轉、垂直翻轉、隨機編組、色值跳變、翻譯、旋轉等其他多種方法。通過利用這些訓練數(shù)據(jù)的轉換方法,你將獲得兩倍甚至三倍于原數(shù)據(jù)的訓練樣本。 |
|
來自: taotao_2016 > 《計算機》