【硬核數學】2.2 深度學習的“微積分引擎”:自動微分與反向傳播《從零構建機器學習、深度學習到LLM的數學認知》

歡迎來到本系列的第七篇文章。在上一章,我們用張量武裝了我們的線性代數知識,學會了如何描述和操作神經網絡中的高維數據流。我們知道,一個神經網絡的“前向傳播”過程,就是輸入張量經過一系列復雜的張量運算(矩陣乘法、卷積、激活函數等),最終計算出預測值,并與真實值比較得到一個標量損失(Loss)。

我們的目標,是調整網絡中海量的參數(權重和偏置,它們本身也是張量),來讓這個損失值最小。微積分告訴我們,實現這個目標的最佳路徑是梯度下降——計算損失對每個參數的梯度,然后讓參數沿著梯度的反方向更新一小步。

問題來了:如何計算這個梯度? 對于一個深達百層、參數過億的龐然大物,損失函數 L L L 與某個深層參數 w w w 之間的函數關系鏈條極其漫長和復雜。手動求導已然是天方夜譚。那么,計算機是如何高效且精確地完成這項艱巨任務的呢?

答案并非某種神秘的黑魔法,而是我們早已熟知的鏈式法則的一種極其聰明的、工程化的實現。這個實現就是反向傳播算法,其核心是一種名為自動微分的計算技術。今天,我們將一起揭開這個引擎蓋,探究深度學習的心臟是如何跳動的。

第一部分:計算的藍圖 —— 計算圖

要理解自動微分,我們首先需要引入一個至關重要的抽象工具——計算圖 (Computational Graph)

任何用計算機執行的數學表達式,無論多么復雜,都可以被分解為一系列基本運算的組合。計算圖就是這種分解過程的可視化表示。它是一個有向無環圖 (Directed Acyclic Graph, DAG),其中:

  • 節點 (Nodes) 代表運算(如加、乘、指數、卷積等)或變量(輸入數據、參數、常量)。
  • 邊 (Edges) 代表數據流(通常是張量),表示一個節點的輸出是另一個節點的輸入。

讓我們從一個極其簡單的例子開始。假設我們有這樣一個函數: L = ( a ? w + b ? y t r u e ) 2 L = (a \cdot w + b - y_{true})^2 L=(a?w+b?ytrue?)2。這可以看作一個最簡單的線性回歸模型在一個樣本上的平方誤差損失。

我們可以將它的計算過程分解并繪制成一個計算圖:

w
×
a
+
b
-
y_true
2
L

在這個圖中,w, a, b, y_true 是輸入變量(葉子節點),而×, +, -, 2 是運算節點,L 是最終的輸出節點。數據從左到右流動,這個過程就是前向傳播 (Forward Pass)

一個完整的神經網絡,無論其結構多復雜(CNN, RNN, Transformer),其前向傳播過程都可以被表示成一個巨大無比的計算圖。這個圖,就是我們進行梯度計算的“藍圖”。

第二部分:梯度計算的“三體”問題 —— 符號、數值與自動微分

在擁有計算圖這個藍圖后,我們如何求解梯度,例如 ? L ? w \frac{\partial L}{\partial w} ?w?L??學術界主要有三種方法:

  1. 手動/符號微分 (Symbolic Differentiation)
    這是我們高中和大學時學習的方法。使用一系列代數規則(如乘法法則、鏈式法則)來推導出一個梯度的數學表達式。例如,對于上面的例子,我們可以推導出 ? L ? w = 2 ( a w + b ? y t r u e ) ? a \frac{\partial L}{\partial w} = 2(aw+b-y_{true}) \cdot a ?w?L?=2(aw+b?ytrue?)?a

    • 優點:得到的是精確的解析解。
    • 缺點表達式膨脹 (Expression Swell)。對于深度神經網絡,最終的梯度表達式會變得異常龐大和復雜,生成和計算這個表達式本身的成本就高得無法接受。
  2. 數值微分 (Numerical Differentiation)
    這種方法利用導數的定義: f ′ ( x ) = lim ? h → 0 f ( x + h ) ? f ( x ) h f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h} f(x)=limh0?hf(x+h)?f(x)?。我們可以用一個很小的 h h h (例如 1 0 ? 5 10^{-5} 10?5) 來近似計算梯度。要計算 ? L ? w \frac{\partial L}{\partial w} ?w?L?,我們只需計算 L ( w + h ) L(w+h) L(w+h) L ( w ) L(w) L(w),然后用差值除以 h h h

    • 優點:實現簡單,可以用來檢驗其他方法的正確性。
    • 缺點近似而非精確,存在截斷誤差和舍入誤差;計算量巨大,為了計算梯度,對于網絡中的每一個參數,我們都需要重新進行一次完整的前向傳播,如果網絡有N個參數,就需要N+1次前向傳播,這對于動輒上億參數的模型是毀滅性的。
  3. 自動微分 (Automatic Differentiation, AD)
    這是一種介于符號微分和數值微分之間的“黃金方法”。它不像符號微分那樣在計算前生成一個巨大的表達式,也不像數值微分那樣進行近似計算。AD的核心思想是:在執行前向傳播計算數值的同時,利用鏈式法則,精確地計算并記錄下每一步的局部梯度信息。

