導航:首頁 > 網路設置 > 廣度殘差網路怎麼設置

廣度殘差網路怎麼設置

發布時間:2023-03-28 00:00:51

❶ 殘差網路ResNet筆記

作者根據輸入將層表示為學習 殘差函數 。實驗表明,殘差網路更容易優化,並且能夠通過增加相當的深度來提高准確率。
核心是解決了增加深度帶來的副作用(退化問題),這樣能夠通過單純地增加網路深度,來提高網路性能。

網路的深度為什麼重要?

因為CNN能夠提取low/mid/high-level的特徵,網路的層數越多,意味著能夠提取到不同level的特徵越豐富。並且,越深的網路提取的特徵越抽象,越具有語義信息。

為什麼不能簡單地增加網路層數?

怎麼解決退化問題?

深度殘差網路。如果深層網路的後面那些層是恆等映射,那麼模型就退化為一個淺層網路。那現在要解決的就是學習恆等映射函數了。 但是直接讓一些層去擬合一個潛在的恆等映射函數H(x) = x,比較困難,這可能就是深層網路難以訓練的原因。但是,如果把網路設計為H(x) = F(x) + x,如下圖。我們可以轉換為學習一個殘差函數F(x) = H(x) - x. 只要F(x)=0,就構成了一個恆等映射H(x) = x. 而且,擬合殘差肯定更加容易。

其他的參考解釋

這種殘差學習結構可以通過前向神經網路+shortcut連接實現,如結構圖所示。而且shortcut連接相當於簡單執行了同等映射,不會產生額外的參數,也不會增加計算復雜度。 而且,整個網路可以依舊通過端到端的反向傳播訓練。

ImageNet上的實驗證明了作者提出的加深的殘差網路能夠比簡單疊加層生產的深度網路更容易優化,而且,因為深度的增加,結果得到了明顯提升。另外在CIFAR-10數據集上相似的結果以及一系列大賽的第一名結果表明ResNet是一個通用的方法。

F(x)與x相加就是就是逐元素相加,但是如果兩者維度不同,需要給x執行一個線性映射來匹配維度:

用來學習殘差的網路層數應當大於1,否則退化為線性。文章實驗了layers = 2或3,更多的層也是可行的。
用卷積層進行殘差學習: 以上的公式表示為了簡化,都是基於全連接層的,實際上當然可以用於卷積層。加法隨之變為對應channel間的兩個feature map逐元素相加。

key point:

key point:

❷ 殘差網路(ResNet)

殘差操作這一思想起源於論文《Deep Resial Learning for Image Recognition》。如果存在某個K層的網路f是當前最優的網路,那麼可以構造一個更深的網路,其最後幾層僅是該網路f第K層輸出的恆等映射(IdentityMapping),就可以取得與f一致的結果;也許K還不是所謂「最佳層數」,那麼更深的網路就可以取得更好的結果。 總而言之,與淺層網路相比,更深的網路的表現不應該更差。但是如下圖所示,56層的神經網路表現明顯要比20層的差。 證明更深的網路在訓練過程中的難度更大,因此作者提出了殘差網路的思想。+

ResNet 的作者將這些問題歸結成了一個單一的假設:直接映射是難以學習的。而且他們提出了一種修正方法: 不再學習從 x 到 H(x) 的基本映射關系,而是學習這兩者之間的差異,也就是「殘差(resial)」。然後,為了計算 H(x),我們只需要將這個殘差加到輸入上即可。假設殘差為 F(x)=H(x)-x,那麼現在我們的網路不會直接學習 H(x) 了,而是學習 F(x)+x。

這就帶來了你可能已經見過的著名 ResNet(殘差網路)模塊:

ResNet 的每一個「模塊(block)」都由一系列層和一個「捷徑(shortcut)」連接組成,這個「捷徑」將該模塊的輸入和輸出連接到了一起。然後在元素層面上執行「加法(add)」運算,如果輸入和輸出的大小不同,那就可以使用零填充或投射(通過 1×1 卷積)來得到匹配的大小。

回到我們的思想實驗,這能大大簡化我們對恆等層的構建。直覺上就能知道,比起從頭開始學習一個恆等變換,學會使 F(x) 為 0 並使輸出仍為 x 要容易得多。一般來說,ResNet 會給層一個「參考」點 x,以 x 為基礎開始學習。

在此之前,深度神經網路常常會有梯度消失問題的困擾,因為 ResNet 的梯度信號可以直接通過捷徑連接回到更早的層,而且它們的表現依然良好。

ResNet本質上就幹了一件事:降低數據中信息的冗餘度具體說來,就是對非冗餘信息採用了線性激活(通過skip connection獲得無冗餘的identity部分),然後對冗餘信息採用了非線性激活(通過ReLU對identity之外的其餘部分進行信息提取/過濾,提取出的有用信息即是殘差)。
其中,提取identity這一步,就是ResNet思想的核心。 對ResNet本質的一些思考

一方面是殘差網路更好的擬合分類函數以獲得更高的分類精度,另一方面是殘差網路如何解決網路在層數加深時優化訓練上的難題。

首先從萬能近似定理(Universal Approximation Theorem)入手。這個定理表明,一個前饋神經網路(feedforward neural network)如果具有線性輸出層,同時至少存在一層具有任何一種「擠壓」性質的激活函數(例如logistic sigmoid激活函數)的隱藏層,那麼只要給予這個網路足夠數量的隱藏單元,它就可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的波萊爾可測函數(Borel Measurable Function)。
萬能近似定理意味著我們在構建網路來學習什麼函數的時候,我們知道一定存在一個多層感知機(Multilayer Perceptron Model,MLP)能夠表示這個函數。然而,我們不能保證訓練演算法能夠學得這個函數。因為即使多層感知機能夠表示該函數,學習也可能會失敗,可能的原因有兩種。

第二種過擬合情況不在我們的討論范圍之內,因此我們聚焦在前一種情況,為何殘差網路相比簡單的多層網路能更好的擬合分類函數,即找到期望函數的參數值。
對於普通的不帶短連接的神經網路來說,存在這樣一個命題。

事實上對於高維函數,這一特點依然適用。因此,當函數的輸入維度非常高時,這一做法就變的非常有意義。盡管在高維空間這一特點很難被可視化,但是這個理論給了一個很合理的啟發,就是原則上,帶短連接的網路的擬合高維函數的能力比普通連接的網路更強。這部分我們討論了殘差網路有能力擬合更高維的函數,但是在實際的訓練過程中仍然可能存在各種各樣的問題使得學習到最優的參數非常困難,因此下一小節討論殘差在訓練過程中的優越性。

這個部分我們討論為什麼殘差能夠緩解深層網路的訓練問題,以及探討可能的短連接方式和我們最終選擇的殘差的理由。正如本章第三部分討論的一樣,整個殘差卷積神經網路是由以上的殘差卷積子模塊堆積而成。如上一小節所定義的,假設第 層的殘差卷積字子模塊的映射為

❸ 十分鍾一起學會ResNet殘差網路

