Batch Normalization:深度學習中的“加速器”與“穩定器”

在深度學習的世界里,神經網絡的訓練常常充滿了挑戰。從復雜的梯度問題到漫長的收斂過程,每一個環節都可能成為阻礙我們前進的絆腳石。

而今天,我們要深入探討的 BatchNormalizationBatch NormalizationBatchNormalization(批量歸一化),正是這樣一種能夠顯著提升訓練效率和模型性能的“神技”。

那么,BatchNormalizationBatch NormalizationBatchNormalization 究竟是如何工作的?它背后的數學原理又是什么?

接下來,就讓我們一起揭開它的神秘面紗。

一、數據歸一化的數學意義


在正式進入Batch Normalization之前,我們先來聊聊數據歸一化

歸一化,顧名思義,就是將數據縮放到一個統一的范圍,讓它們在同一個尺度上“公平競爭”。

想象一下,如果你有一個數據集,其中一部分特征的數值范圍是0到1,而另一部分特征的數值范圍是0到1000。 那么在訓練過程中,數值范圍更大的特征可能會“淹沒”其他特征,導致模型對它們過度依賴,而忽略了其他重要的信息。

圖1. 歸一化處理

為了避免這種情況,我們需要對數據進行歸一化處理。常見的歸一化方法有兩種:Min-Max歸一化和Z-Score歸一化。

  • 👮 Min-Max歸一化的公式是: xMin-Max=x?xminxmax?xminx_{\text{Min-Max}} = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}}xMin-Max?=xmax??xmin?x?xmin??,它的作用是將數據縮放到0到1之間。

  • 👮 Z-Score歸一化的公式是: xZ-Score=x?μσx_{\text{Z-Score}} = \frac{x - \mu}{\sigma}xZ-Score?=σx?μ?,其中 μ\muμ 是數據的均值,σ\sigmaσ是標準差。

這種歸一化方法不僅考慮了數據的范圍,還考慮了數據的分布情況,使得歸一化后的數據具有均值為0、方差為1的特性。

歸一化在神經網絡中的作用是顯而易見的。它可以減少特征間的量綱差異,讓網絡的輸入更加均勻,從而提高訓練的穩定性和收斂速度。

如果沒有歸一化,網絡可能會陷入梯度消失或梯度爆炸的困境,導致訓練過程異常艱難。


二、Batch Normalization的基本原理


那么,Batch Normalization又是如何在歸一化的基礎上進一步優化神經網絡的呢?

這就要從它的提出背景說起。在深度學習中,有一個問題一直困擾著研究人員,那就是內部協變量偏移(Internal Covariate Shift)

簡單來說,隨著網絡層數的加深或訓練的進行,輸入數據的分布會發生變化。

這種變化會導致訓練過程變得非常緩慢,因為每一層都需要不斷地調整自己的參數來適應新的輸入分布。

2.1 設計思想

為了解決這個問題,Batch Normalization應運而生。它的核心思想是:既然輸入數據的分布會不斷變化,那我們就在每一層的輸入處進行歸一化處理,讓數據始終保持在一個相對穩定的分布上

圖2. 數據分布

這樣一來,每一層的訓練過程就會變得更加平穩,收斂速度也會大大加快。

在神經網絡中,Batch Normalization通常放在卷積層或全連接層之后、激活函數之前。這是因為歸一化后的數據更適合進行非線性變換,而激活函數的作用正是引入非線性。

通過在激活函數之前進行歸一化,我們可以讓激活函數的輸入始終保持在一個相對穩定的分布上,從而提高網絡的訓練效率。

2.2 基本流程

Batch Normalization的基本流程可以分為四個步驟。

首先,我們需要計算當前批次數據的均值 μ\muμ。這個均值是通過將當前批次的所有數據相加,然后除以數據的總數得到的。

接著,我們計算當前批次數據的方差 σ2\sigma^2σ2。方差的計算公式是:

σ2=1N∑i=1N(xi?μ)2\sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2σ2=N1?i=1N?(xi??μ)2

其中 NNN是當前批次的數據數量,xix_ixi? 是第 iii 個數據點。

圖3. Batch Normalization基本原理

有了均值和方差之后,我們就可以對數據進行歸一化處理了。歸一化公式是:

x′=x?μσ2+?x' = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x=σ2+??x?μ?

其中 ?\epsilon? 是一個極小值,用于防止除零。

