ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,透過使用Residual Unit成功訓練152層深的神經網絡,在ILSVRC 2015比賽中獲得了冠軍,取得3.57%的top5錯誤率,同時參數量卻比VGGNet低,效果非常突出。 ResNet的結構可以極快地加速超深神經網路的訓練,模型的準確率也有非常大的提升。
ResNet最初的靈感出自這個問題:在不斷增加神經網路的深度時,會出現一個Degradation(退化)的問題,即準確率會先上升然後達到飽和,再持續增加深度則會導致準確率下降。這並不是過度擬合的問題,因為不光在測試集上誤差增加,訓練集本身誤差也會增加。 (推薦學習:PHP影片教學)
ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網路層,存在著最優化的網路層次,那麼往往我們設計的深層網路是有很多網路層為冗餘層的。那我們希望這些冗餘層能夠完成恆等映射,並確保經過該恆等層的輸入和輸出完全相同。具體哪些層是恆等層,這個會有網路訓練的時候自己判斷。將原網絡的幾層改成一個殘差塊.
假設有一個比較淺的網絡達到了飽和的準確率,那麼後面再加上幾個y=x的全等映射層,起碼誤差不會增加,即更深的網路不應該帶來訓練集上誤差上升。而這裡提到的使用全等映射直接將前一層輸出傳到後面的思想,就是ResNet的靈感來源。假設某段神經網路的輸入是x,期望輸出是H(x),如果我們直接把輸入x傳到輸出作為初始結果,那麼此時我們需要學習的目標就是F(x) = H(x) - x。如圖所示,這就是一個ResNet的殘差學習單元(Residual Unit),
ResNet相當於將學習目標改變了,不再是學習一個完整的輸出H(x),只是輸出和輸入的差別H(x)-x,即殘差。
可以看到X是這一層殘差塊的輸入,也稱為F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化並激活後的輸出,該圖表示在殘差網路中,第二層進行線性變化之後激活之前,F(x)加入了這一層輸入值X,然後再進行激活後輸出。在第二層輸出值啟動前加入X,這條路徑稱作shortcut連線。
在使用了ResNet的結構後,可以發現層數不斷加深導致的訓練集上誤差增大的現像被消除了,ResNet網路的訓練誤差會隨著層數增加而逐漸減少,並且在測試集的表現也會變好。在ResNet推出後不久,Google就藉鑒了ResNet的精髓,提出了Inception V4和Inception ResNet V2,並透過融合這兩個模型,在ILSVRC資料集上取得了驚人的3.08%的錯誤率。可見,ResNet及其想法對卷積神經網路研究的貢獻確實非常顯著,具有強烈的推廣性。
更多PHP相關技術文章,請造訪PHP圖文教學欄位進行學習!
以上是resnet網路結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!