很少說,直接上乾貨!php
9、Deep Learning的經常使用模型或者方法html
9.一、AutoEncoder自動編碼器mysql
Deep Learning最簡單的一種方法是利用人工神經網絡的特色,人工神經網絡(ANN)自己就是具備層次結構的系統,若是給定一個神經網絡,咱們假設其輸出與輸入是相同的,而後訓練調整其參數,獲得每一層中的權重。天然地,咱們就獲得了輸入I的幾種不一樣表示(每一層表明一種表示),這些表示就是特徵。自動編碼器就是一種儘量復現輸入信號的神經網絡。爲了實現這種復現,自動編碼器就必須捕捉能夠表明輸入數據的最重要的因素,就像PCA那樣,找到能夠表明原信息的主要成分。算法
具體過程簡單的說明以下:sql
1)給定無標籤數據,用非監督學習學習特徵:數據庫
在咱們以前的神經網絡中,如第一個圖,咱們輸入的樣本是有標籤的,即(input, target),這樣咱們根據當前輸出和target(label)之間的差去改變前面各層的參數,直到收斂。但如今咱們只有無標籤數據,也就是右邊的圖。那麼這個偏差怎麼獲得呢?網絡
如上圖,咱們將input輸入一個encoder編碼器,就會獲得一個code,這個code也就是輸入的一個表示,那麼咱們怎麼知道這個code表示的就是input呢?咱們加一個decoder解碼器,這時候decoder就會輸出一個信息,那麼若是輸出的這個信息和一開始的輸入信號input是很像的(理想狀況下就是同樣的),那很明顯,咱們就有理由相信這個code是靠譜的。因此,咱們就經過調整encoder和decoder的參數,使得重構偏差最小,這時候咱們就獲得了輸入input信號的第一個表示了,也就是編碼code了。由於是無標籤數據,因此偏差的來源就是直接重構後與原輸入相比獲得。數據結構
2)經過編碼器產生特徵,而後訓練下一層。這樣逐層訓練:架構
那上面咱們就獲得第一層的code,咱們的重構偏差最小讓咱們相信這個code就是原輸入信號的良好表達了,或者牽強點說,它和原信號是如出一轍的(表達不同,反映的是一個東西)。那第二層和第一層的訓練方式就沒有差異了,咱們將第一層輸出的code當成第二層的輸入信號,一樣最小化重構偏差,就會獲得第二層的參數,而且獲得第二層輸入的code,也就是原輸入信息的第二個表達了。其餘層就一樣的方法炮製就好了(訓練這一層,前面層的參數都是固定的,而且他們的decoder已經沒用了,都不須要了)。dom
3)有監督微調:
通過上面的方法,咱們就能夠獲得不少層了。至於須要多少層(或者深度須要多少,這個目前自己就沒有一個科學的評價方法)須要本身試驗調了。每一層都會獲得原始輸入的不一樣的表達。固然了,咱們以爲它是越抽象越好了,就像人的視覺系統同樣。
到這裏,這個AutoEncoder還不能用來分類數據,由於它尚未學習如何去連結一個輸入和一個類。它只是學會了如何去重構或者復現它的輸入而已。或者說,它只是學習得到了一個能夠良好表明輸入的特徵,這個特徵能夠最大程度上表明原輸入信號。那麼,爲了實現分類,咱們就能夠在AutoEncoder的最頂的編碼層添加一個分類器(例如羅傑斯特迴歸、SVM等),而後經過標準的多層神經網絡的監督訓練方法(梯度降低法)去訓練。
也就是說,這時候,咱們須要將最後層的特徵code輸入到最後的分類器,經過有標籤樣本,經過監督學習進行微調,這也分兩種,一個是隻調整分類器(黑色部分):
另外一種:經過有標籤樣本,微調整個系統:(若是有足夠多的數據,這個是最好的。end-to-end learning端對端學習)
一旦監督訓練完成,這個網絡就能夠用來分類了。神經網絡的最頂層能夠做爲一個線性分類器,而後咱們能夠用一個更好性能的分類器去取代它。
在研究中能夠發現,若是在原有的特徵中加入這些自動學習獲得的特徵能夠大大提升精確度,甚至在分類問題中比目前最好的分類算法效果還要好!
AutoEncoder存在一些變體,這裏簡要介紹下兩個:
Sparse AutoEncoder稀疏自動編碼器:
固然,咱們還能夠繼續加上一些約束條件獲得新的Deep Learning方法,如:若是在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要爲0,只有少數不爲0,這就是Sparse名字的來源),咱們就能夠獲得Sparse AutoEncoder法。
如上圖,其實就是限制每次獲得的表達code儘可能稀疏。由於稀疏的表達每每比其餘的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經元,其餘的大部分的神經元是受到抑制的)。
Denoising AutoEncoders降噪自動編碼器:
降噪自動編碼器DA是在自動編碼器的基礎上,訓練數據加入噪聲,因此自動編碼器必須學習去去除這種噪聲而得到真正的沒有被噪聲污染過的輸入。所以,這就迫使編碼器去學習輸入信號的更加魯棒的表達,這也是它的泛化能力比通常編碼器強的緣由。DA能夠經過梯度降低算法去訓練。
9.二、Sparse Coding稀疏編碼
若是咱們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是係數,咱們能夠獲得這樣一個優化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
經過求解這個最優化式子,咱們能夠求得係數ai和基Φi,這些係數和基就是輸入的另一種近似表達。
所以,它們能夠用來表達輸入I,這個過程也是自動學習獲得的。若是咱們在上述式子上加上L1的Regularity限制,獲得:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱爲Sparse Coding。通俗的說,就是將一個信號表示爲一組基的線性組合,並且要求只須要較少的幾個基就能夠將信號表示出來。「稀疏性」定義爲:只有不多的幾個非零元素或只有不多的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,咱們只想有儘量少的幾個係數遠大於零。選擇使用具備稀疏性的份量來表示咱們的輸入數據是有緣由的,由於絕大多數的感官數據,好比天然圖像,能夠被表示成少許基本元素的疊加,在圖像中這些基本元素能夠是面或者線。同時,好比與初級視覺皮層的類比過程也所以獲得了提高(人腦有大量的神經元,但對於某些圖像或者邊緣只有不多的神經元興奮,其餘都處於抑制狀態)。
稀疏編碼算法是一種無監督學習方法,它用來尋找一組「超完備」基向量來更高效地表示樣本數據。雖然形如主成分分析技術(PCA)能使咱們方便地找到一組「完備」基向量,可是這裏咱們想要作的是找到一組「超完備」基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入數據內部的結構與模式。然而,對於超完備基來講,係數ai再也不由輸入向量惟一肯定。所以,在稀疏編碼算法中,咱們另加了一個評判標準「稀疏性」來解決因超完備而致使的退化(degeneracy)問題。(詳細過程請參考:UFLDL Tutorial稀疏編碼)
好比在圖像的Feature Extraction的最底層要作Edge Detector的生成,那麼這裏的工做就是從Natural Images中randomly選取一些小patch,經過這些patch生成可以描述他們的「基」,也就是右邊的8*8=64個basis組成的basis,而後給定一個test patch, 咱們能夠按照上面的式子經過basis的線性組合獲得,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱「sparse」。
這裏可能你們會有疑問,爲何把底層做爲Edge Detector呢?上層又是什麼呢?這裏作個簡單解釋你們就會明白,之因此是Edge Detector是由於不一樣方向的Edge就可以描述出整幅圖像,因此不一樣方向的Edge天然就是圖像的basis了……而上一層的basis組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候我們說的那樣)
Sparse coding分爲兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],咱們須要學習獲得一組基[Φ1, Φ2, …],也就是字典。
稀疏編碼是k-means算法的變體,其訓練過程也差很少(EM算法的思想:若是要優化的目標函數包含兩個變量,如L(W, B),那麼咱們能夠先固定W,調整B使得L最小,而後再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法能夠見個人博客:「從最大似然到EM算法淺解」)。
訓練過程就是一個重複迭代的過程,按上面所說,咱們交替的更改a和Φ使得下面這個目標函數最小。
每次迭代分兩步:
a)固定字典Φ[k],而後調整a[k],使得上式,即目標函數最小(即解LASSO問題)。
b)而後固定住a [k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。
不斷迭代,直至收斂。這樣就能夠獲得一組能夠良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面獲得的字典,經過解一個LASSO問題獲得稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
例如:
注:下面的兩個Deep Learning方法說明須要完善,但爲了保證文章的連續性和完整性,先貼一些上來,後面再修改好了。
9.三、Restricted Boltzmann Machine (RBM)限制波爾茲曼機
假設有一個二部圖,每一層的節點之間沒有連接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),若是假設全部的節點都是隨機二值變量節點(只能取0或者1值),同時假設全機率分佈p(v,h)知足Boltzmann 分佈,咱們稱這個模型是Restricted BoltzmannMachine (RBM)。
下面咱們來看看爲何它是Deep Learning方法。首先,這個模型由於是二部圖,因此在已知v的狀況下,全部的隱藏節點之間是條件獨立的(由於節點之間不存在鏈接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隱藏層h的狀況下,全部的可視節點都是條件獨立的。同時又因爲全部的v和h知足Boltzmann 分佈,所以,當輸入v的時候,經過p(h|v) 能夠獲得隱藏層h,而獲得隱藏層h以後,經過p(v|h)又能獲得可視層,經過調整參數,咱們就是要使得從隱藏層獲得的可視層v1與原來的可視層v若是同樣,那麼獲得的隱藏層就是可視層另一種表達,所以隱藏層能夠做爲可視層輸入數據的特徵,因此它就是一種Deep Learning方法。
如何訓練呢?也就是可視層節點和隱節點間的權值怎麼肯定呢?咱們須要作一些數學分析。也就是模型了。
聯合組態(jointconfiguration)的能量能夠表示爲:
而某個組態的聯合機率分佈能夠經過Boltzmann 分佈(和這個組態的能量)來肯定:
由於隱藏節點之間是條件獨立的(由於節點之間不存在鏈接),即:
而後咱們能夠比較容易(對上式進行因子分解Factorizes)獲得在給定可視層v的基礎上,隱層第j個節點爲1或者爲0的機率:
同理,在給定隱層h的基礎上,可視層第i個節點爲1或者爲0的機率也能夠容易獲得:
給定一個知足獨立同分布的樣本集:D={v(1), v(2),…, v(N)},咱們須要學習參數θ={W,a,b}。
咱們最大化如下對數似然函數(最大似然估計:對於某個機率模型,咱們須要選擇一個參數,讓咱們當前的觀測樣本的機率最大):
也就是對最大對數似然函數求導,就能夠獲得L最大時對應的參數W了。
若是,咱們把隱藏層的層數增長,咱們能夠獲得Deep Boltzmann Machine(DBM);若是咱們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,固然這裏依然限制層中節點之間沒有連接),而在最遠離可視層的部分使用Restricted Boltzmann Machine,咱們能夠獲得DeepBelief Net(DBN)。
9.四、Deep Belief Networks深信度網絡
DBNs是一個機率生成模型,與傳統的判別模型的神經網絡相對,生成模型是創建一個觀察數據和標籤之間的聯合分佈,對P(Observation|Label)和 P(Label|Observation)都作了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。對於在深度神經網絡應用傳統的BP算法的時候,DBNs遇到了如下問題:
(1)須要爲訓練提供一個有標籤的樣本集;
(2)學習過程較慢;
(3)不適當的參數選擇會致使學習收斂於局部最優解。
DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網絡類型如圖三所示。這些網絡被「限制」爲一個可視層和一個隱層,層間存在鏈接,但層內的單元間不存在鏈接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
首先,先不考慮最頂構成一個聯想記憶(associative memory)的兩層,一個DBN的鏈接是經過自頂向下的生成權值來指導肯定的,RBMs就像一個建築塊同樣,相比傳統和深度分層的sigmoid信念網絡,它能易於鏈接權值的學習。
最開始的時候,經過一個非監督貪婪逐層方法去預訓練得到生成模型的權值,非監督貪婪逐層方法被Hinton證實是有效的,並被其稱爲對比分歧(contrastive divergence)。
在這個訓練階段,在可視層會產生一個向量v,經過它將值傳遞到隱層。反過來,可視層的輸入會被隨機的選擇,以嘗試去重構原始的輸入信號。最後,這些新的可視的神經元激活單元將前向傳遞重構隱層激活單元,得到h(在訓練過程當中,首先將可視向量值映射給隱單元;而後可視單元由隱層單元重建;這些新可視單元再次映射給隱單元,這樣就獲取新的隱單元。執行這種反覆步驟叫作吉布斯採樣)。這些後退和前進的步驟就是咱們熟悉的Gibbs採樣,而隱層激活單元和可視層輸入之間的相關性差異就做爲權值更新的主要依據。
訓練時間會顯著的減小,由於只須要單個步驟就能夠接近最大似然學習。增長進網絡的每一層都會改進訓練數據的對數機率,咱們能夠理解爲愈來愈接近能量的真實表達。這個有意義的拓展,和無標籤數據的使用,是任何一個深度學習應用的決定性的因素。
在最高兩層,權值被鏈接到一塊兒,這樣更低層的輸出將會提供一個參考的線索或者關聯給頂層,這樣頂層就會將其聯繫到它的記憶內容。而咱們最關心的,最後想獲得的就是判別性能,例如分類任務裏面。
在預訓練後,DBN能夠經過利用帶標籤數據用BP算法去對判別性能作調整。在這裏,一個標籤集將被附加到頂層(推廣聯想記憶),經過一個自下向上的,學習到的識別權值得到一個網絡的分類面。這個性能會比單純的BP算法訓練的網絡好。這能夠很直觀的解釋,DBNs的BP算法只須要對權值參數空間進行一個局部的搜索,這相比前向神經網絡來講,訓練是要快的,並且收斂的時間也少。
DBNs的靈活性使得它的拓展比較容易。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs並無考慮到圖像的2維結構信息,由於輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域像素的空域關係,經過一個稱爲卷積RBMs的模型區達到生成模型的變換不變性,並且能夠容易得變換到高維圖像。DBNs並無明確地處理對觀察變量的時間聯繫的學習上,雖然目前已經有這方面的研究,例如堆疊時間RBMs,以此爲推廣,有序列學習的dubbed temporal convolutionmachines,這種序列學習的應用,給語音信號處理問題帶來了一個讓人激動的將來研究方向。
目前,和DBNs有關的研究包括堆疊自動編碼器,它是經過用堆疊自動編碼器來替換傳統DBNs裏面的RBMs。這就使得能夠經過一樣的規則來訓練產生深度多層神經網絡架構,但它缺乏層的參數化的嚴格要求。與DBNs不一樣,自動編碼器使用判別模型,這樣這個結構就很難採樣輸入採樣空間,這就使得網絡更難捕捉它的內部表達。可是,降噪自動編碼器卻能很好的避免這個問題,而且比傳統的DBNs更優。它經過在訓練過程添加隨機的污染並堆疊產生場泛化性能。訓練單一的降噪自動編碼器的過程和RBMs訓練生成模型的過程同樣。
9.五、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特有的。
呵呵,這部分講得太囉嗦了,又沒講到點上。沒辦法了,先這樣的,這樣這個過程我尚未走過,因此本身水平有限啊,望各位明察。須要後面再改了,呵呵。
參考
http://blog.csdn.net/zouxy09/article/details/8775524(感謝,我此博客轉載於他,爲了方便本身查閱)
http://blog.csdn.net/zouxy09/article/details/8777094
http://blog.csdn.net/zouxy09/article/details/8781396
http://blog.csdn.net/zouxy09/article/details/8781543