1. 程式人生 > >Deep Learning(深度學習)學習筆記整理系列之(七)

Deep Learning(深度學習)學習筆記整理系列之(七)

Deep Learning(深度學習)學習筆記整理系列

作者:Zouxy

version 1.0 2013-04-08

宣告:

1)該Deep Learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。

2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系博主刪除。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要機器學習、計算機視覺、神經網路等等基礎(如果沒有也沒關係了,沒有就看看,能不能看懂,呵呵)。

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。大家都共享一點點,一起為祖國科研的推進添磚加瓦(呵呵,好高尚的目標啊)。請聯絡:

[email protected]

目錄:

一、概述

二、背景

接上

9.5、Convolutional Neural Networks卷積神經網路

       卷積神經網路是人工神經網路的一種,已成為當前語音分析和影象識別領域的研究熱點。它的權值共享網路結構使之更類似於生物神經網路,降低了網路模型的複雜度,減少了權值的數量。該優點在網路的輸入是多維影象時表現的更為明顯,使影象可以直接作為網路的輸入,避免了傳統識別演算法中複雜的特徵提取和資料重建過程。卷積網路是為識別二維形狀而特殊設計的一個多層感知器,這種網路結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。

       CNNs是受早期的延時神經網路(TDNN)的影響。延時神經網路通過在時間維度上共享權值降低學習複雜度,適用於語音和時間序列訊號的處理。

       CNNs是第一個真正成功訓練多層網路結構的學習演算法。它利用空間關係減少需要學習的引數數目以提高一般前向BP演算法的訓練效能。CNNs作為一個深度學習架構提出是為了最小化資料的預處理要求。在CNN中,影象的一小部分(區域性感受區域)作為層級結構的最低層的輸入,資訊再依次傳輸到不同的層,每層通過一個數字濾波器去獲得觀測資料的最顯著的特徵。這個方法能夠獲取對平移、縮放和旋轉不變的觀測資料的顯著特徵,因為影象的區域性感受區域允許神經元或者處理單元可以訪問到最基礎的特徵,例如定向邊緣或者角點。

1)卷積神經網路的歷史

       1962年Hubel和Wiesel通過對貓視覺皮層細胞的研究,提出了感受野(receptive field)的概念,1984年日本學者Fukushima基於感受野概念提出的神經認知機(neocognitron)可以看作是卷積神經網路的第一個實現網路,也是感受野概念在人工神經網路領域的首次應用。神經認知機將一個視覺模式分解成許多子模式(特徵),然後進入分層遞階式相連的特徵平面進行處理,它試圖將視覺系統模型化,使其能夠在即使物體有位移或輕微變形的時候,也能完成識別。

       通常神經認知機包含兩類神經元,即承擔特徵抽取的S-元和抗變形的C-元。S-元中涉及兩個重要引數,即感受野與閾值引數,前者確定輸入連線的數目,後者則控制對特徵子模式的反應程度。許多學者一直致力於提高神經認知機的效能的研究:在傳統的神經認知機中,每個S-元的感光區中由C-元帶來的視覺模糊量呈正態分佈。如果感光區的邊緣所產生的模糊效果要比中央來得大,S-元將會接受這種非正態模糊所導致的更大的變形容忍性。我們希望得到的是,訓練模式與變形刺激模式在感受野的邊緣與其中心所產生的效果之間的差異變得越來越大。為了有效地形成這種非正態模糊,Fukushima提出了帶雙C-元層的改進型神經認知機。

       Van Ooyen和Niehuis為提高神經認知機的區別能力引入了一個新的引數。事實上,該引數作為一種抑制訊號,抑制了神經元對重複激勵特徵的激勵。多數神經網路在權值中記憶訓練資訊。根據Hebb學習規則,某種特徵訓練的次數越多,在以後的識別過程中就越容易被檢測。也有學者將進化計算理論與神經認知機結合,通過減弱對重複性激勵特徵的訓練學習,而使得網路注意那些不同的特徵以助於提高區分能力。上述都是神經認知機的發展過程,而卷積神經網路可看作是神經認知機的推廣形式,神經認知機是卷積神經網路的一種特例。

