面試常問系列(一)-神經網絡參數初始化

一、背景

說到參數初始化,先提一下大家常見的兩個概念梯度消失梯度爆炸

(一)、梯度消失:深層網絡的“靜默殺手”

定義

在反向傳播過程中,梯度值隨著網絡層數增加呈指數級衰減,最終趨近于零,導致淺層權重幾乎不更新。

核心成因
  1. 激活函數選擇:Sigmoid/Tanh等函數在輸入極大/極小時導數趨近0(如Sigmoid導數最大僅0.25),經多層連乘后梯度迅速消失。
  2. 鏈式法則連乘效應:梯度通過鏈式法則逐層傳遞,若每層梯度均小于1,總梯度將呈指數衰減。
  3. 權重初始化不當:初始權重過小或分布不合理,加劇前向信號衰減,間接導致梯度消失。
解決方案
  1. 激活函數優化:采用ReLU及其變種(Leaky ReLU、PReLU等),其正區間導數為1,避免梯度衰減。
  2. 權重初始化
    • He初始化:針對ReLU設計,使權重方差隨輸入神經元數調整。
    • Xavier初始化:適用于Sigmoid/Tanh,平衡前向/反向傳播信號。
  3. 批量歸一化(BN):通過歸一化每層輸入分布,減少內部協變量偏移,穩定梯度傳播。
  4. 殘差連接(ResNet):引入跨層跳躍連接,使梯度可直接傳遞至淺層,緩解衰減。
  5. LSTM/GRU門控機制:通過記憶單元選擇性保留梯度,適用于序列數據。
案例

在MNIST分類任務中,使用He初始化+BN+殘差連接,可將深度MLP精度提升至98%以上。

(二)、梯度爆炸:訓練過程的“不穩定因子”

定義

????????反向傳播中梯度值隨層數增加呈指數級增長,導致參數更新步長過大,模型無法收斂。

核心成因
  1. 權重初始化過大:初始權重過大時,梯度經多層連乘后迅速放大。
  2. 網絡層數過深:深層網絡加劇梯度累積效應。
  3. 學習率過高:過大學習率放大梯度更新幅度,加劇不穩定性。
實際影響
  • 模型參數更新劇烈,損失值震蕩或發散(NaN)。
  • 淺層權重因梯度過大頻繁越界,破壞已學習特征。
解決方案
  1. 梯度裁剪(Gradient Clipping)
    • 按值裁剪:限制梯度最大值(如clipvalue=1.0)。
    • 按范數裁剪:縮放梯度向量使其L2范數不超過閾值(如clipnorm=1.0)。
  2. 權重正則化:L1/L2正則化約束權重幅值,間接限制梯度增長。
  3. 優化器選擇:使用Adam、RMSProp等自適應學習率算法,動態調整更新步長。
  4. 合理初始化:采用He/Xavier初始化,避免初始權重過大。
案例

????????在訓練深度RNN時,結合梯度裁剪(閾值=1.0)與LSTM單元,可穩定處理長序列數據。

(三)、對比與本質聯系

維度梯度消失梯度爆炸
數學形式梯度 → 0(指數衰減)梯度 → ∞(指數增長)
核心誘因激活函數導數<1、層數過深權重初始化過大、學習率過高
后果淺層學習失效,模型退化參數更新不穩定,訓練發散
通用策略ReLU+BN+殘差連接梯度裁剪+權重正則化+自適應優化器

本質聯系:二者均源于反向傳播中梯度的連乘累積效應,是網絡深度與參數初始化的“副作用”。

(四)、實踐建議

  1. 優先使用ReLU激活函數,避免Sigmoid/Tanh的梯度衰減問題。
  2. 初始化策略:根據激活函數選擇He或Xavier初始化。
  3. 深層網絡必備:批量歸一化+殘差連接,穩定梯度傳播。
  4. 梯度爆炸預防:默認啟用梯度裁剪(閾值=1.0),尤其在RNN/Transformer中。
  5. 監控工具:利用TensorBoard跟蹤梯度分布,及時檢測異常。