最后,為了恢復網絡的非線性表達能力,我們引入了兩個可學習參數 γ\gammaγβ\betaβ,對歸一化后的數據進行縮放和平移。最終的公式是:y=γx′+βy = \gamma x' + \betay=γx+β


Batch Normalization為什么有效?

在論文《An empirical analysis of the optimization of deep network loss surfaces》中,作者繪制了VGG和NIN網絡在有無BN層的情況下,Loss surface的差異,包含初始點位置以及不同優化算法最終收斂到的local minima位置。

圖4. Batch Normalization對模型訓練的影響

研究發現:沒有BN層時,網絡的損失曲面存在較大高原,優化困難;加入BN層后,損失曲面變為山峰狀,優化更容易。

原因在于,無BN層時,輸入分布的均值和方差隱藏在前面層的權重中,調整分布需復雜反向傳播。而BN層通過參數γ和β直接調整分布的均值和方差,簡化了優化過程,使網絡訓練更高效。


2.3 數學推導

了解了Batch Normalization的基本原理和流程之后,我們再來看看它的數學推導。

首先,我們來推導均值和方差的計算公式

對于一個維度為N,C,H,WN, C, H, WN,C,H,W的輸入張量,均值和方差的計算公式分別為:
μ=1N×H×W∑n=0N?1∑h=0H?1∑w=0W?1X[n,c,h,w]\mu = \frac{1}{N \times H \times W} \sum_{n=0}^{N-1} \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} X[n, c, h, w]μ=N×H×W1?n=0N?1?h=0H?1?w=0W?1?X[n,c,h,w]
σ2=1N×H×W∑n=0N?1∑h=0H?1∑w=0W?1(X[n,c,h,w]?μ)2\sigma^2 = \frac{1}{N \times H \times W} \sum_{n=0}^{N-1} \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} (X[n, c, h, w] - \mu)^2σ2=N×H×W1?n=0N?1?h=0H?1?w=0W?1?(X[n,c,h,w]?μ)2
這兩個公式的作用是計算當前批次數據的均值和方差,為后續的歸一化處理提供依據。

接下來,我們來看歸一化公式的推導

歸一化公式是 x′=x?μσ2+?x' = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x=σ2+??x?μ?,它的目的是將數據轉換為均值為0、方差為1的分布。


為什么要加一個極小值 ?\epsilon?

這是因為當方差 σ2\sigma^2σ2 非常接近0時,分母可能會變成0,導致除零錯誤。

為了避免這種情況,我們在分母中加入一個極小值 ?\epsilon?,使得分母始終大于0。


圖5. Batch Normalization數學原理

最后,我們來推導可學習參數 γ\gammaγβ\betaβ 的作用

在歸一化之后,數據的分布雖然更加穩定,但同時也失去了原來的尺度和偏移。

為了恢復網絡的非線性表達能力,我們需要引入兩個可學習參數 γ\gammaγβ\betaβ,對歸一化后的數據進行縮放和平移。

Batch Normalization公式是:
y=γx?μσ2+?+βy = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \betay=γσ2+??x?μ?+β
其中,γ\gammaγ 的作用是對數據進行縮放,β\betaβ 的作用是對數據進行平移。

通過這兩個參數,我們可以將歸一化后的數據調整到更適合網絡學習的分布上。

三、Batch Normalization對模型訓練的影響


Batch Normalization對模型訓練的影響是多方面的。

首先,它可以加速訓練收斂

Batch Normalization通過將激活輸入值分布在非線性函數的梯度敏感區域,可以避免梯度消失問題,從而加快訓練速度。

其次,它可以提升模型的泛化能力

Batch Normalization通過歸一化操作減少模型對特定數據分布的依賴,使得模型在面對新的數據時能夠更好地適應,從而增強模型的泛化能力。

圖6. Batch Normalization在模型中的位置

除了這些優點之外,Batch Normalization還可以簡化調參過程

由于它對學習率和參數初始化的寬容性,我們在訓練過程中不需要花費太多時間去調整這些參數,大大減少了調參的復雜度,提高了訓練的效率。


然而,Batch Normalization也并非萬能的。它也有一些局限性。

例如,它對小批量數據比較敏感。當批量大小較小時,計算得到的均值和方差可能會不夠準確,從而影響Batch Normalization的效果。

此外,在某些情況下,Batch Normalization可能會導致訓練過程不穩定。

因此,在實際應用中,我們需要根據具體的情況來選擇是否使用Batch Normalization,以及如何調整它的參數。




- 結語 -

通過以上內容的介紹,我們對Batch Normalization的數學原理及其在神經網絡中的作用有了一個全面的了解。

