深度学习笔记(七)–ResNet(残差网络)
內容來自吳恩達老師視頻,網易云課堂有哦
ResNets
非常非常深的神經網絡是很難訓練的,因為存在梯度消失和梯度爆炸問題。ResNets是由殘差塊(Residual block)構建的,首先解釋一下什么是殘差塊。
這是一個兩層神經網絡,在 層進行激活,得到 ,再次進行激活,兩層之后得到 。計算過程是從 開始,首先進行線性激活,根據這個公式: ,通過 算出 ,即 乘以權重矩陣,再加上偏差因子。然后通過ReLU非線性激活函數得到 , 計算得出。接著再次進行線性激活,依據等式 ,最后根據這個等式再次進行ReLu非線性激活,即 ,這里的 是指ReLU非線性函數,得到的結果就是 。換句話說,信息流從 到 需要經過以上所有步驟,即這組網絡層的主路徑。
在殘差網絡中有一點變化,我們將 直接向后,拷貝到神經網絡的深層,在ReLU非線性激活函數前加上 ,這是一條捷徑。] 的信息直接到達神經網絡的深層,不再沿著主路徑傳遞,這就意味著最后這個等式 )去掉了,取而代之的是另一個ReLU非線性函數,仍然對 進行 函數處理,但這次要加上 ,即:? ,也就是加上的這個 產生了一個殘差塊。
在上面這個圖中,我們也可以畫一條捷徑,直達第二層。實際上這條捷徑是在進行ReLU非線性激活函數之前加上的,而這里的每一個節點都執行了線性函數和ReLU激活函數。所以 插入的時機是在線性激活之后,ReLU激活之前。除了捷徑,你還會聽到另一個術語“跳躍連接”,就是指 跳過一層或者好幾層,從而將信息傳遞到神經網絡的更深層。
ResNet的發明者是何愷明(Kaiming He)、張翔宇(Xiangyu Zhang)、任少卿(Shaoqing Ren)和孫劍(Jiangxi Sun),他們發現使用殘差塊能夠訓練更深的神經網絡。所以構建一個ResNet網絡就是通過將很多這樣的殘差塊堆積在一起,形成一個很深神經網絡,我們來看看這個網絡。
這并不是一個殘差網絡,而是一個普通網絡(Plain network),這個術語來自ResNet論文。
把它變成ResNet的方法是加上所有跳躍連接,每兩層增加一個捷徑,構成一個殘差塊。如圖所示,5個殘差塊連接在一起構成一個殘差網絡。
如果我們使用標準優化算法訓練一個普通網絡,比如說梯度下降法,或者其它熱門的優化算法。如果沒有殘差,沒有這些捷徑或者跳躍連接,憑經驗你會發現隨著網絡深度的加深,訓練錯誤會先減少,然后增多。而理論上,隨著網絡深度的加深,應該訓練得越來越好才對。也就是說,理論上網絡深度越深越好。但實際上,如果沒有殘差網絡,對于一個普通網絡來說,深度越深意味著用優化算法越難訓練。實際上,隨著網絡深度的加深,訓練錯誤會越來越多。
但有了ResNets就不一樣了,即使網絡再深,訓練的表現卻不錯,比如說訓練誤差減少,就算是訓練深達100層的網絡也不例外。有人甚至在1000多層的神經網絡中做過實驗,盡管目前我還沒有看到太多實際應用。但是對 的激活,或者這些中間的激活能夠到達網絡的更深層。這種方式確實有助于解決梯度消失和梯度爆炸問題,讓我們在訓練更深網絡的同時,又能保證良好的性能。也許從另外一個角度來看,隨著網絡越來深,網絡連接會變得臃腫,但是ResNet確實在訓練深度網絡方面非常有效。
微信公眾號:任冬學編程
tx工作的后端開發仔,分享后端技術、機器學習、數據結構與算法、計算機基礎、程序員面試等話題。歡迎關注。
總結
以上是生活随笔為你收集整理的深度学习笔记(七)–ResNet(残差网络)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP S/4HANA Layer Re
- 下一篇: Linux安装nmtui(nmtui连接