卷積神經網路簡介
本文為 AI 研習社編譯的技術博客,原標題 :
Simple Introduction to Convolutional Neural Networks
作者 |Matthew Stewart, PhD Researcher
翻譯 | 微白o、煙波01浩淼、Dylan的琴、Overfitting
校對 | 醬番梨 審核 | 約翰遜·李加薪 整理 | 立魚王
https://towardsdatascience.com/simple-introduction-to-convolutional-neural-networks-cdf8d3077bac
在本文中,我將用很多天鵝圖片來解釋卷積神經網路(CNN)的概念,並將完成CNN在常規多層感知器神經網路上處理圖像的案例。
圖像分析
假設我們想要創建一個能夠識別圖像中的天鵝的神經網路模型。天鵝具有某些特徵,可用於幫助確定天鵝是否存在,例如長頸,白色等。
天鵝的某些特徵可以用於識別
有些圖像中,確定天鵝是否存在比較困難,來看下面這張圖像:
為天鵝圖像分類較為困難
上述圖像仍然存在某些特徵,但對我們來說提取這些特徵已經較為困難了。還有更極端的情況。
天鵝分類的極端情況
至少顏色還沒變,對吧?但是……
別忘了還有黑天鵝!
還能再難點嗎?當然可以。
最糟糕的情況
好的,天鵝圖片的分析到此為止,下面來談談神經網路。我們基本上一直以非常幼稚的方式來討論檢測圖像中的特徵。研究人員構建了多種計算機視覺技術來解決這些問題:SIFT,FAST,SURF,Brief等。
然而,類似的問題又出現了:探測器要麼過於籠統,要麼設計過渡。人們正在設計這些特徵探測器,這使得它們要麼太簡易,要麼難以推廣。
如果我們掌握了要檢測的特徵怎麼辦?
我們需要一個可以進行表徵學習(或特徵學習)的系統。
表徵學習是一種允許系統自動查找給定任務的相關特徵的技術,能代替人工特徵工程。有這樣幾種方法:
無監督的(K-means,PCA,……)
監督的(Sup,Dictionary learning,Neural Networks)
傳統神經網路的問題
假設你已經熟悉多層感知器(MLP)的傳統神經網路了。如果你不熟悉這些內容,在中間大綱上有很多有關MLP工作方式的介紹,你可以去了學習一下。這些是類比人腦建模的,其中神經元由連接的節點刺激,並且僅在達到特定閾值時才被激活。
一個標準多層感知器(傳統神經網路)
MLP有幾個缺點,特別是在圖像處理方面。MLP對每個輸入使用一個感知器(例如,圖像中的像素,在RGB情況下乘以3)。對於大圖像,權重數量迅速變得難以處理。對於具有3個顏色通道的224 x 224像素圖像,必須訓練大約150,000個權重!結果,在訓練和過擬合過程中,困難同時出現。
另一個常見問題是MLP對輸入(圖像)及其移點陣圖像的反應不同——它們不是平移不變的。例如,如果貓的圖片出現在一張圖片的左上角,且出現在另一張圖片的右下角,則MLP會嘗試自我糾正並認為貓是一直出現在圖像的這一部分中的。
顯然,MLP不是用於圖像處理的最佳方法。其中一個主要問題是當圖像變平為MLP時,空間信息會丟失。靠近的節點很重要,因為它們有助於定義圖像的特徵。因此,我們需要一種方法來利用圖像特徵(像素)的空間相關性,這樣無論貓出現在何處,我們就可以看到它。在下圖中,我們正在學習剩餘特徵。這種方法並不健全,因為貓可能出現在另一個位置。
使用MLP的貓探測器,隨著貓的位置改變而改變
進入卷積神經網路
我希望這個案例可以清楚地說明對於圖像處理為什麼MLP不好用。現在讓我們繼續討論CNN是如何用來解決我們的大多數問題的。
CNN利用近處的像素比遠處的相關性更強的事實
我們通過使用稱為卷積核的東西來分析附近像素的影響。卷積核正是你認為的過濾器,在上述情況下,我們採用用戶指定尺寸的卷積核(經驗法則為3x3或5x5),然後將圖像從左上角移到右下角。對於圖像上的每個點,基於卷積核使用卷積運算,計算結果。
卷積核可能與任何東西有關,對於人類照片,一個卷積核可能與看到的鼻子有關,而我們的鼻子卷積核會讓我們看到鼻子在我們的圖像中出現的強度、次數和它們出現的位置。與MLP相比,這減少了神經網路必須學習的權重數量,並且還意味著當這些特徵的位置發生變化時,它不會脫離神經網路。
卷積操作
如果您想知道如何通過神經網路學到不同的特徵,以及神經網路是否可能學習同樣的特徵(10個鼻子卷積核將是多餘的),這種情況極不可能發生。在構建網路時,我們隨機指卷積核的值,然後在神經網路訓練時不斷更新。除非所選卷積核的數量非常大,否則很可能不會產生兩個相同的卷積核。
一些卷積核的例子,或者也可以叫它過濾器,如下:
CNN卷積核的例子
在過濾器經過圖像之後,為每個過濾器生成特徵映射。然後通過激活函數獲取這些函數,激活函數決定圖像中給定位置是否存在某個特徵。然後我們可以做很多事情,例如添加更多過濾層和創建更多特徵映射,隨著我們創建更深入的CNN,這些映射變得越來越抽象。我們還可以使用池化圖層來選擇要素圖上的最大值,並將它們用作後續圖層的輸入。理論上,任何類型的操作都可以在池化層中完成,但實際上,只使用最大池,因為我們想要找到異常值 - 這些是我們的網路看到該功能的時候!
示例CNN具有兩個卷積層,兩個合併層和一個完全連接的層,它將圖像的最終分類決定為幾個類別之一。
只是重申我們迄今為止所發現的內容。我們知道MLP:
不適合圖像縮放
忽略像素位置和與鄰居相關的信息
無法處理翻譯
CNN的一般思想是智能地適應圖像的屬性:
像素位置和鄰域具有語義含義
感興趣的元素可以出現在圖像中的任何位置
MLP和CNN的體系結構比較。
CNN也由層組成,但這些層沒有完全連接:它們具有濾鏡,在整個圖像中應用的立方體形狀的權重集。過濾器的每個2D切片稱為內核。這些過濾器引入了平移不變性和參數共享。它們是如何應用的?卷積!
使用內核過濾器如何將卷積應用於圖像的示例。
現在一個好問題是圖像邊緣會發生什麼?如果我們在正常圖像上應用卷積,則結果將根據濾波器的大小進行下採樣。如果我們不希望這種情況發生,我們該怎麼辦?我們可以使用填充。
填充
Full padding.填充0確保全部的像素都被過濾器卷積。增加輸出的大小。
Same padding.確保輸出和輸入有相同的大小。
圖片示例如何在卷積神經網路中使用full padding和same padding
填充本質上是使得卷積核產生的特徵映射與原始圖像的大小相同。這對於深度CNN非常有用,因為我們不希望減少輸出,因此我們僅僅在網路的邊緣留下一個2x2的區域來預測我們的結果。
我們如何將過濾器連接在一起?
如果我們有許多的特稱映射,那麼在我們網路中如何將這些映射結合起來幫助我們獲得最終結果?
左圖:在黑白圖像上使用4個3x3卷積層(僅一個通道)
右圖:在RGB圖像上使用4個3x3卷積層。如你所見,過濾器是立方體,它們應用於圖像的完整深度。
需要明確的是,每一個過濾器都與整個輸入3D立方體進行卷積,但是只生成一個2D特徵映射。
因為我們有許多過濾器,所以我們最終得到一個3D輸出:每一個過濾器對應一個2D特徵映射。
特徵映射維度可以從一個卷積層急劇地變化到下一個:我們可以輸入一個32x32x16的層,如果該層有128個過濾器,然後輸出一個32x32x128的結果。
使用過濾層對圖像進行卷積會生成特徵映射,該特徵映射突出顯示圖像中給定要素的存在。
在卷積層中,我們一般地在圖像上應用多個過濾器來提取不同的特徵。但更重要的是,我們正在學習這些過濾器!我們缺少一樣東西:非線性。
介紹ReLU
對CNN來說,最成功的非線性函數是修正線性單元(ReLU), 它克服了在sigmoid函數中出現的梯度消失問題。ReLU更容易計算並生成稀疏性(但這並不總是有益的)。
不同層次比較
卷積神經網路中有三種層:卷積層,池化層和全連接層。每層都有不同的參數,可以對這些參數進行優化,並對輸入層執行不同的任務。
卷積層的特徵
卷積層是對原始圖像或深度CNN中的其他特徵圖應用過濾器的層。這一層包含了整個神經網路中大多數由用戶指定的參數。最重要的參數是核的數量和核的大小
池化層的特徵
池化層與卷積層很相似,但池化層執行特定的功能,如max池化(在某個過濾器區域取最大值),或average池化(在某個過濾器區域取平均值)。這些通常被用來降低網路的維度。
全連接層的特徵
在CNN分類結果輸出前放置全連接層,並在分類前對結果進行扁平化處理。這類似於MLP的輸出層。
標準CNN的架構
CNN圖層學了什麼?
每個CNN層都學習增加複雜度的過濾器。
第一層學習基本的特徵檢測過濾器:邊、角等
中間層學習檢測對象部分的過濾器。對於人臉,他們可能學會對眼睛、鼻子等做出反應
最後一層具有更高的表示:它們學會識別不同形狀和位置的完整對象。
CNN訓練的識別特定物體及其生成的特徵圖的例子。
要查看CNN實際工作的3D示例,請查看下面的鏈接。
http://scs.ryerson.ca/~aharley/vis/conv/
※對話IJCAI2019特邀講者Leslie Kaelbling:與AI和機器人結緣背後的故事
※僅開放一天,已有 16 支隊伍成功擊敗 OpenAI Five
TAG:AI研習社 |