深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

本文是吳恩達老師的深度學習課程[1]筆記部分。

做者:黃海廣[2]

主要編寫人員:黃海廣、林興木(第四全部底稿,第五課第一二週,第三週前三節)、祝彥森:(第三課全部底稿)、賀志堯(第五課第三週底稿)、王翔、胡瀚文、 餘笑、 鄭浩、李懷鬆、 朱越鵬、陳偉賀、 曹越、 路皓翔、邱牧宸、 唐天澤、 張浩、 陳志豪、 遊忍、 澤霖、沈偉臣、 賈紅順、 時超、 陳哲、趙一帆、 胡瀟楊、段希、於衝、張鑫倩

參與編輯人員:黃海廣、陳康凱、石晴路、鍾博彥、向偉、嚴鳳龍、劉成 、賀志堯、段希、陳瑤、林家泳、王翔、 謝士晨、蔣鵬

備註:筆記和做業(含數據、原始做業文件)、視頻都在 github[3]中下載。

我將陸續將課程筆記發佈在公衆號「機器學習初學者」,敬請關注。

第四門課 卷積神經網絡(Convolutional Neural Networks)

第一週 卷積神經網絡基礎(Foundations of Convolutional Neural Networks)

1.1 計算機視覺(Computer vision)

歡迎參加此次的卷積神經網絡課程,計算機視覺是一個飛速發展的一個領域,這多虧了深度學習。深度學習與計算機視覺能夠幫助汽車,查明周圍的行人和汽車,並幫助汽車避開它們。還使得人臉識別技術變得更加效率和精準,大家即將可以體驗到或早已體驗過僅僅經過刷臉就能解鎖手機或者門鎖。當你解鎖了手機,我猜手機上必定有不少分享圖片的應用。在上面,你能看到美食,酒店或美麗風景的圖片。有些公司在這些應用上使用了深度學習技術來向你展現最爲生動美麗以及與你最爲相關的圖片。機器學習甚至還催生了新的藝術類型。深度學習之因此讓我興奮有下面兩個緣由,我想大家也是這麼想的。git

第一,計算機視覺的高速發展標誌着新型應用產生的可能,這是幾年前,人們所不敢想象的。經過學習使用這些工具,你也許可以創造出新的產品和應用。github

其次,即便到頭來你未能在計算機視覺上有所建樹,但我發現,人們對於計算機視覺的研究是如此富有想象力和創造力,由此衍生出新的神經網絡結構與算法,這實際上啓發人們去創造出計算機視覺與其餘領域的交叉成果。舉個例子,以前我在作語音識別的時候,我常常從計算機視覺領域中尋找靈感, 並將其應用於個人文獻當中。因此即便你在計算機視覺方面沒有作出成果,我也但願你也能夠將所學的知識應用到其餘算法和結構。就介紹到這兒,讓咱們開始學習吧。算法

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

這是咱們本節課將要學習的一些問題,你應該早就據說過圖片分類,或者說圖片識別。好比給出這張64×64的圖片,讓計算機去分辨出這是一隻貓。編程

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
還有一個例子,在計算機視覺中有個問題叫作目標檢測,好比在一個無人駕駛項目中,你不必定非得識別出圖片中的物體是車輛,但你須要計算出其餘車輛的位置,以確保本身可以避開它們。因此在目標檢測項目中,首先須要計算出圖中有哪些物體,好比汽車,還有圖片中的其餘東西,再將它們模擬成一個個盒子,或用一些其餘的技術識別出它們在圖片中的位置。注意在這個例子中,在一張圖片中同時有多個車輛,每輛車相對與你來講都有一個確切的距離。網絡

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

還有一個更有趣的例子,就是神經網絡實現的圖片風格遷移,好比說你有一張圖片,但你想將這張圖片轉換爲另一種風格。因此圖片風格遷移,就是你有一張滿意的圖片和一張風格圖片,實際上右邊這幅畫是畢加索的畫做,而你能夠利用神經網絡將它們融合到一塊兒,描繪出一張新的圖片。它的總體輪廓來自於左邊,倒是右邊的風格,最後生成下面這張圖片。這種神奇的算法創造出了新的藝術風格,因此在這門課程中,你也能經過學習作到這樣的事情。架構

但在應用計算機視覺時要面臨一個挑戰,就是數據的輸入可能會很是大。舉個例子,在過去的課程中,大家通常操做的都是64×64的小圖片,實際上,它的數據量是64×64×3,由於每張圖片都有3個顏色通道。若是計算一下的話,可得知數據量爲12288,因此咱們的特徵向量x維度爲12288。這其實還好,由於64×64真的是很小的一張圖片。框架

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

