中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

吳恩達深度學習課程一:神經網絡和深度學習 第三周:淺層神經網絡(二)激活函數和反向傳播

此分類用于記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如下:

  1. 原課程視頻鏈接:
  2. github課程資料,含課件與筆記:
  3. 課程配套練習(中英)與答案:

本篇為第一課第三周,到部分的筆記內容。

經過第二周的基礎補充,本周內容的理解難度可以說有了很大的降低,主要是從邏輯回歸擴展到淺層神經網絡,講解相關內容,我們按部就班梳理課程內容即可,當然,依舊會盡可能地創造一個較為絲滑的理解過程。
我們繼續上一篇的內容,來展開一下激活函數對淺層神經網絡擬合效果的影響,并完成淺層神經網絡的反向傳播部分,這樣,我們就大致了解了淺層神經網絡相比邏輯回歸,是如何提高算法性能的。

1. 淺層神經網絡里的激活函數

1.1 隱藏層激活函數的作用

在邏輯回歸中,我們知道,最后使用sigmoid激活函數是為了讓加權和映射為概率從而實現分類效果。
而現在,如果我們仍要進行二分類,而淺層神經網絡輸出層的sigmoid函數已經實現了分類效果,那隱藏層再使用激活函數的作用是什么?
我們看一看如果不設隱藏層神經元的激活函數,正向傳播的輸出是什么形式:

  1. 首先,隱藏層只有線性組合,那么隱藏層的輸出就是加權和本身:

\[\mathbf{Z^{[1]}} = \mathbf{W^{[1]}} \mathbf{X} + \mathbf{b^{[1]}} \]

  1. 現在,隱藏層的加權和就是輸出層的輸入,即:

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}}( \mathbf{W^{[1]}} \mathbf{X} + \mathbf{b^{[1]}} ) + \mathbf{b^{[2]}} = \mathbf{W^{[2]}}\mathbf{W^{[1]}} \mathbf{X}+(\mathbf{W^{[2]}}\mathbf{b^{[1]}} + \mathbf{b^{[2]}}) \quad (1 \times m) \]

  1. 我們觀察一下就會發現,\(\mathbf{Z^{[2]}}\) 的實際形式沒有發生任何變化,我們換一個示例看一下:

\[y = 3(2x+1)+1 =6x+4 \]

可以發現,其形式依舊是“權重 × 輸入 + 偏置”的線性表達式。
也就是說,無論我們堆疊多少層這樣的“線性層”,最后得到的結果仍然等價于一個沒有任何非線性能力的線性模型。這與邏輯回歸本質上并沒有區別。
在這種情況下,多層和一層的區別就相當于:

\[10 = 1*2*5(多層) \]

\[10 = 1*10(一層) \]

這便是激活函數的核心作用:引入非線性

1.2 激活函數如何引入非線性?

我們已經知道, 在沒有激活函數的情況下,神經元的輸出是:

\[\mathbf{A^{[1]}} = \mathbf{Z^{[1]}} = \mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}} \]

而當我們加入激活函數 \(g(x)\) 后,輸出就變成:

\[\mathbf{A^{[1]}} = g(\mathbf{Z^{[1]}}) = g(\mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}}) \]

因為此時,下一層的輸入就變成了一個經過非線性映射的結果

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}},g(\mathbf{W^{[1]}}\mathbf{X} + \mathbf{b^{[1]}}) + \mathbf{b^{[2]}} \]

這意味著:
如果 \(g(x)\) 是線性的(例如恒等函數 \(g(z)=z\)),網絡整體依舊是線性關系;
而只要 \(g(x)\)非線性函數(如 Sigmoid、ReLU、tanh 等),網絡整體的映射關系就無法再化簡為一個單一的線性變換
我們繼續剛剛那個例子:

\[y = 3(2x+1)+1 =6x+4 \]

現在我們只改一點,把激活函數換成ReLU,即:

\[g(z) = \max(0, z) \]

隱藏層的傳播過程即為:

\[Z^{[1]} = 2x + 1,\quad A^{[1]} = \max(0, 2x+1) \]

再輸入輸出層:

\[Z^{[2]} = 3A^{[1]} + 1 = 3\max(0, 2x+1) + 1 \]

這個時候,整體的輸出函數變成:

\[y = \begin{cases} 6x + 4, & x > -0.5 \\ 1, & x \le -0.5 \end{cases} \]

這就是一個分段線性函數可以拐彎、有“折點”,不再是單一直線。
那如果再換成更復雜的激活函數呢?
這也意味著網絡具備了擬合非線性關系的能力。

最后看一張圖:
Pasted image 20251018180929

我們想通過圖中的幾個數據點進行擬合,沒有激活函數,我們就只能像左側一樣畫一條直線,而只有使用了激活函數,我們才能讓這條直線彎曲,來實現更好擬合效果。

1.3 常見的激活函數

在了解了激活函數的作用——為神經網絡引入非線性能力之后,我們來看看幾種常見的激活函數及其特性。不同的激活函數,會對神經元的輸出特征、梯度傳播和訓練效果產生顯著影響。

(1)Sigmoid 函數

Sigmoid 的表達式為:

\[g(z) = \frac{1}{1 + e^{-z}} \]

其輸出范圍在 \((0, 1)\) 之間,形狀如“S”型曲線。
Sigmoid 的優點在于它可以將任意實數映射為 \((0,1)\),非常適合二分類任務的輸出層,例如預測概率。
缺點是當輸入較大或較小時,梯度接近 0,容易出現梯度消失問題,導致網絡難以訓練。
myplot1

(2)Tanh函數

Tanh 是 Sigmoid 的改進版本,其表達式為:

\[g(z) = \tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} \]

輸出范圍在 \((-1, 1)\) 之間,同樣是“S”型曲線。
Tanh 的優點在于輸出均值為 0,有助于加快梯度下降的收斂,并在一定程度上緩解了梯度消失問題。
缺點在于,當輸入過大或過小時,依然會出現梯度趨于 0 的飽和現象。
如果把 Sigmoid 看作“擠壓到 [0,1]”,那么 Tanh 就是“擠壓到 [-1,1]”,更加對稱,有利于后續層學習,因此,Tanh比sigmoid更適合作為隱藏層的激活函數。
myplot2

(3)ReLU函數

ReLU 是目前最常用的激活函數之一,定義為:

\[g(z) = \max(0, z) \]

當輸入為正時,輸出等于自身;當輸入為負時,輸出為 0。
ReLU 的優點在于計算簡單,梯度傳播效率高,并且在正區間保持線性,減少了梯度消失問題,從而加快訓練速度。
缺點在于對于負輸入,梯度恒為 0,容易出現“神經元死亡”現象,即某些神經元永遠輸出 0,無法更新。
myplot3

(4)Leaky ReLU(帶泄漏的 ReLU)

為了緩解 ReLU 的“神經元死亡”問題,便出現了 Leaky ReLU:

\[g(z) = \begin{cases} z, & \text{if } z > 0, \\ \alpha z, & \text{if } z \leq 0. \end{cases} \]

其中 \(\alpha\) 是一個很小的常數(通常取 0.01)。Leaky ReLU 的優點在于對負區間保留一個微小的斜率,避免梯度完全為 0,從而訓練更加穩定,減少“死神經元”的出現。
缺點是其輸出仍然不是嚴格的零中心,且 \(\alpha\) 的選取需要進行調試。
myplot4

2.淺層神經網絡的反向傳播

我們知道,在淺層神經網絡里,我們涉及到兩個層級各自的權重和偏置,因此,不同于邏輯回歸中的一次更新,我們這次需要在一次反向傳播過程中,更新兩個層級的參數
參數的傳遞過程如下:

\[\begin{aligned} &\text{隱藏層參數(4個神經元):} \\ &\Delta W^{[1]}, \Delta b^{[1]} \;\; \to \;\; \Delta Z^{[1]} \;\; \to \;\; \Delta A^{[1]} \\ \\ &\text{輸出層參數(1個神經元):} \\ &\Delta W^{[2]}, \Delta b^{[2]} \;\; \to \;\; \Delta Z^{[2]} \;\; \to \;\; \Delta A^{[2]} \to \;\; \Delta L\\ \end{aligned} \]

2.1 損失函數

我們知道二分類交叉熵成本函數格式如下:

\[\mathcal{L} = -\frac{1}{m} \sum_{i=1}^{m} \Big[ y^{(i)} \log a^{[2](i)} + (1 - y^{(i)}) \log (1 - a^{[2](i)}) \Big] \]

向量化后即可表示為: $$ \mathcal{L}(\mathbf{A^{[2]}}, \mathbf{Y}) $$
我們依舊通過損失函數,使用鏈式法則來計算梯度。

2.2 輸出層梯度

輸出層激活函數為 \(sigmoid(x)\)
而輸出層誤差定義為:

\[\mathbf{dZ^{[2]}} = \frac{\partial \mathcal{L}}{\partial \mathbf{Z^{[2]}}} \]

在第二周的推導中,我們已經知道,對于二分類交叉熵 + sigmoid,損失對加權和的導數可簡化為:

\[\mathbf{dZ^{[2]}} = \mathbf{A^{[2]}} - \mathbf{Y} \quad (1 \times m) \]

繼續通過鏈式法則,我們得到輸出層權重和偏置的梯度(詳細過程可看第二周的推導):

\[\mathbf{dW^{[2]}} = \frac{1}{m} \mathbf{dZ^{[2]}} (\mathbf{A^{[1]}})^T \quad (1 \times 4) \]

\[\mathbf{db^{[2]}} = \frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[2](i)}} \quad (1 \times 1) \]

3.3 隱藏層梯度

對于隱藏層,這里我們便不定義具體的激活函數,用通式來展示過程:
先梳理一下我們現在有的量:

  1. 損失對輸出層加權和的導數\(\mathbf{dZ^{[2]}}\)
  2. 隱藏層的加權和\(\mathbf{Z^{[1]}}\)
  3. 隱藏層的的加權和經過激活函數的輸出\(\mathbf{A^{[1]}}\)
  4. 隱藏層的激活函數\(g(\mathbf{Z^{[1]}})\) 和它的導數\(g'(\mathbf{Z^{[1]}})\)
  5. 隱藏層的參數\(\mathbf{W^{[1]}}\),\(\mathbf{b^{[1]}}\)

現在,我們要求隱藏層參數的梯度,首先要得到損失關于隱藏層輸出的導數,即:

\[\mathbf{dA^{[1]}} = \frac{\partial \mathcal{L}}{\partial \mathbf{A^{[1]}}} \]

再通過鏈式法則細化一下,我們得到:

\[\mathbf{dA^{[1]}} = \mathbf{dZ^{[2]}}? \frac{\partial \mathbf{Z^{[2]}}}{\partial \mathbf{A^{[1]}}} \]

再看一眼加權和公式:

\[\mathbf{Z^{[2]}} = \mathbf{W^{[2]}}\mathbf{A^{[1]}}+ \mathbf{b^{[2]}} \quad (1 \times m) \]

所以,通過求導我們得到:

\[\mathbf{dA^{[1]}} = \mathbf{(W^{[2]})^T}\mathbf{dZ^{[2]}},轉置為了匹配維度 \quad (4 \times m)\]

下一步,得到損失關于隱藏層加權和的輸出,即:

\[\mathbf{dZ^{[1]}} = \mathbf{dA^{[1]}}? \frac{\partial \mathbf{A^{[1]}}}{\partial \mathbf{Z^{[1]}}} \]

而隱藏層輸出對加權和求導,其實就是激活函數的導數:\(g'(\mathbf{Z^{[1]}})\)
因此,我們得到:

\[\mathbf{dZ^{[1]}} = \mathbf{dA^{[1]}}? g'(\mathbf{Z^{[1]}}) \quad (4 \times m) \]

注意!這里的乘是Hadamard 乘。
Hadamard 乘激活導數 = 對每個神經元每個樣本的誤差單獨乘上對應的激活導數
到了這一步,我們就可以得到最后的梯度:

\[\mathbf{dW^{[1]}} = \frac{1}{m} \mathbf{dZ^{[1]}} \mathbf X^T \quad (4 \times n) \]

\[\mathbf{db^{[1]}} = \frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}} \quad (4 \times 1) \]

還沒完,這里還有一點要強調,注意看這個符號:\(\mathbf{dZ^{[1]}_{:,i}}\)
我們之前的邏輯回歸,以及本次傳播的輸出層偏置,使用的符號都是\(\mathbf{dZ^{(i)}}\),對這個符號求平均就代表對 \(m\) 個樣本在同一神經元上的誤差求平均
而現在,我們的隱藏層有四個神經元,由此解釋一下\(\frac{1}{m} \sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}}\) 的含義:

  1. "\(:\)"代表所有行
  2. "\(:,i\)"代表第 \(i\)
  3. "\(\sum_{i=1}^{m} \mathbf{dZ^{[1]}_{:,i}}\)"代表對\(dZ^{[1]}\) 的每一列求和,得到的結果是所有樣本分別在四個隱藏神經元總誤差
  4. 最后求平均值,即為平均誤差,現在, 每個元素就對應一個隱藏神經元的偏置梯度。