深度卷積網路自然的整合了低中高不同層次的特徵,特徵的層次可以靠加深網路的層次來豐富。從而,在構建卷積網路時,網路的深度越高,可抽取的特徵層次就越豐富。所以一般我們會傾向於使用更深層次的網路結構,以便取得更高層次的特徵。但是在使用深層次的網路結構時我們會遇到兩個問題,梯度消失,梯度爆炸問題和網路退化的問題。

但是當使用更深層的網路時,會發生梯度消失、爆炸問題,這個問題很大程度通過標準的初始化和正則化層來基本解決,這樣可以確保幾十層的網路能夠收斂,但是隨著網路層數的增加,梯度消失或者爆炸的問題仍然存在。

還有一個問題就是網路的退化,舉個例子,假設已經有了一個最優化的網路結構,是18層。當我們設計網路結構的時候,我們並不知道具體多少層次的網路時最優化的網路結構,假設設計了34層網路結構。那麼多出來的16層其實是冗餘的,我們希望訓練網路的過程中,模型能夠自己訓練這五層為恆等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這16層恆等映射的參數學習正確,那麼就一定會不比最優化的18層網路結構性能好,這就是隨著網路深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗餘的網路層學習了不是恆等映射的參數造成的。

ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網路層,存在最優化的網路層次,那麼往往我們設計的深層次網路是有很多網路層為冗餘層的。那麼我們希望這些冗餘層能夠完成恆等映射,保證經過該恆等層的輸入和輸出完全相同。具體哪些層是恆等層,這個會有網路訓練的時候自己判斷出來。將原網路的幾層改成一個殘差塊,殘差塊的具體構造如下圖所示:

可以看到X是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化並激活後的輸出,該圖表示在殘差網路中,第二層進行線性變化之後激活之前,F(x)加入了這一層輸入值X,然後再進行激活後輸出。在第二層輸出值激活前加入X,這條路徑稱作shortcut連接。

我們發現,假設該層是冗餘的,在引入ResNet之前,我們想讓該層學習到的參數能夠滿足h(x)=x,即輸入是x,經過該冗餘層後,輸出仍然為x。但是可以看見,要想學習h(x)=x恆等映射時的這層參數時比較困難的。ResNet想到避免去學習該層恆等映射的參數,使用了如上圖的結構,讓h(x)=F(x)+x;這里的F(x)我們稱作殘差項,我們發現,要想讓該冗餘層能夠恆等映射,我們只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網路中的參數初始化偏向於0,這樣在相比於更新該網路層的參數來學習h(x)=x,該冗餘層學習F(x)=0的更新參數能夠更快收斂,如圖所示:

假設該曾網路只經過線性變換,沒有bias也沒有激活函數。我們發現因為隨機初始化權重一般偏向於0,那麼經過該網路的輸出值為[0.6 0.6],很明顯會更接近與[0 0],而不是[2 1],相比與學習h(x)=x,模型要更快到學習F(x)=0。

並且ReLU能夠將負數激活為0,過濾了負數的線性變化,也能夠更快的使得F(x)=0。這樣當網路自己決定哪些網路層為冗餘層時,使用ResNet的網路很大程度上解決了學習恆等映射的問題,用學習殘差F(x)=0更新該冗餘層的參數來代替學習h(x)=x更新冗餘層的參數。

這樣當網路自行決定了哪些層為冗餘層後,通過學習殘差F(x)=0來讓該層網路恆等映射上一層的輸入,使得有了這些冗餘層的網路效果與沒有這些冗餘層的網路效果相同,這樣很大程度上解決了網路的退化問題。

我們發現很深的網路層,由於參數初始化一般更靠近0,這樣在訓練的過程中更新淺層網路的參數時,很容易隨著網路的深入而導致梯度消失,淺層的參數無法更新。

可以看到,假設現在需要更新 參數因為隨機初始化偏向於0,通過鏈式求導我們會發現, 相乘會得到更加接近於0的數,那麼所求的這個 的梯度就接近於0,也就產生了梯度消失的現象。

ResNet最終更新某一個節點的參數時,由於 ,由於鏈式求導後的結果如圖所示,不管括弧內右邊部分的求導參數有多小,因為左邊的1的存在,並且將原來的鏈式求導中的連乘變成了連加狀態(正是 ),都能保證該節點參數更新不會發生梯度消失或梯度爆炸現象。

這樣ResNet在解決了阻礙更深層次網路優化問題的兩個重要問題後,ResNet就能訓練更深層次幾百層乃至幾千層的網路並取得更高的精確度了。

這里是應用了ResNet的網路圖,這里如果遇到了h(x)=F(x)+x中x的維度與F(x)不同的維度時,我們需要對identity加入Ws來保持Ws*x的維度與F(x)的維度一致。

x與F(x)維度相同時:

x與F(x)維度不同時:

下邊是ResNet的網路結構圖:

使用1*1卷積減少參數和計算量:

如果用了更深層次的網路時,考慮到計算量,會先用1 * 1的卷積將輸入的256維降到64維,然後通過1*1恢復。這樣做的目的是減少參數量和計算量。

左圖是ResNet34,右圖是ResNet50/101/152。這一個模塊稱作building block,右圖稱之為bottleneck design。在面對50,101,152層的深層次網路,意味著有很大的計算量,因此這里使用1 * 1卷積先將輸入進行降維,然後再經過3 * 3卷積後再用 卷積進行升維。使用1*1卷積的好處是大大降低參數量計算量。

通過上述的學習,你應該知道了,現如今大家普遍認為更好的網路是建立在更寬更深的網路基礎上,當你需要設計一個深度網路結構時,你永遠不知道最優的網路層次結構是多少層,一旦你設計的很深入了,那勢必會有很多冗餘層,這些冗餘層一旦沒有成功學習恆等變換 ,那就會影響網路的預測性能,不會比淺層的網路學習效果好從而產生退化問題。

ResNet的過人之處,是他很大程度上解決了當今深度網路頭疼的網路退化問題和梯度消失問題。使用殘差網路結構 代替原來的沒有shortcut連接的 ,這樣更新冗餘層的參數時需要學習 比學習 要容易得多。而shortcut連接的結構也保證了反向傳播更新參數時,很難有梯度為0的現象發生,不會導致梯度消失。

這樣,ResNet的構建,使我們更朝著符合我們的直覺走下去,即越深的網路對於高級抽象特徵的提取和網路性能更好,不用在擔心隨著網路的加深發生退化問題了。

近段時間,准備持續發表一些CNN常見的網路模型講解。好了,今天的十分鍾就帶你一起學會ResNet,下次的十分鍾我們再見。

❹ 吳教授的CNN課堂:進階 | 從LeNet到殘差網路(ResNet)和Inception Net

第二周是關於卷積網梁叢絡(CNN)進階部分,學到挺多新東西。因為之前了解過CNN基礎後,就大多在用RNN進行自然語言處理方面的研究,很多CNN的最新進展雖有耳聞,但是並不清楚。

特別是各個論文模型又喜歡取一些奇怪的名字(比如昨天讀的兩篇論文,一個叫NTT,一個叫TMD),如果沒讀過論文,不了解一些緣由,真是傻傻分不清。