若是你要操做更大的圖片,好比一張1000×1000的圖片,它足有1兆那麼大,可是特徵向量的維度達到了1000×1000×3,由於有3個RGB通道,因此數字將會是300萬。若是你在尺寸很小的屏幕上觀察,可能察覺不出上面的圖片只有64×64那麼大,而下面一張是1000×1000的大圖。機器學習

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

若是你要輸入300萬的數據量,這就意味着,特徵向量
的維度高達300萬。因此在第一隱藏層中,你也許會有1000個隱藏單元,而全部的權值組成了矩陣 。若是你使用了標準的全鏈接網絡,就像咱們在第一門和第二門的課程裏說的,這個矩陣的大小將會是1000×300萬。由於如今的維度爲,一般用來表示300萬。這意味着矩陣編程語言

會有30億個參數,這是個很是巨大的數字。在參數如此大量的狀況下,難以得到足夠的數據來防止神經網絡發生過擬合和競爭需求,要處理包含30億參數的神經網絡,巨大的內存需求讓人不太能接受。ide

但對於計算機視覺應用來講,你確定不想它只處理小圖片,你但願它同時也要能處理大圖。爲此,你須要進行卷積計算,它是卷積神經網絡中很是重要的一塊。下節課中,我會爲你介紹如何進行這種運算,我將用邊緣檢測的例子來向你說明卷積的含義。

1.2 邊緣檢測示例(Edge detection example)

卷積運算是卷積神經網絡最基本的組成部分,使用邊緣檢測做爲入門樣例。在這個視頻中,你會看到卷積是如何進行運算的。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

在以前的視頻中,我說過神經網絡的前幾層是如何檢測邊緣的,而後,後面的層有可能檢測到物體的部分區域,更靠後的一些層可能檢測到完整的物體,這個例子中就是人臉。在這個視頻中,你會看到如何在一張圖片中進行邊緣檢測。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
讓咱們舉個例子,給了這樣一張圖片,讓電腦去搞清楚這張照片裏有什麼物體,你可能作的第一件事是檢測圖片中的垂直邊緣。好比說,在這張圖片中的欄杆就對應垂直線,與此同時,這些行人的輪廓線某種程度上也是垂線,這些線是垂直邊緣檢測器的輸出。一樣,你可能也想檢測水平邊緣,好比說這些欄杆就是很明顯的水平線,它們也能被檢測到,結果在這。因此如何在圖像中檢測這些邊緣?

看一個例子,這是一個6×6的灰度圖像。由於是灰度圖像,因此它是6×6×1的矩陣,而不是6×6×3的,由於沒有RGB三通道。爲了檢測圖像中的垂直邊緣,你能夠構造一個3×3矩陣。在共用習慣中,在卷積神經網絡的術語中,它被稱爲過濾器。我要構造一個3×3的過濾器,像這

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

這個卷積運算的輸出將會是一個4×4的矩陣,你能夠將它當作一個4×4的圖像。下面來講明是如何計算獲得這個4×4矩陣的。爲了計算第一個元素,在4×4左上角的那個元素,使用3×3的過濾器,將其覆蓋在輸入圖像,以下圖所示。而後進行元素乘法(element-wise products)運

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

繼續作一樣的元素乘法,而後加起來,因此是
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

接下來爲了獲得下一行的元素,如今把藍色塊下移,如今藍色塊在這個位置:

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

重複進行元素乘法,而後加起來。經過這樣作獲得-10。再將其右移獲得-2,接着是2,3。以此類推,這樣計算完矩陣中的其餘元素。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

爲了說得更清楚一點,這個-16是經過底部右下角的3×3區域獲得的。

所以6×6矩陣和3×3矩陣進行卷積運算獲得4×4矩陣。這些圖片和過濾器是不一樣維度的矩陣,但左邊矩陣容易被理解爲一張圖片,中間的這個被理解爲過濾器,右邊的圖片咱們能夠理解爲另外一張圖片。這個就是垂直邊緣檢測器,下一頁中你就會明白。

在往下講以前,多說一句,若是你要使用編程語言實現這個運算,不一樣的編程語言有不一樣的函數,而不是用「

」來表示卷積。因此在編程練習中,你會使用一個叫conv_forward的函數。若是在tensorflow下,這個函數叫tf.conv2d。在其餘深度學習框架中,在後面的課程中,你將會看到Keras這個框架,在這個框架下用Conv2D實現卷積運算。全部的編程框架都有一些函數來實現卷積運算。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

