深度學習-卷積神經網絡CNN-批量歸一化 BatchNorm

為什么需要批量規范化層呢?

讓我們來回顧一下訓練神經網絡時出現的一些實際挑戰:

  • 首先,數據預處理的方式通常會對最終結果產生巨大影響。 回想一下我們應用多層感知機來預測房價的例子。使用真實數據時,我們的第一步是標準化輸入特征,使其平均值為0,方差為1。 直觀地說,這種標準化可以很好地與我們的優化器配合使用,因為它可以將參數的量級進行統一。

  • 第二,對于典型的多層感知機卷積神經網絡,當我們訓練時,中間層中的變量(例如,多層感知機中的仿射變換輸出)可能具有更廣的變化范圍:不論是沿著從輸入到輸出的層,跨同一層中的單元,或是隨著時間的推移,模型參數的隨著訓練更新變幻莫測。 批量規范化的發明者非正式地假設,這些變量分布中的這種偏移可能會阻礙網絡的收斂。 直觀地說,我們可能會猜想,如果一個層的可變值是另一層的100倍,這可能需要對學習率進行補償調整。

  • 第三,更深層的網絡很復雜,容易過擬合。 這意味著正則化變得更加重要。

批量規范化應用于單個可選層(也可以應用到所有層),其原理如下:

在每次訓練迭代中,我們首先規范化輸入,即通過減去其均值并除以其標準差,其中兩者均基于當前小批量處理。 接下來,我們應用比例系數和比例偏移。 正是由于這個基于批量統計的標準化,才有了批量規范化的名稱。

  • BatchNorm 在 一個 batch 的同一通道 內做歸一化

  • LayerNorm 在 每條樣本的 所有通道/特征 內做歸一化

作用:把輸入分布強行壓成 零均值、單位方差,減輕 Internal Covariate Shift 內部協變量偏移,使優化曲面更平滑,從而讓梯度更穩定、訓練更快、更易收斂到較優的泛化解。

計算例子

下面用 3×4 的 RGB 小批次張量舉例,并給出計算過程與差異對照:

數據形狀約定:設輸入 x 形狀為 (B, C, H, W) = (2, 3, 2, 2):

  1. 2 張圖片

  2. 3 個通道 (R, G, B)

  3. 每通道 2×2 像素

把每張圖片展平后,張量變成:

batch0-0R: [[1, 3], [5, 7]]    → 4 個標量 1 3 5 7G: [[2, 4], [6, 8]]    → 2 4 6 8B: [[0, 2], [4, 6]]    → 0 2 4 6batch0-1R: [[2, 4], [6, 8]]G: [[3, 5], [7, 9]]B: [[1, 3], [5, 7]]

BatchNorm 的計算:BN是在同一個batch中不同樣本之間的同一位置的神經元之間進行歸一化。

  • 歸一化維度:在 (B, H, W) 三個維度上求均值/方差,每個通道一組統計量。

  • 以 R 通道為例: 共有 2×2×2 = 8 個像素值:{1, 3, 5, 7, 2, 4, 6, 8}

    • μ_R = (1+3+5+7+2+4+6+8)/8 = 4.5

    • σ2_R = 平均((x?4.5)2) = 5.25

  • 歸一化后每個像素先做 (x?μ)/√(σ2+ε),再進行 γ·x + β 的仿射。 G、B 通道同理,各自獨立擁有一組 μ、σ、γ、β。

  • 參數:每個通道一對 (γ, β),共 3×2 = 6 個可學習標量。

  • 推理階段:用滑動平均保存的全局 μ、σ,不再依賴 batch。

LayerNorm 的計算:LN是在同一個樣本中不同神經元之間進行歸一化。

  • 歸一化維度:在 (C, H, W) 三個維度上求均值/方差,每條樣本一組統計量。

  • 以 batch-0 為例: 把 3×2×2 = 12 個數拉成一條向量: {1, 3, 5, 7, 2, 4, 6, 8, 0, 2, 4, 6}

    • μ = 4.0

    • σ2 = 平均((x?4)2) = 5.0

  • 歸一化后再用 該樣本獨有 的 γ、β 做仿射。 batch-1 同理,用 batch-1 自己的 12 個數重新算 μ、σ。

  • 參數:每條樣本一對 (γ, β),可共享或不共享,與 BatchNorm 不同。

為什么有效?

  • 輸入:手寫數字灰度圖,只保留 2 個像素 → 輸入 x 形狀 (batch, 2)。

  • 網絡:2 層線性 y = W? ReLU(W?x)。

  • 任務:二分類 0/1,用 Sigmoid + BCE 損失。

  • 假設 batch = 4,像素值如下(故意把范圍拉大):

    x = [[200, 190],[10,  5],[180, 170],[8,   4]]

  • 真實標簽 y = [0,? 1,? 0,? 1]