之前看視覺問答時,預處理圖片部分需選擇訓練好的網路,結果一看,一大堆什麼 VGG、Res、Incept 這些看不懂的名詞,而且後面還加著16、19、101等數字和V1、V2、V3這樣的版本數。結果只能兩眼一抹黑,參考別人的論文,瞎選了一個。

閑話不多說,開始吧。

在提到之後的ResNet和Inception Net前,最好先回顧一下CNN裡面成功架構的發展,這樣就可以把握住一條清晰的發展脈絡,之後講解進階網路的時候也能很快理解。

首先是爺爺級的 LeNet-5 ,因為這大概是20年前提出來的了。是當時尚且青澀,而現在已是深度學習四大天王里的LeCun提出的,LeNet也是取自他名字前半截,5表示只有五層,當時用於處理MNIST這樣的手寫數字識別。

在基礎課裡面吳教授也有親手把整個架構畫出來,所以並不是很復雜。分別卷積和池化兩次後,然後直接輸入全連接網路就可以了。

LeNet後,因為人工智慧寒冬,所以很長時間並沒有太大發展。

直到13年的時候,後起之秀Alex Krizhevsky (相信不少人也看過他的博客,聽過他有名的Stanford cs231) 提出了AlexNet,在ImageNet比賽上取得了很大的成功,向大家展示了深度學習的力量,從此掀起一次浪潮。

AlexNet和LeNet差別並不是很大,主要不同有以下三點。

在AlexNet展示了深度學習在圖像處理上的成功後,大家也就開始不斷在其之上完善圖像處理的CNN構架。而VGG就是第一個 非常簡潔又系統化,提出了一套怎麼使用更深的網路來訓練的網路架構

VGG的創舉之點在於,比起之前那些網路其中參數的混雜,它很有計劃和條理地布置了架構中各個層的結構。比如說可以列舉出一下幾點:

VGG是當時參賽組(Visual Geometry Group)的名稱。一般現在大家用到的都是VGG-16或者VGG-19,16和19也正如所想枯嫌,分別是對應的VGG版本中的層數。

看上去16和19層好像也很多了,但和之後ResNet這樣的動不動就101,152層的巨無霸相比,還是小巫見大巫。

那為什麼不也增加VGG的層數呢?

這里要提到深層神經網路訓練中的一個大問題了,那就是當層數過大時,會產生所謂的 梯度爆炸(Exploding Gradients)和梯度消失(Vanishing Gradients) 現象。

打個比方,如果每次的梯度相乘的系數都是小於1的數,假如說0.6, 那麼19 層算下來,0.6的19次方就已經是0.00061了,更別提上百層了。這樣傳播到最底層的時候,能夠 學習到的參數就很小 了,這就是梯度消失。

反過來,梯度爆炸的情況,如果系數大於1,多次累乘後就橡敗櫻會得到一個很大的數,也會造成不好的結果。有點像是復利的概念,也就是那個和國王打賭要一棋盤稻子的故事。

梯度爆炸還好解決,可以用 梯度修剪(Gradient Clipping) 修剪一下就好了。而梯度消失就有點難解決了。

因為這樣的問題,所以雖然理論上普通的深處網路是越深學的越好,但是實際上卻事與願違。下圖橫軸是網路層數,豎軸是訓練誤差(越小越好)。 理論上隨著層數增加,誤差就減小,但是實際是過了某個點之後,誤差反而會增大。

那麼ResNet是怎麼訓練到上百層的呢,難道它就不怕上面的問題嗎?

它用一個很簡單的方法解決了上面的問題。

有很多很棒的論文,沒讀之前,看名字覺得很厲害的。但結果一看論文,才發現方法非常之簡潔,特別是有一些利用數學知識推導出的簡單解決方法,讓人不得不一邊拍手稱贊,一邊感嘆自己數學渣。

ResNet也是這樣子的,看名字很酷炫,但是打開論文一看,才發現原來是這樣啊。

ResNet的最主要就是 Shortcut(捷徑) 這個概念。來看看這到底是什麼吧,首先假設我們從一個神經網路中取出兩層,當做是一個塊(block),先不管中間是MLP或者是CNN。

而shortcut就如下圖一樣,從第一層的輸入直接建立一條捷徑到第二層的輸出,激活函數前。

也就是說第二層激活後的輸出可以會發生這樣的變化。

變成

這樣子處理之後,我們得到的這一小塊就叫做 Resial Block(殘差塊) ,而把這些塊堆疊起來就是我們的殘差網路了。很簡單吧,像下面這樣,一個34層的殘差網路。

這樣子我們就得到殘差網路,那麼實際上訓練會怎麼樣呢。

正是我們想要的模型,也非常符合理論。

最後再提一下殘差網路背後的原理,為什麼這樣簡單改一下就能夠有這么好的表現呢。

原因是捷徑的建立,使得每一個殘差塊可以 很容易地學習到恆等函數 ,也就是f(x)=x。也就是說加入殘差塊之後,再差也能學會恆等函數,保留信息,把之前的結果直接這樣傳下去,所以也就不用擔心之前提到的 梯度消失 問題了。

介紹Inception網路前,先介紹一下其中一個很重要的概念1x1卷積。

初看1x1卷積的概念會覺得很奇怪,這樣子每次對一個像素進行卷積有什麼用,我們本來不就是想檢測局部的特徵嗎。但是如果理解了 通道 概念的話,就能很好理解了。

因為,如果說普通的 大窗口卷積更注重一個通道內各個特徵的互動 的話,那麼1x1卷積就是只在通道與通道進行卷積運算,加強了通道之間的互動。

這就是第一點, 加強了通道與通道之間的交流 。用這個就可以只對通道進行一些操作,如用1x1卷積增加通道數,減少通道數,也可以不增不減,但是對之前的通道進行整理。

1x1卷積網路還有一個好處,那就是 通過合理運用可以減少整體網路的運算量

還是來舉例子吧,假設有以下一個卷積過程。

那麼上面這個過程所需要的運算量大約一億兩千萬次。

而如果我們巧妙地利用1x1卷積來對通道進行合理處理的話,像下面這樣。

運算量會變得只有大概一千二百萬左右,一下子就縮小了十倍。

有了上面的知識以後,一切就簡單多了。Inception網路的核心概念是,既然在選擇CNN架構的時候要為了過濾器的窗口大小考慮半天,那麼 何不把各個尺寸都用上去,最後再把結果接起來就好了呢

於是就有了下面這樣的 Inception模塊 。有用1x1、3x3、5x5各個尺寸的卷積,而且還用到之前講到的利用1x1卷積減少運算量的技巧。

最後至於整個Inception網路,就像之前殘差網路一樣,把 Inception模塊 堆疊起來就好了。

當然論文中還有一些次要細節,這里就不多說了。

而且自最初的論文之後,Inception網路也有很多改進,加入了很多技巧,比如之前的殘差網路中的技巧。所以現在網上的Inception網路,後面會有V1、V2、V3之類後綴,表示的就是各個版本。

最後,作為余談,說說為什麼Inception網路要叫做 Inception 網路。

