10 訓練中的一些問題

🌟 大背景:訓練神經網絡 = 下山尋寶

訓練神經網絡就像你蒙著眼在一座大山里,想找最低點(最小損失)。你只能靠腳下的坡度(梯度)來決定往哪兒走。

  • 你的位置 = 模型參數(權重 www
  • 坡度 = 梯度 ?J?J?J
  • 走一步的大小 = 學習率 ηηη
  • 山的結構 = 神經網絡的結構

現在,我們看看路上會遇到哪些坑。


1. 參數初始化:你一開始站哪兒?

💬 大白話:

你不能隨便往地上一站就開始走。
如果一開始站的位置太差(比如平地或懸崖),可能一輩子都找不到寶藏。

在神經網絡里,參數初始化就是決定模型一開始的“姿勢”。

? 常見錯誤:全0初始化

w = 0  # 所有權重都設為0

問題:所有神經元“長得一模一樣”,更新也一樣 → 對稱性問題,學不到東西。

? 正確做法:用隨機小數初始化

但隨機也不能亂來!太小 → 信號傳著傳著沒了;太大 → 信號爆炸。

于是,大神們提出了科學初始化方法


1.1 Lecun Initialization(1998)

適用tanh 激活函數 + 線性激活(如MLP)

核心思想:讓前向傳播時,信號的方差保持穩定。

數學公式

權重 www 從均值為 0、方差為 1nin\frac{1}{n_{in}}nin?1? 的正態分布中采樣:
w~N(0,1nin) w ~ N(0, \frac{1}{n_{in}}) wN(0,nin?1?)

其中 ninn_{in}nin? 是前一層的神經元數量。

例子
前一層有 512 個神經元 → Var(w)=1512≈0.00195→w~N(0,0.00195)Var(w) = \frac{1}{512} ≈ 0.00195 → w ~ N(0, 0.00195)Var(w)=5121?0.00195wN(0,0.00195)


1.2 Xavier (Glorot) Initialization(2010)

適用tanhsigmoid 激活函數

核心思想:同時考慮前向和反向傳播,讓梯度也不爆炸不消失。

數學公式

權重 www 從均值為 0、方差為 2nin+nout\frac{2}{n_{in} + n_{out}}nin?+nout?2? 的正態分布中采樣:

w~N(0,2nin+nout) w ~ N(0, \frac{2}{n_{in} + n_{out}}) wN(0,nin?+nout?2?)

其中:

  • ninn_{in}nin?:前一層神經元數
  • noutn_{out}nout?:后一層神經元數

例子
nin=512,nout=256→Var(w)=2512+256=2768≈0.0026→w~N(0,0.0026)n_{in}=512, n_{out}=256 → Var(w) = \frac{2}{512+256} = \frac{2}{768} ≈ 0.0026 → w ~ N(0, 0.0026)nin?=512,nout?=256Var(w)=512+2562?=7682?0.0026wN(0,0.0026)

? 比 Lecun 更“平衡”,兼顧前后向。


1.3 Kaiming (He) Initialization(2015)

適用ReLU 及其變體(如 Leaky ReLU)激活函數

為什么需要它?
因為 ReLU(x)=max?(0,x)ReLU(x) = \max(0,x)ReLU(x)=max(0,x) 會“殺死”一半的神經元(負數變0),所以信號會衰減。

核心思想:補償 ReLU 的“死亡率”,讓信號方差穩定。

數學公式

權重 www 從均值為 0、方差為 2nin\frac{2}{n_{in}}nin?2? 的正態分布中采樣:

w~N(0,2nin) w ~ N(0, \frac{2}{n_{in}}) wN(0,nin?2?)

例子
nin=512→Var(w)=2/512=0.0039→w~N(0,0.0039)n_{in}=512 → Var(w) = 2/512 = 0.0039 → w ~ N(0, 0.0039)nin?=512Var(w)=2/512=0.0039wN(0,0.0039)

? 現代深度學習(如ResNet)幾乎都用 Kaiming 初始化。


📊 總結對比

方法適用激活函數方差公式
Lecuntanh, 線性1/nin1 / n_{in}1/nin?
Xaviertanh, sigmoid2/(nin+nout)2 / (n_{in} + n_{out})2/(nin?+nout?)
KaimingReLU, Leaky ReLU2/nin2 / n_{in}2/nin?

2. 梯度消失 & 梯度爆炸

💬 大白話:

你走著走著,發現:

  • 梯度消失:坡度太小,幾乎感覺不到方向,走不動了。
  • 梯度爆炸:坡度太大,一步邁過頭,直接飛出山外。

📌 根源:鏈式法則的“連乘效應”

假設一個3層網絡,損失 J 對第一層權重 w1 的梯度:

?J/?w1=(?J/?a3)×(?a3/?z3)×(?z3/?a2)×(?a2/?z2)×(?z2/?a1)×(?a1/?z1)×(?z1/?w1) ?J/?w_1 = (?J/?a_3) × (?a_3/?z_3) × (?z_3/?a_2) × (?a_2/?z_2) × (?z_2/?a_1) × (?a_1/?z_1) × (?z_1/?w_1) ?J/?w1?=(?J/?a3?)×(?a3?/?z3?)×(?z3?/?a2?)×(?a2?/?z2?)×(?z2?/?a1?)×(?a1?/?z1?)×(?z1?/?w1?)

其中 a=σ(z)a = σ(z)a=σ(z)σσσ 是激活函數。

📐 例子:Sigmoid 激活函數

Sigmoid 導數:σ′(z)=σ(z)(1?σ(z))σ'(z) = σ(z)(1-σ(z))σ(z)=σ(z)(1?σ(z)),最大值 0.25

假設每層梯度都被乘以 0.25:

  • 3層:0.253=0.01560.25^3 = 0.01560.253=0.0156
  • 10層:0.2510≈9.5e?70.25^{10} ≈ 9.5e-70.25109.5e?7幾乎為0 → 梯度消失!

📐 例子:權重太大

如果 www 初始化太大,比如 w=5w=5w=5,那 z=w×az = w×az=w×a 會很大 → σ(z)≈1σ(z) ≈ 1σ(z)1σ′(z)≈0σ'(z) ≈ 0σ(z)0 → 同樣梯度消失。

或者 w=10w=10w=10zzz 超大 → 梯度超大 → 一步更新 w=w?η×?Jw = w - η×?Jw=w?η×?J,直接飛出合理范圍 → 梯度爆炸。


? 解決方案

  1. 換激活函數:用 ReLU,它的導數在正區間是 1,不會讓梯度變小。
  2. 用 Kaiming 初始化:專門針對 ReLU 設計。
  3. 加 Batch Normalization:讓每層輸入保持穩定分布。
  4. 殘差連接:見下文。

3. 殘差連接(Residual Connection)

💬 大白話:

梯度消失是因為路太長,梯度傳不回去。
那怎么辦?修條“捷徑”!

讓信息和梯度可以“抄近道”直接傳回去。

📐 數學公式(ResNet)

普通層:
a[l]=σ(w[l]×a[l?1]+b[l]) a[l] = σ( w[l] × a[l-1] + b[l] ) a[l]=σ(w[l]×a[l?1]+b[l])

殘差塊:
a[l]=σ(F(a[l?1])+a[l?1]) a[l] = σ( F(a[l-1]) + a[l-1] ) a[l]=σ(F(a[l?1])+a[l?1])

其中 F(a[l?1])F(a[l-1])F(a[l?1]) 是“主路”(比如兩層卷積),a[l?1]a[l-1]a[l?1] 是“捷徑”。

📐 為什么能解決梯度消失?

看梯度 ?J/?a[l?1]?J/?a[l-1]?J/?a[l?1]

?J/?a[l?1]=?J/?a[l]×?a[l]/?a[l?1] ?J/?a[l-1] = ?J/?a[l] × ?a[l]/?a[l-1] ?J/?a[l?1]=?J/?a[l]×?a[l]/?a[l?1]

而:
?a[l]/?a[l?1]=?/?a[l?1][F(a[l?1])+a[l?1]]=F′+I ?a[l]/?a[l-1] = ?/?a[l-1] [ F(a[l-1]) + a[l-1] ] = F' + I ?a[l]/?a[l?1]=?/?a[l?1][F(a[l?1])+a[l?1]]=F+I

其中 III 是單位矩陣(來自 a[l?1]a[l-1]a[l?1] 的導數)。

關鍵:即使 F′≈0F' ≈ 0F0(主路梯度消失),F′+IF' + IF+I 的最小特征值也有 1

所以梯度至少能以 111 的比例傳回去,不會消失。

🖼? 就像你下山,主路被雪埋了,但旁邊有條水泥小路(+1),你還能走回去。

? 效果:

ResNet 可以輕松訓練 100層、1000層 的網絡!


4. 學習率與訓練不穩定性

💬 大白話:

你走一步的大小(學習率 η)得合適。

  • η 太小:走得慢,天黑了還沒到底。
  • η 太大:容易邁過頭,來回震蕩,甚至飛出山外(發散)。

📐 數學公式(梯度下降)

wt+1=wt?η×?J(wt) w_{t+1} = w_t - η × ?J(w_t) wt+1?=wt??η×?J(wt?)

📌 例子:J(w)=w2J(w) = w2J(w)=w2(拋物線,最小值在 w=0w=0w=0

  • 梯度:?J(w)=2w?J(w) = 2w?J(w)=2w
  • w=3w=3w=3 開始
學習率 ηηη更新過程結果
η=0.1η=0.1η=0.13→2.4→1.92→...3 → 2.4 → 1.92 → ...32.41.92...慢慢收斂
η=0.6η=0.6η=0.63→?0.6→0.12→?0.024→...3 → -0.6 → 0.12 → -0.024 → ...3?0.60.12?0.024...震蕩收斂
η=1.1η=1.1η=1.13→?3.6→4.32→...3 → -3.6 → 4.32 → ...3?3.64.32...發散!

🎯 訓練不穩定性表現:

  • 損失函數上躥下跳
  • 損失變成 NaNNaNNaN(數值溢出)

? 解決方案

  1. 調小學習率:最直接。
  2. 學習率預熱(Warm-up):開始用小學習率,等穩定了再加大。
  3. 學習率衰減:訓練后期逐漸減小 ηηη
  4. 用自適應優化器:如 Adam,它會自動調每個參數的“步子”。

📊 總結對比表

問題原因數學關鍵解決方案
初始化不當信號爆炸/消失Var(w)Var(w)Var(w) 不合理Lecun/Xavier/Kaiming
梯度消失鏈式法則連乘∏σ′(z)≈0∏ σ'(z) ≈ 0σ(z)0ReLU + Kaiming + BN + Residual
殘差連接深網絡梯度傳不回?a[l]/?a[l?1]=F′+I?a[l]/?a[l-1] = F' + I?a[l]/?a[l?1]=F+I加“捷徑”
學習率太大更新步子太大w=w?η×?Jw = w - η×?Jw=w?η×?J 爆炸調 ηηη,用 Adam

💡 一句話記住

  • 初始化:別亂站,按激活函數選“科學站位”。
  • 梯度消失:路太長,坡沒了 → 修“捷徑”(殘差)。
  • 學習率:步子太大扯著蛋,太小半天到不了。

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

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

相關文章

synchronized鎖升級的過程(從無鎖到偏向鎖,再到輕量級鎖,最后到重量級鎖的一個過程)

鎖升級是 Java 中 synchronized 鎖 的核心優化機制(基于 JVM 的 對象頭 Mark Word 實現),指鎖的狀態從 無鎖 → 偏向鎖 → 輕量級鎖 → 重量級鎖 逐步升級的過程。其目的是通過 “按需升級”,在不同并發場景下選擇最優的鎖實現&am…

HOT100--Day25--84. 柱狀圖中最大的矩形,215. 數組中的第K個最大元素,347. 前 K 個高頻元素

HOT100–Day25–84. 柱狀圖中最大的矩形,215. 數組中的第K個最大元素,347. 前 K 個高頻元素 每日刷題系列。今天的題目是《力扣HOT100》題單。 題目類型:棧,堆。 84. 柱狀圖中最大的矩形 思路: class Solution {publ…

基于 Apache Doris 的用戶畫像數據模型設計方案

一、 需求分析與設計目標數據源:用戶基本信息:用戶ID、性別、出生日期、注冊時間、常駐地域(省、市、區)、職業等。用戶體檢報告:每次體檢的報告ID、體檢時間、各項指標(如血壓、血糖、血脂、BMI等&#xf…

Python的深度學習

深入理解Python高級特性掌握Python的高級特性是進階的關鍵,包括裝飾器、生成器、上下文管理器、元類等。這些特性能夠提升代碼的靈活性和效率。例如,裝飾器可以用于實現AOP(面向切面編程),生成器可以處理大數據流而無需…

數據庫范式(Normalization)

一個設計混亂的數據庫就像一個雜亂的房間,用起來非常不方便:東西到處亂放(數據冗余),找件東西要翻遍所有角落(查詢困難),扔掉一把舊椅子時,可能會把搭在上面的唯一一件外…

數據結構---循環隊列

基于循環數組實現的循環隊列解決了順序隊列中的假溢出導致的空間浪費問題操作:(1)初始化//循環隊列 typedef struct {int *data;//指針模擬聲明數組int head,tail;//隊頭,隊尾 }Queue; //初始化 Queue *InitQueue() {Queue *q (Q…

深入理解線程模型

線程作為操作系統調度的基本執行單元,是實現高吞吐、低延遲系統的基礎。一、進程與線程的體系結構對比核心概念:進程(Process):操作系統資源分配的基本單位,擁有獨立的虛擬地址空間、文件描述符表、環境變量…

TTC定時器中斷——MPSOC實戰3

開啟TTC定時器&#xff0c;不同于7000系列的私有定時器此處設置LPD_LSBUS頻率TTC頻率取決于LPD_LSBUS可前往指定位置查看參數不使能填寫對應宏可前往指定位置查看參數main.c#include <stdio.h> #include "xparameters.h" #include "xgpiops.h" #incl…

人工智能訓練師三級備考筆記

一、實操1&#xff09;通用語法&#xff08;常見于實操題第一塊代碼塊&#xff09;1.讀取文件數據或加載數據集等描述時一般為以下結構&#xff1a;Datapd.read_文件格式(文件名) 注意&#xff1a;文件名需要用‘ ’框起來&#xff0c;必須要有引號文件格式有以下內容csv、txt…

Cherry Studio遞歸工具調用機制深度解析

在現代AI應用開發中,工具調用(Tool Calling)已成為大語言模型與外部系統交互的核心機制。Cherry Studio作為一款先進的AI對話客戶端,實現了一套完整的遞歸工具調用系統,能夠讓AI助手在執行復雜任務時自動調用多個工具,并根據執行結果智能決策下一步操作。本文將深入解析這…

[哈希表]966. 元音拼寫檢查器

966. 元音拼寫檢查器 class Solution:def spellchecker(self, wordlist: List[str], queries: List[str]) -> List[str]:origin set(wordlist) # 存儲原始單詞用于完全匹配lower_to_origin {} # 存儲小寫形式到原始單詞的映射vowel_to_origin {} # 存儲元音模糊形…

正則表達式與文本三劍客(grep、sed、awk)基礎與實踐

正則表達式基礎與實踐一、正則表達式概述1. 定義正則表達式&#xff08;Regular Expression&#xff0c;簡稱 RE&#xff09;是用于描述字符排列和匹配模式的語法規則&#xff0c;核心作用是對字符串進行分割、匹配、查找、替換操作。它本質是 “模式模板”&#xff0c;Linux 工…

eclipse中web項目編譯后的lib里面jar為空問題處理

1. 檢查項目構建配置驗證項目性質右鍵單擊項目 → Properties確認項目已正確配置&#xff1a;?Project Facets?&#xff1a;確保已勾選"Dynamic Web Module"?Targeted Runtimes?&#xff1a;確保已選擇服務器運行時&#xff08;如Tomcat&#xff09;檢查部署程序…

C語言中的遞歸問題——漢諾塔問題

漢諾塔&#xff08;Tower of Hanoi)&#xff0c;又稱河內塔&#xff0c;是一個源于印度古老傳說的益智玩具。傳說大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在…

ArkAnalyzer源碼初步分析I——分析ts項目流程

1.前言&#xff1a; 鴻蒙程序分析框架ArkAnalyzer&#xff08;方舟分析器&#xff09; 源碼地址 入門文檔 2.閱讀入門文檔后&#xff1a; 本人具有一定的Java開發經驗。雖然我對 TypeScript&#xff08;TS&#xff09;和 ArkTS 還不熟&#xff0c;但很多概念對我這個 Java 開…

c#基礎二(類和對象,構造器調用順序、訪問級別、重寫和多態、抽象類和接口)

一、類1.0對象初始化器class Student {public String name;public int age { get; set; } } internal class Program {static void Main(string[] args){ //寫法一Student stunew Student();stu.name"Tom";stu.age20;//寫法二Student stu2 new Student { name &qu…

Qt之快捷鍵、事件處理、自定義按鍵——完成記事本項目

快捷鍵我們電腦中的記事本中還支持快捷鍵&#xff0c;如“CTRLO”打開文件、“CTRLS”保存文件在Qt中使用QShortcut這個類創建快捷鍵在.cpp文件的構造函數中創建QShortcut對象&#xff0c;綁定打開文件和保存文件的槽函數放大縮小字體還是在.cpp的構造函數中編寫代碼Widget::Wi…

Open cascade中如何使用BRepAlgoAPI_Splitter分割一個Face

理論介紹 在OpenCASCADE幾何建模內核中&#xff0c;BRepAlgoAPI_Splitter是一個強大的工具&#xff0c;用于將一個形狀&#xff08;Shape&#xff09;用另一個形狀&#xff08;Tool&#xff09;進行分割。這種操作在CAD建模中非常常見&#xff0c;比如用平面切割實體、用曲線分…

【醫療 AI】Baichuan-M2 醫療大模型:技術解讀與使用方法

【醫療 AI】Baichuan-M2 醫療大模型&#xff1a;技術解讀與使用方法1. Baichuan-M2 醫療大模型簡介1.1 基本信息1.2 下載地址1.3 技術特點2. Baichuan-M2 模型技術報告2.1 摘要2.2 醫學性能評估2.2.1 HealthBench基準2.2.2 中國醫療場景對比評估2.3 系統架構2.3.1 驗證器系統2.…

unity pcd 二進制版 簡單顯示文件對象(單色)

unity Point Cloud Viewer and Tool 那個插件不支持pcd二進制&#xff0c;而且網上到處都是AI 我恨這種AI濫用&#xff0c;提供不了一點價值 好了&#xff0c;言歸正傳 可以在Point Cloud Viewer and Tool這個插件報錯地方轉用這個代碼&#xff0c;具體咋結合請自行研究。 …