自動微分有兩種主要模式:前向模式 (Forward Mode) 和反向模式 (Reverse Mode)。

  • 前向模式AD:它從輸入到輸出,計算一個輸出相對于所有輸入的導數。它在每次前向傳播中,計算出某個節點的值的同時,也計算出這個節點的值相對于某個特定輸入變量的導數。要得到損失L對所有N個參數的梯度,需要進行N次這樣的前向傳播。
  • 反向模式AD:它從輸出到輸入,計算所有輸入相對于一個輸出的導數。這正是深度學習所需要的!我們的目標是計算一個標量輸出(損失L)相對于所有N個參數的梯度。反向模式AD只需要一次前向傳播(計算所有節點的值)和一次反向傳播(計算所有梯度),就能得到所有參數的梯度。

由于其無與倫比的效率,反向模式自動微分成為了驅動深度學習訓練的唯一選擇。而反向傳播算法,正是反向模式自動微分在神經網絡領域的具體應用和命名

反向模式自動微分:一場優雅的梯度之旅

讓我們回到之前的計算圖,用反向模式AD來手動計算 ? L ? w \frac{\partial L}{\partial w} ?w?L?。這個過程分為兩步:

Step 1: 前向傳播 (Forward Pass)
假設輸入值為 a = 2 , w = 3 , b = 4 , y t r u e = 11 a=2, w=3, b=4, y_{true}=11 a=2,w=3,b=4,ytrue?=11。我們計算并記錄每個節點的值。

  • mul = a × w = 2 × 3 = 6 a \times w = 2 \times 3 = 6 a×w=2×3=6
  • add = mul + b = 6 + 4 = 10 b = 6 + 4 = 10 b=6+4=10
  • sub = add - y t r u e = 10 ? 11 = ? 1 y_{true} = 10 - 11 = -1 ytrue?=10?11=?1
  • L = sub 2 = ( ? 1 ) 2 = 1 ^2 = (-1)^2 = 1 2=(?1)2=1