因為在這篇正經的學術論文裡面,作者引用了一個鏈接,點開後會出現這張圖片。

❺ iPad無線WiFi信號不好怎麼辦

1、點擊設置圖標。

❻ 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實現經典卷積網路. 黃文堅,唐源

❼ 殘差網路

殘差網路(Resial Network簡稱ResNet)是在2015年繼Alexnet Googlenet VGG三個經典的CNN網路之後提出的,並在ImageNet比賽classification任務上拔得頭籌,ResNet因其簡單又實用的優點,現已在檢測,分割,識別等領域被廣泛的應用。
ResNet可以說是過去幾年中計算機視覺和深度學習領域最具開創性的工作,有效的解決了隨著網路的加深,出現了訓練集准確率下降的問題,如下圖所示:

做過深度學習的同學應該都知道,隨著網路層數的增加而導致訓練效果變差的一個原因是梯度彌散和梯度爆炸問題(vanishing/exploding gradients),這個問題抑制了淺層網路參數的收斂。但是這個問題已經通過一些參數初始化的技術較好的解決了,有興趣的同學可以看參考文獻中的以下幾篇文章:[2][3][4][5][6]。
但是即便如此,在網路深度較高的時候(例如圖中的56層網路)任然會出現效果變差的問題,我們在先前的Alexnet Googlenet VGG三個模型中可以看出,網路的深度在圖片的識別中有著至關重要的作用,深度越深能自動學習到的不同層次的特徵可能就越多,那到底是什麼原因導致了效果變差呢?

Fig. 3
左側19層的VGG模型的計算量是 19.6 billion FLOPs 中間是34層的普通卷積網路計算量是3.6 billion FLOPs。
右邊是34層的ResNet計算量是3.6billion FLOPs,圖中實線的箭頭是沒有維度變化的直接映射,虛線是有維度變化的映射。通過對比可以看出VGG雖然層數不多但是計算量還是很大的,後面我們可以通過實驗數據看到34層的ResNet的表現會比19層的更好。

從圖中可以看出在效果上,34層的殘差網路比VGG和GoogleNet都要好,A,B,C三種方案中C方案效果最好,但是B,C方案在計算量上比A方案要大很多,而效果提升的又很少,所以論文作者建議還是使用A方案較為實用。
下面我們介紹層數在50及以上的殘差網路的結構: Deeper Bottleneck Architectures。這種結構是作者為了降低訓練時間所設計的,結構對比如下圖所示:

ResNet通過殘差學習解決了深度網路的退化問題,讓我們可以訓練出更深的網路,這稱得上是深度網路的一個歷史大突破吧。也許不久會有更好的方式來訓練更深的網路,讓我們一起期待吧!
目前,您可以在 人工智慧建模平台 Mo 找到基於tensorflow 的34層的殘差網路(ResNet)實現樣例,數據集是CIFAR-10 (CIFAR的十分類數據集),這個樣例在測試集上的精度為90%,驗證集上的精度為98%。主程序在ResNet_Operator.py中,網路的Block結構在ResNet_Block.py中,訓練完的模型保存在results文件夾中。
項目源碼地址: http://momodel.cn/explore/5d1b0a031afd944132a0797d?type=app
參考文獻:
[1] _K. He, X. Zhang, S. Ren, and J. Sun. Deep resial learning for image recognition. arXiv preprint arXiv:1512.03385,2015.
[2] Y. LeCun, L. Bottou, G. B. Orr, and K.-R.M¨uller. Efficient backprop.In Neural Networks: Tricks of the Trade, pages 9–50. Springer, 1998.
[3] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.
[4] A. M. Saxe, J. L. McClelland, and S. Ganguli. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks.arXiv:1312.6120, 2013.
[5] K. He, X. Zhang, S. Ren, and J. Sun. Delving deep into rectifiers:Surpassing human-level performance on imagenet classification. In ICCV, 2015.
[6] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by recing internal covariate shift. In ICML, 2015.

Mo (網址: momodel.cn )是一個支持 Python 的 人工智慧在線建模平台 ,能幫助你快速開發、訓練並部署模型。

Mo 人工智慧俱樂部 是由網站的研發與產品設計團隊發起、致力於降低人工智慧開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智慧技術,並以此來促進數據驅動的科學研究。

❽ 一個殘差網路的簡介【MATLAB】

對於許多應用來說,使用由一個簡單的層序列組成的網路就已足夠。但是,某些應用要求網路具有更復雜的層次圖結構,其中的層可接收來自多個層的輸入,也可以輸出到多個層。這些類型的網路通常稱為有向無環圖 (DAG) 網路。殘差網路就是一種 DAG 網路,其中的殘差(或快捷)連接會繞過主網路層。殘差連接讓參數梯度可以更輕松地從輸出層傳播到較淺的網路層,從而能夠訓練更深的網路。增加網路深度可在執行更困難的任務時獲得更高的准確度。

主分支 - 順序連接的卷積層、批量歸一化層和 ReLU 層。

殘差連接 - 繞過主分支的卷積單元。殘差連接和卷積單元的輸出按元素相加。當激活區域的大小變化時,殘差連接也必須包含 1×1 卷積層。殘差連接讓參數梯度可以更輕松地從輸出層流到較淺的網路層,從而能夠訓練更深的網路。

首先創建網路的主分支。主分支包含五部分。

初始部分 - 包含圖像輸入層和帶激活函數的初始卷積層。

三個卷積層階段 - 分別具有不同的特徵大小(32×32、16×16 和 8×8)。每個階段包含 N 個卷積單元。在示例的這一部分中,N = 2。每個卷積單元包含兩個帶激活函數的 3×3 卷積層。netWidth 參數是網路寬度,定義為網路第一卷積層階段中的過濾器數目。第二階段和第三階段中的前幾個卷積單元會將空間維度下采樣二分之一。為了使整個網路中每個卷積層所需的計算量大致相同,每次執行空間下采樣時,都將過濾器的數量增加一倍。

最後部分 - 包含全局平均池化層、全連接層、softmax 層和分類層。

使用 convolutionalUnit(numF,stride,tag) 創建一個卷積單元。numF 是每一層中卷積過濾器的數量,stride 是該單元第一個卷積層的步幅,tag 是添加在層名稱前面的字元數組。convolutionalUnit 函數在示例末尾定義。

為所有層指定唯一名稱。卷積單元中的層的名稱以 'SjUk' 開頭,其中 j 是階段索引,k 是該階段內卷積單元的索引。例如,'S2U1' 表示第 2 階段第 1 單元。

❾ 吳恩達 卷積神經網路 CNN

應用計算機視覺時要面臨的一個挑戰是數據的輸入可能會非常大。例如一張 1000x1000x3 的圖片,神經網路輸入層的維度將高達三百萬,使得網路權重 W 非常龐大。這樣會造成兩個後果:

神經網路結構復雜,數據量相對較少,容易出現過擬合;
所需內存和計算量巨大。
因此,一般的神經網路很難處理蘊含著大量數據的圖像。解決這一問題的方法就是使用卷積神經網路