Batch Normalization通過歸一化操作解決了內部協變量偏移的問題,加速了訓練收斂,提升了模型的泛化能力,并簡化了調參過程。

目前,Batch Normalization已經成為深度學習中一種不可或缺的技術,被廣泛應用于各種神經網絡模型中。

注:本文中未聲明的圖片均來源于互聯網

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

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

相關文章

軟考備考①

一、數值及其轉換和數據的表示1、數值及其轉換①任意進制到十進制以二進制為例,以小數點做分割,小數點以左從二的零次方開始,小數點以右從二的負一次方開始。②十進制到任意進制利用短除法③二進制到十六進制分為小數點前和小數點后&#xff…

小程序緩存數據字典

import { getDict } from /api/profile;const CACHE_KEY DICT_CACHE;let dictCache new Map();// 初始化時加載緩存const loadCache () > {const cache uni.getStorageSync(CACHE_KEY);if (cache) {dictCache new Map(JSON.parse(cache));}};// 保存緩存到Storageconst…

Java對象在內存中的布局詳解

1、Java 對象內存布局(HotSpot 虛擬機)在 ?HotSpot 虛擬機? 中,一個 Java 對象在堆內存中的存儲布局可以分為以下幾個部分:1、對象頭(Object Header)?對象頭是對象內存布局中最重要的部分之一&#xff0…

鉀元素:從基礎認知到多元應用與前沿探索

一、鉀元素的基礎認知1.1 鉀元素的發現歷程在人類歷史的長河中,鉀的化合物早早就進入了人們的視野,并在生活和生產中得到了應用。古代時期,人們就知曉草木灰里含有鉀草堿,即碳酸鉀 。在日常的洗滌活動中,碳酸鉀發揮了重…

JAiRouter 配置文件重構紀實 ——基于單一職責原則的模塊化拆分與內聚性提升

JAiRouter 配置文件重構紀實 ——基于單一職責原則的模塊化拆分與內聚性提升 文章目錄JAiRouter 配置文件重構紀實 ——基于單一職責原則的模塊化拆分與內聚性提升一、背景:單體 YAML 的“熵增”困境二、重構策略:高內聚、低耦合的模塊化方案2.1 拆分原則…

驚!printf 不往屏幕輸?都是 fd 在搞鬼!爆肝拆解 Linux 文件描述符 + 重定向底層,學會直接在終端橫著走

文 章 目 錄一、文 件1、基 礎 知 識2、C 文 件 接 口(1)代 碼 示 例(2)當 前 路 徑(3)文 件 權 限(4)w(5)a(6)三 個 輸 入 輸 出 流3…

【高分論文密碼】大尺度空間模擬與不確定性分析及數字制圖技術應用

大尺度模擬技術能夠從不同的時空尺度揭示農業生態環境領域的內在機理和時空變化規律,為復雜過程模型的模擬提供技術基礎。一:R語言空間數據及數據挖掘關鍵技術1、R語言空間數據講解及應用特點 1)R語言基礎與數據科學 2)R空間矢量數據 3)R柵格數據2、R語言…

Git 工作流與分支管理實戰:rebase vs merge 對比、沖突解決、規范 Commit Message 與主干穩定性最佳實踐

1. 版本控制與協作流程(Git 工作流、分支管理、合并沖突) 雖然 Git 用得多,但“rebase vs. merge”、如何解決沖突、如何編寫規范的 commit message、如何維護主干的穩定性,都需要一段時間才能形成體系化的理解。 摘要 在日常團隊…

調試 cuda kernel

調試 CUDA Kernel 并進入 __device__ 函數是 CUDA 開發中一項非常重要的技能。這主要依賴于 NVIDIA 的官方調試器 NVIDIA Nsight Systems (用于系統級分析) 和 NVIDIA Nsight Compute (用于內核級分析) 以及經典的 cuda-gdb (命令行調試器)。 這里將重點介紹兩種最常用和強大的…

GD32自學筆記:4.ADC

while(1)里測試ADC是否正常首先,ADC引腳說明如下:ADC 通道引腳描述ADC_CHANNEL_0PA0端口 A 的引腳 0,可用于模擬信號輸入,如傳感器或外部電壓。ADC_CHANNEL_1PA1端口 A 的引腳 1,常用于模擬輸入,適用于一般…

漸變背景色和漸變字體顏色的實現方法