爲何這個能夠作垂直邊緣檢測呢?讓咱們來看另一個例子。爲了講清楚,我會用一個簡單的例子。這是一個簡單的6×6圖像,左邊的一半是10,右邊通常是0。若是你把它當成一個圖片,左邊那部分看起來是白色的,像素值10是比較亮的像素值,右邊像素值比較暗,我使用灰色來表示0,儘管它也能夠被畫成黑的。圖片裏,有一個特別明顯的垂直邊緣在圖像中間,這條垂直線是從黑到白的過渡線,或者從白色到深色。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

若是把最右邊的矩陣當成圖像,它是這個樣子。在中間有段亮一點的區域,對應檢查到這個6×6圖像中間的垂直邊緣。這裏的維數彷佛有點不正確,檢測到的邊緣太粗了。由於在這個例子中,圖片過小了。若是你用一個1000×1000的圖像,而不是6×6的圖片,你會發現其會很好地檢測出圖像中的垂直邊緣。在這個例子中,在輸出圖像中間的亮處,表示在圖像中間有一個特別明顯的垂直邊緣。從垂直邊緣檢測中能夠獲得的啓發是,由於咱們使用3×3的矩陣(過濾器),因此垂直邊緣是一個3×3的區域,左邊是明亮的像素,中間的並不須要考慮,右邊是深色像素。在這個6×6圖像的中間部分,明亮的像素在左邊,深色的像素在右邊,就被視爲一個垂直邊緣,卷積運算提供了一個方便的方法來發現圖像中的垂直邊緣。

因此你已經瞭解卷積是怎麼工做的,在下一個視頻中,你將會看到如何使用卷積運算做爲卷積神經網絡的基本模塊的。

1.3 更多邊緣檢測內容(More edge detection)

你已經見識到用卷積運算實現垂直邊緣檢測,在本視頻中,你將學習如何區分正邊和負邊,這實際就是由亮到暗與由暗到亮的區別,也就是邊緣的過渡。你還能瞭解到其餘類型的邊緣檢測以及如何去實現這些算法,而不要總想着去本身編寫一個邊緣檢測程序,讓咱們開始吧。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

仍是上一個視頻中的例子,這張6×6的圖片,左邊較亮,而右邊較暗,將它與垂直邊緣檢測濾波器進行卷積,檢測結果就顯示在了右邊這幅圖的中間部分。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

如今這幅圖有什麼變化呢?它的顏色被翻轉了,變成了左邊比較暗,而右邊比較亮。如今亮度爲10的點跑到了右邊,爲0的點則跑到了左邊。若是你用它與相同的過濾器進行卷積,最後獲得的圖中間會是-30,而不是30。若是你將矩陣轉換爲圖片,就會是該矩陣下面圖片的樣子。如今中間的過渡部分被翻轉了,以前的30翻轉成了-30,代表是由暗向亮過渡,而不是由亮向暗過渡。

若是你不在意這二者的區別,你能夠取出矩陣的絕對值。但這個特定的過濾器確實能夠爲咱們區分這兩種明暗變化的區別。

再來看看更多的邊緣檢測的例子,咱們已經見過這個3×3的過濾器,它能夠檢測出垂直的邊緣。因此,看到右邊這個過濾器,我想你應該猜出來了,它能讓你檢測出水平的邊緣。提醒一下,一個垂直邊緣過濾器是一個3×3的區域,它的左邊相對較亮,而右邊相對較暗。類似的,右邊這個水平邊緣過濾器也是一個3×3的區域,它的上邊相對較亮,而下方相對較暗。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
這裏還有個更復雜的例子,左上方和右下方都是亮度爲10的點。若是你將它繪成圖片,右上角是比較暗的地方,這邊都是亮度爲0的點,我把這些比較暗的區域都加上陰影。而左上方和右下方都會相對較亮。若是你用這幅圖與水平邊緣過濾器卷積,就會獲得右邊這個矩陣。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

再舉個例子,這裏的30(右邊矩陣中綠色方框標記元素)表明了左邊這塊3×3的區域(左邊矩陣綠色方框標記部分),這塊區域確實是上邊比較亮,而下邊比較暗的,因此它在這裏發現了一條正邊緣。而這裏的-30(右邊矩陣中紫色方框標記元素)又表明了左邊另外一塊區域(左邊矩陣紫色方框標記部分),這塊區域確實是底部比較亮,而上邊則比較暗,因此在這裏它是一條負邊。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

