卷積神經網絡 - 匯聚層

卷積神經網絡一般由卷積層、匯聚層和全連接層構成,本文我們來學習匯聚層。

匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進 行特征選擇,降低特征數量,從而減少參數數量。

卷積層雖然可以顯著減少網絡中連接的數量,但特征映射組中的神經元個數并沒有顯著減少。如果后面接一個分類器,分類器的輸入維數依然很高,很容易出現過擬合。為了解決這個問題,可以在卷積層之后加上一個匯聚層,從而降低特征維數,避免過擬合。

在卷積神經網絡(CNN)中,匯聚層(Pooling Layer)?是一種用于降低數據空間維度、增強特征魯棒性的關鍵組件。其核心目標是通過對局部區域進行壓縮抽象,保留重要信息的同時減少計算量。以下從多個角度詳細解析匯聚層的工作原理和實際意義:

一、匯聚層的核心功能

功能說明
降維壓縮減少特征圖尺寸(如4×4 → 2×2),降低后續層計算復雜度。
特征抽象通過取最大值/平均值,突出顯著特征,抑制噪聲和細節干擾。
平移不變性微小位置變化不影響輸出(如貓耳朵偏移5像素仍被檢測到)。
防止過擬合降低參數量的同時引入輕微擾動,增強模型泛化能力。

二、匯聚層的類型與計算

1. 最大匯聚(Max Pooling)
  • 操作:在局部窗口內取最大值。

  • 公式

  • 優勢:保留最顯著特征(如邊緣、紋理),適合物體檢測任務。

  • 示例

    • 輸入窗口(2×2):

    • 輸出值:8

2. 平均匯聚(Average Pooling)
  • 操作:在局部窗口內取平均值。

  • 公式

  • 優勢:平滑特征響應,適合分類任務(如ImageNet)。

  • 示例

    • 輸入窗口(2×2):同上

    • 輸出值:(5+8+3+1)/4=4.25

3. 其他變體
  • 全局平均匯聚(Global Average Pooling, GAP):將每個通道的特征圖壓縮為單個值,替代全連接層(如ResNet)。

  • 重疊匯聚(Overlapping Pooling):窗口步長小于窗口尺寸(如AlexNet中3×3窗口步長2),增加信息重疊。

  • 隨機匯聚(Stochastic Pooling):按概率選擇窗口內的值,增強泛化性。

三、匯聚層的實際效果

1. 特征圖尺寸變化
  • 輸入尺寸:H×W×C

  • 匯聚參數:窗口大小?K×K,步長?S

  • 輸出尺寸

  • 示例:輸入7×7,窗口2×2,步長2 → 輸出3×3。

2. 特征抽象過程
  • 淺層匯聚:過濾低層次噪聲(如光照變化)。

  • 深層匯聚:提取語義級特征(如物體部件)。

四、匯聚層與卷積層的對比

維度匯聚層卷積層
參數學習無參數(固定操作)可學習權重和偏置
計算目標壓縮空間維度,增強魯棒性提取局部特征,增加通道數
平移不變性強(最大池化)中等(依賴卷積核設計)
典型位置常用于卷積層后網絡的基礎組件

五、匯聚層的替代方案

1. 步長卷積(Strided Convolution)
  • 原理:用步長>1的卷積直接降維(如步長2的3×3卷積)。

  • 優勢:避免信息丟失(池化可能丟棄有用細節),參數可控。

  • 應用:ResNet、MobileNet等現代網絡常用此方法。

2. 空洞卷積(Dilated Convolution)
  • 原理:通過擴大感受野替代池化,保持分辨率(如語義分割任務)。

  • 示例:空洞率=2的3×3卷積 → 等效5×5感受野。

3. 空間金字塔匯聚(Spatial Pyramid Pooling, SPP)
  • 原理:多尺度池化后拼接,處理任意尺寸輸入(如Fast R-CNN)。

六、總結與選擇建議

核心價值
  • 計算效率:通過降維減少后續層的參數量和計算量。

  • 魯棒性:最大池化提供對微小形變的容忍度。

  • 通用性:簡單有效,適用于大多數視覺任務。

適用場景
  • 必須使用池化:傳統CNN架構(如LeNet、AlexNet)、資源受限場景。

  • 可替代方案:需要高分辨率輸出的任務(如分割)、現代輕量級網絡(如MobileNet)。

