發生梯度消失, 梯度爆炸問題的原因,怎么解決?

目錄

?一、梯度消失的原因

二、梯度爆炸的原因

三、共同的結構性原因

四、解決辦法

五、補充知識


一、梯度消失的原因

梯度消失指的是在反向傳播過程中,梯度隨著層數的增加指數級減小(趨近于0),導致淺層網絡的權重幾乎無法更新。

1. 激活函數造成的梯度收縮

比如 sigmoid、tanh 函數在輸入過大或過小時,梯度趨近于 0,導致反向傳播過程中梯度逐層縮小。例如:Sigmoid的導數 σ′(x)=σ(x)(1?σ(x)),當 σ(x)接近0或1時,導數趨近于0。

2. 權重初始化不當

如果權重初始化得過小,前向傳播時值越來越小,反向傳播梯度也越來越小。

3. 網絡過深與鏈式法則的連乘效應

深層網絡中梯度在多層鏈式求導中不斷乘以小于1的數,最終導致梯度接近 0。
反向傳播時,梯度是各層導數的連乘積

若每層導數均小于1,多層疊加后梯度會指數級縮小。

二、梯度爆炸的原因

梯度爆炸是指梯度在反向傳播過程中指數級增大(趨向無窮大),導致參數更新步長過大,模型無法收斂。

1. 激活函數或權重造成的梯度放大

比如 relu 在某些輸入下導數為1,但如果權重過大,前向傳播輸出和反向傳播梯度都可能爆炸。

2. 網絡結構太深

多層反向傳播中梯度不斷相乘,可能快速增長到很大。

3. 學習率過大

會導致更新步長過大,參數急劇變化,引發梯度爆炸。

三、共同的結構性原因

  • 深層網絡或長依賴路徑
    無論是梯度消失還是爆炸,本質都是因為深層網絡的梯度需要通過多層反向傳播,鏈式法則的連乘效應被放大。

  • 權重矩陣的共享(如RNN)
    RNN中同一權重矩陣在時間步間共享,梯度爆炸/消失問題更顯著。

四、解決辦法

針對梯度消失:

  1. 使用非飽和激活函數(如ReLU、Leaky ReLU)。

  2. 殘差連接(ResNet中的Skip Connection)打破鏈式法則的連乘。

  3. 批歸一化(BatchNorm)穩定梯度分布。

  4. 合理的權重初始化(如He初始化)。

針對梯度爆炸:

  1. 梯度裁剪(Gradient Clipping)。

  2. 權重正則化(L2正則化)。

  3. 使用LSTM/GRU(通過門控機制緩解RNN中的梯度問題)。

通用策略:

  • 調整網絡深度或使用分階段訓練。

  • 監控梯度范數(如 torch.nn.utils.clip_grad_norm_)。

五、補充知識

非飽和激活函數和飽和激活函數有什么區別?


? 1、定義對比

類型

定義

特點

代表函數

飽和激活函數

當輸入很大或很小時,函數的導數(梯度)接近于 0

輸出趨于一個上限/下限,梯度變小

Sigmoid、Tanh

非飽和激活函數

輸入變大時,導數不會趨近于 0(或只有一邊趨近于0)

不容易造成梯度消失

ReLU、Leaky ReLU、ELU、Swish


🧪 2、具體例子對比

🔻 飽和激活函數

(1) Sigmoid:

\sigma(x) = \frac{1}{1 + e^{-x}}

? 導數為:\sigma{\prime}(x) = \sigma(x)(1 - \sigma(x))

? 當 x \to \pm\infty時,\sigma{\prime}(x) \to 0

? 結果:反向傳播中梯度會越來越小 → 梯度消失

(2) Tanh:

\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

? 輸出范圍在 [-1, 1]

? 同樣導數趨近于 0,容易梯度消失


🔺 非飽和激活函數

(1) ReLU(Rectified Linear Unit):

f(x) = \max(0, x)

? x > 0 時導數為 1,不會梯度消失

? 缺點:x < 0 導數為 0,可能導致“神經元死亡”

(2) Leaky ReLU:

f(x) = \begin{cases} x & x > 0 \\ \alpha x & x \leq 0 \end{cases}