一、漸變背景色&#xff08;Gradient Background&#xff09;1. 線性漸變&#xff08;Linear Gradient&#xff09;通過 linear-gradient 創建從一種顏色到另一種顏色的線性漸變。代碼示例<div class"linear-gradient"></div><style> .linear-grad…

Wi-Fi技術——傳播與損耗

一、頻段和信道 Wi-Fi通過發射無線電進行傳輸&#xff0c;而無線電的一個重要特性是頻率。 頻段&#xff1a;一個大的頻率范圍&#xff0c;如Wi-Fi工作在2.4GHz、5GHz、6GHz&#xff0c;其并不是一個值&#xff0c;而是一個范圍信道&#xff1a;在每個頻段中劃分小的頻率范圍…

【Mysql-installer-community-8.0.26.0】Mysql 社區版(8.0.26.0) 在Window 系統的默認安裝配置

??大家好&#xff0c;我是練小杰&#xff0c;好久不見了&#xff0c;周末愉快&#xff0c;今天周六了&#xff01;&#xff01;做了CSDN博客才發現&#xff0c;堅持不斷發文是那么的困難&#xff0c;大家都是好樣的&#xff01;&#xff01;&#x1f606; 本文是針對 Mysql 的…

【RabbitMQ】----初識 RabbitMQ

1. MQ 是什么&#xff1f; 在互聯網中&#xff0c;會經常使用 MQ 來作為消息通信服務&#xff0c;我們一起來看一下什么是 MQ 吧&#xff01; 1.1 MQ 本質 【MQ】&#xff08;Message queue&#xff09;&#xff0c;消息隊列&#xff0c;字面意思來看&#xff0c;本質是一個…

深度學習:歸一化技術

在深度學習中&#xff0c;歸一化技術是提高模型訓練效率和性能的重要手段。歸一化通過調整輸入數據的分布&#xff0c;使得模型在訓練過程中更易于收斂&#xff0c;減少過擬合的風險。本文將介紹幾種常見的歸一化技術&#xff0c;包括特征歸一化、批歸一化、層歸一化和實例歸一…

【Javaweb學習|實訓總結|Week1】html基礎,CSS(選擇器、常用樣式、盒子模型、彈性盒布局、CSS定位、動畫),js(基本類型、運算符典例)

開學前三周先進行企業實訓&#xff0c;主要學習Javaweb并實現一些小的項目&#xff0c;本篇筆記主要記錄第一周實訓的知識總結以及個人遇到的問題及解答&#xff0c;用于日后復習回顧和知識鞏固&#xff0c;希望可以幫到同樣在學Javaweb的大家 文章目錄D1html基礎D2塊元素與行…

SQL 拓展指南:不同數據庫差異對比(MySQL/Oracle/SQL Server 基礎區別)

在學習 SQL 的過程中&#xff0c;你可能會發現&#xff1a;同樣的 “建表語句” 在 MySQL 能運行&#xff0c;在 Oracle 卻報錯&#xff1b;“分頁查詢” 的寫法在 SQL Server 和 MySQL 完全不同。這是因為 MySQL、Oracle、SQL Server 是三大主流關系型數據庫&#xff0c;雖都支…

論文閱讀:DMD | Improved Distribution Matching Distillation for Fast Image Synthesis

論文地址&#xff1a;https://arxiv.org/abs/2405.14867 項目官網&#xff1a;https://tianweiy.github.io/dmd2/ 代碼地址&#xff1a;https://github.com/tianweiy/DMD2 發表時間&#xff1a;2024年5月24日 分布匹配蒸餾&#xff08;DMD&#xff09;生成的一步生成器能夠與教…

嵌入式 Linux 啟動流程詳解 (以 ARM + U-Boot 為例)

嵌入式 Linux 啟動流程詳解 (以 ARM U-Boot 為例) 對于嵌入式開發者而言&#xff0c;深入理解系統的啟動流程至關重要。這不僅有助于進行底層驅動開發和系統移植&#xff0c;還能在遇到啟動失敗等問題時&#xff0c;快速定位和解決。本文將詳細分解基于 ARM 架構的嵌入式 Linu…

在前端開發中,html中script 的type分別有哪幾種?分別什么情況用到?

以下是 HTML 中<script>標簽type屬性的常見取值、說明及使用場景&#xff1a;type 值說明使用場景不寫&#xff08;空值&#xff09;HTML5 中默認等同于text/javascript&#xff0c;表示普通 JavaScript 腳本絕大多數傳統 JavaScript 代碼&#xff0c;包括內聯腳本和外部…