淺談卷積神經網絡及matlab實現

機器學習 MATLAB 圖像處理 編程語言 IT永動城 2017-06-19

前言,好久不見,大家有沒有想我啊。哈哈。今天我們來隨便說說卷積神經網絡。

1卷積神經網絡的優點

卷積神經網絡進行圖像分類是深度學習關於圖像處理的一個應用,卷積神經網絡的優點是能夠直接與圖像像素進行卷積,從圖像像素中提取圖像特徵,這種處理方式更加接近人類大腦視覺系統的處理方式。另外,卷積神經網絡的權值共享屬性和pooling層使網絡需要訓練的參數大大減小,簡化了網絡模型,提高了訓練的效率。

2 卷積神經網絡的架構

卷積神經網絡與原始神經網絡有什麼區別呢,現在我分別給他們的架構圖。

淺談卷積神經網絡及matlab實現

圖 1 普通深度神經網絡

淺談卷積神經網絡及matlab實現

圖 2 卷積神經網絡

哇,大家看,有什麼特別的,是不是在輸出層與卷積層之間有一個C/S的什麼亂七八糟的的東西。其實這個就是卷積神經網絡的精髓所在,他的優點不就是可以直接學習像素點,類似於人的眼睛採集信息嗎。

輸入層:卷積輸入層可以直接作用於原始輸入數據,對於輸入是圖像來說,輸入數據是圖像的像素值。

卷積層:卷積神經網絡的卷積層,也叫做特徵提取層,包括二個部分。第一部分是真正的卷積層,主要作用是提取輸入數據特徵。每一個不同的卷積核提取輸入數據的特徵都不相同,卷積層的卷積核數量越多,就能提取越多輸入數據的特徵。

第二部分是pooling層,也叫下采樣層,主要目的是在保留有用信息的基礎上減少數據處理量,加快訓練網絡的速度。通常情況下,卷積神經網絡至少包含二層卷積層(這裡把真正的卷積層和下采樣層統稱為卷積層),即卷積層,pooling層,卷積層,pooling層。卷積層數越多,在前一層卷積層基礎上能夠提取更加抽象的特徵。

全連接層:可以包含多個全連接層,實際上就是多層感知機的隱含層部分。通常情況下後面層的神經節點都和前一層的每一個神經節點連接,同一層的神經元節點之間是沒有連接的。每一層的神經元節點分別通過連接線上的權值進行前向傳播,加權組合得到下一層神經元節點的輸入。

輸出層:輸出層神經節點的數目是根據具體應用任務來設定的。如果是分類任務,卷積神經網絡輸出層通常是一個分類器。

3卷積計算

卷積核類似於人眼對物體進行掃描,所以自然很重要了。其中有離散型卷積核連續性卷積。

連續型卷積:

離散型卷積:

再神經網絡中的卷積操作都屬於離散卷積,其實際上是一個線性運算,而不是真正意義上的卷積操作,相應的卷積核也可以稱為濾波器。卷積核大小確定了圖像中參與運算子區域的大小。說白了,卷積核上的參數可以當成權重,就是說,現在每個像素點,對最後的卷積結果的投票能力,權值越大,投票能力也就越大。

3.1 卷積運算和相關運算的區別

例子如下,matlab輸入運算:

淺談卷積神經網絡及matlab實現

得到結果:

卷積運算:

淺談卷積神經網絡及matlab實現

得到結果:

淺談卷積神經網絡及matlab實現

從中可以看出,卷積計算其實就是相關計算翻轉180°,為什麼要這樣呢。

相關計算公式:

相關顧名思義就是計算,兩個變量之間的相關關係,而卷積則是某個信號對整個系統所產生的影響。

兩者相同點是:都是將兩個函數映射到一個函數的函數 (f,g)->h。過程也很類似,卷積 是在先將一個函數反轉以後進行 滑動相關。

不同點:

1、卷積是對稱的 conv(f,g)=conv(g,f)。而滑動相關不對稱,ccorr(f,g)~=ccorr(g,f)。

2、卷積是兩個系統作用時的響應,(由於對稱性,誰作用於誰並不本質)。

滑動相關是衡量兩個函數相似度,與相對位置之間的關係。

3、信號處理上卷積可以進行局部操作(就是濾波),例如圖像的高斯模糊。系統響應分析。

滑動相關一般用來進行特徵檢測,比如圖像特徵提取

3.2 卷積過程

淺談卷積神經網絡及matlab實現