? 小于0時也有梯度(通常\alpha=0.01

(3) Swish、ELU 等:

? 既平滑又非飽和,近年很多模型喜歡用 Swish 或 GELU(尤其是 Transformer)。


🎯 三、實戰中如何選?

場景

推薦激活函數

傳統全連接網絡(不太深)

Tanh / Sigmoid 勉強可用

卷積神經網絡 CNN

ReLU / Leaky ReLU / ELU

Transformer 等深層模型

GELU / Swish

生成式模型(例如 VAE、Flow)

ELU / LeakyReLU / Tanh(輸出層)


🧠 一句話總結:

飽和函數容易梯度消失,不適合深層網絡; 非飽和函數傳播更穩定,是現代深度網絡的標配。

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

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

相關文章

【USRP】srsRAN 開源 4G 軟件無線電套件

srsRAN 是SRS開發的開源 4G 軟件無線電套件。 srsRAN套件包括&#xff1a; srsUE - 具有原型 5G 功能的全棧 SDR 4G UE 應用程序srsENB - 全棧 SDR 4G eNodeB 應用程序srsEPC——具有 MME、HSS 和 S/P-GW 的輕量級 4G 核心網絡實現 安裝系統 Ubuntu 20.04 USRP B210 sudo …

ChatGPT 4:解鎖AI文案、繪畫與視頻創作新紀元

文章目錄 一、ChatGPT 4的技術革新二、AI文案創作&#xff1a;精準生成與個性化定制三、AI繪畫藝術&#xff1a;從文字到圖像的神奇轉化四、AI視頻制作&#xff1a;自動化剪輯與創意實現五、知識庫與ChatGPT 4的深度融合六、全新的變革和機遇《ChatGPT 4 應用詳解&#xff1a;A…

在js中數組相關用法講解

數組 uniqueArray 簡單數組去重 /*** 簡單數組去重* param arr* returns*/ export const uniqueArray <T>(arr: T[]) > [...new Set(arr)];const arr1 [1,1,1,1 2, 3];uniqueArray(arr); // [1,2,3]uniqueArrayByKey 根據 key 數組去重 /*** 根據key數組去重* …

RT-Thread ulog 日志組件深度分析

一、ulog 組件核心功能解析 輕量化與實時性 ? 資源占用&#xff1a;ulog 核心代碼僅需 ROM<1KB&#xff0c;RAM<0.2KB&#xff0c;支持在資源受限的MCU&#xff08;如STM32F103&#xff09;中運行。 ? 異步/同步模式&#xff1a;默認采用異步環形緩沖區&#xff08;rt_…

T113s3遠程部署Qt應用(dropbear)

T113-S3 是一款先進的應用處理器&#xff0c;專為汽車和工業控制市場而設計。 它集成了雙核CortexTM-A7 CPU和單核HiFi4 DSP&#xff0c;提供高效的計算能力。 T113-S3 支持 H.265、H.264、MPEG-1/2/4、JPEG、VC1 等全格式解碼。 獨立的硬件編碼器可以編碼為 JPEG 或 MJPEG。 集…

12.青龍面板自動化我的生活

安裝 docker方式 docker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ -e ENABLE_HANGUPtrue \ -e ENABLE_WEB_PANELtrue \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglongk8s方式 https://truecharts.org/charts/stable/qinglong/ he…

Maven 遠程倉庫推送方法

步驟 1&#xff1a;配置 pom.xml 中的遠程倉庫地址 在項目的 pom.xml 文件中添加 distributionManagement 配置&#xff0c;指定遠程倉庫的 URL。 xml 復制 <project>...<distributionManagement><!-- 快照版本倉庫 --><snapshotRepository><id…

Spring Boot 日志 配置 SLF4J 和 Logback

文章目錄 一、前言二、案例一&#xff1a;初識日志三、案例二&#xff1a;使用Lombok輸出日志四、案例三&#xff1a;配置Logback 一、前言 在開發 Java 應用時&#xff0c;日志記錄是不可或缺的一部分。日志可以記錄應用的運行狀態、錯誤信息和調試信息&#xff0c;幫助開發者…

JS API 事件監聽

焦點事件案例&#xff1a;搜索框激活下拉菜單 事件對象 事件對象存儲事件觸發時的相關信息 可以判斷用戶按鍵&#xff0c;點擊元素等內容 如何獲取 事件綁定的回調函數中的第一個形參就是事件對象 一般命名為e,event 事件對象常用屬性 type類型 click mouseenter client…

DDD與MVC擴展能力對比

一、架構設計理念的差異二、擴展性差異的具體表現三、DDD擴展性優勢的深層原因四、MVC擴展性不足的典型場景五、總結&#xff1a;架構的本質與選擇六、例子1&#xff09;場景描述2&#xff09;MVC實現示例&#xff08;三層架構&#xff09;3&#xff09;DDD實現示例&#xff08…

針對 SQL 查詢中 IN 子句性能優化 以及 等值 JOIN 和不等值 JOIN 對比 的詳細解決方案、代碼示例及表格總結

以下是針對 SQL 查詢中 IN 子句性能優化 以及 等值 JOIN 和不等值 JOIN 對比 的詳細解決方案、代碼示例及表格總結&#xff1a; 問題 1&#xff1a;IN 的候選值過多&#xff08;如超過 1000 個&#xff09; 問題描述 當 IN 列表中的值過多時&#xff0c;SQL 會逐個比較每個值…

手部穴位檢測技術:基于OpenCV和MediaPipe的實現

手部穴位檢測是醫學和健康管理領域的重要技術之一。通過準確識別手部的關鍵穴位,可以為中醫診斷、康復治療以及健康監測提供支持。本文將介紹一種基于OpenCV和MediaPipe的手部穴位檢測方法,展示如何利用計算機視覺技術實現手部關鍵點的檢測,并進一步標注手部的穴位位置。 技…

Day20 -自動化信息收集工具--ARL燈塔的部署

準備&#xff1a; 純凈的Docker環境 ARL的包 一、Docker的部署 00x1 更新系統包 sudo apt update 00x2 安裝必要的依賴包 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 00x3 下載docker和docker-compose apt-get install do…

sqlalchemy查詢json

第一種&#xff1a;字段op是json格式&#xff1a; {"uid": "cxb123456789","role": 2,"op_start_time": 1743513707504,"op_end_time": 1743513707504,"op_start_id": "op_001","op_end_id"…

搭建K8S-1.23

0、簡介 這里只用3臺服務器來做一個簡單的集群 地址主機名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 1、關閉三個服務 &#xff08;1&#xff09;防火墻 systemctl stop firewalld &#xff08;2&#xff09;Selinux setenf…

初階數據結構--樹

1. 樹的概念與結構 樹是?種?線性的數據結構&#xff0c;它是由 n&#xff08;n>0&#xff09; 個有限結點組成?個具有層次關系的集合。把它叫做 樹是因為它看起來像?棵倒掛的樹&#xff0c;也就是說它是根朝上&#xff0c;?葉朝下的。 有?個特殊的結點&#xff0c;稱…

硬件工程師面試問題(五):藍牙面試問題與詳解

藍牙技術作為物聯網與智能設備的核心無線協議&#xff0c;其硬件設計能力直接影響產品連接穩定性、功耗及兼容性。面試是評估候選人射頻電路設計、天線優化、協議棧調試等綜合技能的關鍵環節&#xff0c;尤其在BLE低功耗設計、共存抗干擾等場景中&#xff0c;硬件工程師的實踐經…

Redis-基本數據類型

Redis支持的基本數據類型&#xff1a;String、hash、list、Set、Zset 一、String 特點 可以存儲三種類型 int、float、string 運用場景 緩存&#xff1a;存儲HTML片段、用戶會話&#xff08;Session&#xff09;計數器&#xff1a;網站訪問量、點贊數&#xff08;incr方法&am…

Tomcat的部署

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和 并發訪問用戶不是很多的場合下被普遍使用&#xff0c;Tomcat 具有處理HTML頁面的功能&#xff0c;它還是一個Servlet和 JSP容器 官網:Apache Tomcat - Welco…

Linux的TCP連接數到達2萬,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出現什么問題

當 Linux 系統的 TCP 連接數達到 2 萬,且 /proc/net/sockstat 中的 tcp_tw(TIME_WAIT 連接)、tcp_alloc(已分配但未完全建立的連接)和 tcp_inuse(正在使用的連接)均處于高位時,可能會引發以下問題: 一、關鍵指標分析 通過 /proc/net/sockstat 可以查看 TCP 連接狀態:…