通過理論創新與工程優化,梯度問題已不再是深度學習的“攔路虎”,反而推動了殘差網絡、Transformer等革命性架構的誕生。理解其機理并靈活應對,是掌握深度學習調參藝術的關鍵。

二、理論篇

經過背景的基本了解,相信大家都有個宏觀的認知了,接下來從參數初始化、原理和實戰的角度,帶大家深入理解一下梯度消失和梯度爆炸這個兩個概念。

(一)、公式推導

這里以線型層為列,假設我們堆疊了3層的全鏈接網絡。

輸入是X -> W1 -> H1(第一層隱層)->W2->H2(第二層隱層)->W3->輸出層

我們對第二層的梯度進行分析。

H_1*W_2=H_2

\Delta W_2 = \frac{\partial loss}{\partial W_2}= \frac{\partial loss }{\partial out} * \frac{\partial out }{\partial H_2} * \frac{\partial H_2 }{\partial W_2} \\ = \frac{\partial loss }{\partial out} * \frac{\partial out }{\partial H_2} * H_1

我們從這個公式可以看出,第二層的梯度,會依賴上一層的輸出。

如果H1趨近于0,則第二層梯度趨近于0,導致梯度消失

若H1趨近于無窮大,則第二層梯度趨近于無窮大,導致梯度爆炸。

因此我們需要約束上層的輸出值大小,也就是說我們需要對每一層的網絡輸出進行約束。

這里大家可以實戰操作一下,看看是不是符合預期~

(二)、數學推導

為了更細節的理解其原理,接下來進行一些簡單的數學公式溫習。

兩個相互獨立的隨機變量

E(X+Y)=E(X)+E(Y)\\ E(XY)=E(X)*E(Y)\\ Var(x) = E(X^2) - [E(X))]^2\\ Var(X+Y)=Var(X)+Var(Y)\\ Var(XY)=Var(X)Var(Y)+Var(X)[E(Y)]^2+Var(Y)[E(X)] ^2\\

對上述公式做個簡化,若X和Y 均為均值為0,方差為1,則有如下公式

Var(XY)=Var(X)Var(Y)

(三)、網絡層神經元值推導

好了,有了上面的公式推導+數學基礎,我們來細節看一下,隱藏層H的值是怎么變化的吧。

我們這里以隱層H1為例子,來看下H11(第一個隱層的第一個神經元的標準差的變化)。

這里還是假設我們的輸入和W1服從均值0,標準差1的分布,我們來看看,經歷過一層全鏈接后,分布的變化~

H_{11} = \sum_{i=0}^{n} X_i * W_{1i}\\ var(H_{11} ) = \sum_{i=0}^{n} var(X_i )* var(W_{1i})\\ = n * 1 * 1=n \\ std(H_{11} ) =\sqrt{var(H_{11} )} = \sqrt{n}

我們可以看出,標準差從1 變成了根號n,n為上一層的神經元個數。那么大家可以想象一下,隨著網絡層的不斷加深,每層的標準差都會擴大根號n倍,尺度不斷變大,最終就會超出最大精度范圍,引發nan。

這里理論已經給出來了,大家也可親手實踐驗證一下~

(四)、理論解決

針對上面nan的問題,如何解決呢?

我們從公式不難看出,我們的目標是讓每層的分布保持標準差為1,而決定標準差的有三項,上層神經元個數、輸出的方差和w的方差,因此,如果需要讓結果目標層的標準差保持1不變,則需要。

std(W) =\sqrt{\frac{1}{n}}

(五)、激活函數引入

如果我們在一個簡單的全鏈接網絡里面,假設100層,我們會發現會出現nan,然后我們通過網絡層參數的分布約束,可以保證最后一層的輸出分布保持均值0,標準差1;但是如果這時候引入tanh激活函數,那么會發現隨著層數加深,輸出值逐漸減小。

因此引出了今天的正題!xavier初始化

三、xavier初始化

(一)、背景