設計建議
  1. 淺層網絡:優先使用最大池化(保留關鍵特征)。

  2. 深層網絡:可嘗試步長卷積或空洞卷積(減少信息損失)。

  3. 分類任務:結合全局平均池化(GAP)替代全連接層。

  4. 密集預測任務(如分割):減少池化層數,或用空洞卷積保持分辨率。

最終結論
匯聚層是CNN中平衡計算效率特征魯棒性的關鍵設計,其本質是通過局部區域的統計操作(最大/平均),在壓縮數據的同時保留語義信息。合理選擇池化策略,能顯著提升模型性能與泛化能力。

七、局部窗口內取平均值的例子

以下是一個具體的平均匯聚(Average Pooling)示例,通過逐步計算展示如何在局部窗口內取平均值:

示例設定

  • 輸入特征圖(4×4矩陣):

    [[2, 5, 3, 8],[4, 7, 1, 6],[9, 2, 5, 4],[3, 6, 7, 1]
    ]
  • 池化參數

    • 窗口大小:2×2

    • 步長(Stride):2(不重疊滑動)

    • 填充(Padding):0

計算過程

步驟1:劃分第一個窗口(左上角2×2區域)
  • 覆蓋輸入值

    [2, 5]
    [4, 7]
  • 計算平均值

    (2+5+4+7)/4=18/4=4.5
步驟2:向右滑動窗口(右上角2×2區域)
  • 覆蓋輸入值

    [3, 8]
    [1, 6]
  • 計算平均值

    (3+8+1+6)/4=18/4=4.5
步驟3:向下滑動窗口(左下角2×2區域)
  • 覆蓋輸入值

    [9, 2]
    [3, 6]
  • 計算平均值

    (9+2+3+6)/4=20/4=5.0
步驟4:向右滑動窗口(右下角2×2區域)
  • 覆蓋輸入值

    [5, 4]
    [7, 1]
  • 計算平均值

    (5+4+7+1)/4=17/4=4.25

最終輸出特征圖

[[4.5, 4.5],[5.0, 4.25]
]

關鍵說明

  1. 窗口與步長的影響

    • 輸入尺寸:4×4

    • 窗口大小:2×2

    • 步長:2

    • 輸出尺寸:

  2. 平均池化的意義

    • 平滑特征:抑制極端值(如原始矩陣中的9),保留區域整體強度。

    • 示例對比:若使用最大池化,右下角窗口輸出為7(保留最大值),而平均池化為4.25,反映區域平均水平。

  3. 擴展場景

    • 重疊池化:若步長=1,窗口會重疊,輸出尺寸變為3×3。

    • 全局平均池化:若窗口=輸入尺寸(4×4),輸出單個值:

通過這個例子可以看出,平均池化通過局部平均操作,將輸入特征圖壓縮為更低維度的表示,同時減少對噪聲的敏感度。

八、局部窗口內取最大值的例子

以下是一個具體的最大匯聚(Max Pooling)示例,通過逐步計算展示如何在局部窗口內取最大值:

示例設定

  • 輸入特征圖(4×4矩陣):

    [[2, 5, 3, 8],[4, 7, 1, 6],[9, 2, 5, 4],[3, 6, 7, 1]
    ]
  • 池化參數

    • 窗口大小:2×2

    • 步長(Stride):2(不重疊滑動)

    • 填充(Padding):0

計算過程

步驟1:劃分第一個窗口(左上角2×2區域)
  • 覆蓋輸入值

    [2, 5]
    [4, 7]
  • 取最大值

    max?(2,5,4,7)=7
步驟2:向右滑動窗口(右上角2×2區域)
  • 覆蓋輸入值

    [3, 8]
    [1, 6]
  • 取最大值

    max?(3,8,1,6)=8
步驟3:向下滑動窗口(左下角2×2區域)
  • 覆蓋輸入值

    [9, 2]
    [3, 6]
  • 取最大值

    max?(9,2,3,6)=9
步驟4:向右滑動窗口(右下角2×2區域)
  • 覆蓋輸入值

    [5, 4]
    [7, 1]
  • 取最大值

    max?(5,4,7,1)=7

最終輸出特征圖

