A. 深度卷積網路
LeNet網路的結構如下圖所示,可以看出,LeNet網路並沒有使用padding,每進行一次卷積,圖像的高度和寬度都會縮小,而通道數會一直增加。在全連接層中有400個節點,每個極點都有120個神經元,有時還會從這400個節點抽取一部分節點構建一個全連接層,即有兩個全連接層。在該網路中,最後一步就是利用84個特徵得到最後的輸出,該網路剛開始使用的是 sigmoid 函數 tanh 函數,而現在常常傾向於使用 softmax 函數。需要注意的是,LeNet-5網路進行圖像分類時,輸入的圖像是單通道的灰度圖像。
AlexNet是以論文第一作者的名字命名的,該網路的結構,如下圖所示,該網路的輸出層使用了 softmax 函數。AlexNet網路比LeNet網路規模更大,大約有6000萬個參數,用於訓練圖像和數據集時,能夠處理非常相似的基本構造模塊,這些模塊中包含著大量的隱藏單元,並且與LeNet網路不同的是,該網路使用了ReLu的激活函數。
VGG-16網路沒有太多的超參數,這是一種專注於構建卷積層的簡單網路。如下圖所示,該網路首先利用64個過濾器進行了兩次卷積,接著在池化層將輸入圖像壓縮,接著又是128個過濾器進行兩次卷積,接著載池化。繼續用256個過濾器進行3次卷積,再池化,接著再利用512個過濾器卷積3次,再池化,將稍後得到的特徵圖進行全連接操作,再進 softmax 激活。
由於存在梯度消失和梯度爆炸的原因,深層次的神經網路是很難訓練的,如果採用一種跳躍連接的方式,即從某一層網路層獲取激活,然後迅速反饋給另外一層,甚至是神經網路的更深層。這種利用跳躍連接構建的深度神經網路ResNets,深度能夠超過100層
一個簡單的兩層神經網路示例,如下圖所示:
常規的輸出和輸出之間的關系可以用如下的公式表示:
如上公式所述,這是一條神經網路的主路徑。如果將 的輸入直接到深層的激活函數之前,此時,神經網路有了一條副路徑,其對應輸出將有公式(5)變成如下所示的公式(6)
此時的輸入除了原先的輸入 外,多了一個 項,即由於 產生了一個殘差塊。
構建一個ResNet網路就是將很多這樣的殘差塊堆積在一起,形成一個深度神經網路,如下所示:
使用傳統的標准優化演算法訓練一個網路,隨著網路深度的增加,訓練誤差會先減小再增加,隨著網路層數的增加,優化演算法會越難以訓練,訓練誤差也會越來越多。但是,使用ResNet網路,能夠有效地避免這種情況。
如上所述,加入殘差網路之後,其輸出計算公式如公式(6)所示,展開這個公式,則有:
如果使用L2正則化或者權重衰減,則會壓縮權重參數 的值,如果參數 和參數 等於0,其輸出將由公式(7)變成 ,假定使用ReLU激活函數,則有:
由於殘差網路存在的這種跳躍連接,很容易得出以上等式,這意味著,即使給神經網路增加兩層,但是其效率並不遜色與更簡單的神經網路。並且由於存在以上恆等式,使得網路學習隱藏層的單元的信息更加容易。而普通網路,隨著網路層數的增加,學習參數會變得很困難。
此外,關於殘差網路,如公式(6)所示,假設 與 具有相同的維度,由於ResNets使用了許多same卷積, 的維度等於輸出層的維度。如果輸入和輸出具有不同的維度,可以再增加一個矩陣 ,使得 和 具有相同的維度。而 的維度可以通過0值填充調節。
在卷積網路的架構設計中,一種有趣的想法是會使用到1×1的過濾矩陣,實際上,對於單通道的圖像而言,1×1的過濾矩陣,意義不大,但是,對於多通道的圖像而言,1×1的過濾矩陣能夠有效減少圖像卷積之後的通道數量。
根據卷積和池化的基本知識,隨著神經網路層數的增加,圖像的通道數量會逐漸增加,採用1×1的過濾矩陣卷積之後,可以有效減少圖像的通道數量,一個簡單的示例,如下所示:
假設有一個6×6×32的圖片,使用1×1×32的過濾矩陣進行卷積運算,整個運算過程將會遍歷36個單元格,並計算過濾矩陣所覆蓋區域的元素積之和,將其應用到ReLu非線性函數,會得到一個輸出值。此計算過程中,可能會用到多個1×1×32的過濾器,那麼,通過以上計算會得到一個 6×6×過濾器數量 的矩陣。
構建卷積神經網路時,有時會很難決定過濾器的大小,而Inception網路的引入,卻能很好的解決這個問題。
Inception網路的作用就是代替人工確定選擇卷積層的過濾器類型。如下圖所示,對於一個多通道圖像,可以使用不同的過濾矩陣或者池化層,得到不同的輸出,將這些輸出堆積起來。
有了如上圖所示的Inception塊,最終輸出為32+32+64+128=256,而Inception模塊的輸入為28×28×192,其整個計算成本,以5×5的過濾矩陣為例,其乘法的計算次數為:28×28×32×5×5×192,整個計算次數超過了1.2億次。而如果使用如下所示的優化計算方法,則可以有效減少計算量。
如果利用1×1的過濾器,將輸入矩陣的通道減少至16,則可以有效減少計算量,如下所示:
如上圖所示的價格中,整個網路的運算次數為:28×28×192×16+28×28×32×5×5×16=1240萬,整個計算成本降低至原來的十分之一。而,通過1×1×192過濾器卷積得到的這個網路層被稱之為瓶頸層。
如上,所示,可以給每一個非1×1的卷積層之前,加入一個1×1的瓶頸層,就可以構建一個基本的inception模塊了,如下圖所示:
而一個inception網路就是多個Inception模塊連接起來,如下圖所示:
事實上,以上網路中,還存在一些分支,如編號1所示,這些分支就是全連接層,而全連接層之後就是一個softmax層用於預測。又如分支2所示,包含一些隱藏層(編號3),通過全連接層和softmax進行預測。這些分支結構能夠確保,即使是隱藏層和中間層也參與了特徵計算,並且也能夠預測圖片的分類。這種做法能夠有效避免網路過擬合。
對於計算機視覺領域而言,神經網路的訓練可能需要大量的數據,但是當數據量有限時,可以通過數據增強來實現數據量的擴充,以提高系統的魯棒性,具體的數據增強方法如下所示:
除了以上三種數據增強的方法外,更多的數據增強方法和實現可以參考 圖像數據增強
數據增強可以利用計算機多線程實現,一個線程用來實現載入數據,實現數據增強,其他線程可以訓練這些數據以加快整體的運算速度。
B. 神經網路的來源
神經網路技術起源於上世紀五、六十年代,當時叫 感知機 (perceptron),包含有輸入層、輸出層和一個隱藏層。輸入的特徵向量通過隱藏層變換到達輸出層,由輸出層得到分類結果。但早期的單層感知機存在一個嚴重的問題——它對稍微復雜一些的函數都無能為力(如異或操作)。直到上世紀八十年代才被Hition、Rumelhart等人發明的多層感知機克服,就是具有多層隱藏層的感知機。
多層感知機可以擺脫早期離散傳輸函數的束縛,使用sigmoid或tanh等連續函數模擬神經元對激勵的響應,在訓練演算法上則使用Werbos發明的反向傳播BP演算法。這就是現在所說的神經網路NN。
神經網路的層數直接決定了它對現實的刻畫能力 ——利用每層更少的神經元擬合更加復雜的函源脊戚數。但問題出現了——隨著神經網路層數的加深, 優化函數越來越容易陷入局部最優解 ,並且這個「陷阱」越來越偏離真正的全局最優。利用有限數據訓練的深層網路,性能還不如較淺層網路。同時,另一個不可忽略的問題是隨著網路層數增加, 「梯度消失」現象更加嚴重 。(具體來說,我們常常使用sigmoid作為神經元的輸入輸出函數。對於幅度為1的信號,在BP反向傳播梯度時,每傳遞一層,梯度衰減為原來的0.25。層數一多,梯度指數衰減後低層基本上接受不到有效的訓練野攔信號。)
2006年,Hition提出了深度學習的概念,引發了深度學習的熱潮。具體是利用預訓練的方式緩解了局部最優解的問題,將隱藏層增加到了7層,實現了真正意義上的「深度」。
DNN形成
為了克服梯度消失,ReLU、maxout等傳輸函數代替了sigmoid,形成了如今DNN的基本形式。結構跟多層感知機一樣,如下圖所示:
我們看到 全連接DNN的結構里下層神經元和所有上層神經元都能夠形成連接,從而導致參數數量膨脹 。假設輸入的是一幅像素為1K*1K的圖像,隱含層有1M個節點,光這一層就有10^12個權重需要訓練,這不僅容易過擬合,而且極容易陷入局部最優。
CNN形成
由於圖像中存在固有的局部模式(如人臉中的眼睛、鼻子、嘴巴等),所以將圖像處理和神將網路結合引出卷積神經網路CNN。CNN是通過卷積核將上下層進行鏈接,同一個卷積核在所有圖像中是共享的,圖像通過卷積操作後仍然保留原先的位置關系。
通過一個例子簡單說明卷積神經網路的結構。假設我們需雹陵要識別一幅彩色圖像,這幅圖像具有四個通道ARGB(透明度和紅綠藍,對應了四幅相同大小的圖像),假設卷積核大小為100*100,共使用100個卷積核w1到w100(從直覺來看,每個卷積核應該學習到不同的結構特徵)。
用w1在ARGB圖像上進行卷積操作,可以得到隱含層的第一幅圖像;這幅隱含層圖像左上角第一個像素是四幅輸入圖像左上角100*100區域內像素的加權求和,以此類推。
同理,算上其他卷積核,隱含層對應100幅「圖像」。每幅圖像對是對原始圖像中不同特徵的響應。按照這樣的結構繼續傳遞下去。CNN中還有max-pooling等操作進一步提高魯棒性。
注意到最後一層實際上是一個全連接層,在這個例子里,我們注意到輸入層到隱藏層的參數瞬間降低到了100*100*100=10^6個!這使得我們能夠用已有的訓練數據得到良好的模型。題主所說的適用於圖像識別,正是由於CNN模型限制參數了個數並挖掘了局部結構的這個特點。順著同樣的思路,利用語音語譜結構中的局部信息,CNN照樣能應用在語音識別中。
RNN形成
DNN無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。為了適應這種需求,就出現了大家所說的另一種神經網路結構——循環神經網路RNN。
在普通的全連接網路或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網路(Feed-forward Neural Networks)。而在RNN中,神經元的輸出可以在下一個時間段直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!表示成圖就是這樣的:
為方便分析,按照時間段展開如下圖所示:
(t+1)時刻網路的最終結果O(t+1)是該時刻輸入和所有歷史共同作用的結果!這就達到了對時間序列建模的目的。RNN可以看成一個在時間上傳遞的神經網路,它的深度是時間的長度!正如我們上面所說,「梯度消失」現象又要出現了,只不過這次發生在時間軸上。
所以RNN存在無法解決長時依賴的問題。為解決上述問題,提出了LSTM(長短時記憶單元),通過cell門開關實現時間上的記憶功能,並防止梯度消失,LSTM單元結構如下圖所示:
除了DNN、CNN、RNN、ResNet(深度殘差)、LSTM之外,還有很多其他結構的神經網路。如因為在序列信號分析中,如果我能預知未來,對識別一定也是有所幫助的。因此就有了雙向RNN、雙向LSTM,同時利用歷史和未來的信息。
事實上,不論是哪種網路,他們在實際應用中常常都混合著使用,比如CNN和RNN在上層輸出之前往往會接上全連接層,很難說某個網路到底屬於哪個類別。不難想像隨著深度學習熱度的延續,更靈活的組合方式、更多的網路結構將被發展出來。
參考鏈接:https://www.leiphone.com/news/201702/ZwcjmiJ45aW27ULB.html
C. 全連接神經網路參數個數怎麼計算
對n-1層和n層而言
n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。
全連接是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小
D. 神經網路參數如何確定
神經網路各個網路參數設定原則:
①、網路節點 網路輸入層神經元節點數就是系統的特徵因子(自變數)個數,輸出層神經元節點數就是系統目標個數。隱層節點選按經驗選取,一般設為輸入層節點數的75%。如果輸入層有7個節點,輸出層1個節點,那麼隱含層可暫設為5個節點,即構成一個7-5-1 BP神經網路模型。在系統訓練時,實際還要對不同的隱層節點數4、5、6個分別進行比較,最後確定出最合理的網路結構。
②、初始權值的確定 初始權值是不應完全相等的一組值。已經證明,即便確定 存在一組互不相等的使系統誤差更小的權值,如果所設Wji的的初始值彼此相等,它們將在學習過程中始終保持相等。故而,在程序中,我們設計了一個隨機發生器程序,產生一組一0.5~+0.5的隨機數,作為網路的初始權值。
③、最小訓練速率 在經典的BP演算法中,訓練速率是由經驗確定,訓練速率越大,權重變化越大,收斂越快;但訓練速率過大,會引起系統的振盪,因此,訓練速率在不導致振盪前提下,越大越好。因此,在DPS中,訓練速率會自動調整,並盡可能取大一些的值,但用戶可規定一個最小訓練速率。該值一般取0.9。
④、動態參數 動態系數的選擇也是經驗性的,一般取0.6 ~0.8。
⑤、允許誤差 一般取0.001~0.00001,當2次迭代結果的誤差小於該值時,系統結束迭代計算,給出結果。
⑥、迭代次數 一般取1000次。由於神經網路計算並不能保證在各種參數配置下迭代結果收斂,當迭代結果不收斂時,允許最大的迭代次數。
⑦、Sigmoid參數 該參數調整神經元激勵函數形式,一般取0.9~1.0之間。
⑧、數據轉換。在DPS系統中,允許對輸入層各個節點的數據進行轉換,提供轉換的方法有取對數、平方根轉換和數據標准化轉換。
(4)全連接網路的隱層節點個數擴展閱讀:
神經網路的研究內容相當廣泛,反映了多學科交叉技術領域的特點。主要的研究工作集中在以下幾個方面:
1.生物原型
從生理學、心理學、解剖學、腦科學、病理學等方面研究神經細胞、神經網路、神經系統的生物原型結構及其功能機理。
2.建立模型
根據生物原型的研究,建立神經元、神經網路的理論模型。其中包括概念模型、知識模型、物理化學模型、數學模型等。
3.演算法
在理論模型研究的基礎上構作具體的神經網路模型,以實現計算機模擬或准備製作硬體,包括網路學習演算法的研究。這方面的工作也稱為技術模型研究。
神經網路用到的演算法就是向量乘法,並且廣泛採用符號函數及其各種逼近。並行、容錯、可以硬體實現以及自我學習特性,是神經網路的幾個基本優點,也是神經網路計算方法與傳統方法的區別所在。
E. 神經網路一個隱含層通常有幾個節點數阿
一個最簡單的分類,是在平面上畫一條直線,左邊為類0,右邊為類1,直線表示為
這是一個分類器,輸入(x,y),那麼,要求的參數有三個:a,b,c。另外注意c的作用,如果沒有c,這條直線一定會過原點。
因此,我們可以設計一個簡單的神經網路,包含兩層,輸入層有三個節點,代表x,y,1,三條線分別代表a,b,cg(z)對傳入的值x進行判別,並輸出結果。
但是,由於z的值可能為[],為了方便處理,需要將其壓縮到一個合理的范圍,還需sigmoid函數:
這樣的激勵函數,能夠將剛才的區間,壓縮到