Step 2: 反向傳播 (Backward Pass)
現在,我們從最終的輸出 L L L 開始,沿著計算圖反向傳播梯度。梯度在這里的含義是“損失L對某個節點的偏導數”。

  1. 起點:損失對自身的梯度永遠是1。即 ? L ? L = 1 \frac{\partial L}{\partial L} = 1 ?L?L?=1。這是我們反向傳播的初始梯度值。

  2. 從 L 到 pow:我們現在站在 pow 節點,收到了來自下游(這里是L)的梯度 ? L ? L = 1 \frac{\partial L}{\partial L}=1 ?L?L?=1。我們需要計算損失L對 pow 節點的輸入 sub 的梯度,即 ? L ? s u b \frac{\partial L}{\partial sub} ?sub?L?
    根據鏈式法則: ? L ? s u b = ? L ? p o w ? ? p o w ? s u b \frac{\partial L}{\partial sub} = \frac{\partial L}{\partial pow} \cdot \frac{\partial pow}{\partial sub} ?sub?L?=?pow?L???sub?pow?

    • ? L ? p o w \frac{\partial L}{\partial pow} ?pow?L? 就是從下游傳來的梯度,這里就是 ? L ? L = 1 \frac{\partial L}{\partial L}=1 ?L?L?=1
    • ? p o w ? s u b \frac{\partial pow}{\partial sub} ?sub?pow?pow 節點的局部梯度pow 的運算是 x 2 x^2 x2,其導數是 2 x 2x 2x。在前向傳播時,sub 的值是-1,所以這里的局部梯度是 2 × ( ? 1 ) = ? 2 2 \times (-1) = -2 2×(?1)=?2
    • 因此, ? L ? s u b = 1 × ( ? 2 ) = ? 2 \frac{\partial L}{\partial sub} = 1 \times (-2) = -2 ?sub?L?=1×(?2)=?2。我們將這個梯度值-2傳遞給 sub 節點。
  3. 從 pow 到 subsub 節點收到了來自下游的梯度 ? L ? s u b = ? 2 \frac{\partial L}{\partial sub}=-2 ?sub?L?=?2sub 的運算是 add - y_true。我們需要計算損失L對 sub 的兩個輸入 addy_true 的梯度。

    • ? L ? a d d = ? L ? s u b ? ? s u b ? a d d = ( ? 2 ) ? 1 = ? 2 \frac{\partial L}{\partial add} = \frac{\partial L}{\partial sub} \cdot \frac{\partial sub}{\partial add} = (-2) \cdot 1 = -2 ?add?L?=?sub?L???add?sub?=(?2)?1=?2。(因為 subadd 的局部梯度是1)
    • ? L ? y t r u e = ? L ? s u b ? ? s u b ? y t r u e = ( ? 2 ) ? ( ? 1 ) = 2 \frac{\partial L}{\partial y_{true}} = \frac{\partial L}{\partial sub} \cdot \frac{\partial sub}{\partial y_{true}} = (-2) \cdot (-1) = 2 ?ytrue??L?=?sub?L???ytrue??sub?=(?2)?(?1)=2。(因為 suby_true 的局部梯度是-1)
      我們將梯度-2傳遞給 add 節點,梯度2傳遞給 y_true 節點。
  4. 從 sub 到 addadd 節點收到了梯度 ? L ? a d d = ? 2 \frac{\partial L}{\partial add}=-2 ?add?L?=?2add 的運算是 mul + b

    • ? L ? m u l = ? L ? a d d ? ? a d d ? m u l = ( ? 2 ) ? 1 = ? 2 \frac{\partial L}{\partial mul} = \frac{\partial L}{\partial add} \cdot \frac{\partial add}{\partial mul} = (-2) \cdot 1 = -2 ?mul?L?=?add?L???mul?add?=(?2)?1=?2
    • ? L ? b = ? L ? a d d ? ? a d d ? b = ( ? 2 ) ? 1 = ? 2 \frac{\partial L}{\partial b} = \frac{\partial L}{\partial add} \cdot \frac{\partial add}{\partial b} = (-2) \cdot 1 = -2 ?b?L?=?add?L???b?add?=(?2)?1=?2
      我們將梯度-2傳遞給 mul 節點,梯度-2傳遞給 b 節點。
  5. 從 add 到 mulmul 節點收到了梯度 ? L ? m u l = ? 2 \frac{\partial L}{\partial mul}=-2 ?mul?L?=?2mul 的運算是 a × w a \times w a×w

    • ? L ? a = ? L ? m u l ? ? m u l ? a = ( ? 2 ) ? w = ( ? 2 ) ? 3 = ? 6 \frac{\partial L}{\partial a} = \frac{\partial L}{\partial mul} \cdot \frac{\partial mul}{\partial a} = (-2) \cdot w = (-2) \cdot 3 = -6 ?a?L?=?mul?L???a?mul?=(?2)?w=(?2)?3=?6。(局部梯度是另一個輸入 w w w
    • ? L ? w = ? L ? m u l ? ? m u l ? w = ( ? 2 ) ? a = ( ? 2 ) ? 2 = ? 4 \frac{\partial L}{\partial w} = \frac{\partial L}{\partial mul} \cdot \frac{\partial mul}{\partial w} = (-2) \cdot a = (-2) \cdot 2 = -4 ?w?L?=?mul?L???w?mul?=(?2)?a=(?2)?2=?4。(局部梯度是另一個輸入 a a a

至此,我們已經完成了整個反向傳播。我們得到了損失L對所有葉子節點的梯度: ? L ? a = ? 6 \frac{\partial L}{\partial a}=-6 ?a?L?=?6, ? L ? w = ? 4 \frac{\partial L}{\partial w}=-4 ?w?L?=?4, ? L ? b = ? 2 \frac{\partial L}{\partial b}=-2 ?b?L?=?2, ? L ? y t r u e = 2 \frac{\partial L}{\partial y_{true}}=2 ?ytrue??L?=2
我們來驗證一下手動求導的結果: ? L ? w = 2 ( a w + b ? y t r u e ) ? a = 2 ( 2 ? 3 + 4 ? 11 ) ? 2 = 2 ( ? 1 ) ? 2 = ? 4 \frac{\partial L}{\partial w} = 2(aw+b-y_{true}) \cdot a = 2(2 \cdot 3 + 4 - 11) \cdot 2 = 2(-1) \cdot 2 = -4 ?w?L?=2(aw+b?ytrue?)?a=2(2?3+4?11)?2=2(?1)?2=?4。完全一致!

在這里插入圖片描述

這個過程揭示了反向模式AD的精髓:

  • 一次前向傳播:計算并緩存所有中間變量的值。
  • 一次反向傳播:從后向前,利用鏈式法則和緩存的中間值,逐節點計算梯度。
  • 局部性:每個節點在計算梯度時,只需要關心自己的運算類型(局部梯度)和從下游傳來的梯度值,無需知道整個網絡的結構。這使得該算法高度模塊化和可擴展。

第三部分:反向傳播 —— 神經網絡的梯度交響樂

現在,我們可以正式給出結論:反向傳播 (Backpropagation, BP) 算法,就是反向模式自動微分在神經網絡上的應用。它不是一個與AD并列的概念,而是AD在特定領域(神經網絡)的“藝名”。

在神經網絡的語境下,計算圖的節點不再是簡單的+×,而是整個層 (Layer),如全連接層、卷積層、激活函數層等。

層的視角:局部梯度與全局梯度

反向傳播的美妙之處在于其優雅的“責任分工”。每一層都像一個獨立的模塊,它只需要做好兩件事:

  1. 實現自己的前向傳播邏輯:接收輸入張量,根據自己的參數和運算規則,計算并輸出張量。
  2. 實現自己的反向傳播邏輯:接收來自下游(更靠近損失函數的那一側)的、關于其輸出的梯度(我們稱之為全局梯度 ? L ? out \frac{\partial L}{\partial \text{out}} ?out?L?),然后計算:
    • 損失L關于其輸入的梯度( ? L ? in = ? L ? out ? ? out ? in \frac{\partial L}{\partial \text{in}} = \frac{\partial L}{\partial \text{out}} \cdot \frac{\partial \text{out}}{\partial \text{in}} ?in?L?=?out?L???in?out?),并將其傳遞給上游。
    • 損失L關于其內部參數(如權重W、偏置b)的梯度( ? L ? W = ? L ? out ? ? out ? W \frac{\partial L}{\partial W} = \frac{\partial L}{\partial \text{out}} \cdot \frac{\partial \text{out}}{\partial W} ?W?L?=?out?L???W?out?),并將其存儲起來,用于后續的參數更新。

這里的 ? out ? in \frac{\partial \text{out}}{\partial \text{in}} ?in?out? ? out ? W \frac{\partial \text{out}}{\partial W} ?W?out? 就是該層的局部梯度

以一個全連接層為例,其前向傳播為 out = in ? W + b \text{out} = \text{in} \cdot W + b out=in?W+b
其局部梯度(雅可比矩陣)為:

  • ? out ? in = W T \frac{\partial \text{out}}{\partial \text{in}} = W^T ?in?out?=WT
  • ? out ? W = in T \frac{\partial \text{out}}{\partial W} = \text{in}^T ?W?out?=inT
  • ? out ? b = 1 \frac{\partial \text{out}}{\partial b} = 1 ?b?out?=1

當反向傳播發生時,該層接收到梯度 ? L ? out \frac{\partial L}{\partial \text{out}} ?out?L?,它就會執行以下計算:

  • 傳遞給上一層的梯度: ? L ? in = ? L ? out ? W T \frac{\partial L}{\partial \text{in}} = \frac{\partial L}{\partial \text{out}} \cdot W^T ?in?L?=?out?L??WT
  • 需要更新的權重梯度: ? L ? W = in T ? ? L ? out \frac{\partial L}{\partial W} = \text{in}^T \cdot \frac{\partial L}{\partial \text{out}} ?W?L?=inT??out?L?
  • 需要更新的偏置梯度: ? L ? b = ∑ ? L ? out \frac{\partial L}{\partial b} = \sum \frac{\partial L}{\partial \text{out}} ?b?L?=?out?L? (對batch維度求和)

在這里插入圖片描述

這個時序圖生動地描繪了神經網絡中梯度流動的“交響樂”。前向傳播構建了計算圖并計算了所有值,而反向傳播(由loss.backward()觸發)則像一個指揮家,從樂曲的末尾(Loss)開始,將梯度的“指令”逐層向后傳遞。每一層在收到指令后,演奏好自己的部分(計算參數梯度),并將指令傳遞給前一層,直到整個樂團(網絡)的所有成員(參數)都得到了自己的梯度。

深度學習框架的角色

PyTorch、TensorFlow等現代深度學習框架,將這個過程自動化到了極致。作為開發者,我們只需要:

  1. 用框架提供的層和操作來定義網絡結構(即動態或靜態地定義計算圖)。
  2. 執行前向傳播,得到損失。
  3. 調用一個簡單的命令,如 loss.backward()

框架在背后會自動完成:

  • 在前向傳播時,構建出完整的計算圖,并緩存所有中間變量的值。
  • 在調用 backward() 時,從損失節點開始,完美地執行反向模式自動微分,計算出損失對每一個參數(定義時被標記為 requires_grad=True 的張量)的梯度。
  • 將計算出的梯度值,存儲在每個參數張量的 .grad 屬性中。

之后,我們就可以將這些梯度交給優化器(如SGD, Adam),由優化器來執行參數更新的步驟:parameter = parameter - learning_rate * parameter.grad

融會貫通:微積分的深度進化

今天,我們完成了對微積分的深度學習“升級”。我們看到,驅動整個AI訓練過程的,并非某種全新的數學理論,而是我們早已熟知的鏈式法則,被以一種極其高效和工程化的方式重新組織和實現。

  1. 計算圖:將復雜的計算過程分解為模塊化的“藍圖”,是自動微分得以實施的基礎。
  2. 自動微分 (AD):特別是反向模式AD,提供了一種在計算效率和精度上都遠超符號微分和數值微分的方法,是計算海量參數梯度的不二之選。
  3. 反向傳播 (Backpropagation):就是反向模式AD在神經網絡上的應用。它通過“局部計算,全局傳播”的模式,優雅地解決了深層網絡中的梯度計算難題。

反向傳播算法的出現,才真正讓“深度”學習成為可能。沒有它,我們可能還停留在只有幾層參數的淺層模型時代。它與梯度下降的關系是:反向傳播負責高效地“算”出梯度,梯度下降負責使用這個梯度去“更新”參數。一個主內(計算),一個主外(優化)。

掌握了張量和自動微分,我們就掌握了深度學習模型的“表示”與“學習”兩大核心。接下來,我們將繼續深入,探討在實際訓練中會遇到的各種問題,比如梯度消失/爆炸,以及如何通過更先進的優化算法(如Adam)來應對這些挑戰。這將是我們對“優化理論”的深度學習升級。


習題

第1題:手動反向傳播
考慮一個簡單的函數 y = ReLU ( w x + b ) y = \text{ReLU}(wx+b) y=ReLU(wx+b),其中ReLU函數定義為 ReLU ( z ) = max ? ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)。假設輸入 x = 2 x=2 x=2, 參數 w = 3 , b = ? 7 w=3, b=-7 w=3,b=?7
A. 請執行前向傳播,計算出 y y y 的值。
B. 假設下游傳來的梯度 ? L ? y = 5 \frac{\partial L}{\partial y} = 5 ?y?L?=5。請執行反向傳播,計算出損失L對參數 w w w b b b 的梯度,即 ? L ? w \frac{\partial L}{\partial w} ?w?L? ? L ? b \frac{\partial L}{\partial b} ?b?L?

第2題:概念辨析
請用自己的話解釋反向傳播 (Backpropagation) 和梯度下降 (Gradient Descent) 的區別與聯系。為什么說“反向傳播是為梯度下降服務的”?

第3題:計算圖與梯度
在一個深度神經網絡中,如果某個參數 w w w 通過多條路徑影響了最終的損失 L L L(例如,一個參數在循環神經網絡中被多次使用),那么在使用反向傳播計算 ? L ? w \frac{\partial L}{\partial w} ?w?L? 時,會發生什么?
A. 只會計算其中一條路徑的梯度。
B. 會分別計算每條路徑的梯度,并取最大值。
C. 會分別計算每條路徑的梯度,并將它們相加。
D. 會報錯,因為梯度路徑不唯一。


答案

第1. 答案:
A. 前向傳播

  1. 計算線性部分: z = w x + b = 3 × 2 + ( ? 7 ) = 6 ? 7 = ? 1 z = wx + b = 3 \times 2 + (-7) = 6 - 7 = -1 z=wx+b=3×2+(?7)=6?7=?1
  2. 應用ReLU激活函數: y = ReLU ( z ) = ReLU ( ? 1 ) = max ? ( 0 , ? 1 ) = 0 y = \text{ReLU}(z) = \text{ReLU}(-1) = \max(0, -1) = 0 y=ReLU(z)=ReLU(?1)=max(0,?1)=0
    所以, y = 0 y=0 y=0

B. 反向傳播

  1. 計算 ? L ? z \frac{\partial L}{\partial z} ?z?L?
    ? L ? z = ? L ? y ? ? y ? z \frac{\partial L}{\partial z} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} ?z?L?=?y?L???z?y?
    我們已知 ? L ? y = 5 \frac{\partial L}{\partial y} = 5 ?y?L?=5
    ReLU函數的局部梯度 ? y ? z \frac{\partial y}{\partial z} ?z?y? 是:如果 z > 0 z>0 z>0,導數為1;如果 z < 0 z<0 z<0,導數為0。
    在前向傳播中,我們計算出 z = ? 1 z=-1 z=?1,所以 ? y ? z = 0 \frac{\partial y}{\partial z} = 0 ?z?y?=0
    因此, ? L ? z = 5 × 0 = 0 \frac{\partial L}{\partial z} = 5 \times 0 = 0 ?z?L?=5×0=0

  2. 計算 ? L ? w \frac{\partial L}{\partial w} ?w?L? ? L ? b \frac{\partial L}{\partial b} ?b?L?
    ? L ? w = ? L ? z ? ? z ? w = 0 ? x = 0 ? 2 = 0 \frac{\partial L}{\partial w} = \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial w} = 0 \cdot x = 0 \cdot 2 = 0 ?w?L?=?z?L???w?z?=0?x=0?2=0
    ? L ? b = ? L ? z ? ? z ? b = 0 ? 1 = 0 \frac{\partial L}{\partial b} = \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial b} = 0 \cdot 1 = 0 ?b?L?=?z?L???b?z?=0?1=0
    所以, ? L ? w = 0 \frac{\partial L}{\partial w} = 0 ?w?L?=0 ? L ? b = 0 \frac{\partial L}{\partial b} = 0 ?b?L?=0。這個結果是符合邏輯的,因為輸入的 z = ? 1 z=-1 z=?1 導致ReLU函數輸出為0,使得 w w w b b b 的微小變化無法影響到輸出 y y y(在 z z z 保持小于0的情況下),因此它們對最終損失的梯度貢獻也為0。這種情況被稱為“神經元死亡”。