[[7, 8],[9, 7]
]

關鍵說明

  1. 窗口與步長的影響

    • 輸入尺寸:4×4

    • 窗口大小:2×2

    • 步長:2

    • 輸出尺寸:

  2. 最大池化的意義

    • 保留顯著特征:例如左下角窗口的輸入值?9(原始特征圖中的最大值)被保留,而平均池化會將其平滑為?5.0

    • 抗噪聲能力:若窗口內存在異常值(如傳感器噪聲),最大池化可能放大噪聲影響,而平均池化可抑制噪聲。

  3. 與平均池化的對比(基于相同輸入):

    池化類型輸出矩陣特征保留傾向
    最大池化[[7,8], [9,7]]突出局部最大值
    平均池化[[4.5,4.5], [5.0,4.25]]反映區域平均水平

擴展場景

  • 重疊窗口(步長=1)
    輸入4×4,窗口2×2,步長1 → 輸出3×3:

    復制

    [[7, 8, 8],[9, 7, 6],[9, 7, 7]
    ]
  • 全局最大池化(窗口=輸入尺寸)
    輸入4×4 → 輸出單個值?9

匯聚層中最大匯聚過程示例圖如下:

最大池化通過保留局部窗口內的最大值,突出圖像中的顯著特征(如邊緣、紋理),適合需要強特征響應的任務(如目標檢測)。而平均池化更適合需要平滑特征分布的場景(如圖像分類)。兩者選擇需根據具體任務需求權衡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue使用element-ui自定義樣式思路分享【實操】

前言 在使用第三方組件時,有時候組件提供的默認樣式不滿足我們的實際需求,需要對默認樣式進行調整,這就需要用到樣式穿透。本篇文章以vue3使用element-ui的Tabs組件,對Tabs組件的添加按鈕樣式進行客制化為例。 確定需要修改的組…

【工具分享】vscode+deepseek的接入與使用

目錄 第一章 前言 第二章 獲取Deepseek APIKEY 2.1 登錄與充值 2.2 創建API key 第三章 vscode接入deepseek并使用 3.1 vscode接入deepseek 3.2 vscode使用deepseek 第一章 前言 deepseek剛出來時有一段時間余額無法充值,導致小編沒法給大家發完整的流程&…

【藍橋杯速成】| 9.回溯升級

題目一:組合綜合 問題描述 39. 組合總和 - 力扣(LeetCode) 給你一個 無重復元素 的整數數組 candidates 和一個目標整數 target ,找出 candidates 中可以使數字和為目標數 target 的 所有 不同組合 ,并以列表形式返…

【C++進階】深入探索類型轉換