沒有歸一化時(裸網絡)

  • 第一層輸出 z? = W?x,假設 W? 隨機初始化后, z? 的均值≈180,方差≈6000。

  • 經過 ReLU 后,大多數值落在 0 或 >100 的區間 → 梯度在反向傳播時: – 很大值那一端 → 梯度爆炸; – 很多 0 → 梯度消失。 結果:Loss 震蕩劇烈,訓練 10 個 epoch 仍降不下來。

加上 BatchNorm(放在第一層之后):

  1. 計算 batch 內每個通道的均值 μ、方差 σ2:

    • μ? = (200+10+180+8)/4 = 99.5

    • μ? = (190+5+170+4)/4 = 92.25

  2. 歸一化:

    • ?? = (z? ? μ?)/√(σ?2+ε)

    • ?? = (z? ? μ?)/√(σ?2+ε)

  3. 現在所有值縮放到 ≈[-1,1] 區間。

  4. 再乘可學習 γ、β 做仿射,保持表達能力。

  5. 效果:

    • 第一層輸出方差≈1,ReLU 后的分布不再極端

    • 反向傳播時梯度大小穩定,loss 單調下降,3 個 epoch 就收斂。

加上 LayerNorm(放在第一層之后)

  • 對每條樣本的所有特征一起算 μ、σ2:

    • 樣本 0:μ = (200+190)/2 = 195

    • 樣本 1:μ = (10+5)/2 = 7.5

    • …………

  • 每條樣本內部做 (x?μ)/σ,再 γ、β。

    • 效果:

      • 即使 batch 大小變成 1 也能用(LN 不依賴 batch)。

      • 輸入尺度被拉齊,梯度同樣穩定,收斂速度與 BN 相近。

比較點

BatchNorm

LayerNorm

歸一化范圍

跨 batch 的同一通道

單條樣本 內的全部特征

均值/方差維度

(B, H, W)

(C, H, W)

依賴 batch 大小

是(推理時用滑動平均)

典型場景

CNN、大 batch

RNN、Transformer、小 batch

參數量

每通道一對 γβ

每層/每樣本一對 γβ

因此:

  • 在 CNN 里用 BatchNorm,你會看到“所有圖片的 R 通道一起歸一化”;

  • 在 Transformer 里用 LayerNorm,你會看到“每個 token 的所有維一起歸一化”。

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

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

相關文章

機器學習-支持向量機器(SVM)

0.1 數字識別 from sklearn.svm import SVC from sklearn.metrics import silhouette_score import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.feature_extraction import DictVectorizer from sk…

昆山PCB板工廠有哪些?

在長三角電子信息產業版圖中,昆山憑借完整的產業鏈配套和精湛的制造工藝,成為國內PCB(印制電路板)生產的重要基地。本文精選五家具有代表性的本土工廠,從技術實力到服務特色展開深度剖析,為行業客戶提供精準…

rk3588 ubuntu20.04安裝包經常出現的問題總結(chatgpt回復)

問題1 問題 我在rk3588 ubuntu20.04安裝相關環境的時候經常出現下面類似的問題,如何系統的解決 The following packages have unmet dependencies : openssh-server : Depends: openssh-client ( 1:8.2p1-4ubuntu0.13) but 1:8.2p1-4ubuntu0.11 is to be installed …

從根源到生態:Apache Doris 與 StarRocks 的深度對比 —— 論開源基因與長期價值的優越性

在 OLAP 領域,Apache Doris 與 StarRocks 常被一同提及,兩者有著深厚的技術淵源 ——StarRocks 源自 Apache Doris 的代碼 Fork,卻在后續發展中走向了不同的路徑。本文將從代碼根源、架構演進、社區生態、功能特性等多維度展開對比。 一、代…

【從零開始學習Redis】項目實戰-黑馬點評D1

項目實戰-黑馬點評 項目架構短信登錄發送短信驗證碼 實現思路就是按照上圖左一部分&#xff0c; 實現類如下 Slf4j Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {/*** 驗證手機號發送驗證碼** param phone* pa…

自然語言處理的范式轉變:從Seq2Seq模型到Transformer架構

Seq2Seq 定義 Seq2Seq是一個Encoder-Decoder結構的網絡&#xff0c;它的輸入是一個序列&#xff0c;輸出也是一個序列&#xff0c; Encoder使用循環神經網絡(RNN,GRU&#xff0c;LSTM等)&#xff0c;將一個可變長度的信號序列(輸入句子)變為固定維度的向量編碼表達&#xff0c;…

【博客系統測試報告】---接口自動化測試

目錄 1、需求分析 2、挑選接口 3、設計博客系統的測試用例 4、設計自動化測試框架 test_add.py: test_detail.py: test_getAuthorInfo.py: test_getUserInfo: test_list.py: test_login.py: logger_util.py: request_util.py: yaml_util.py: 1、需求分析 根據業務…

Mysql數據庫遷移到GaussDB注意事項

mysql數據庫遷移高斯數據庫 建議開啟高斯數據庫M模式&#xff0c;mysql兼容模式&#xff0c;可以直接使用mysql的建表語句&#xff0c;自增主鍵可以使用AUTO_INCREMENT&#xff0c;如果不開啟M模式&#xff0c;只能使用高斯數據庫的序列添加自增主鍵1&#xff1a;如果使用數據庫…