第2. 答案:

  • 區別

    • 梯度下降 (Gradient Descent) 是一種優化算法。它的作用是如何使用梯度來更新模型的參數,以最小化損失函數。其核心思想是 參數 = 參數 - 學習率 * 梯度。它只關心“拿到梯度后該怎么走”,不關心“梯度是怎么來的”。
    • 反向傳播 (Backpropagation) 是一種梯度計算算法。它的作用是如何高效地計算損失函數對網絡中所有參數的梯度。它是一個應用了鏈式法則的、系統性的過程。它只負責“算出梯度”,不關心“梯度算出來以后要干嘛”。
  • 聯系
    它們是模型訓練中緊密協作的兩個環節。反向傳播是梯度下降的“供應商”。在每次訓練迭代中,模型首先通過反向傳播計算出所有參數的梯度,然后將這些梯度交給梯度下降(或其變種如Adam)算法,由優化算法來完成參數的更新。因此,“反向傳播是為梯度下降服務的”這句話是完全正確的,它為優化算法提供了最關鍵的輸入——方向(梯度)。

第3. 答案:C
會分別計算每條路徑的梯度,并將它們相加。
這是多元鏈式法則的直接體現,也是自動微分和反向傳播算法正確處理計算圖的內在要求。在計算圖中,如果一個節點(參數 w w w)的輸出流向了多個后續節點,那么在反向傳播時,它會從所有這些后續節點分別接收到梯度。該節點(參數 w w w)的總梯度,是所有從不同路徑傳回來的梯度的總和。這確保了該參數對最終損失的全部影響都被正確地計算在內。

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

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