我們也總結一下反向傳播過程中各個量和其維度:

維度 說明
X n × m 輸入特征
W[1] 4 × n 隱藏層權重
b[1] 4 × 1 → 4×m 隱藏層偏置(廣播)
Z[1] 4 × m 隱藏層線性組合
A[1] 4 × m 隱藏層激活輸出
W[2] 1 × 4 輸出層權重
b[2] 1 × 1 → 1×m 輸出層偏置(廣播)
Z[2] 1 × m 輸出層線性組合
A[2] 1 × m 輸出層激活輸出
dZ[2] 1 × m 輸出層誤差
dW[2] 1 × 4 輸出層權重梯度
db[2] 1 × 1 輸出層偏置梯度
dA[1] 4 × m 輸出層誤差傳回隱藏層
dZ[1] 4 × m 隱藏層誤差(Hadamard乘激活導數)
dW[1] 4 × n 隱藏層權重梯度
db[1] 4 × 1 隱藏層偏置梯度

3.4 更新參數

在完成所有梯度計算后,我們就可以使用梯度下降法來更新網絡的權重和偏置,公式如下:

(1) 輸出層參數更新

\[\mathbf{W^{[2]}} := \mathbf{W^{[2]}} - \eta \mathbf{dW^{[2]}} \]

\[\mathbf{b^{[2]}} := \mathbf{b^{[2]}} - \eta \mathbf{db^{[2]}} \]

(2) 隱藏層參數更新

\[\mathbf{W^{[1]}} := \mathbf{W^{[1]}} - \eta \mathbf{dW^{[1]}} \]

\[\mathbf{b^{[1]}} := \mathbf{b^{[1]}} - \eta \mathbf{db^{[1]}} \]

這樣,我們就完成了淺層神經網絡的一個反向傳播過程的梳理。
 相比邏輯回歸,淺層神經網絡在一次反向傳播中更新了兩層參數,而在之后的更復雜的神經網絡結構中,隱藏層數量也不只一層,這樣,在一次反向傳播中,就會更新更多的參數。

但其形式,也只是像現在這樣的通過鏈式法則的層層求導,更新即可。
所以,之后便會盡量少的出現這樣比較繁雜的求導,但前提是要了解神經網絡通過反向傳播更新參數的邏輯。

下一篇即為本周理論部分的最后一部分,是神經網絡的參數初始化,也是多個隱藏層神經元能發揮不同作用的原因。

posted @ 2025-10-18 23:20  哥布林學者  閱讀(168)  評論(0)    收藏  舉報