2)卷積神經網路的網路結構

      卷積神經網路是一個多層的神經網路,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。

       圖:卷積神經網路的概念示範:輸入影象通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖一,卷積後在C1層產生三個特徵對映圖,然後特徵對映圖中每組的四個畫素再進行求和,加權值,加偏置,通過一個Sigmoid函式得到三個S2層的特徵對映圖。這些對映圖再進過濾波得到C3層。這個層級結構再和S2一樣產生S4。最終,這些畫素值被光柵化,並連線成一個向量輸入到傳統的神經網路,得到輸出。

       一般地,C層為特徵提取層,每個神經元的輸入與前一層的區域性感受野相連,並提取該區域性的特徵,一旦該區域性特徵被提取後,它與其他特徵間的位置關係也隨之確定下來;S層是特徵對映層,網路的每個計算層由多個特徵對映組成,每個特徵對映為一個平面,平面上所有神經元的權值相等。特徵對映結構採用影響函式核小的sigmoid函式作為卷積網路的啟用函式,使得特徵對映具有位移不變性。

       此外,由於一個對映面上的神經元共享權值,因而減少了網路自由引數的個數,降低了網路引數選擇的複雜度。卷積神經網路中的每一個特徵提取層(C-層)都緊跟著一個用來求區域性平均與二次提取的計算層(S-層),這種特有的兩次特徵提取結構使網路在識別時對輸入樣本有較高的畸變容忍能力。

3)關於引數減少與權值共享

      上面聊到,好像CNN一個牛逼的地方就在於通過感受野和權值共享減少了神經網路需要訓練的引數的個數。那究竟是啥的呢?

       下圖左:如果我們有1000x1000畫素的影象,有1百萬個隱層神經元,那麼他們全連線的話(每個隱層神經元都連線影象的每一個畫素點),就有1000x1000x1000000=10^12個連線,也就是10^12個權值引數。然而影象的空間聯絡是區域性的,就像人是通過一個區域性的感受野去感受外界影象一樣,每一個神經元都不需要對全域性影象做感受,每個神經元只感受區域性的影象區域,然後在更高層,將這些感受不同區域性的神經元綜合起來就可以得到全域性的資訊了。這樣,我們就可以減少連線的數目,也就是減少神經網路需要訓練的權值引數的個數了。如下圖右:假如區域性感受野是10x10,隱層每個感受野只需要和這10x10的區域性影象相連線,所以1百萬個隱層神經元就只有一億個連線,即10^8個引數。比原來減少了四個0(數量級),這樣訓練起來就沒那麼費力了,但還是感覺很多的啊,那還有啥辦法沒?

 

       我們知道,隱含層的每一個神經元都連線10x10個影象區域,也就是說每一個神經元存在10x10=100個連線權值引數。那如果我們每個神經元這100個引數是相同的呢?也就是說每個神經元用的是同一個卷積核去卷積影象。這樣我們就只有多少個引數??只有100個引數啊!!!親!不管你隱層的神經元個數有多少,兩層間的連線我只有100個引數啊!親!這就是權值共享啊!親!這就是卷積神經網路的主打賣點啊!親!(有點煩了,呵呵)也許你會問,這樣做靠譜嗎?為什麼可行呢?這個……共同學習。

       好了,你就會想,這樣提取特徵也忒不靠譜吧,這樣你只提取了一種特徵啊?對了,真聰明,我們需要提取多種特徵對不?假如一種濾波器,也就是一種卷積核就是提出影象的一種特徵,例如某個方向的邊緣。那麼我們需要提取不同的特徵,怎麼辦,加多幾種濾波器不就行了嗎?對了。所以假設我們加到100種濾波器,每種濾波器的引數不一樣,表示它提出輸入影象的不同特徵,例如不同的邊緣。這樣每種濾波器去卷積影象就得到對影象的不同特徵的放映,我們稱之為Feature Map。所以100種卷積核就有100個Feature Map。這100個Feature Map就組成了一層神經元。到這個時候明瞭了吧。我們這一層有多少個引數了?100種卷積核x每種卷積核共享100個引數=100x100=10K,也就是1萬個引數。才1萬個引數啊!親!(又來了,受不了了!)見下圖右:不同的顏色表達不同的濾波器。

 

       嘿喲,遺漏一個問題了。剛才說隱層的引數個數和隱層的神經元個數無關,只和濾波器的大小和濾波器種類的多少有關。那麼隱層的神經元個數怎麼確定呢?它和原影象,也就是輸入的大小(神經元個數)、濾波器的大小和濾波器在影象中的滑動步長都有關!例如,我的影象是1000x1000畫素,而濾波器大小是10x10,假設濾波器沒有重疊,也就是步長為10,這樣隱層的神經元個數就是(1000x1000 )/ (10x10)=100x100個神經元了,假設步長是8,也就是卷積核會重疊兩個畫素,那麼……我就不算了,思想懂了就好。注意了,這只是一種濾波器,也就是一個Feature Map的神經元個數哦,如果100個Feature Map就是100倍了。由此可見,影象越大,神經元個數和需要訓練的權值引數個數的貧富差距就越大。

 

      需要注意的一點是,上面的討論都沒有考慮每個神經元的偏置部分。所以權值個數需要加1 。這個也是同一種濾波器共享的。

      總之,卷積網路的核心思想是將:區域性感受野、權值共享(或者權值複製)以及時間或空間亞取樣這三種結構思想結合起來獲得了某種程度的位移、尺度、形變不變性。