Xavier初始化(又稱Glorot初始化)是深度學習中一種經典的權重初始化方法,由Xavier Glorot和Yoshua Bengio于2010年提出。其核心思想是通過調整權重的初始值,使得神經網絡在訓練過程中能夠保持信號的穩定傳播,從而避免梯度消失或爆炸的問題。以下是Xavier初始化的詳細解析:

(二)、核心原理

Xavier初始化的核心目標是保持每一層輸入和輸出的方差一致,確保信號(激活值)和梯度在多層網絡中的雙向穩定性。它特別適用于使用TanhSigmoid等對稱激活函數的網絡,因為這些激活函數在輸入值為0附近時具有較大的梯度,有助于保持信號的穩定傳播。

(三)、數學推導

1.前向傳播方差分析

????????假設?x?和?W?的元素獨立同分布,且均值為0。為了保證輸入和輸出的方差一致,這個上面已經推導過了,不做過多闡述,直接寫結果:

????????var(W) = \frac{1}{n_{in}}

2.反向傳播方差分析
  1. var(W) = \frac{1}{n_{out}}

3.調和平均

????????綜合前向和反向傳播的方差要求,Xavier初始化取兩者的調和平均:

????????var(W) = \frac{1}{n_{in}+n_{out}+2}

(四)、實現方式

????????1.均勻分布

?權重?W?的值在區間[-\frac{\sqrt{6}}{\sqrt{?{n_{in}+n_{out}}}},+\frac{\sqrt{6}}{\sqrt{?{n_{in}+n_{out}}}}] 內均勻隨機采樣。

????????2.正態分布

權重?W?服從均值為0、方差為?\frac{2}{n_{in}+n_{out}}?的正態分布。

(五)、應用場景

  • 適用網絡:前饋神經網絡(FNN)、自編碼器、使用Tanh或Sigmoid激活函數的卷積神經網絡(CNN)或循環神經網絡(RNN)。
  • 深層網絡:通過平衡信號傳播,改善深層網絡的訓練效果,避免梯度消失或爆炸。

(六)、與其他初始化方法的對比

方法核心思想適用激活函數特點
Xavier初始化保持輸入輸出方差一致Tanh、Sigmoid通用性強,適合對稱激活函數
He初始化適配ReLU的非線性特性ReLU及其變體放大方差以應對ReLU的梯度衰減,適合非對稱激活函數
零初始化所有權重設為0簡單但無效,導致神經元對稱性
隨機初始化小隨機數初始化通用需手動調參,穩定性差

(七)、代碼實現(PyTorch示例)

import torch
import torch.nn as nn# 創建一個線性層
layer = nn.Linear(128, 64)# 使用Xavier均勻分布初始化
nn.init.xavier_uniform_(layer.weight)# 使用Xavier正態分布初始化
# nn.init.xavier_normal_(layer.weight)

(八)、局限性

  1. 激活函數假設:推導基于激活函數為線性的假設,對ReLU等非對稱激活函數效果有限。
  2. 梯度穩定性:雖能緩解梯度問題,但在極深網絡中仍需結合批歸一化(Batch Normalization)等技術。

(九)、總結

Xavier初始化解決的是飽和激活函數(sigmoid/tanh)\但是針對非飽和激活函數,relu等無效。那么針對于relu這種激活函數該怎么辦呢?可以使用kaiming初始化。

(十)、引申kaiming初始化

核心思想適用激活函數特點
Kaiming初始化保持輸入輸出方差一致,適配ReLU特性ReLU及其變體通過放大方差補償ReLU的梯度衰減,適合非對稱激活函數
Xavier初始化保持輸入輸出方差一致Tanh、Sigmoid通用性強,適合對稱激活函數

四、附加題-面試常問

先對上述內容進行總結,總而言之,言而總之、所有的初始化方法都是為了,保證輸入和輸出的分布一致行,防止導致梯度消失和梯度爆炸。

具體的面試題,大家可以跳轉這個鏈接去查看:

面試常問系列(二)-神經網絡參數初始化之自注意力機制-CSDN博客

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

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

相關文章