再次強調,咱們如今所使用的都是相對很小的圖片,僅有6×6。但這些中間的數值,好比說這個10(右邊矩陣中黃色方框標記元素)表明的是左邊這塊區域(左邊6×6矩陣中黃色方框標記的部分)。這塊區域左邊兩列是正邊,右邊一列是負邊,正邊和負邊的值加在一塊兒獲得了一箇中間值。但假如這個一個很是大的1000×1000的相似這樣棋盤風格的大圖,就不會出現這些亮度爲10的過渡帶了,由於圖片尺寸很大,這些中間值就會變得很是小。

總而言之,經過使用不一樣的過濾器,你能夠找出垂直的或是水平的邊緣。但事實上,對於這個3×3的過濾器來講,咱們使用了其中的一種數字組合。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

但在歷史上,在計算機視覺的文獻中,曾公平地爭論過怎樣的數字組合纔是最好的,因此你還

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

器,這種過濾器對於數據的捕捉能力甚至能夠賽過任何以前這些手寫的過濾器。相比這種單純的垂直邊緣和水平邊緣,它能夠檢測出45°或70°或73°,甚至是任何角度的邊緣。因此將矩陣的全部數字都設置爲參數,經過數據反饋,讓神經網絡自動去學習它們,咱們會發現神經網絡能夠學習一些低級的特徵,例如這些邊緣的特徵。儘管比起那些研究者們,咱們要更費勁一些,但確實能夠動手寫出這些東西。不過構成這些計算的基礎依然是卷積運算,使得反向傳播算法可以讓神經網絡學習任何它所須要的3×3的過濾器,並在整幅圖片上去應用它。這裏,這裏,還有這裏(左邊矩陣藍色方框標記部分),去輸出這些,任何它所檢測到的特徵,無論是垂直的邊緣,水平的邊緣,還有其餘奇怪角度的邊緣,甚至是其它的連名字都沒有的過濾器。

因此這種將這9個數字當成參數的思想,已經成爲計算機視覺中最爲有效的思想之一。在接下來的課程中,也就是下個星期,咱們將詳細去探討如何使用反向傳播去讓神經網絡學習這9個數字。但在此以前,咱們須要先討論一些其它細節,好比一些基礎的卷積運算的變量。在下面兩節視頻中,我將與大家討論如何去使用padding,以及卷積各類不一樣的發展,這兩節內容將會是卷積神經網絡中卷積模塊的重要組成部分,因此咱們下節視頻再見。

1.4 Padding

爲了構建深度神經網絡,你須要學會使用的一個基本的卷積操做就是padding,讓咱們來看看它是如何工做的。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

爲了解決這兩個問題,一是輸出縮小。當咱們創建深度神經網絡時,你就會知道你爲何不但願每進行一步操做圖像都會縮小。好比當你有100層深層的網絡,若是圖像每通過一層都縮小的話,通過100層網絡後,你就會獲得一個很小的圖像,因此這是個問題。另外一個問題是圖像邊緣的大部分信息都丟失了。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

1.5 卷積步長(Strided convolutions)

卷積中的步幅是另外一個構建卷積神經網絡的基本操做,讓我向你展現一個例子。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

若是你想用3×3的過濾器卷積這個7×7的圖像,和以前不一樣的是,咱們把步幅設置成了2。你還和以前同樣取左上方的3×3區域的元素的乘積,再加起來,最後結果爲91。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

只是以前咱們移動藍框的步長是1,如今移動的步長是2,咱們讓過濾器跳過2個步長,注意一下左上角,這個點移動到其後兩格的點,跳過了一個位置。而後你仍是將每一個元素相乘並求和,你將會獲得的結果是100。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

如今咱們繼續,將藍色框移動兩個步長,你將會獲得83的結果。當你移動到下一行的時候,你也是使用步長2而不是步長1,因此咱們將藍色框移動到這裏:
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

注意到咱們跳過了一個位置,獲得69的結果,如今你繼續移動兩個步長,會獲得91,127,最後一行分別是44,72,74。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

在講下一部分以前,這裏有一個關於互相關和卷積的技術性建議,這不會影響到你構建卷積神經網絡的方式,但取決於你讀的是數學教材仍是信號處理教材,在不一樣的教材裏符號可能不一致。若是你看的是一本典型的數學教科書,那麼卷積的定義是作元素乘積求和,實際上還有一個步驟是你首先要作的,也就是在把這個6×6的矩陣和3×3的過濾器卷積以前,首先你將3×3的

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