我們之前提到過,神經網路由淺層到深層,分別可以檢測出圖片的邊緣特徵、局部特徵(例如眼睛、鼻子等),到最後面的一層就可以根據前面檢測的特徵來識別整體面部輪廓。這些工作都是依託卷積神經網路來實現的。

卷積運算(Convolutional Operation)是卷積神經網路最基本的組成部分。我們以邊緣檢測為例,來解釋卷積是怎樣運算的。

圖片最常做的邊緣檢測有兩類:垂直邊緣(Vertical Edges)檢測和水平邊緣(Horizontal Edges)檢測。

比如檢測一張6x6像素的灰度圖片的vertical edge,設計一個3x3的矩陣(稱之為filter或kernel),讓原始圖片和filter矩陣做卷積運算(convolution),得到一個4x4的圖片。 具體的做法是,將filter矩陣貼到原始矩陣上(從左到右從上到下),依次可以貼出4x4種情況。 讓原始矩陣與filter重合的部分做element wise的乘積運算再求和 ,所得的值作為4x4矩陣對應元素的值。如下圖是第一個元素的計算方法,以此類推。

可以看到,卷積運算的求解過程是從左到右,由上到下,每次在原始圖片矩陣中取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘後求和,將結果組成一個矩陣。

下圖對應一個垂直邊緣檢測的例子:

如果將最右邊的矩陣當作圖像,那麼中間一段亮一些的區域對應最左邊的圖像中間的垂直邊緣。

下圖3x3濾波器,通常稱為垂直 索伯濾波器 (Sobel filter):

看看用它來處理知名的Lena照片會得到什麼:

現在可以解釋卷積操作的用處了:用輸出圖像中更亮的像素表示原始圖像中存在的邊緣。

你能看出為什麼邊緣檢測圖像可能比原始圖像更有用嗎?

回想一下MNIST手寫數字分類問題。在MNIST上訓練的CNN可以找到某個特定的數字。比如發現數字1,可以通過使用邊緣檢測發現圖像上兩個突出的垂直邊緣。

通常,卷積有助於我們找到特定的局部圖像特徵(如邊緣),用在後面的網路中。

假設輸入圖片的大小為 n×n,而濾波器的大小為 f×f,則卷積後的輸出圖片大小為 (n−f+1)×(n−f+1)。

這樣就有兩個問題:

為了解決這些問題,可以在進行卷積操作前,對原始圖片在邊界上進行填充(Padding),以增加矩陣的大小。通常將 0 作為填充值。

設每個方向擴展像素點數量為 p,則填充後原始圖片的大小為 (n+2p)×(n+2p),濾波器大小保持 f×f不變,則輸出圖片大小為 (n+2p−f+1)×(n+2p−f+1)。

因此,在進行卷積運算時,我們有兩種選擇:

在計算機視覺領域,f通常為奇數。原因包括 Same 卷積中 p=(f−1)/ 2 能得到自然數結果,並且濾波器有一個便於表示其所在位置的中心點。

卷積過程中,有時需要通過填充來避免信息損失,有時也需要通過設置 步長(Stride) 來壓縮一部分信息。

步長表示濾波器在原始圖片的水平方向和垂直方向上每次移動的距離。之前,步長被默認為 1。而如果我們設置步長為 2,則卷積過程如下圖所示:

設步長為 s,填充長度為p, 輸入圖片大小為n x n, 濾波器大小為f x f, 則卷積後圖片的尺寸為:

注意公式中有一個向下取整的符號,用於處理商不為整數的情況。向下取整反映著當取原始矩陣的圖示藍框完全包括在圖像內部時,才對它進行運算。

如果我們想要對三通道的 RGB 圖片進行卷積運算,那麼其對應的濾波器組也同樣是三通道的。過程是將每個單通道(R,G,B)與對應的濾波器進行卷積運算求和,然後再將三個通道的和相加,將 27 個乘積的和作為輸出圖片的一個像素值。

如果想同時檢測垂直和水平邊緣,或者更多的邊緣檢測,可以增加更多的濾波器組。例如設置第一個濾波器組實現垂直邊緣檢測,第二個濾波器組實現水平邊緣檢測。設輸入圖片的尺寸為 n×n×nc(nc為通道數),濾波器尺寸為 f×f×nc,則卷積後的輸出圖片尺寸為 (n−f+1)×(n−f+1)×n′c,n′c為濾波器組的個數。

與之前的卷積過程相比較,卷積神經網路的單層結構多了激活函數和偏移量;而與標准神經網路相比,濾波器的數值對應著權重 W[l],卷積運算對應著 W[l]與 A[l−1]的乘積運算,所選的激活函數變為 ReLU。

對於一個 3x3x3 的濾波器,包括偏移量 b(27+1)在內共有 28 個參數。不論輸入的圖片有多大,用這一個濾波器來提取特徵時,參數始終都是 28 個,固定不變。即選定濾波器組後,參數的數目與輸入圖片的尺寸無關。因此,卷積神經網路的參數相較於標准神經網路來說要少得多。這是 CNN 的優點之一。

圖像中的相鄰像素傾向於具有相似的值,因此通常卷積層相鄰的輸出像素也具有相似的值。這意味著,卷積層輸出中包含的大部分信息都是冗餘的。如果我們使用邊緣檢測濾波器並在某個位置找到強邊緣,那麼我們也可能會在距離這個像素1個偏移的位置找到相對較強的邊緣。但是它們都一樣是邊緣,我們並沒有找到任何新東西。池化層解決了這個問題。這個網路層所做的就是通過減小輸入的大小降低輸出值的數量。池化一般通過簡單的最大值、最小值或平均值操作完成。以下是池大小為2的最大池層的示例:

在計算神經網路的層數時,通常只統計具有權重和參數的層,因此池化層通常和之前的卷積層共同計為一層。

圖中的 FC3 和 FC4 為全連接層,與標準的神經網路結構一致。

個人推薦 一個直觀感受卷積神經網路的網站 。

相比標准神經網路,對於大量的輸入數據,卷積過程有效地減少了 CNN 的參數數量,原因有以下兩點:

-參數共享(Parameter sharing):特徵檢測如果適用於圖片的某個區域,那麼它也可能適用於圖片的其他區域。即在卷積過程中,不管輸入有多大,一個特徵探測器(濾波器)就能對整個輸入的某一特徵進行探測。

-稀疏連接(Sparsity of connections):在每一層中,由於濾波器的尺寸限制,輸入和輸出之間的連接是稀疏的,每個輸出值只取決於輸入在局部的一小部分值。

池化過程則在卷積後很好地聚合了特徵,通過降維來減少運算量。

由於 CNN 參數數量較小,所需的訓練樣本就相對較少,因此在一定程度上不容易發生過擬合現象。並且 CNN 比較擅長捕捉區域位置偏移。即進行物體檢測時,不太受物體在圖片中位置的影響,增加檢測的准確性和系統的健壯性。

在神經網路可以收斂的前提下,隨著網路深度增加,網路的表現先是逐漸增加至飽和,然後迅速下降