Manacher 馬拉車算法

Manacher 馬拉車算法 5. 最長回文子串 - 力扣&#xff08;LeetCode&#xff09; 馬拉車算法是目前解決尋找字符串中最長的回文子串時間復雜度最低的算法&#xff08;線性O(n)&#xff09;. 中心擴散法 初始化一個長度與字符串 s 相等的 臂長數組 arr 和 最長臂長 max 與 最…

(學習總結29)Linux 進程概念和進程狀態

Linux 進程概念 馮諾依曼體系結構軟件運行與存儲分級數據流動的理論過程 操作系統操作系統(Operator System) 概念操作系統的功能與作用系統調用和庫函數概念 進程概念描述進程 - PCBtask_struct查看進程通過系統調用獲取進程標示符 PID通過系統調用 fork 函數創建進程簡單使用…

MySQL密碼修改的全部方式一篇詳解

本文將詳細介紹多種修改MySQL密碼的方式。 本文目錄 一、alter user 語句操作步驟 二、set password操作步驟 三、直接修改 mysql.user表操作步驟 一、alter user 語句 當你以 root 用戶或者擁有足夠權限的用戶登錄 MySQL 時&#xff0c;可以使用 ALTER USER 語句來修改密碼。…

Wi-Fi NAN 架構(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)

1. NAN 數據通信架構 1.1 單播支持 要在兩個NAN設備之間啟動單播數據通信&#xff0c;服務需發起一個NAN數據路徑&#xff08;NDP&#xff0c;NAN Data Path&#xff09;請求。這對NAN設備之間會建立一個NAN設備鏈路&#xff08;NDL&#xff0c;NAN Device Link&#xff09;&…

Lineageos 22.1(Android 15)實現負一屏

一、前言 方案是參考的這位大佬的&#xff0c;大家可以去付費訂閱支持一波。我大概理一下Android15的修改。 大佬的方案代碼 二、Android15適配調整 1.bp調整&#xff0c;加入aidl引入&#xff0c;這樣make之后就可以索引代碼了 filegroup {name: "launcher-src"…

Java 大視界 -- Java 大數據在智能醫療遠程會診與專家協作中的技術支持(146)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

Sqlite3數據庫

工具庫的使用&#xff1a;程序編寫時#include <庫名.h>即可調用庫中的函數 編譯時鏈接工具庫&#xff1b; 注意&#xff1a;數據庫中不區分字母大小寫&#xff1b; SQLite 中的事務是數據庫操作中非常重要的一個概念&#xff0c;它用于確保數據庫操作的完整性和一致性。…

虛擬路由與單頁應用(SPA):詳解

在單頁應用&#xff08;SPA&#xff0c;Single Page Application&#xff09;中&#xff0c;虛擬路由&#xff08;也稱為前端路由&#xff09;是一種關鍵的技術&#xff0c;用于管理頁面導航和狀態變化&#xff0c;而無需重新加載整個頁面。為了幫助你更好地理解這一概念&#…

練習:運動計劃

需求&#xff1a;鍵盤錄入星期數&#xff0c;顯示今天的減肥活動。 周一&#xff1a;跑步&#xff1b; 周二&#xff1a;游泳&#xff1b; 周三&#xff1a;慢走&#xff1b; 周四&#xff1a;騎動感單車&#xff1b; 周五&#xff1a;拳擊&#xff1b; 周六&#xff1a;…

通過webrtc+canvas+css實現簡單的電腦濾鏡拍照效果

這里我們用的是webrtc中的MediaDevices.getUserMedia()的瀏覽器api進行的效果實現&#xff0c;MediaDevices.getUserMedia() 會提示用戶給予使用媒體輸入的許可&#xff0c;媒體輸入會產生一個MediaStream&#xff0c;里面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道…

《TCP/IP網絡編程》學習筆記 | Chapter 20:Windows 中的線程同步