根據慣例,咱們大多數人都叫它卷積,儘管數學家們更喜歡稱之爲互相關,但這不會影響到你在編程練習中要實現的任何東西,也不會影響你閱讀和理解深度學習文獻。

如今你已經看到了如何進行卷積,以及如何使用填充,如何在卷積中選擇步幅。但到目前爲止,咱們所使用的是關於矩陣的卷積,例如6×6的矩陣。在下一集視頻中,你將看到如何對立體進行卷積,這將會使你的卷積變得更增強大,讓咱們繼續下一個視頻。

1.6 三維卷積(Convolutions over volumes)

你已經知道如何對二維圖像作卷積了,如今看看如何執行卷積不只僅在二維圖像上,而是三維立體上。

咱們從一個例子開始,假如說你不只想檢測灰度圖像的特徵,也想檢測RGB彩色圖像的特徵。彩色圖像若是是6×6×3,這裏的3指的是三個顏色通道,你能夠把它想象成三個6×6圖像的堆疊。爲了檢測圖像的邊緣或者其餘的特徵,不是把它跟原來的3×3的過濾器作卷積,而是跟一個三維的過濾器,它的維度是3×3×3,這樣這個過濾器也有三層,對應紅、綠、藍三個通道。
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

給這些起個名字(原圖像),這裏的第一個6表明圖像高度,第二個6表明寬度,這個3表明通道的數目。一樣你的過濾器也有一個高,寬和通道數,而且圖像的通道數必須和過濾器的通道數匹配,因此這兩個數(紫色方框標記的兩個數)必須相等。下個幻燈片裏,咱們就會知道這個卷積操做是如何進行的了,這個的輸出會是一個4×4的圖像,注意是4×4×1,最後一個數不是3了。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

咱們研究下這背後的細節,首先先換一張好看的圖片。這個是6×6×3的圖像,這個是3×3×3的過濾器,最後一個數字通道數必須和過濾器中的通道數相匹配。爲了簡化這個3×3×3過濾器的圖像,咱們不把它畫成3個矩陣的堆疊,而畫成這樣,一個三維的立方體。
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
爲了計算這個卷積操做的輸出,你要作的就是把這個3×3×3的過濾器先放到最左上角的位置,這個3×3×3的過濾器有27個數,27個參數就是3的立方。依次取這27個數,而後乘以相應的紅綠藍通道中的數字。先取紅色通道的前9個數字,而後是綠色通道,而後再是藍色通道,乘以左邊黃色立方體覆蓋的對應的27個數,而後把這些數都加起來,就獲得了輸出的第一個數字。

若是要計算下一個輸出,你把這個立方體滑動一個單位,再與這27個數相乘,把它們都加起來,就獲得了下一個輸出,以此類推。
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

再注意一下這個卷積立方體,一個6×6×6的輸入圖像卷積上一個3×3×3的過濾器,獲得一個4×4的二維輸出。

如今你已經瞭解瞭如何對立方體卷積,還有最後一個概念,對創建卷積神經網絡相當重要。就是,若是咱們不只僅想要檢測垂直邊緣怎麼辦?若是咱們同時檢測垂直邊緣和水平邊緣,還有45°傾斜的邊緣,還有70°傾斜的邊緣怎麼作?換句話說,若是你想同時用多個過濾器怎麼辦?

這是咱們上一張幻燈片的圖片,咱們讓這個6×6×3的圖像和這個3×3×3的過濾器卷積,獲得4×4的輸出。(第一個)這多是一個垂直邊界檢測器或者是學習檢測其餘的特徵。第二個過濾器能夠用橘色來表示,它能夠是一個水平邊緣檢測器。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

因此和第一個過濾器卷積,能夠獲得第一個4×4的輸出,而後卷積第二個過濾器,獲得一個不一樣的4×4的輸出。咱們作完卷積,而後把這兩個4×4的輸出,取第一個把它放到前面,而後取第二個過濾器輸出,我把它畫在這,放到後面。因此把這兩個輸出堆疊在一塊兒,這樣你就都獲得了一個4×4×2的輸出立方體,你能夠把這個立方體當成,從新畫在這,就是一個這樣的盒子,因此這就是一個4×4×2的輸出立方體。它用6×6×3的圖像,而後卷積上這兩個不一樣的3×3的過濾器,獲得兩個4×4的輸出,它們堆疊在一塊兒,造成一個4×4×2的立方體,這裏的2的來源於咱們用了兩個不一樣的過濾器。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