4)一個典型的例子說明

       一種典型的用來識別數字的卷積網路是LeNet-5(效果和paper等見這)。當年美國大多數銀行就是用它來識別支票上面的手寫數字的。能夠達到這種商用的地步,它的準確性可想而知。畢竟目前學術界和工業界的結合是最受爭議的。

      那下面咱們也用這個例子來說明下。

        LeNet-5共有7層,不包含輸入,每層都包含可訓練引數(連線權重)。輸入影象為32*32大小。這要比Mnist資料庫(一個公認的手寫資料庫)中最大的字母還大。這樣做的原因是希望潛在的明顯特徵如筆畫斷電或角點能夠出現在最高層特徵監測子感受野的中心。

        我們先要明確一點:每個層有多個Feature Map,每個Feature Map通過一種卷積濾波器提取輸入的一種特徵,然後每個Feature Map有多個神經元。

        C1層是一個卷積層(為什麼是卷積?卷積運算一個重要的特點就是,通過卷積運算,可以使原訊號特徵增強,並且降低噪音),由6個特徵圖Feature Map構成。特徵圖中每個神經元與輸入中5*5的鄰域相連。特徵圖的大小為28*28,這樣能防止輸入的連線掉到邊界之外(是為了BP反饋時的計算,不致梯度損失,個人見解)。C1有156個可訓練引數(每個濾波器5*5=25個unit引數和一個bias引數,一共6個濾波器,共(5*5+1)*6=156個引數),共156*(28*28)=122,304個連線。

       S2層是一個下采樣層(為什麼是下采樣?利用影象區域性相關性的原理,對影象進行子抽樣,可以減少資料處理量同時保留有用資訊),有6個14*14的特徵圖。特徵圖中的每個單元與C1中相對應特徵圖的2*2鄰域相連線。S2層每個單元的4個輸入相加,乘以一個可訓練引數,再加上一個可訓練偏置。結果通過sigmoid函式計算。可訓練係數和偏置控制著sigmoid函式的非線性程度。如果係數比較小,那麼運算近似於線性運算,亞取樣相當於模糊影象。如果係數比較大,根據偏置的大小亞取樣可以被看成是有噪聲的“或”運算或者有噪聲的“與”運算。每個單元的2*2感受野並不重疊,因此S2中每個特徵圖的大小是C1中特徵圖大小的1/4(行和列各1/2)。S2層有12個可訓練引數和5880個連線。