目錄 一、C語言中的類型轉換 1.1 隱式類型轉換 1.2. 顯式類型轉換 1.3.C語言類型轉換的局限性 二、C 類型轉換四劍客 2.1 static_cast:靜態類型轉換(編譯期檢查) 2.2 dynamic_cast:動態類型轉換(運行時檢查&…

代碼隨想錄_動態規劃

代碼隨想錄 動態規劃 509.斐波那契數 509. 斐波那契數 斐波那契數 (通常用 F(n) 表示)形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始,后面的每一項數字都是前面兩項數字的和。也就是: F(0) 0,F(1) 1 F(n…

計算機基礎:編碼03,根據十進制數,求其原碼

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:計算機基礎:編碼02,有符號數編碼&#xf…

設計模式(創建型)-單例模式

摘要 在軟件開發的世界里,設計模式是開發者們智慧的結晶,它們為解決常見問題提供了經過驗證的通用方案。單例模式作為一種基礎且常用的設計模式,在許多場景中發揮著關鍵作用。本文將深入探討單例模式的定義、實現方式、應用場景以及可…

基于FPGA頻率、幅度、相位可調的任意函數發生器(DDS)實現

基于FPGA實現頻率、幅度、相位可調的DDS 1 摘要 直接數字合成器( DDS ) 是一種通過生成數字形式的時變信號并進行數模轉換來產生模擬波形(通常為正弦波)的方法,它通過數字方式直接合成信號,而不是通過模擬信號生成技術。DDS主要被應用于信號生成、通信系統中的本振、函…

本地JAR批量傳私服

在有網絡隔離的環境下,Maven項目如果沒有搭建私服就得把用到的通用組件通過U盤在每個組員間拷貝來拷貝去。非常的麻煩跟低效。搭建私服,如果通用組件很多的時候手工一個一個上傳更是非常的麻煩跟低效; 我就遇上這問題,跟A公司合作…

【ROS實戰】02-ROS架構介紹

1. 簡介 你是否曾有過這樣的疑問:我按照文檔安裝了ROS,依照要求寫了一些示例節點(node)、消息(msg)和話題(topic),但覺得過程既麻煩又繁瑣。也許你開始懷疑:…

LeetCode算法題(Go語言實現)_07

題目 給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法,且在 O(n) 時間復…

網絡華為HCIA+HCIP 網絡編程自動化

telnetlib介紹 telnetlib是Python標準庫中的模塊。它提供了實現Telnet功能的類telnetlib.Telnet。這里通過調用telnetlib.Telnet類里的不同方法實現不同功能。 配置云

查看GPU型號、大小;CPU型號、個數、核數、內存

GPU型號、大小 nvidia-smiCPU型號 cat /proc/cpuinfo | grep model name | uniqCPU個數 cat /proc/cpuinfo | grep "physical id" | uniq | wc -lCPU核數 cat /proc/cpuinfo | grep "cpu cores" | uniqCPU內存 cat /proc/meminfo | grep MemTotal參考…

Docker與K8S是什么該怎么選?

用了很久的容器化,最近突然看到一個問題問: docker和K8S究竟有什么區別,到底該怎么選?我認真思考了一會,發現一時間還真說不明白,于是就研究了一段時間發布今天的博文! Docker vs Kubernetes&a…

Android Handler 通過線程安全的 MessageQueue 和底層喚醒機制實現跨線程通信

目錄 一、MessageQueue 的線程安全實現 1. 消息隊列的同步鎖(synchronized) 2. 消息順序與延時處理 二、底層喚醒機制:從 Java 到 Linux 內核 1. 消息插入后的喚醒邏輯 2. Native 層實現(基于 Linux 的 eventfd 和 epoll&am…

關于 2>/dev/null 的作用以及機理

每個進程都有三個標準文件描述符:stdin(標準輸入)、stdout(標準輸出)和stderr(標準錯誤)。默認情況下,stderr會輸出到終端。使用2>可以將stderr重定向到其他地方,比如…

MySQL中的鎖機制:從全局鎖到行級鎖

目錄 1. 鎖的基本概念 2. 全局鎖 2.1 全局鎖的定義 2.2 全局鎖的類型 2.3 全局鎖的使用場景 2.4 全局鎖的實現方式 2.5 全局鎖的優缺點 2.6 全局鎖的優化 3. 表級鎖 3.1 表級鎖的類型 3.2 表級鎖的使用場景 3.3 表級鎖的優缺點 4. 意向鎖(Intention Lo…

編程語言選擇分析:C#、Rust、Go 與 TypeScript 編譯器優化

編程語言選擇分析:C#、Rust、Go 與 TypeScript 編譯器優化 在討論編程語言的選擇時,特別是針對微軟的 C# 和 Rust,以及谷歌的 Go 語言,以及微軟試圖通過 Go 來拯救 TypeScript 編譯器的問題,我們可以從多個角度來分析和…

基于WebRTC的嵌入式音視頻通話SDK:EasyRTC跨平臺兼容性技術架構實時通信的底層實現

EasyRTC的核心架構圍繞WebRTC技術構建,同時通過擴展信令服務、媒體服務器和NAT穿透機制,解決了WebRTC在實際部署中的痛點。其架構可以分為以下幾個核心模塊: 1)WebRTC基礎層 媒體捕獲與處理:通過getUserMediaAPI獲取…

【Rust】包和模塊管理,以及作用域等問題——Rust語言基礎15

文章目錄 1. 前言2. 包和 Crate3. 定義模塊以及模塊之間的關系4. 作用域問題4.1. 作用域問題初現4.2. 解決問題一4.3. 解決問題二4.4. super 關鍵字4.5. 將路徑引入作用域4.6. as 關鍵字4.7. pub use 重導出 5. 引入的問題5.1. 引入一個外部包5.2. 嵌套路徑來消除大量的 use 行…