因此你已經知道怎麼對立方體作卷積了,你已經準備好了實現卷積神經其中一層了,在下個視頻裏讓咱們看看是怎麼作的。

1.7 單層卷積網絡(One layer of a convolutional network)

今天咱們要講的是如何構建卷積神經網絡的卷積層,下面來看個例子。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

上節課,咱們已經講了如何經過兩個過濾器卷積處理一個三維圖像,並輸出兩個不一樣的4×4矩陣。假設使用第一個過濾器進行卷積,獲得第一個4×4矩陣。使用第二個過濾器進行卷積獲得另一個4×4矩陣。
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

卷積有不少種標記方法,這是咱們最經常使用的卷積符號。你們在線搜索或查看開源代碼時,關於高度,寬度和通道的順序並無徹底統一的標準卷積,因此在查看GitHub上的源代碼或閱讀一些開源實現的時候,你會發現有些做者會採用把通道放在首位的編碼標準,有時全部變量都採用這種標準。實際上在某些架構中,當檢索這些圖片時,會有一個變量或參數來標識計算通道數量和通道損失數量的前後順序。只要保持一致,這兩種卷積標準均可用。很遺憾,這只是一部分標記法,由於深度學習文獻並未對標記達成一致,但課上我會採用這種卷積標識法,按高度,寬度和通道損失數量的順序依次計算。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

我知道,突然間接觸到這麼多新的標記方法,你可能會說,這麼多怎麼記呢?別擔憂,不用全都記住,你能夠經過本週的練習來熟悉它們。而這節課我想講的重點是,卷積神經網絡的某一卷積層的工做原理,以及如何計算某一卷積層的激活函數,並映射到下一層的激活值。瞭解了卷積神經網絡中某一卷積層的工做原理,咱們就能夠把它們堆疊起來造成一個深度卷積神經網絡,咱們下節課再講。

1.8 簡單卷積網絡示例(A simple convolution network example)

上節課,咱們講了如何爲卷積網絡構建一個卷積層。今天咱們看一個深度卷積神經網絡的具體示例,順便練習一下咱們上節課所學的標記法。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

而這節課你要掌握的一點是,隨着神經網絡計算深度不斷加深,一般開始時的圖像也要更大一些,初始值爲39×39,高度和寬度會在一段時間內保持一致,而後隨着網絡深度的加深而逐漸減少,從39到37,再到17,最後到7。而通道數量在增長,從3到10,再到20,最後到40。在許多其它卷積神經網絡中,你也能夠看到這種趨勢。關於如何肯定這些參數,後面課上我會更詳細講解,這是咱們講的第一個卷積神經網絡示例。

一個典型的卷積神經網絡一般有三層,一個是卷積層,咱們經常用Conv來標註。上一個例子,我用的就是CONV。還有兩種常見類型的層,咱們留在後兩節課講。一個是池化層,咱們稱之爲POOL。最後一個是全鏈接層,用FC表示。雖然僅用卷積層也有可能構建出很好的神經網絡,但大部分神經望樓架構師依然會添加池化層和全鏈接層。幸運的是,池化層和全鏈接層比卷積層更容易設計。後兩節課咱們會快速講解這兩個概念以便你更好的瞭解神經網絡中最經常使用的這幾種層,你就能夠利用它們構建更強大的網絡了。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
再次恭喜你已經掌握了第一個卷積神經網絡,本週後幾節課,咱們會學習如何訓練這些卷積神經網絡。不過在這以前,我還要簡單介紹一下池化層和全鏈接層。而後再訓練這些網絡,到時我會用到你們熟悉的反向傳播訓練方法。那麼下節課,咱們就先來了解如何構建神經網絡的池化層。

1.9 池化層(Pooling layers)

除了卷積層,卷積網絡也常用池化層來縮減模型的大小,提升計算速度,同時提升所提取特徵的魯棒性,咱們來看一下。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

先舉一個池化層的例子,而後咱們再討論池化層的必要性。假如輸入是一個4×4矩陣,用到的池化類型是最大池化(max pooling)。執行最大池化的樹池是一個2×2矩陣。執行過程很是簡單,把4×4的輸入拆分紅不一樣的區域,我把這個區域用不一樣顏色來標記。對於2×2的輸出,輸出的每一個元素都是其對應顏色區域中的最大元素值。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