相關文章

DAY 45 Tensorboard使用介紹

浙大疏錦行https://blog.csdn.net/weixin_45655710知識點回顧&#xff1a; tensorboard的發展歷史和原理tensorboard的常見操作tensorboard在cifar上的實戰&#xff1a;MLP和CNN模型 作業&#xff1a;對resnet18在cifar10上采用微調策略下&#xff0c;用tensorboard監控訓練過程…

2023年全國碩士研究生招生考試英語(一)試題總結

文章目錄 題型與分值分布完形填空錯誤 1&#xff1a;考察連詞 or 前后內容之間的邏輯關系錯誤2&#xff1a;錯誤3&#xff1a;錯誤4&#xff1a;這個錯得最有價值&#xff0c;因為壓根沒讀懂錯誤5&#xff1a;學到的短語&#xff1a; 仔細閱讀排序/新題型翻譯小作文大作文 題型…

react-數據Mock實現——json-server

什么是mock&#xff1f; 在前后端分離的開發模式下&#xff0c;前端可以在沒有實際后端接口的支持下先進行接口數據的模擬&#xff0c;進行正常的業務功能開發 json-server實現數據Mock json-server是一個node的包&#xff0c;可以在不到30秒內獲得零編碼的完整Mock服務 實現…

使用POI導入解析excel文件