《TCP/IP網絡編程》學習筆記 | Chapter 20&#xff1a;Windows 中的線程同步 《TCP/IP網絡編程》學習筆記 | Chapter 20&#xff1a;Windows 中的線程同步用戶模式和內核模式用戶模式同步內核模式同步 基于 CRITICAL_SECTION 的同步內核模式的同步方法基于互斥量對象的同步基于…

VBA-Excel

VBA 一、數據類型與變量 常用數據類型&#xff1a; Byte&#xff1a;字節型&#xff0c;0~255。Integer&#xff1a;整數型&#xff0c;用于存儲整數值&#xff0c;范圍 -32768 到 32767。Long&#xff1a;長整型&#xff0c;可存儲更大范圍的整數&#xff0c;范圍 -214748364…

kotlin 內聯函數 inline

高階函數實現的原理&#xff1a;函數類型其實是生成了一個對象 。 inline翻譯成中文的意思就是內聯&#xff0c;在kotlin里面inline被用來修飾函數&#xff0c;表明當前函數在編譯時是以內嵌的形式進行編譯的&#xff0c;從而減少了一層函數調用棧&#xff1a; inline fun fun…

PairRE: Knowledge Graph Embeddings via Paired Relation Vectors(論文筆記)

CCF等級&#xff1a;A 發布時間&#xff1a;2020年11月 25年3月24日交 目錄 一、簡介 二、原理 1.整體 2.關系模式 3.優化模型 三、實驗性能 四、結論和未來工作 一、簡介 將RotatE進行生級&#xff0c;RotatE只對頭實體h進行計算&#xff0c;PairRE對頭尾實體都進行…

從報錯到成功:Mermaid 流程圖語法避坑指南?

&#x1f680; 從報錯到成功&#xff1a;Mermaid 流程圖語法避坑指南 &#x1f680; &#x1f6a8; 問題背景 在開發文檔或技術博客中&#xff0c;我們經常使用 Mermaid 流程圖 來可視化代碼邏輯。但最近我在嘗試繪制一個 Java Stream 轉換流程圖時&#xff0c;遭遇了以下報錯…

深入解析 Redis 實現分布式鎖的最佳實踐

前言 在分布式系統中&#xff0c;多個進程或線程可能會同時訪問同一個共享資源&#xff0c;這就可能導致數據不一致的問題。為了保證數據的一致性&#xff0c;我們通常需要使用分布式鎖。Redis 作為高性能的內存數據庫&#xff0c;提供了一種簡單高效的方式來實現分布式鎖。本…

2025年03月10日人慧前端面試(外包滴滴)

目錄 普通函數和箭頭函數的區別loader 和 plugin 的區別webpack 怎么實現分包&#xff0c;為什么要分包webpack 的構建流程變量提升react 開發中遇到過什么問題什么是閉包vue 開發中遇到過什么問題vue中的 dep 和 watcher 的依賴收集是什么階段什么是原型鏈react setState 是同…

Android10 系統截屏功能異常的處理

客戶反饋的問題&#xff0c;設備上使用狀態欄中“長截屏”功能&#xff0c;截屏失敗且出現系統卡死問題。 在此記錄該問題的處理 一現象&#xff1a; 設備A10上使用系統“長截屏”功能&#xff0c;出現截屏失敗&#xff0c;系統死機。 二復現問題并分析 使用設備操作該功能&…

openvela新時代的國產開源RTOS系統

openvela 簡介 openvela 操作系統專為 AIoT 領域量身定制&#xff0c;以輕量化、標準兼容、安全性和高度可擴展性為核心特點。openvela 以其卓越的技術優勢&#xff0c;已成為眾多物聯網設備和 AI 硬件的技術首選&#xff0c;涵蓋了智能手表、運動手環、智能音箱、耳機、智能家…

ENSP學習day9

ACL訪問控制列表實驗 ACL&#xff08;Access Control List&#xff0c;訪問控制列表&#xff09;是一種用于控制用戶或系統對資源&#xff08;如文件、文件夾、網絡等&#xff09;訪問權限的機制。通過ACL&#xff0c;系統管理員可以定義哪些用戶或系統可以訪問特定資源&#x…