『壹』 機器學習之人工神經網路演算法
機器學習中有一個重要的演算法,那就是人工神經網路演算法,聽到這個名稱相信大家能夠想到人體中的神經。其實這種演算法和人工神經有一點點相似。當然,這種演算法能夠解決很多的問題,因此在機器學習中有著很高的地位。下面我們就給大家介紹一下關於人工神經網路演算法的知識。
1.神經網路的來源
我們聽到神經網路的時候也時候近一段時間,其實神經網路出現有了一段時間了。神經網路的誕生起源於對大腦工作機理的研究。早期生物界學者們使用神經網路來模擬大腦。機器學習的學者們使用神經網路進行機器學習的實驗,發現在視覺與語音的識別上效果都相當好。在BP演算法誕生以後,神經網路的發展進入了一個熱潮。
2.神經網路的原理
那麼神經網路的學習機理是什麼?簡單來說,就是分解與整合。一個復雜的圖像變成了大量的細節進入神經元,神經元處理以後再進行整合,最後得出了看到的是正確的結論。這就是大腦視覺識別的機理,也是神經網路工作的機理。所以可以看出神經網路有很明顯的優點。
3.神經網路的邏輯架構
讓我們看一個簡單的神經網路的邏輯架構。在這個網路中,分成輸入層,隱藏層,和輸出層。輸入層負責接收信號,隱藏層負責對數據的分解與處理,最後的結果被整合到輸出層。每層中的一個圓代表一個處理單元,可以認為是模擬了一個神經元,若干個處理單元組成了一個層,若干個層再組成了一個網路,也就是」神經網路」。在神經網路中,每個處理單元事實上就是一個邏輯回歸模型,邏輯回歸模型接收上層的輸入,把模型的預測結果作為輸出傳輸到下一個層次。通過這樣的過程,神經網路可以完成非常復雜的非線性分類。
4.神經網路的應用。
圖像識別領域是神經網路中的一個著名應用,這個程序是一個基於多個隱層構建的神經網路。通過這個程序可以識別多種手寫數字,並且達到很高的識別精度與擁有較好的魯棒性。可以看出,隨著層次的不斷深入,越深的層次處理的細節越低。但是進入90年代,神經網路的發展進入了一個瓶頸期。其主要原因是盡管有BP演算法的加速,神經網路的訓練過程仍然很困難。因此90年代後期支持向量機演算法取代了神經網路的地位。
在這篇文章中我們大家介紹了關於神經網路的相關知識,具體的內容就是神經網路的起源、神經網路的原理、神經網路的邏輯架構和神經網路的應用,相信大家看到這里對神經網路知識有了一定的了解,希望這篇文章能夠幫助到大家。
『貳』 bp演算法在深度神經網路上為什麼行不通
BP演算法作為傳統訓練多層網路的典型演算法,實際上對僅含幾層網路,該訓練方法就已經很不理想,不再往下進行計算了,所以不適合深度神經網路。
BP演算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小。
(2)收斂到局部最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這種情況的發生)。
(3)一般,我們只能用有標簽的數據來訓練:但大部分的數據是沒標簽的,而大腦可以從沒有標簽的的數據中學習。
深度神經網路的特點:
多層的好處是可以用較少的參數表示復雜的函數。
在監督學習中,以前的多層神經網路的問題是容易陷入局部極值點。如果訓練樣本足夠充分覆蓋未來的樣本,那麼學到的多層權重可以很好的用來預測新的測試樣本。
非監督學習中,以往沒有有效的方法構造多層網路。多層神經網路的頂層是底層特徵的高級表示,比如底層是像素點,上一層的結點可能表示橫線,三角; 而頂層可能有一個結點表示人臉。一個成功的演算法應該能讓生成的頂層特徵最大化的代表底層的樣例。
如果對所有層同時訓練,時間復雜度會太高; 如果每次訓練一層,偏差就會逐層傳遞。這會面臨跟上面監督學習中相反的問題,會嚴重欠擬合。
『叄』 深度卷積網路
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進行預測。這些分支結構能夠確保,即使是隱藏層和中間層也參與了特徵計算,並且也能夠預測圖片的分類。這種做法能夠有效避免網路過擬合。
對於計算機視覺領域而言,神經網路的訓練可能需要大量的數據,但是當數據量有限時,可以通過數據增強來實現數據量的擴充,以提高系統的魯棒性,具體的數據增強方法如下所示:
除了以上三種數據增強的方法外,更多的數據增強方法和實現可以參考 圖像數據增強
數據增強可以利用計算機多線程實現,一個線程用來實現載入數據,實現數據增強,其他線程可以訓練這些數據以加快整體的運算速度。
『肆』 ResNet網路
ResNet (Resial Neural Network,殘差網路)由微軟研究院何凱明等人提出的,通過在深度神經網路中加入殘差單元(Resial Unit)使得訓練深度比以前更加高效。ResNet在2015年的ILSVRC比賽中奪得冠軍,ResNet的結構可以極快的加速超深神經網路的訓練,模型准確率也有非常大的提升。
在ResNet之前,瑞士教授Schimidhuber提出了Highway Network,其原理與ResNet非常相似。通常認為神經網路的深度對其性能非常重要,但是網路越深訓練越困難,Highway Network的目標就是解決極深的神經網路難以訓練的問題。
Highway Network相當於修改了每一層激活函數,此前激活函數只是對輸入做一次非線性變換y=H(x, Wh), 而Highway Network則允許保留一部分比例的原始輸入x,即y=H(x, Wh)* T(x , Wt)+x*C(x, Wc),其中T為變換系數,C為保留系數,論文中令C=1-T。這樣前面一層的信息,有一定比例可以不經過矩陣乘法和非線性變換,直接傳輸到下一層,彷彿一條信息高速公路,因此得名Highway Network。
結果顯示,B比A略好,這是因為A中的零填充確實沒有殘差學習。而C比B稍好,這是由於投影快捷連接引入了額外參數。但A、B、C之間的細微差異表明投影連接對於解決退化問題不是至關重要的,而不/少使用投影連接可以減少內存/時間復雜性和模型大小。而且無參數恆等快捷連接對於瓶頸架構(3層殘差學習單元)尤為重要,因為瓶頸架構中層具有較小的輸入輸出,快捷連接是連接到兩個高維端,此時恆等快捷連接無需參數,而使用投影的話則會顯示時間和模型復雜度加倍。因此,恆等快捷連接可以為瓶頸設計得到更有效的模型。
最後,作者嘗試了更深的1000層以上的神經網路,發現神經網路仍然能夠較好的學習,但是其測試誤差比100多層的殘差網路要差,而訓練誤差則與100多層的殘差網路相似,作者認為這可能是由於過擬合導致的,可通過加大正則化來解決這一問題。
在ResNet V1中,作者研究通過加入殘差單元使得訓練深度達到上百層的神經網路成為可能,解決了梯度消失/爆炸的問題。而在ResNet V2中作者進一步證明了恆等映射(Identity mapping)的重要性。同時作者還提出了一種新的殘差單元(採用了預激活)使得訓練變得更簡單,同時還提高了模型的泛化能力。
在ResNet V2中,作者提出了不止在殘差單元內部,而是在整個神經網路中都創建了『直接』的計算傳播路徑。在ResNet V1中,殘差學習單元的
上式同樣表明了在一個mini-batch中不可能出現梯度消失的現象,因為上式求導的第二部分對於一個mini-batch來說,不可能所有樣本其導數都為-1,因此,可能會出現權重很小的情況,但是不會出現梯度消失的情況。
通過研究這些不同的快捷連接,作者發現大部分快捷連接方式無法很好地收斂,其中很大部分是由於使用這些快捷連接後或多或少會出現梯度消失或者梯度爆炸的現象,最後結果顯示恆等映射效果最好。
雖然恆等映射在這些方法中表寫結果最好,仍需引起注意的是1×1的卷積捷徑連接引入了更多的參數,本應該比恆等捷徑連接具有更加強大的表達能力。事實上,shortcut-only gating 和1×1的卷積涵蓋了恆等捷徑連接的解空間(即,他們能夠以恆等捷徑連接的形式進行優化)。然而,它們的訓練誤差比恆等捷徑連接的訓練誤差要高得多,這表明了這些模型退化問題的原因是優化問題,而不是表達能力的問題。
在上圖b中,採用先加後BN再激活的方法,此時f(x)就包含了BN和ReLU。這樣的結果比原始a要差。這主要是因為BN層改變了流經快捷連接的信號,阻礙了信息的傳遞。
在c中,ReLU在相加之前,此時f(x)=x,為恆等映射。此時殘差單元中的F(x)輸出經由ReLU後變為非負,然而一個「殘差」函數的輸出應該是(−∞,+∞) 的。造成的結果就是,前向傳遞的信號是單調遞增的。這會影響表達能力,結果也變得更差了。
結果顯示,只使用ReLU預激活(d)的結果與原始ResNet結果很接近,這個與ReLU層不與BN層連接使用,因此無法獲得BN所帶來的好處。而當BN和ReLU都使用在預激活上時(e),結果得到了可觀的提升。
預激活的影響有兩個方面:第一,由於f(x)也是恆等映射,相比於V1優化變得更加簡單;第二,在預激活中使用BN能提高模型的正則化。
對於f(x)為恆等映射的好處:一方面若使用f= ReLU,如果信號是負的時候會造成一定的影響,無法傳遞有用的負信號,而當殘差單元很多時,這個影響將會變得尤為突出;另一方面當f是一個恆等映射時,信號在兩個單元間能夠很直接的傳遞。
在ResNet V1中作者提出了殘差學習單元,並從理論和實驗上證明使用直連的shortcuts有助於解決深度達到上百層的神經網路的訓練問題。而在ResNet V2中作者證明了在shortcuts中使用直接映射(即H(x) = h(x) + F(x)中h(x) = x)得到的效果最好。在ResNext中作者將bottleneck拆分成多個分支,提出了神經網路中的第三個維度(另外兩個維度分別為depth,神經網路層數深度,width,寬度,channel數),命名為 Cardinality ,並在多個數據集中證明了將bottleneck拆分能夠降低訓練錯誤率和提高准確率。
ResNext的靈感來源於VGG/ResNet和Inception:(1)在VGG、ResNet中,作者使用了相同結構的卷積層進行了堆疊,構建了層數很深但是結構簡單的神經網路;(2)而在Inception中,提出了一種叫做 split-transform-merge 的策略,將輸入(採用1x1 卷積核)分裂為幾個低維 embedding,再經過一系列特定卷積層的變換,最後連接在一起。
而在ResNet中,作者將原ResNet bottleneck中的一條path拆分為多個分支(multi branch),以此分支數量提出神經網路中的第三個重要維度——Cardinality。這一想法結合了VGG中的相同結構堆疊和Inception中的split-transform-merge策略,即如上圖所示,每個bottleneck 拆分為多個分支進行堆疊,這些分支的結構相同(這里借鑒了VGG的思想),而具體到分支的結構時又採用了Inception的split-transform-merge策略。與Inception不同的是Inception的每個分支結構都是需要認為的設計,而在ResNext中每個分支結構都相同。最終每個bottleneck的輸出就變成了:
這些所有的bottlenecks結構都遵循兩個原則:
作者提出了 三種效果相同的ResNext的表示方法,如下圖所示:
其中a,b 結構相似,只是在merge這一步的地方不同,而c則借鑒了AlexNet中分組卷積的思想,將輸入和輸出都分為多個組。
作者首先評估權衡了cardinality和width的關系。
接著,作者又評估了使用增加cardinality和depth/width來增加模型復雜度後的效果:
最後,作者還研究了shortcuts對於ResNext的重要性,在ResNet-50中,不使用shortcuts准確率下降了7%,而在ResNext-50中准確率也下降了4%,說明shortcuts對於殘差網路來說確實是非常重要的。
簡言之,增加cardinality比增加depth和width效果要好,同時,shortcuts對於模型的准確率也是至關重要的。
參考:
Deep Resial Learning for Image Recognition.
Aggregated Resial Transformations for Deep Neural Networks.
Identity Mappings in Deep Resial Networks.
ResNet論文翻譯——中文版
Identity Mappings in Deep Resial Networks(譯)
TensorFlow實現經典卷積網路. 黃文堅,唐源