需要注意,網路退化問題不是過擬合導致的,即便在模型訓練過程中,同樣的訓練輪次下,退化的網路也比稍淺層的網路的訓練錯誤更高,如下圖所示。

這一點並不符合常理:如果存在某個 K層網路是當前F的最優的網路,我們構造更深的網路。那麼K之後的層數可以擬合成恆等映射,就可以取得和F一直的結果。如果K不是最佳層數,那麼我們比K深,可以訓練出的一定會不差於K的。總而言之,與淺層網路相比,更深的網路的表現不應該更差。因此,一個合理的猜測就是, 對神經網路來說,恆等映射並不容易擬合。

也許我們可以對網路單元進行一定的改造,來改善退化問題?這也就引出了殘差網路的基本思路

既然神經網路不容易擬合一個恆等映射,那麼一種思路就是構造天然的恆等映射。

實驗表明,殘差網路 很好地解決了深度神經網路的退化問題 ,並在ImageNet和CIFAR-10等圖像任務上取得了非常好的結果,同等層數的前提下殘差網路也 收斂得更快 。這使得前饋神經網路可以採用更深的設計。除此之外, 去除個別神經網路層,殘差網路的表現不會受到顯著影響 ,這與傳統的前饋神經網路大相徑庭。

2018年的一篇論文,The Shattered Gradients Problem: If resnets are the answer, then what is the question,指出了一個新的觀點,盡管殘差網路提出是為了解決梯度彌散和網路退化的問題, 它解決的實際上是梯度破碎問題

作者通過可視化的小型實驗(構建和訓練一個神經網路發現,在淺層神經網路中,梯度呈現為棕色雜訊(brown noise),深層神經網路的梯度呈現為白雜訊。在標准前饋神經網路中,隨著深度增加, 神經元梯度的相關性(corelation)按指數級減少 (1 / 2^L) ;同時, 梯度的空間結構也隨著深度增加被逐漸消除 。這也就是梯度破碎現象。

梯度破碎為什麼是一個問題呢?這是因為許多優化方法假設梯度在相鄰點上是相似的,破碎的梯度會大大減小這類優化方法的有效性。另外,如果梯度表現得像白雜訊,那麼某個神經元對網路輸出的影響將會很不穩定。

相較標准前饋網路, 殘差網路中梯度相關性減少的速度從指數級下降到亞線性級 ) (1 / sqrt(L)) ,深度殘差網路中,神經元梯度介於棕色雜訊與白雜訊之間(參見上圖中的c,d,e);殘差連接可以 極大地保留梯度的空間結構 。殘差結構緩解了梯度破碎問題。

1x1 卷積指濾波器的尺寸為 1。當通道數為 1 時,1x1 卷積意味著卷積操作等同於乘積操作。
而當通道數更多時,1x1 卷積的作用實際上類似全連接層的神經網路結構,從而降低(或升高,取決於濾波器組數)數據的維度。

池化能壓縮數據的高度(nH)及寬度(nW),而 1×1 卷積能壓縮數據的通道數(nC)。在如下圖所示的例子中,用 filters個大小為 1×1×32 的濾波器進行卷積,就能使原先數據包含的 32個通道壓縮為 filters 個。

在這之前,網路大都是這樣子的:

也就是卷積層和池化層的順序連接。這樣的話,要想提高精度,增加網路深度和寬度是一個有效途徑,但也面臨著參數量過多、過擬合等問題。(當然,改改超參數也可以提高性能)

有沒有可能在同一層就可以提取不同(稀疏或不稀疏)的特徵呢(使用不同尺寸的卷積核)?於是,2014年,在其他人都還在一味的增加網路深度時(比如vgg),GoogleNet就率先提出了卷積核的並行合並(也稱Bottleneck Layer),如下圖。

和卷積層、池化層順序連接的結構(如VGG網路)相比,這樣的結構主要有以下改進:

按照這樣的結構來增加網路的深度,雖然可以提升性能,但是還面臨計算量大(參數多)的問題。為改善這種現象,GooLeNet借鑒Network-in-Network的思想,使用1x1的卷積核實現降維操作(也間接增加了網路的深度),以此來減小網路的參數量(這里就不對兩種結構的參數量進行定量比較了),如圖所示。

最後實現的inception v1網路是上圖結構的順序連接

由於卷積這門課的其他內容和計算機視覺關系比較密切。對我理解推薦系統幫助不大。所以這個系列就到這里。吳恩達的課還是很好的,作業和課和測驗我都認真做啦。

❿ AI面試題第二彈(神經網路基礎)

提取主要特徵,減小網路參數量,減小計算量

層層傳遞的梯度>1 梯度爆炸

層層傳遞的梯度<1 梯度消失

與權重有很大關系,激活函數的影響較小。