圖:卷積和子取樣過程:卷積過程包括:用一個可訓練的濾波器fx去卷積一個輸入的影象(第一階段是輸入的影象,後面的階段就是卷積特徵map了),然後加一個偏置bx,得到卷積層Cx。子取樣過程包括:每鄰域四個畫素求和變為一個畫素,然後通過標量Wx+1加權,再增加偏置bx+1,然後通過一個sigmoid啟用函式,產生一個大概縮小四倍的特徵對映圖Sx+1

       所以從一個平面到下一個平面的對映可以看作是作卷積運算,S-層可看作是模糊濾波器,起到二次特徵提取的作用。隱層與隱層之間空間解析度遞減,而每層所含的平面數遞增,這樣可用於檢測更多的特徵資訊。

       C3層也是一個卷積層,它同樣通過5x5的卷積核去卷積層S2,然後得到的特徵map就只有10x10個神經元,但是它有16種不同的卷積核,所以就存在16個特徵map了。這裡需要注意的一點是:C3中的每個特徵map是連線到S2中的所有6個或者幾個特徵map的,表示本層的特徵map是上一層提取到的特徵map的不同組合(這個做法也並不是唯一的)。(看到沒有,這裡是組合,就像之前聊到的人的視覺系統一樣,底層的結構構成上層更抽象的結構,例如邊緣構成形狀或者目標的部分)。

       剛才說C3中每個特徵圖由S2中所有6個或者幾個特徵map組合而成。為什麼不把S2中的每個特徵圖連線到每個C3的特徵圖呢?原因有2點。第一,不完全的連線機制將連線的數量保持在合理的範圍內。第二,也是最重要的,其破壞了網路的對稱性。由於不同的特徵圖有不同的輸入,所以迫使他們抽取不同的特徵(希望是互補的)。

      例如,存在的一個方式是:C3的前6個特徵圖以S2中3個相鄰的特徵圖子集為輸入。接下來6個特徵圖以S2中4個相鄰特徵圖子集為輸入。然後的3個以不相鄰的4個特徵圖子集為輸入。最後一個將S2中所有特徵圖為輸入。這樣C3層有1516個可訓練引數和151600個連線。

       S4層是一個下采樣層,由16個5*5大小的特徵圖構成。特徵圖中的每個單元與C3中相應特徵圖的2*2鄰域相連線,跟C1和S2之間的連線一樣。S4層有32個可訓練引數(每個特徵圖1個因子和一個偏置)和2000個連線。

       C5層是一個卷積層,有120個特徵圖。每個單元與S4層的全部16個單元的5*5鄰域相連。由於S4層特徵圖的大小也為5*5(同濾波器一樣),故C5特徵圖的大小為1*1:這構成了S4和C5之間的全連線。之所以仍將C5標示為卷積層而非全相聯層,是因為如果LeNet-5的輸入變大,而其他的保持不變,那麼此時特徵圖的維數就會比1*1大。C5層有48120個可訓練連線。

        F6層有84個單元(之所以選這個數字的原因來自於輸出層的設計),與C5層全相連。有10164個可訓練引數。如同經典神經網路,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。然後將其傳遞給sigmoid函式產生單元i的一個狀態。

      最後,輸出層由歐式徑向基函式(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。換句話說,每個輸出RBF單元計算輸入向量和引數向量之間的歐式距離。輸入離引數向量越遠,RBF輸出的越大。一個RBF輸出可以被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。用概率術語來說,RBF輸出可以被理解為F6層配置空間的高斯分佈的負log-likelihood。給定一個輸入模式,損失函式應能使得F6的配置與RBF引數向量(即模式的期望分類)足夠接近。這些單元的引數是人工選取並保持固定的(至少初始時候如此)。這些引數向量的成分被設為-1或1。雖然這些引數可以以-1和1等概率的方式任選,或者構成一個糾錯碼,但是被設計成一個相應字元類的7*12大小(即84)的格式化圖片。這種表示對識別單獨的數字不是很有用,但是對識別可列印ASCII集中的字串很有用。

      使用這種分佈編碼而非更常用的“1 of N”編碼用於產生輸出的另一個原因是,當類別比較大的時候,非分佈編碼的效果比較差。原因是大多數時間非分佈編碼的輸出必須為0。這使得用sigmoid單元很難實現。另一個原因是分類器不僅用於識別字母,也用於拒絕非字母。使用分佈編碼的RBF更適合該目標。因為與sigmoid不同,他們在輸入空間的較好限制的區域內興奮,而非典型模式更容易落到外邊。

        RBF引數向量起著F6層目標向量的角色。需要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的範圍內,因此可以防止sigmoid函式飽和。實際上,+1和-1是sigmoid函式的最大彎曲的點處。這使得F6單元執行在最大非線性範圍內。必須避免sigmoid函式的飽和,因為這將會導致損失函式較慢的收斂和病態問題。

5)訓練過程

        神經網路用於模式識別的主流是有指導學習網路,無指導學習網路更多的是用於聚類分析。對於有指導的模式識別,由於任一樣本的類別是已知的,樣本在空間的分佈不再是依據其自然分佈傾向來劃分,而是要根據同類樣本在空間的分佈及不同類樣本之間的分離程度找一種適當的空間劃分方法,或者找到一個分類邊界,使得不同類樣本分別位於不同的區域內。這就需要一個長時間且複雜的學習過程,不斷調整用以劃分樣本空間的分類邊界的位置,使盡可能少的樣本被劃分到非同類區域中。

       卷積網路在本質上是一種輸入到輸出的對映,它能夠學習大量的輸入與輸出之間的對映關係,而不需要任何輸入和輸出之間的精確的數學表示式,只要用已知的模式對卷積網路加以訓練,網路就具有輸入輸出對之間的對映能力。卷積網路執行的是有導師訓練,所以其樣本集是由形如:(輸入向量,理想輸出向量)的向量對構成的。所有這些向量對,都應該是來源於網路即將模擬的系統的實際“執行”結果。它們可以是從實際執行系統中採集來的。在開始訓練前,所有的權都應該用一些不同的小隨機數進行初始化。“小隨機數”用來保證網路不會因權值過大而進入飽和狀態,從而導致訓練失敗;“不同”用來保證網路可以正常地學習。實際上,如果用相同的數去初始化權矩陣,則網路無能力學習。

       訓練演算法與傳統的BP演算法差不多。主要包括4步,這4步被分為兩個階段:

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