蘋果正計劃大舉進軍人工智能硬件領域

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Serverless 架構核心解析與應用實踐

Serverless 的核心定義與優勢??核心定義Serverless&#xff08;無服務器架構&#xff09;是一種云計算模型&#xff0c;開發者無需關注底層服務器管理&#xff0c;由云服務商自動分配資源、彈性擴縮容&#xff0c;并按實際使用量計費?。其核心特點包括&#xff1a;?按需計算…

Redis持久化機制詳解:RDB與AOF的全面對比與實踐指南

目錄 一、RDB持久化機制 1.1 RDB概述 1.2 RDB觸發機制 1) 手動執行save命令 2) 手動執行bgsave命令 3) Redis正常關閉時 4) 自動觸發條件滿足時 1.3 RDB詳細配置 1.4 RDB實現原理 1.5 RDB的優缺點分析 二、AOF持久化機制 2.1 AOF概述 2.2 AOF工作流程 2.3 AOF同步…

介紹一下jQuery的AJAX異步請求

目錄 一、核心方法&#xff1a;$.ajax() 二、簡化方法&#xff08;常用場景&#xff09; 1. $.get()&#xff1a;快速發送 GET 請求&#xff08;獲取數據&#xff09; 2. $.post()&#xff1a;快速發送 POST 請求&#xff08;提交數據&#xff09; 3. $.getJSON()&#xf…

Win10系統Ruby+Devkit3.4.5-1安裝

Win10系統RubyDevkit3.4.5-1安裝安裝步驟軟件工具安裝Ruby安裝gem mysql2處理libmysql.dll驗證mysql2安裝步驟 軟件工具 mysql-connector-c-6.1.11-winx64.zip rubyinstaller-devkit-3.4.5-1-x64.exe 安裝Ruby 執行rubyinstaller-devkit-3.4.5-1-x64.exe&#xff0c;期間可…

社交工程:洞穿人心防線的無形之矛

在網絡安全領域&#xff0c;一道無形的裂痕正在迅速蔓延。它不是復雜的零日漏洞&#xff0c;也不是精妙的惡意代碼&#xff0c;而是利用人性弱點進行攻擊的古老技藝——社交工程。當全球網絡安全支出突破千億美元大關&#xff0c;防火墻筑得越來越高&#xff0c;加密算法越來越…

Go 并發控制利器 ants 使用文檔

https://github.com/panjf2000/ants1.1 什么是 ants ants 是一個高性能的 Go 語言 goroutine 池&#xff0c;它能復用已完成任務的 goroutine&#xff0c;避免頻繁創建和銷毀 goroutine&#xff0c;節省 CPU 與內存開銷&#xff0c;并且能限制并發數量防止資源被耗盡。 1.2 安裝…

Day57--圖論--53. 尋寶(卡碼網)

Day57–圖論–53. 尋寶&#xff08;卡碼網&#xff09; 今天學習&#xff1a;最小生成樹。有兩種算法&#xff08;Prim和Kruskal&#xff09;和一道例題。 prim 算法是維護節點的集合&#xff0c;而 Kruskal 是維護邊的集合。 最小生成樹&#xff1a;所有節點的最小連通子圖&am…

解決海洋探測數據同步網絡問題的新思路——基于智能組網技術的探索

隨著海洋探測技術的不斷發展&#xff0c;數據同步網絡的穩定性和低延遲需求變得愈發重要。海洋探測數據來自多個分布式采集點&#xff0c;這些點需要高效的組網方式來實現實時數據傳輸。然而&#xff0c;由于海洋環境的特殊性&#xff08;如復雜的網絡拓撲、高濕度和極端溫度&a…

設計模式筆記_行為型_責任鏈模式

1. 責任鏈模式介紹責任鏈模式&#xff08;Chain of Responsibility&#xff09;是一種行為設計模式&#xff0c;它允許將多個處理器&#xff08;處理對象&#xff09;連接成一條鏈&#xff0c;并沿著這條鏈傳遞請求&#xff0c;直到有一個處理器處理它為止。職責鏈模式的主要目…

pygame的幀處理中,涉及鍵盤的有`pg.event.get()`與`pg.key.get_pressed()` ,二者有什么區別與聯系?

一、pg.event.get() 返回的是一組事件 pg.event.get() 返回的是一組事件&#xff08;一個包含多個事件對象的列表&#xff09;。這是因為在游戲的“一幀”時間內&#xff08;通常1/60秒左右&#xff09;&#xff0c;用戶可能會觸發多個事件&#xff08;比如同時按下多個鍵、快速…

TF - IDF算法面試與工作常見問題全解析

在自然語言處理領域&#xff0c;TF - IDF算法是一個基礎且重要的概念。無論是在求職面試還是在實際工作中&#xff0c;都經常會遇到與TF - IDF相關的問題。以下是一些常見的問題及其詳細解答&#xff1a; 一、基本概念類問題 1. 什么是TF - IDF算法&#xff1f; TF - IDF&#…