上述圖表示,卷積過程,首先輸入原始圖像,然後用f(x)這個卷積核進行卷積,在加一個偏置,然後用激活函數進行非線性映射,得到初步的卷積結果,現在激活函數一般都用relu,sigmoid用的都比較少了。

3.3下采樣過程

既然圖像經過卷積之後我們是不是就要用分類器進行分類了呢,顯然是不行的,你想一個圖像辣麼大,網絡的訓練速度一定會很慢的吧,過擬合肯定也不用說了。那麼我們的前輩想到的肯定是降維啊,但是這裡我們不叫降維,而是叫下采樣,當然降維是我理解的,也不知道準確與否。

下采樣就是利用圖像的靜態性。對相鄰的地方進行聚合統計,打個比方就是你額頭的地方肯定和你額頭的地方很像吧,耳朵也和你耳朵很像吧。

另外,圖像的下采樣具有不變性。如果下采樣區域為特徵映射的連續區域,那麼得到的下采樣單元具有平移不變性,比如圖像經過一個小的平移處理後,同樣會得到相同的(下采樣)特徵。在實際應用中,比如物體檢測,聲音識別等應用中,都希望系統具有平移不變性的特徵,因為具有平移不變特徵後,即使樣本經過平移處理後,標記依然能夠被系統識別。

綜上所述,下采樣的主要作用是:

1、降低圖像分辨率;(我理解就是,分辨率越高反而不利於分類,肯定過擬合啊)

2、減少運算數據量;

3、增強網絡對圖像變化的適應性。

3.4局部連接和權值共享

局部連接與全局連接:

淺談卷積神經網絡及matlab實現淺談卷積神經網絡及matlab實現

大家看,假設我們愛因斯坦圖片是1000x1000像素的圖片,那就是一百萬的像素點,輸入的維度也是一百萬,在連接一個相同大小的隱藏層,那麼就是一萬億個連接,那還訓練個毛線啊,所以我們必須減少權重的數量。

插播一段小廣告,來自於百度回答。

淺談卷積神經網絡及matlab實現

上述的回答說白了,就是貓貓的視覺神經中,每一個感受野只接受一小塊的區域的信號,對其他東西是不感冒的。那麼是不是就啟發我們的卷積神經網絡了?

局部連接就是根絕上述思想而來的。每一個神經元不需要接收全部像素點的信息,只需要接收局部的像素點進行輸入。然後在把所有信息綜合起來,那麼就可以得到全局信息了。假設感受野大小是10x10,那麼是不是就只需要10x10x100=1億個連接了?

但是呢一億個好像還是有點大,現在假設我們每個隱藏節點的神經元參數都是一樣的,那麼參數就只有100個參數,也就是每一個過程就只有10x10那一百個參數。這樣整個模型的複雜度就降下來了。(其實我這裡一直認為,給每個神經元適當的權重還是不錯的,畢竟有的特徵(像素)肯定對分類效果影響比較大吧)

這樣我們的卷積神經網絡特徵就構建完畢了。卷積核越多就可以構建更多的高階特徵。

淺談卷積神經網絡及matlab實現

高階特徵類似於這樣,這也符合人類看物體的習慣,因為在人的視網膜裡物體無非都是邊邊線線的組合,這些高階特徵經過組合就編程了物體的大致形狀。完全不合小樣本的概念:比如一個鼠標你只要看過這樣的:

淺談卷積神經網絡及matlab實現

那麼下次你在見過這樣的,你一定知道他是鼠標,無論他多麼絢麗,因為在你的腦海裡,已經有諸多的高階特徵構成了鼠標,所以分類效果當然very good。

淺談卷積神經網絡及matlab實現淺談卷積神經網絡及matlab實現

我可沒有打廣告哦....

4 光說不練假把式,光練不說傻把式。

我們現在來看一下具體的實驗效果吧。

淺談卷積神經網絡及matlab實現淺談卷積神經網絡及matlab實現

以上是測試MNIST手寫體的實驗,直接輸入圖片,識別率是88.7%,當然不太高,這是參數沒有調好的緣故。

我的卷積神經網絡matlab實現代碼主要來自:https://github.com/rasmusbergpalm/DeepLearnToolbox

5 總結

今天只是簡單介紹了一下卷積神經網絡的知識點,等下一章節,我們在介紹目前為止世界上最先進的卷積神經網絡改進,大家不見不散哦。

相關推薦

推薦中...