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

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

試圖 能夠 多層 深度學習 註意 理解 pap http 相關

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

聲明:

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

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

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

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

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

目錄:

一、概述

二、背景

三、人腦視覺機理

四、關於特征

4.1、特征表示的粒度

4.2、初級(淺層)特征表示

4.3、結構性特征表示

4.4、需要有多少個特征?

五、Deep Learning的基本思想

六、淺層學習(Shallow Learning)和深度學習(Deep Learning)

七、Deep learning與Neural Network

八、Deep learning訓練過程

8.1、傳統神經網絡的訓練方法

8.2、deep learning訓練過程

九、Deep Learning的常用模型或者方法

9.1、AutoEncoder自動編碼器

9.2、Sparse Coding稀疏編碼

9.3、Restricted Boltzmann Machine(RBM)限制波爾茲曼機

9.4、Deep BeliefNetworks深信度網絡

9.5、Convolutional Neural Networks卷積神經網絡

十、總結與展望

十一、參考文獻和Deep Learning學習資源

接上

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特有的。

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

下續

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