深度學習之卷積神經網路

2021-07-22 06:07:42 字數 3050 閱讀 3748

**

卷積神經網路是一種多層神經網路,擅長處理影象特別是大影象的相關機器學習問題。

卷積網路通過一系列方法,成功將資料量龐大的影象識別問題不斷降維,最終使其能夠被訓練。cnn最早由yann lecun提出並應用在手寫字型識別上(minst)。lecun提出的網路稱為lenet,其網路結構如下:

這是乙個最典型的卷積網路,由卷積層、池化層、全連線層組成。其中卷積層與池化層配合,組成多個卷積組,逐層提取特徵,最終通過若干個全連線層完成分類。

卷積層完成的操作,可以認為是受區域性感受野概念的啟發,而池化層,主要是為了降低資料維度。

綜合起來說,cnn通過卷積來模擬特徵區分,並且通過卷積的權值共享及池化,來降低網路引數的數量級,最後通過傳統神經網路完成分類等任務。

為什麼要降低引數量級?從下面的例子就可以很容易理解了。

如果我們使用傳統神經網路方式,對一張進行分類,那麼,我們把的每個畫素都連線到隱藏層節點上,那麼對於一張1000x1000畫素的,如果我們有1m隱藏層單元,那麼一共有10^12個引數,這顯然是不能接受的。(如下圖所示)

但是我們在cnn裡,可以大大減少引數個數,我們基於以下兩個假設:

1)最底層特徵都是區域性性的,也就是說,我們用10x10這樣大小的過濾器就能表示邊緣等底層特徵

2)影象上不同小片段,以及不同影象上的小片段的特徵是類似的,也就是說,我們能用同樣的一組分類器來描述各種各樣不同的影象

基於以上兩個,假設,我們就能把第一層網路結構簡化如下:

我們用100個10x10的小過濾器,就能夠描述整幅上的底層特徵。

卷積運算的定義如下圖所示:

如圖所示,我們有乙個5x5的影象,我們用乙個3x3的卷積核:

1  0  1

0  1  0

1  0  1

來對影象進行卷積操作(可以理解為有乙個滑動視窗,把卷積核與對應的影象畫素做乘積然後求和),得到了3x3的卷積結果。

這個過程我們可以理解為我們使用乙個過濾器(卷積核)來過濾影象的各個小區域,從而得到這些小區域的特徵值。

在實際訓練過程中,卷積核的值是在學習過程中學到的。

在具體應用中,往往有多個卷積核,可以認為,每個卷積核代表了一種影象模式,如果某個影象塊與此卷積核卷積出的值大,則認為此影象塊十分接近於此卷積核。如果我們設計了6個卷積核,可以理解:我們認為這個影象上有6種底層紋理模式,也就是我們用6中基礎模式就能描繪出一副影象。以下就是24種不同的卷積核的示例:

池化聽起來很高深,其實簡單的說就是下取樣。池化的過程如下圖所示:

上圖中,我們可以看到,原始是20x20的,我們對其進行下取樣,取樣視窗為10x10,最終將其下取樣成為乙個2x2大小的特徵圖。

之所以這麼做的原因,是因為即使做完了卷積,影象仍然很大(因為卷積核比較小),所以為了降低資料維度,就進行下取樣。

之所以能這麼做,是因為即使減少了許多資料,特徵的統計屬性仍能夠描述影象,而且由於降低了資料維度,有效地避免了過擬合。

在實際應用中,池化根據下取樣的方法,分為最大值下取樣(max-pooling)與平均值下取樣(mean-pooling)。

下面再回到lenet網路結構:

這回我們就比較好理解了,原始影象進來以後,先進入乙個卷積層c1,由6個5x5的卷積核組成,卷積出28x28的影象,然後下取樣到14x14(s2)。

接下來,再進乙個卷積層c3,由16個5x5的卷積核組成,之後再下取樣到5x5(s4)。

注意,這裡s2與c3的連線方式並不是全連線,而是部分連線,如下圖所示:

其中行代表s2層的某個節點,列代表c3層的某個節點。

我們可以看出,c3-0跟s2-0,1,2連線,c3-1跟s2-1,2,3連線,後面依次類推,仔細觀察可以發現,其實就是排列組合:

0 0 0 1 1 1

0 0 1 1 1 0

0 1 1 1 0 0

...1 1 1 1 1 1

我們可以領悟作者的意圖,即用不同特徵的底層組合,可以得到進一步的高階特徵,例如:/ + \ = ^ (比較抽象o(∩_∩)o~),再比如好多個斜線段連成乙個圓等等。

最後,通過全連線層c5、f6得到10個輸出,對應10個數字的概率。

最後說一點個人的想法哈,我認為第乙個卷積層選6個卷積核是有原因的,大概也許可能是因為0~9其實能用以下6個邊緣來代表:

是不是有點道理呢,哈哈

然後c3層的數量選擇上面也說了,是從選3個開始的排列組合,所以也是可以理解的。

其實這些都是針對特定問題的trick,現在更加通用的網路的結構都會複雜得多,至於這些網路的引數如何選擇,那就需要我們好好學習了。

卷積神經網路的訓練過程與傳統神經網路類似,也是參照了反向傳播演算法。

第一階段,向前傳播階段:

a)從樣本集中取乙個樣本(x,yp),將x輸入網路;

b)計算相應的實際輸出op。

在此階段,資訊從輸入層經過逐級的變換,傳送到輸出層。這個過程也是網路在完成訓練後正常執行時執行的過程。在此過程中,網路執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最後的輸出結果):

op=fn(…(f2(f1(xpw(1))w(2))…)w(n))

第二階段,向後傳播階段

a)算實際輸出op與相應的理想輸出yp的差;

b)按極小化誤差的方法反向傳播調整權矩陣。

深度學習之卷積神經網路

目錄 持續更新 概述 卷積神經網路中啟用函式relu 卷積網路 卷積網路架構 卷積層輸出計算 池化層的輸出計算 卷積神經網路的訓練 卷積層的訓練 pooling層的訓練 卷積神經網路 cnn 一種更適合影象 語音識別任務的神經網路結構 用cnn解決的問題都存在區域性與整體的關係。由低層次的特徵經過組...

深度學習 卷積神經網路

一 卷積神經網路基礎 二 lenet 三 常見的一些卷積神經網路 卷積層的超引數 填充和步幅。步幅 stride 每次卷積核在輸入陣列上滑動的行數與列數。多輸入與輸出通道 將3維陣列除寬高外的一維稱為通道維。1 1卷積層 包含1 1的卷積核的卷積層。1 1卷積核在不改變輸入高寬的情況下調整通道數。如...

深度學習 卷積神經網路

卷積神經網路 convolutional neural networks,cnn 是一類包含卷積計算且具有深度結構的前饋神經網路 feedforward neural networks 是深度學習 deep learning 的代表演算法之一。卷積神經網路具有表徵學習 representation ...