這是對最大池化功能的直觀理解,你能夠把這個4×4輸入看做是某些特徵的集合,也許不是。你能夠把這個4×4區域看做是某些特徵的集合,也就是神經網絡中某一層的非激活值集合。數字大意味着可能探測到了某些特定的特徵,左上象限具備的特徵多是一個垂直邊緣,一隻眼睛,或是你們懼怕遇到的CAP特徵。顯然左上象限中存在這個特徵,這個特徵多是一隻貓眼探測器。然而,右上象限並不存在這個特徵。最大化操做的功能就是隻要在任何一個象限內提取到某個特徵,它都會保留在最大化的池化輸出裏。因此最大化運算的實際做用就是,若是在過濾器中提取到某個特徵,那麼保留其最大值。若是沒有提取到這個特徵,可能在右上象限中不存在這個特徵,那麼其中的最大值也仍是很小,這就是最大池化的直觀理解。

必須認可,人們使用最大池化的主要緣由是此方法在不少實驗中效果都很好。儘管剛剛描述的直觀理解常常被引用,不知你們是否徹底理解它的真正緣由,不知你們是否理解最大池化效率很高的真正緣由。
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

除了這些,池化的內容就所有講完了。最大池化只是計算神經網絡某一層的靜態屬性,沒有什麼須要學習的,它只是一個靜態屬性。

關於池化咱們就講到這兒,如今咱們已經知道如何構建卷積層和池化層了。下節課,咱們會分析一個更復雜的能夠引進全鏈接層的卷積網絡示例。

1.10 卷積神經網絡示例(Convolutional neural network example)

構建全卷積神經網絡的構造模塊咱們已經掌握得差很少了,下面來看個例子。

假設,有一張大小爲32×32×3的輸入圖片,這是一張RGB模式的圖片,你想作手寫體數字識別。32×32×3的RGB圖片中含有某個數字,好比7,你想識別它是從0-9這10個數字中的哪個,咱們構建一個神經網絡來實現這個功能。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

我用的這個網絡模型和經典網絡LeNet-5很是類似,靈感也來源於此。LeNet-5是多年前Yann LeCun建立的,我所採用的模型並非LeNet-5,可是受它啓發,許多參數選擇都與LeNet-5類似。輸入是32×32×3的矩陣,假設第一層使用過濾器大小爲5×5,步幅是1,padding是0,過濾器個數爲6,那麼輸出爲28×28×6。將這層標記爲CONV1,它用了6個過濾器,增長了誤差,應用了非線性函數,多是ReLU非線性函數,最後輸出CONV1的結果。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

最後,用這84個單元填充一個softmax單元。若是咱們想經過手寫數字識別來識別手寫0-9這10個數字,這個softmax就會有10個輸出。

此例中的卷積神經網絡很典型,看上去它有不少超參數,關於如何選定這些參數,後面我提供更多建議。常規作法是,儘可能不要本身設置超參數,而是查看文獻中別人採用了哪些超參數,選一個在別人任務中效果很好的架構,那麼它也有可能適用於你本身的應用程序,這塊下週我會細講。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

神經網絡的基本構造模塊咱們已經講完了,一個卷積神經網絡包括卷積層、池化層和全鏈接層。許多計算機視覺研究正在探索如何把這些基本模塊整合起來,構建高效的神經網絡,整合這些基本模塊確實須要深刻的理解。根據個人經驗,找到整合基本構造模塊最好方法就是大量閱讀別人的案例。下週我會演示一些整合基本模塊,成功構建高效神經網絡的具體案例。我但願下週的課程能夠幫助你找到構建有效神經網絡的感受,或許你也能夠將別人開發的框架應用於本身的應用程序,這是下週的內容。下節課,也是本週最後一節課,我想花點時間討論下,爲何你們願意使用卷積,使用卷積的好處和優點是什麼,以及如何整合多個卷積,如何檢驗神經網絡,如何在訓練集上訓練神經網絡來識別圖片或執行其餘任務,咱們下節課繼續講。

1.11 爲何使用卷積?(Why convolutions?)

這是本週最後一節課,咱們來分析一下卷積在神經網絡中如此受用的緣由,而後對如何整合這些卷積,如何經過一個標註過的訓練集訓練卷積神經網絡作個簡單歸納。和只用全鏈接層相比,卷積層的兩個主要優點在於參數共享和稀疏鏈接,舉例說明一下。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

