ResNet 是深度學習、卷積神經網絡、計算機視覺和人工智能模型結構中非常經典的一個術語,全稱是 Residual Network,通常翻譯為“殘差網絡”。它用來描述一種通過“殘差連接”訓練深層神經網絡的結構。換句話說,ResNet 是在回答:神經網絡變得很深之后,怎樣讓信息和梯度更順暢地傳遞,從而避免訓練困難。
如果說普通是把一層一層計算結果順序傳下去,那么 ResNet 的關鍵思想是:不僅讓網絡學習新的變換,還允許輸入信息直接跨層傳遞。這樣,網絡不必每一層都從零學習完整映射,而是學習“在原有信息基礎上需要補充或修正什么”。
因此,ResNet 常用于圖像分類、目標檢測、圖像分割、特征提取、醫學影像分析、遷移學習和各種視覺模型中,是理解深層卷積神經網絡和殘差學習的重要基礎概念。
一、基本概念:什么是 ResNet
ResNet 是一種以殘差塊為核心構建的深層卷積神經網絡。
普通神經網絡通常按順序計算:
輸入 x → 卷積層 → 激活函數 → 卷積層 → 輸出
如果網絡層數較少,這種結構通常可以正常訓練。
但當網絡變得很深時,訓練會變得困難。即使理論上更深的網絡表達能力更強,實際訓練中也可能出現訓練誤差不降反升的問題。
ResNet 的核心做法是:在若干層卷積計算之外,額外增加一條“捷徑連接”或“跳躍連接”,讓輸入 x 可以直接加到后面的輸出上。
一個基本殘差塊可以寫為:
其中:
? x 表示輸入特征
? F(x) 表示若干卷積層學習到的殘差映射
? y 表示殘差塊輸出
? + 表示逐元素相加
從通俗角度看:普通網絡讓每個模塊直接學習“最終應該輸出什么”。ResNet 讓模塊學習“相對于輸入,還需要改什么”。
這就是“殘差”的含義。
例如,如果某個模塊輸入已經足夠好,那么這個模塊只需要學習接近 0 的殘差:
此時輸出近似為:
也就是說,網絡可以比較容易地保留原有信息,而不必強迫每一層都做復雜變換。
二、為什么需要 ResNet
ResNet 之所以重要,是因為深度神經網絡在變深時會遇到訓練困難。直觀上看,網絡越深,應該越強。
因為更深的網絡可以組合更多層特征,從邊緣、紋理,到局部結構,再到高級語義,逐步形成更復雜的表達能力。
但是,實際訓練中并不是簡單地“層數越多越好”。
當網絡很深時,可能出現:
? 梯度傳播困難
? 參數更新不穩定
? 訓練誤差下降緩慢
? 深層網絡反而比淺層網絡表現差
? 信息在多層變換中逐漸丟失
這類問題常被稱為深層網絡的退化問題。
這里的“退化”不是指過擬合,而是指:更深的網絡在訓練集上也沒有比淺層網絡更好,甚至訓練誤差更高。
這說明問題不只是泛化能力,而是優化本身變難了。
ResNet 的殘差連接可以緩解這個問題。
它讓信息可以跨過若干層直接傳遞,也讓梯度在反向傳播時有更短的路徑回到前面層。
從通俗角度看:普通深層網絡像一條很長的傳話鏈,每一層都要重新加工信息,傳到后面可能變形或變弱。
ResNet 則給信息開了一條“直達通道”,讓重要信息可以直接傳過去。
因此,ResNet 的核心價值是:
? 讓深層網絡更容易訓練
? 緩解深層網絡退化問題
? 改善梯度傳播
? 允許網絡學習殘差而不是完整映射
? 支持構建更深的卷積神經網絡
三、殘差學習的核心思想
ResNet 的關鍵不是簡單“多連一條線”,而是殘差學習。
假設一個網絡模塊原本希望學習某個目標映射:
普通網絡會直接學習:
ResNet 則把這個目標改寫為:
因此:
其中:
? H(x) 表示理想的目標映射
? x 表示輸入
? F(x) 表示殘差映射
? H(x) ? x 表示目標輸出與輸入之間的差異
也就是說,ResNet 讓網絡學習的不是完整目標 H(x),而是輸入與目標之間的差值 F(x)。
從通俗角度看:如果輸入已經接近目標,網絡只需要學習很小的修正。
例如:
? 原始輸入:已經比較接近正確特征
? 殘差分支:只補充需要改變的部分
? 最終輸出:原始輸入 + 修正量
這類似于修改文章。
普通網絡像是要求每一層都重新寫一篇文章。
ResNet 更像是要求每一層只標出“需要改哪里”。如果不需要修改,就讓原文直接通過。
因此,殘差學習降低了深層網絡的優化難度。
四、殘差塊:ResNet 的基本單元
ResNet 不是只在整個網絡末尾加一次殘差連接,而是把網絡拆成許多殘差塊。
一個典型殘差塊包含兩部分:
? 主分支:若干卷積層、歸一化層(批量歸一化,BN)和激活函數
? 捷徑分支:把輸入直接傳到輸出處
![]()
圖 1:ResNet 的殘差連接與殘差塊
在數學上可以寫為:
其中:
? F(x; W) 表示主分支中的卷積變換
? W 表示主分支中的可學習參數
? x 表示捷徑分支傳來的輸入
? y 表示相加后的輸出
如果輸入和輸出形狀相同,可以直接相加。
如果輸入和輸出形狀不同,例如通道數變化或空間尺寸變化,就需要在捷徑分支中使用 1 × 1 卷積進行匹配:
其中:
? W_s 表示捷徑分支上的投影變換
? W_s x 用來調整 x 的通道數或空間尺寸
從通俗角度看:如果輸入和輸出“尺寸一樣”,可以直接走捷徑。如果尺寸不一樣,就需要先通過 1 × 1 卷積把它們調整到可相加的形狀。
五、殘差連接為什么有用
殘差連接有用,主要體現在兩個方面:
? 前向傳播中保留信息
? 反向傳播中改善梯度流動
1、前向傳播:信息更容易保留
在普通網絡中,輸入信息必須經過層層變換。如果某些層沒有學好,信息可能被破壞。
在 ResNet 中,輸入 x 可以通過捷徑分支直接傳到輸出:
如果主分支暫時沒有學到有用變換,至少 x 仍然可以保留下來。
從通俗角度看:殘差連接讓網絡可以“保底”。即使某些層暫時學得不好,也不至于完全阻斷信息。
2、反向傳播:梯度更容易傳回前面層
訓練神經網絡需要通過反向傳播更新參數。如果網絡很深,梯度可能在層層傳遞中變得很小。
殘差連接為梯度提供了更直接的路徑。
從數學直覺上看,如果:
那么 y 對 x 的變化不僅來自 F(x),還包含一條直接路徑。這使得梯度可以更順暢地傳回前面的層。
從通俗角度看:普通深層網絡像必須經過很多關卡才能傳回反饋。
ResNet 增加了捷徑通道,讓反饋可以更快回到前面層。
因此,ResNet 能夠訓練非常深的網絡,例如幾十層、上百層,甚至更深的變體。
六、ResNet 的整體結構
ResNet 的整體結構通常由多個殘差塊堆疊而成。
![]()
圖 2:ResNet 的整體結構與常見版本
一個典型 ResNet 可以概括為:
分類輸出其中,多個殘差階段通常會逐步降低空間分辨率、增加通道數。
例如:
類別預測從通俗角度看:ResNet 前面層學習邊緣、紋理等低級特征;中間層學習局部結構;后面層學習對象部件和高級語義。
殘差塊貫穿這些階段,使深層特征學習更加穩定。
常見 ResNet 版本包括:
? ResNet-18
? ResNet-34
? ResNet-50
? ResNet-101
? ResNet-152
數字通常表示網絡大致層數。
例如,ResNet-50 表示約 50 層的 ResNet 結構。
需要注意,不同版本中的殘差塊設計可能不同。
較淺的 ResNet 常使用 basic block,較深的 ResNet 常使用 bottleneck block。
七、Basic Block 與 Bottleneck Block
ResNet 中常見兩類殘差塊:
? Basic Block
? Bottleneck Block
1、Basic Block
Basic Block 通常用于較淺的 ResNet,例如 ResNet-18、ResNet-34。
它的主分支通常包含兩個 3 × 3 卷積:
3 × 3 卷積 → BN → ReLU → 3 × 3 卷積 → BN
然后與捷徑分支相加,再經過 ReLU。
從通俗角度看:Basic Block 結構直接,適合較淺網絡。
2、Bottleneck Block
Bottleneck Block 通常用于較深的 ResNet,例如 ResNet-50、ResNet-101、ResNet-152。
它的主分支通常包含:
1 × 1 卷積 → 3 × 3 卷積 → 1 × 1 卷積
其中:
? 第一個 1 × 1 卷積用于降維
? 中間 3 × 3 卷積用于空間特征提取
? 最后一個 1 × 1 卷積用于升維
從通俗角度看:Bottleneck Block 像是先把通道壓縮,再做主要計算,最后恢復通道數。
這樣可以減少計算量,使更深的網絡更容易訓練。
可以概括為:
? Basic Block:結構簡單,常用于 ResNet-18 / 34
? Bottleneck Block:先降維再升維,常用于 ResNet-50 / 101 / 152
八、ResNet 的常見應用場景
ResNet 最初主要用于圖像分類,但后來被廣泛用作計算機視覺基礎骨干網絡。
1、圖像分類
ResNet 可以直接用于圖像分類任務。例如:
輸入圖片 → ResNet → 類別概率
它可以判斷圖像屬于貓、狗、汽車、飛機等類別。
由于 ResNet 能訓練較深網絡,因此可以提取更強的圖像特征。
2、目標檢測
在目標檢測中,ResNet 常作為 backbone,用于提取圖像特征。例如:
輸入圖像 → ResNet 特征提取 → 檢測頭 → 邊界框 + 類別
目標檢測模型通常不會只用 ResNet 的最終分類輸出,而是使用其中間特征圖。
3、圖像分割
在語義分割、醫學圖像分割中,ResNet 也常作為編碼器。例如:
輸入圖像 → ResNet 編碼器 → 解碼器 → 像素級預測
這類結構可以利用 ResNet 提取語義特征,再通過解碼器恢復空間分辨率。
4、遷移學習
ResNet 常用于遷移學習。
先使用在大規模圖像數據上預訓練好的 ResNet,再把它遷移到自己的任務中。例如:
? 凍結前面層,只訓練分類頭
? 微調整個網絡
? 使用 ResNet 提取圖像特征
從通俗角度看:預訓練 ResNet 像一個已經學過大量圖像知識的視覺特征提取器。在新任務中,它不必從零開始學習邊緣、紋理和形狀。
九、ResNet 的優勢、局限與使用注意事項
1、ResNet 的主要優勢
ResNet 最大的優勢是讓深層網絡更容易訓練。
它通過殘差連接改善信息和梯度傳播,緩解深層網絡退化問題。
其次,ResNet 是非常通用的視覺骨干網絡。
它可以用于分類、檢測、分割、檢索、醫學影像等任務。
再次,ResNet 適合遷移學習。
許多深度學習框架都提供預訓練 ResNet,可以直接用于特征提取或微調。
從通俗角度看,ResNet 的優勢在于:它讓網絡可以“加深而不容易學壞”。
2、ResNet 的主要局限
ResNet 也有局限。
首先,ResNet 仍然主要依賴卷積結構。
它擅長局部空間特征提取,但對全局長距離關系的直接建模能力不如注意力機制靈活。
其次,深層 ResNet 計算量仍然較大。
例如 ResNet-101、ResNet-152 在訓練和推理時都需要較多計算資源。
再次,ResNet 并不自動解決數據不足或標注質量差的問題。
如果數據量太少、噪聲太多,模型仍然可能過擬合或學習到錯誤模式。
此外,ResNet 的殘差連接要求相加特征形狀匹配。
如果通道數或空間尺寸變化,需要用投影捷徑進行調整。
3、使用 ResNet 時需要注意的問題
使用 ResNet 時,需要注意:
? 殘差相加要求特征形狀一致
? 通道數變化時可使用 1 × 1 卷積匹配
? ResNet-18 / 34 常用 Basic Block
? ResNet-50 / 101 / 152 常用 Bottleneck Block
? 遷移學習時可先凍結 backbone
? 小數據任務要注意過擬合
? 分類任務常接全局平均池化和全連接層
? 檢測、分割任務常取中間特征圖
? 輸入圖像預處理要與預訓練模型保持一致
從實踐角度看,ResNet 是非常可靠的視覺基礎模型,但是否選擇更深版本,需要結合數據規模、任務難度和計算資源判斷。
十、Python 示例
下面給出幾個簡單示例,用來幫助理解 ResNet 的基本使用。
示例 1:一個簡化殘差塊
這個例子中:
? 輸入和輸出形狀相同
? 主分支學習 F(x)
? 捷徑分支直接傳遞 x
? 輸出為 F(x) + x
示例 2:通道數變化時的投影捷徑
這個例子中:
? 主分支把通道數從 64 變為 128
? stride=2 讓空間尺寸從 32 × 32 變為 16 × 16
? 捷徑分支也必須使用 1 × 1 卷積同步調整形狀,這樣兩個分支才能相加
示例 3:使用 torchvision 中的 ResNet
這個例子中:
? ResNet-18 接收圖像 batch
? 最后全連接層輸出 10 個類別分數
? logits 形狀為 batch size × num_classes
示例 4:使用 ResNet 作為特征提取器
這個例子中:
? ResNet 被用作圖像特征提取器
? 輸出特征可以用于分類、檢索或下游任務
小結
ResNet 是一種以殘差連接為核心的深層卷積神經網絡。它讓網絡學習輸入與目標之間的“修正量”,而不是每層都重新學習完整映射。殘差連接改善了信息和梯度傳播,使更深的網絡更容易訓練。對初學者而言,可以把 ResNet 理解為:一種給深層網絡加入“捷徑通道”的結構,讓模型既能加深,又不容易在訓練中退化。
“點贊有美意,贊賞是鼓勵”
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.