每次訓練一層隱節點,訓練時將上一層隱節點的輸出作為輸入,而本層隱節點的輸出作為下一層隱節點的輸入,此過程就是逐層「預訓練」(pre-training);在預訓練完成後,再對整個網路進行「微調」(fine-tunning)。Hinton在訓練深度信念網路(Deep Belief Networks中,使用了這個方法,在各層預訓練完成後,再利用BP演算法對整個網路進行訓練。

這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,然後更新梯度的時候,如果梯度超過這個閾值,那麼就將其強制限制在這個范圍之內。這可以防止梯度爆炸。

比較常見的是l1l1l1正則,和l2l2l2正則,在各個深度框架中都有相應的API可以使用正則化

反向傳播中,經過每一層的梯度會乘以該層的權重。

舉個簡單例子:

為了得到一致假設而使假設變得過度復雜稱為過擬合(overfitting), 過擬合表現在訓練好的模型在訓練集上效果很好,但是在測試集上效果差 。也就是說模型的泛化能力弱。

過擬合主要由兩個原因造成,數據集太小或模型太復雜

(1). 數據集擴增(Data Augmentation)

(2). 改進模型

·Early Stopping。在模型效果比較好的時候便提前停止訓練

 ·正則化(regularization)

L1:稀疏參數

L2:更小參數

·Dropout

·多任務學習

深度學習中兩種多任務學習模式:隱層參數的硬共享和軟共享

硬共享機制是指在所有任務中共享隱藏層,同時保留幾個特定任務的輸出層來實現。硬共享機制降低了過擬合的風險。多個任務同時學習,模型就越能捕捉到多個任務的同一表示,從而導致模型在原始任務上的過擬合風險越小。

軟共享機制是指每個任務有自己的模型,自己的參數。模型參數之間的距離是正則化的,以便保障參數相似性。

見後文

leaky relu

輸入是x輸出是y,正常的流程是:我們首先把x通過網路前向傳播,然後把誤差反向傳播以決定如何更新參數讓網路進行學習。使用Dropout之後,過程變成如下:

(1)首先隨機(臨時)刪掉網路中一半的隱藏神經元,輸入輸出神經元保持不變(圖中虛線為部分臨時被刪除的神經元)

(2) 然後把輸入x通過修改後的網路前向傳播,然後把得到的損失結果通過修改的網路反向傳播。一小批訓練樣本執行完這個過程後,在沒有被刪除的神經元上按照隨機梯度下降法更新對應的參數(w,b)。

(3)然後繼續重復這一過程:

恢復被刪掉的神經元(此時被刪除的神經元保持原樣,而沒有被刪除的神經元已經有所更新)

從隱藏層神經元中隨機選擇一個一半大小的子集臨時刪除掉(備份被刪除神經元的參數)。

對一小批訓練樣本,先前向傳播然後反向傳播損失並根據隨機梯度下降法更新參數(w,b) (沒有被刪除的那一部分參數得到更新,刪除的神經元參數保持被刪除前的結果)。

不斷重復這一過程。

沒有對數據進行歸一化

忘記檢查輸入和輸出

沒有對數據進行預處理

沒有對數據正則化

使用過大的樣本

使用不正確的學習率

在輸出層使用錯誤的激活函數

網路中包含壞梯度

初始化權重錯誤

過深的網路

隱藏單元數量錯誤

網路設計不合理(任務-網路不匹配)

機器學習有個很重要的假設:就是假設訓練數據和測試數據是滿足獨立同分布的,這保障了通過訓練數據獲得的優秀模型也能夠在測試集獲得好的效果。但是在機器學習訓練中輸入層的每個批量(X,Y)中X的分布是不一致的,並且神經網路的隱藏層的輸入分布在每次訓練迭代中發生變化。 BatchNorm就是在深度神經網路訓練過程中使得每一層神經網路的輸入保持相同分布的。

BN的基本思想其實相當直觀:因為深層神經網路在做非線性變換前(激活前)的 輸入值 (就是那個x=WU+B,U是輸入) 隨著網路深度加深或者在訓練過程中,其分布逐漸發生偏移或者變動,之所以訓練收斂慢,一般是整體分布逐漸往非線性函數的取值區間的上下限兩端靠近 (對於Sigmoid函數來說,意味著激活輸入值WU+B是大的負值或正值),所以這 導致反向傳播時低層神經網路的梯度消失 ,這是訓練深層神經網路收斂越來越慢的 本質原因 , 而BN就是通過一定的規范化手段,把每層神經網路任意神經元這個輸入值的分布強行拉回到均值為0方差為1的標准正態分布 ,其實就是把越來越偏的分布強制拉回比較標準的分布,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數較大的變化,意思是 這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味著學習收斂速度快,能大大加快訓練速度。

但是接下來的問題是:如果都通過BN,那麼不就跟把非線性函數替換成線性函數效果相同了,意味著網路的非線性表達能力下降了, 所以BN為了保證非線性的獲得,對變換後的滿足均值為0方差為1的x又進行了scale加上shift操作(y=scale*x+shift), 每個神經元增加了兩個參數scale和shift參數,這兩個參數是通過訓練學習到的,意思是通過scale和shift把這個值從標准正態分布左移或者右移一點並長胖一點或者變瘦一點,每個實例挪動的程度不一樣,這樣等價於激活前的值經過標准正太分布歸一化後再從正中心周圍的線性區往非線性區動了動。核心思想應該是想找到一個線性和非線性的較好平衡點,既能享受非線性的較強表達能力的好處,又避免太靠非線性區兩頭使得網路收斂速度太慢

Batch Normalization 好處:(1)提高了訓練速度,收斂速度也大大加快(2)另外調參過程也簡單多了,對於初始化要求沒那麼高,而且可以使用大的學習率等 (3)可以防止梯度消失(4)BN類似於Dropout的一種防止過擬合的正則化表達方式,可以有效防止過擬合,不用太依賴dropou和正則化

以下情況最好不要使用BN:(1)數據不平衡(2)batch_size太小

batch_size是機器學習中的一個重要參數,決定了梯度下降的方向,如果數據集比較小,完全可以採用全數據集的形式計算梯度,由全數據集確定的梯度方向能夠更好地代表樣本總體,從而更准確地朝向極值所在的方向。對於大型數據集則需要使用mini-batch_size,因為隨著數據集的海量增長和內存限制,一次性載入所有的數據進來變得越來越不可行。

當batch_size=1,即在線學習,模型難以達到收斂 。

合理增加batch_size好處 :

(1)內存利用率提高了,大矩陣乘法的並行化效率提高

(2)跑完一次 epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。

(3)在一定范圍內,一般來說 Batch_Size 越大,其確定的下降方向越准,引起訓練震盪越小

盲目增大 Batch_Size 壞處 :

(1)內存利用率提高了,但是內存容量可能撐不住了

(2)跑完一次 epoch(全數據集)所需的迭代次數減少,要想達到相同精度所需要的 epoch 數量越來越多,花費的時間越長

(3)大的batchsize收斂到sharp minimum,而小的batchsize收斂到flat minimum,後者具有更好的泛化能力。

總之batchsize在變得很大(超過一個臨界點)時,會降低模型的泛化能力。在這個臨界點之下,模型的性能變換隨batch size通常沒有學習率敏感

    目標所在的真實框(ground truth) 與演算法預測的目標所在的框(bounding box)的交集與並集的比值,我們會用IOU閾值來判定預測的bounding box是否有效。一般閾值會設定在0.5,當IOU的值大於等於0.5時,我們會把這個預測的bounding box 歸為正類,而小於0.5的歸為負類。

牛頓法使用的是目標函數的二階導數,在高維情況下這個Hessian(n*n維度)矩陣非常大,計算復雜度是n*n,計算和存儲都是問題

(1) 通過控制卷積核個數實現升維或者降維,從而減少模型參數和計算量

(2) 用於不同channel上特徵的融合

(3)1x1的卷積相當於全連接層的計算過程,並且加入了非線性激活函數,從而增加了網路的非線性,使得網路可以表達更加復雜的特徵。

它能夠把輸入的連續實值變換為0和1之間的輸出,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1

缺點:

(1)函數的飽和區,導致梯度幾乎為0,造成梯度消失問題

(2)Sigmoid 的 output 不是0均值,具體解釋見 https://blog.csdn.net/tyhj_sf/article/details/79932893

(3)其解析式中含有冪運算,計算機求解時相對來講比較耗時。對於規模比較大的深度網路,這會較大地增加訓練時間。

它解決了Sigmoid函數的不是零均值輸出問題,然而,梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在。

(1)在正區間解決了梯度消失的問題

(2)函數簡單,計算速度快,收斂速度遠快於sigmoid和tanh

缺點:

(1)Relu函數輸出不是0均值

(2)神經元壞死問題:指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新,有兩個主要原因導致這種狀況發生

        (1) 非常不幸的參數初始化,這種情況比較少見 

        (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網路進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的演算法

為了解決ReLU函數帶來的神經元壞死問題 , 提出了將ReLU的前半段設為αx,α通常設為0.01,,另外一種直觀的想法是基於參數的方法PReLU函數, α可由方向傳播演算法學習出來。

ELU也是為解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:(1)不會有神經元壞死現象(2)函數輸出均值接近於0

但是ELU的小問題就是計算量稍微有點大。

1、使用不同的激活函數,比如Relu,Leak-Relu,PRelu,elu等激活函數代替sigmoid函數

2、使用Batch Normalizaion(批量歸一化)

3、使用殘差網路

4、預訓練加微調

1、梯度裁剪

2、權重正則化

兩個3x3的卷積核的感受野比5x5的卷積核的感受野大,在保持相同感受野的同時,用3x3的卷積核可以提升網路的深度,可以很明顯的減少計算量。

1、局部連接

2、權值共享:減小參數量

3、池化操作:增大感受野

4、多層次結構:可以提取low-level以及high-level的信息

1、數據集太小,數據樣本不足時,深度學習相對其它機器學習演算法,沒有明顯優勢。

2、數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單片語合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習演算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。

作用 :對輸入的特徵圖進行壓縮,

一方面使特徵圖變小,簡化網路計算復雜度;

一方面進行特徵壓縮,提取主要特徵。

通常來講,max-pooling的效果更好,雖然max-pooling和average-pooling都對數據做了下采樣,但是 max-pooling感覺更像是做了特徵選擇,選出了分類辨識度更好的特徵,提供了非線性 。 pooling的主要作用一方面是去掉冗餘信息,一方面要保留feature map的特徵信息,在分類問題中,我們需要知道的是這張圖像有什麼object,而不大關心這個object位置在哪,在這種情況下顯然max pooling比average pooling更合適。在 網路比較深的地方,特徵已經稀疏了,從一塊區域里選出最大的,比起這片區域的平均值來,更能把稀疏的特徵傳遞下去 。

average-pooling更強調對整體特徵信息進行一層下采樣,在減少參數維度的貢獻上更大一點,更多的體現在 信息的完整傳遞這個維度 上,在一個很大很有代表性的模型中,比如說DenseNet中的模塊之間的連接大多採用average-pooling,在減少維度的同時,更有利信息傳遞到下一個模塊進行特徵提取。

average-pooling在 全局平均池化操作 中應用也比較廣,在ResNet和Inception結構中最後一層都使用了平均池化。有的時候在模型接近 分類器的末端使用全局平均池化還可以代替Flatten操作 ,使輸入數據變成一位向量。

CNN網路中另外一個不可導的環節就是Pooling池化操作,因為Pooling操作使得feature map的尺寸變化,假如做2×2的池化(步長也為2),假設那麼第l+1層的feature map有16個梯度,那麼第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據這條原則,mean pooling和max pooling的反向傳播也是不同的

mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那麼反向傳播的過程也就是把 某個元素的梯度等分為n份分配給前一層,這樣就保證池化前後的梯度(殘差)之和保持不變 ,圖示如下 :

(2) max pooling

max pooling也要滿足梯度之和不變的原則 ,max pooling的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被舍棄掉。那麼 反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。 所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變數就是記錄最大值所在位置的,因為在反向傳播中要用到,那麼假設前向傳播和反向傳播的過程就如下圖所示 :

28、細粒度分類

29、LSTM&RNN

30、解釋LSTM結構(相對於RNN)的好處

31、RNN的梯度消失原因和解決辦法

32、Object Detection

33、Unet的介紹

34、FCN和Unet的區別

35、RCNN系列的演算法流程和區別

36、Fast RCNN中 bbox 回歸的損失函數什麼

37、解釋 ROI Pooling 和 ROI Align

38、Mask RCNN中 mask branch 如何接入 Faster RCNN中

39、解釋 FPN

40、解釋 ROI Align

41、簡述 YOLO 和 SSD

42、簡述 Hough 直線檢測、Sobel 邊緣檢測演算法流程

43、Mask RCNN中的anchors如何判定為正負樣本

44、簡述 NMS 演算法流程

45、attention起源是用在哪裡?pixel還是frame,是soft還是hard

46、anchor的正負樣本比是多少

47、演算法和激活函數等

48、BN的原理和作用

49、BN層反向傳播,怎麼求導

50、BN 的作用和缺陷,以及針對batch_size小的情況的改進(GN)

51、BN層,先加BN還是激活,有什麼區別

52、手推BP

53、優化演算法舉例和他們的區別(SGD、SGDM、RMSprop、Adam)

54、隨機梯度下降和梯度下降

55、訓練不收斂的原因有哪些

56、簡述 SVM 流程、核函數尋參及常見的核函數舉例

57、batch_size 和 learning rate 的關系(怎麼平衡和調整二者)

58、解釋過擬合和欠擬合,以及解決方法

59、激活函數有哪些,各自區別

60、損失函數有哪些

61、Sigmoid 和 ReLu 對比(各自優缺點)

62、為什麼不用sigmoid而用relu?做出了哪些改進?

63、梯度消失和梯度爆炸的原因和解決方法

64、Precision 和 Recall 的定義

65、精確率高、召回率低是為什麼

66、SVM,線性回歸和邏輯回歸的原理及區別

67、PCA原理,PCA和SVD的區別和聯系

68、正則化怎麼選擇,有哪些方式

69、L1、L2范數,區別

70、boost、Adaboost

71、dropout和batch normalization

72、講一下決策樹和隨機森林

73、講一下GBDT的細節,寫出GBDT的目標函數。 GBDT和Adaboost的區別與聯系

74、偏差、方差

75、距離度量公式哪些,區別

76、多標簽識別怎麼做

77、data argumentation怎麼處理的

78、數據不均衡怎麼處理、只有少量帶標簽怎麼處理

79、權重初始化方法都有哪些

80、權值衰減這個參數怎麼設置

81、分類問題有哪些評價指標?每種的適用場景。

82、無監督學習了解哪些

83、圖像處理Opencv

84、邊緣檢測運算元有哪些

85、霍夫變換

86、直方圖是什麼

87、canny運算元是怎麼做的

88、圖像的特徵提取有哪些演算法,適用范圍、優缺點

參考:

https://blog.csdn.net/bluesliuf/article/details/89389117

https://zhuanlan.hu.com/p/107279000

https://zhuanlan.hu.com/p/56475281

閱讀全文

與廣度殘差網路怎麼設置相關的資料

熱點內容
電腦玩原神怎麼設置網路 瀏覽:125
廣聯達網路鎖ip怎麼設置 瀏覽:581
為什麼網路開著卻搜索不到網路 瀏覽:323
路由器與你網路好不好有關系嗎 瀏覽:987
滿格信號為什麼網路不穩定 瀏覽:490
怎麼用手機看自己網路是sa還是nsa 瀏覽:450
怎麼看貓上沒有網路連接 瀏覽:969
如何使用手機設置網路連接 瀏覽:495
手機為啥網路連接上了不可上網 瀏覽:672
為什麼網路上行大於下行 瀏覽:815
網路共享官網 瀏覽:320
集美大學連接無線網路 瀏覽:755
農村用電信網路怎麼交費 瀏覽:911
手機如何分享網路wlan熱點 瀏覽:510
路由器突然顯示5G網路 瀏覽:713
手機怎麼改移動網路路由器密碼 瀏覽:625
保定網路託管業務你知道多少 瀏覽:996
連不上自己家的網路應該怎麼辦 瀏覽:258
風電安裝船上有網路信號嗎 瀏覽:371
共享網路怎麼添加 瀏覽:461

友情鏈接