假設有一張32×32×3維度的圖片,這是上節課的示例,假設用了6個大小爲5×5的過濾器,輸出維度爲28×28×6。32×32×3=3072,28×28×6=4704。咱們構建一個神經網絡,其中一層含有3072個單元,下一層含有4074個單元,兩層中的每一個神經元彼此相連,而後計算權重矩陣,它等於4074×3072≈1400萬,因此要訓練的參數不少。雖然以如今的技術,咱們能夠用1400多萬個參數來訓練網絡,由於這張32×32×3的圖片很是小,訓練這麼多參數沒有問題。若是這是一張1000×1000的圖片,權重矩陣會變得很是大。咱們看看這個卷積層的參數數量,每一個過濾器都是5×5,一個過濾器有25個參數,再加上誤差參數,那麼每一個過濾器就有26個參數,一共有6個過濾器,因此參數共計156個,參數數量仍是不多。

卷積網絡映射這麼少參數有兩個緣由:

一是參數共享。觀察發現,特徵檢測如垂直邊緣檢測若是適用於圖片的某個區域,那麼它也可能適用於圖片的其餘區域。也就是說,若是你用一個3×3的過濾器檢測垂直邊緣,那麼圖片的左上角區域,以及旁邊的各個區域(左邊矩陣中藍色方框標記的部分)均可以使用這個3×3的過濾器。每一個特徵檢測器以及輸出均可以在輸入圖片的不一樣區域中使用一樣的參數,以便提取垂直邊緣或其它特徵。它不只適用於邊緣特徵這樣的低階特徵,一樣適用於高階特徵,例如提取臉上的眼睛,貓或者其餘特徵對象。即便減小參數個數,這9個參數一樣能計算出16個輸出。直觀感受是,一個特徵檢測器,如垂直邊緣檢測器用於檢測圖片左上角區域的特徵,這個特徵極可能也適用於圖片的右下角區域。所以在計算圖片左上角和右下角區域時,你不須要添加其它特徵檢測器。假若有一個這樣的數據集,其左上角和右下角可能有不一樣分佈,也有可能稍有不一樣,但很類似,整張圖片共享特徵檢測器,提取效果也很好。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

第二個方法是使用稀疏鏈接,我來解釋下。這個0是經過3×3的卷積計算獲得的,它只依賴於這個3×3的輸入的單元格,右邊這個輸出單元(元素0)僅與36個輸入特徵中9個相鏈接。並且其它像素值都不會對輸出產生任影響,這就是稀疏鏈接的概念。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎
再舉一個例子,這個輸出(右邊矩陣中紅色標記的元素 30)僅僅依賴於這9個特徵(左邊矩陣紅色方框標記的區域),看上去只有這9個輸入特徵與輸出相鏈接,其它像素對輸出沒有任何影響。

神經網絡能夠經過這兩種機制減小參數,以便咱們用更小的訓練集來訓練它,從而預防過分擬合。大家也可能聽過,卷積神經網絡善於捕捉平移不變。經過觀察能夠發現,向右移動兩個像素,圖片中的貓依然清晰可見,由於神經網絡的卷積結構使得即便移動幾個像素,這張圖片依然具備很是類似的特徵,應該屬於一樣的輸出標記。實際上,咱們用同一個過濾器生成各層中,圖片的全部像素值,但願網絡經過自動學習變得更加健壯,以便更好地取得所指望的平移不變屬性。

這就是卷積或卷積網絡在計算機視覺任務中表現良好的緣由。

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

​深度學習筆記 第四門課 卷積神經網絡 第一週 卷積神經網絡基礎

恭喜你完成了這一週的課程,你已經學習了卷積神經網絡的全部基本構造模塊,以及如何在高效圖片識別系統中整合這些模塊。透過本週編程練習,你能夠更加具體瞭解這些概念,試着整合這些構造模塊,並用它們解決本身的問題。

下週,咱們將繼續深刻學習卷積神經網絡。我曾提到卷積神經網絡中有不少超參數,下週,我打算具體展現一些最有效的卷積神經網絡示例,你也能夠嘗試去判斷哪些網絡架構類型效率更高。人們一般的作法是將別人發現和發表在研究報告上的架構應用於本身的應用程序。下週看過更多具體的示例後,相信你會作的更好。此外,下星期咱們也會深刻分析卷積神經網絡如此高效的緣由,同時講解一些新的計算機視覺應用程序,例如,對象檢測和神經風格遷移以及如何利用這些算法創造新的藝術品形式。
參考資料
[1]

深度學習課程: https://mooc.study.163.com/university/deeplearning_ai
[2]

黃海廣: https://github.com/fengdu78
[3]

github: https://github.com/fengdu78/deeplearning_ai_books

相關文章
相關標籤/搜索