首先校驗 /*** 校驗導入文件* param file 上傳的文件* return 校驗結果&#xff0c;成功返回包含成功狀態的AjaxResult&#xff0c;失敗返回包含錯誤信息的AjaxResult*/private AjaxResult validateImportFile(MultipartFile file) {if (file.isEmpty()) {return AjaxResult.er…

從0開始學習計算機視覺--Day06--反向傳播算法

盡管解析梯度可以讓我們省去巨大的計算量&#xff0c;但如果函數比較復雜&#xff0c;對這個損失函數進行微分計算會變得很困難。我們通常會用反向傳播技術來遞歸地調用鏈式法則來計算向量每一個方向上的梯度。具體來說&#xff0c;我們將整個計算過程的輸入與輸入具體化&#…

企業流程知識:《學習觀察:通過價值流圖創造價值、消除浪費》讀書筆記

《學習觀察&#xff1a;通過價值流圖創造價值、消除浪費》讀書筆記 作者&#xff1a;邁克魯斯&#xff08;Mike Rother&#xff09;&#xff0c;約翰舒克&#xff08;John Shook&#xff09; 出版時間&#xff1a;1999年 歷史地位&#xff1a;精益生產可視化工具的黃金標準&am…

Day02_C語言IO進程線程

01.思維導圖 02.將當前的時間寫入到time. txt的文件中&#xff0c;如果ctrlc退出之后&#xff0c;在再次執行支持斷點續寫 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止&#xff0c;再次執行程序 4.2022-04-26 20:00:00 5.2022-04-26 2…

FFmpeg中TS與MP4格式的extradata差異詳解

在視頻處理中&#xff0c;extradata是存儲解碼器初始化參數的核心元數據&#xff0c;直接影響視頻能否正確解碼。本文深入解析TS和MP4格式中extradata的結構差異、存儲邏輯及FFmpeg處理方案。 &#x1f4cc; 一、extradata的核心作用 extradata是解碼必需的參數集合&#xff0…

【CV數據集介紹-40】Cityscapes 數據集:助力自動駕駛的語義分割神器

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

SAP月結問題9-FAGLL03H與損益表中研發費用金額不一致(FAGLL03H Bug)

SAP月結問題9-FAGLL03H與損益表中研發費用金額不一致(S4 1709) 財務反饋&#xff0c;月結后核對數據時發現FAGLL03H導出的研發費用與損益表中的研發費用不一致&#xff0c;如下圖所示&#xff1a; 對比FAGLL03H與損益表對應的明細&#xff0c;發現FAGLL03H與損益表數據存在倍數…

HTML inputmode 屬性詳解

inputmode 是一個 HTML 屬性&#xff0c;用于指定用戶在編輯元素或其內容時應使用的虛擬鍵盤布局類型。它主要影響移動設備和平板電腦的輸入體驗。 語法 <input inputmode"value"> <!-- 或 --> <textarea inputmode"value"></texta…

軟考中級【網絡工程師】第6版教材 第1章 計算機網絡概述

考點分析&#xff1a; 本章重要程度&#xff1a;一般&#xff0c;為后續章節做鋪墊&#xff0c;有總體認識即可&#xff0c;選擇題1-2分高頻考點&#xff1a;OSI模型、TCP/IP模型、每個層次的功能、協議層次新教材變化&#xff1a;刪除網絡結構、刪除X.25、更新互聯網發展【基本…

Mysql事務與鎖

數據庫并發事務 數據庫一般都會并發執行多個事務&#xff0c;多個事務可能會并發的對相同的一批數據進行增刪改查操作&#xff0c;可能就會導致我們說的臟寫、臟讀、不可重復讀、幻讀這些問題。為了解決這些并發事務的問題&#xff0c;數據庫設計了事務隔離機制、鎖機制、MVCC多…

Bilibili多語言字幕翻譯擴展:基于上下文的實時翻譯方案設計

Bilibili多語言字幕翻譯擴展&#xff1a;基于上下文的實時翻譯方案設計 本文介紹了一個Chrome擴展的設計與實現&#xff0c;該擴展可以為Bilibili視頻提供實時多語言字幕翻譯功能。重點討論了字幕翻譯中的上下文問題及其解決方案。 該項目已經登陸Chrome Extension Store: http…

熱血三國野地名將列表

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>野地名將信息表</title><style>tabl…

【記錄】Word|Word創建自動編號的多級列表標題樣式

文章目錄 前言創建方式第一種方法&#xff1a;從“定義多級列表”中直接綁定已有樣式第二種方法&#xff1a;通過已有段落創建樣式&#xff0c;再綁定補充說明 尾聲 前言 這世上荒唐的事情不少&#xff0c;但若說到吊詭&#xff0c;Word中的多級列表樣式設定&#xff0c;倒是能…

使用mavros啟動多機SITL仿真

使用mavros啟動多機SITL仿真 方式1&#xff1a;使用roslaunch一鍵啟動Step1&#xff1a;創建一個新的 ROS 包或放到現有包里Step2&#xff1a;編輯 multi_mavros.launchStep3&#xff1a;構建工作空間并 source 環境Step4&#xff1a;構建工作空間并 source 環境 方式2&#xf…

Flutter 網絡棧入門,Dio 與 Retrofit 全面指南

面向多年 iOS 開發者的零阻力上手 寫在前面 你在 iOS 項目中也許習慣了 URLSession、Alamofire 或 Moya。 換到 Flutter 后&#xff0c;等價的「組合拳」就是 Dio Retrofit。 本文將帶你一次吃透兩套庫的安裝、核心 API、進階技巧與最佳實踐。 1. Dio&#xff1a;Flutter 里的…

工作室考核源碼(帶后端)

題目內容可更改 下載地址:https://mcwlkj.lanzoub.com/iUF3z300tgfe 如圖所示

數字孿生技術為UI前端提供全面支持:實現產品的可視化配置與定制

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 一、引言&#xff1a;數字孿生驅動產品定制的技術革命 在消費升級與工業 4.0 的雙重驅動下&a…