a)從樣本集中取一個樣本(X,Yp),將X輸入網路;

b)計算相應的實際輸出Op

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

          Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n)

第二階段,向後傳播階段

a)算實際輸出Op與相應的理想輸出Yp的差;

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

6)卷積神經網路的優點

        卷積神經網路CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。由於CNN的特徵檢測層通過訓練資料進行學習,所以在使用CNN時,避免了顯式的特徵抽取,而隱式地從訓練資料中進行學習;再者由於同一特徵對映面上的神經元權值相同,所以網路可以並行學習,這也是卷積網路相對於神經元彼此相連網路的一大優勢。卷積神經網路以其區域性權值共享的特殊結構在語音識別和影象處理方面有著獨特的優越性,其佈局更接近於實際的生物神經網路,權值共享降低了網路的複雜性,特別是多維輸入向量的影象可以直接輸入網路這一特點避免了特徵提取和分類過程中資料重建的複雜度。

        流的分類方式幾乎都是基於統計特徵的,這就意味著在進行分辨前必須提取某些特徵。然而,顯式的特徵提取並不容易,在一些應用問題中也並非總是可靠的。卷積神經網路,它避免了顯式的特徵取樣,隱式地從訓練資料中進行學習。這使得卷積神經網路明顯有別於其他基於神經網路的分類器,通過結構重組和減少權值將特徵提取功能融合進多層感知器。它可以直接處理灰度圖片,能夠直接用於處理基於影象的分類。

       卷積網路較一般神經網路在影象處理方面有如下優點: a)輸入影象和網路的拓撲結構能很好的吻合;b)特徵提取和模式分類同時進行,並同時在訓練中產生;c)權重共享可以減少網路的訓練引數,使神經網路結構變得更簡單,適應性更強。

7)小結

       CNNs中這種層間聯絡和空域資訊的緊密關係,使其適於影象處理和理解。而且,其在自動提取影象的顯著特徵方面還表現出了比較優的效能。在一些例子當中,Gabor濾波器已經被使用在一個初始化預處理的步驟中,以達到模擬人類視覺系統對視覺刺激的響應。在目前大部分的工作中,研究者將CNNs應用到了多種機器學習問題中,包括人臉識別,文件分析和語言檢測等。為了達到尋找視訊中幀與幀之間的相干性的目的,目前CNNs通過一個時間相干性去訓練,但這個不是CNNs特有的。

        呵呵,這部分講得太囉嗦了,又沒講到點上。沒辦法了,先這樣的,這樣這個過程我還沒有走過,所以自己水平有限啊,望各位明察。需要後面再改了,呵呵。

下續