神經網路的啟用函式賦予網路非線性表達能力,是深度學習模型的關鍵組成部分。常見的啟用函式包含 Sigmoid、ReLU、Tanh 等,各有其特性和適用場景。ReLU 由於其計算簡單且能有效避免梯度消失問題,成為深度學習模型中的主流選擇,但需注意其死區問題。Sigmoid 和 Tanh 函式則分別適用於二元分類別和輸出值域在 -1 到 1 之間的場景。選擇合適的啟用函式對於模型效能至關重要。理解啟用函式的數學原理,特別是其導數的計算,有助於掌握反向傳播演算法的精髓。反向傳播演算法透過計算損失函式對模型引數的梯度,並利用梯度下降法迭代更新引數,以最小化損失函式並提升模型的預測準確度。在多類別分類別問題中,Softmax 函式常被用於輸出層,將輸出轉換為機率分佈,便於計算交叉熵損失函式。
啟用函式的多樣性
在神經網路中,啟用函式(Activation Function)扮演著至關重要的角色,它們負責將神經元的輸出轉換為非線性的輸出,以此來增加網路的表達能力。以下是幾種常見的啟用函式及其特點:
1. 恆等函式(Identity Function)
[ \phi(x) = x ] 這是一種最簡單的啟用函式,直接將輸入傳回為輸出。雖然它看起來很簡單,但在某些情況下,它可以用於簡化模型或作為基礎進行後續的變化。
2. Sigmoid 函式
[ \phi(x) = \frac{1}{1 + e^{-\beta x}} ] Sigmoid 函式是一種常用的啟用函式,尤其是在二元分類別問題中。它將輸入對映到一個介於 0 和 1 之間的值,具有 S 型曲線的特徵。然而,Sigmoid 函式容易受到梯度消失的影響,尤其是在深度網路中。
3. 修正線性單元(ReLU)
[ \phi(x) = \max(0, x) ] ReLU 是目前最流行的啟用函式之一,因為它的計算簡單,且能夠有效地避免梯度消失問題。然而,ReLU 也有一個缺點,就是當輸入為負時,神經元的輸出將永遠為 0,這可能導致死區(Dead Neurons)。
4. 硬閾值函式(Hard Threshold)
[ \phi_\beta(x) = \begin{cases} 0 & \text{if } x < \beta \ 1 & \text{if } x \geq \beta \end{cases} ] 硬閾值函式是一種簡單的分類別器,當輸入超過某個閾值時,就會輸出 1,否則輸出 0。這種函式在某些特定的應用中可能很有用,但它不是連續可微的,這限制了它在很多情況下的使用。
5. 雙曲正切函式(Tanh)
[ \phi(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = \frac{e^{2x} - 1}{e^{2x} + 1} ] Tanh 函式與 Sigmoid 函式相似,但它的輸出範圍是從 -1 到 1。這使得 Tanh 在某些情況下比 Sigmoid 更加有用,因為它對於零均值的輸入更為對稱。
6. 分段線性函式(Piecewise Linear)
[ \phi(x) = \begin{cases} 0 & \text{if } x \leq x_{min} \ mx + b & \text{if } x_{min} < x < x_{max} \ 1 & \text{if } x \geq x_{max} \end{cases} ] 分段線性函式提供了一種更為彈性的方式來定義啟用函式,可以根據具體需求定製不同的區間和斜率。
每種啟用函式都有其優缺點,選擇哪一種取決於具體的應用和模型需求。瞭解不同啟用函式的特性可以幫助我們設計出更有效、更高效的神經網路模型。
人工神經網路的基礎
人工神經網路(Artificial Neural Networks, ANN)是一種模擬人腦神經網路結構的數學模型,旨在實作類別似人腦的學習和決策能力。其中,多層感知器(Multilayer Perceptron, MLP)是一種基本的神經網路結構。
多層感知器(MLP)
多層感知器是由多個神經元層組成的,每個神經元都與下一層的所有神經元相連。這種結構允許神經網路學習和代表複雜的非線性關係。每個神經元都有一個啟用函式,該函式將輸入訊號轉換為輸出訊號。
啟用函式
啟用函式(Activation Function)是指神經元如何將輸入訊號轉換為輸出訊號。常見的啟用函式包括 sigmoid 函式、tanh 函式和 ReLU 函式等。ReLU 函式(Rectified Linear Unit)是一種簡單而有效的啟用函式,定義為:
φ(x) = max(0, x)
這意味著,如果輸入訊號 x 大於 0,則輸出訊號為 x;否則,輸出訊號為 0。
神經網路結構
一個典型的多層感知器包括輸入層、隱藏層和輸出層。輸入層接收外部輸入訊號,隱藏層進行訊號處理和轉換,輸出層產生最終的輸出訊號。每個神經元都有一個權重向量和一個偏置項,權重向量用於計算輸入訊號的加權和,偏置項用於調整神經元的啟用閾值。
學習過程
多層感知器的學習過程涉及調整神經元的權重和偏置項,以最小化預測誤差。這通常透過反向傳播演算法(Backpropagation)實作,該演算法計算預測誤差對每個權重和偏置項的梯度,並根據梯度下降法更新權重和偏置項。
Mermaid 圖表:多層感知器結構
graph LR
A[輸入層] -->|權重|> B[隱藏層]
B -->|權重|> C[輸出層]
C -->|預測|> D[真實值]
D -->|誤差|> B
B -->|梯度|> A
圖表翻譯:
上述 Mermaid 圖表展示了多層感知器的基本結構。輸入層接收外部輸入訊號,隱藏層進行訊號處理和轉換,輸出層產生最終的輸出訊號。圖表還展示了反向傳播演算法的過程,預測誤差對每個權重和偏置項的梯度被計算並用於更新權重和偏置項。
神經網路啟用函式
在神經網路中,啟用函式(Activation Function)扮演著非常重要的角色。它們負責將神經元的輸入轉換為輸出,從而實作非線性對映。啟用函式的選擇對於神經網路的效能和泛化能力有著直接的影響。
線性啟用函式
線性啟用函式是一種最簡單的啟用函式,定義為 φ(x) = x。這種函式對於輸入的變化沒有任何非線性的轉換,因此在實際應用中較少使用。
Sigmoid 啟用函式
Sigmoid 啟用函式定義為 φ(x) = 1 / (1 + e^(-x)),其中 e 是自然對數的底數。Sigmoid 函式的輸出範圍在 (0, 1) 之間,且具有連續可導的特性。然而,Sigmoid 函式存在梯度消失的問題,尤其是在輸入值較大或較小的情況下。
ReLU 啟用函式
ReLU(Rectified Linear Unit)啟用函式定義為 φ(x) = max(0, x)。ReLU 函式在輸入值大於 0 時輸出相同的值,否則輸出 0。ReLU 函式的優點在於計算簡單、梯度不會消失,但它也存在死區問題,即當輸入值小於 0 時,神經元的輸出永遠為 0。
Tanh 啟用函式
Tanh(Hyperbolic Tangent)啟用函式定義為 φ(x) = (e^x - e^(-x)) / (e^x + e^(-x))。Tanh 函式的輸出範圍在 (-1, 1) 之間,且具有連續可導的特性。Tanh 函式相比 Sigmoid 函式有一個優點,即其輸出均值為 0,有利於神經網路的訓練。
啟用函式選擇
在實際應用中,啟用函式的選擇取決於具體的任務和神經網路的結構。ReLU 函式由於其簡單和計算效率高,成為了深度神經網路中的一個熱門選擇。然而,在某些情況下,Sigmoid 和 Tanh 函式仍然有其優勢和適用場景。
內容解密:
上述啟用函式的介紹中,我們可以看到每種啟用函式都有其特點和適用場景。例如,ReLU 函式適合於大多數的深度神經網路,因為它計算簡單且不容易出現梯度消失的情況。然而,Sigmoid 和 Tanh 函式在某些特定的情況下可能更合適,因為它們的輸出範圍和連續可導的特性。
圖表翻譯:
下面是一個簡單的神經網路結構圖,展示瞭如何使用不同的啟用函式:
graph LR
A[Input] -->|x|> B[Hidden Layer 1]
B -->|ReLU|> C[Hidden Layer 2]
C -->|Sigmoid|> D[Output Layer]
在這個圖中,我們可以看到輸入層(Input)接著是隱藏層 1(Hidden Layer 1),然後是隱藏層 2(Hidden Layer 2),最後是輸出層(Output Layer)。隱藏層 1 使用 ReLU 啟用函式,隱藏層 2 使用 Sigmoid 啟用函式。這個結構展示瞭如何根據具體任務和神經網路的需求選擇合適的啟用函式。
人工智慧中的神經網路層
在多層感知器(MLP)中,神經元之間的連線是非常重要的。每一層的神經元都會與下一層的所有神經元相連,但是同一層內的神經元之間則沒有直接連線。這種結構使得輸入資料可以透過多層的處理和轉換,最終產生出對應的輸出結果。
神經網路的基本結構
一個典型的神經網路由多個層組成,包括輸入層、隱藏層和輸出層。輸入層負責接收初始的輸入資料,而隱藏層則進行複雜的資料轉換和處理。最後,輸出層根據前面的處理結果產生最終的輸出。
在這個過程中,啟用函式扮演著非常重要的角色。啟用函式決定了神經元如何處理接收到的資訊,並將其轉換為輸出結果。根據具體的問題型別,不同的啟用函式可以被應用。例如,在二元分類別問題中,sigmoid啟用函式常被使用,因為其輸出結果在0到1之間,非常適合表示機率。
多類別分類別問題
在多類別分類別問題中,每個類別都會對應一個輸出神經元。這些輸出神經元的輸出結果需要滿足一定的條件,例如所有機率之和等於1。為了達到這個目的,softmax啟用函式被廣泛使用。softmax函式可以將輸入資料轉換為一個機率分佈,使得所有類別的機率之和等於1。
神經網路的數學表示
為了更好地理解神經網路的運作原理,我們需要對其進行數學表示。假設輸入向量為 (x = (x_1, x_2, \ldots, x_d)),而 (h_{k,j}) 表示第 (k) 層的第 (j) 個神經元的輸出。則可以根據以下公式計算每個神經元的輸出:
[h_{k,j} = \phi\left(\sum_{i=1}^{n} w_{k,ji}h_{k-1,i} + b_{k,j}\right)]
其中,(\phi) 是啟用函式,(w_{k,ji}) 是第 (k) 層第 (j) 個神經元與第 (k-1) 層第 (i) 個神經元之間的連線權重,(b_{k,j}) 是第 (k) 層第 (j) 個神經元的偏差項。
圖表翻譯
graph LR
A[輸入層] --> B[隱藏層]
B --> C[輸出層]
C --> D[最終輸出]
此圖表示了一個簡單的神經網路結構,其中輸入層接收初始資料,隱藏層進行複雜的資料轉換和處理,最後輸出層產生最終的結果。
內容解密
上述公式和圖表展示了神經網路中每個神經元如何根據接收到的資訊進行處理和轉換。透過選擇適當的啟用函式和調整連線權重和偏差項,可以使神經網路學習到複雜的模式和關係,以解決各種實際問題。
圖表翻譯
graph LR
A[二元分類別] --> B[Sigmoid啟用函式]
B --> C[機率輸出]
C --> D[最終分類別結果]
此圖表明了在二元分類別問題中,如何使用sigmoid啟用函式將神經元的輸出轉換為機率值,以進行最終的分類別判斷。
內容解密
在實際應用中,需要根據具體問題的特點選擇合適的啟用函式和網路結構,以達到最佳的效能。同時,需要注意的是,神經網路的訓練過程涉及到大量的引數調整和最佳化,因此需要選擇合適的最佳化演算法和評估指標,以保證網路的效能和泛化能力。
神經網路的數學基礎
神經網路是一種強大的模型,能夠用於多種機器學習任務。要了解神經網路的工作原理,我們需要從其數學基礎開始。
活化函式
活化函式(activation function)是神經網路中的一個重要概念,它決定了神經元的輸出。常見的活化函式包括 sigmoid、ReLU 和 tanh。這些函式的輸出值將作為下一層神經元的輸入。
向量化形式
假設我們有一個具有 $L$ 個隱藏層的神經網路,其輸出為 $y$。對於每個隱藏層 $k$,我們可以將其輸出表示為:
$$ h_k = \phi(W_k h_{k-1} + b_k) $$
其中,$\phi$ 是活化函式,$W_k$ 是權重矩陣,$h_{k-1}$ 是上一層的輸出,$b_k$ 是偏置向量。
對於輸出層 $L+1$,我們可以將其輸出表示為:
$$ y = \psi(W_{L+1} h_L + b_{L+1}) $$
其中,$\psi$ 是輸出層的活化函式。
全能近似定理
全能近似定理(universal approximation theorem)指出,具有至少一個隱藏層的前饋神經網路是全能近似器。這意味著,一個具有單一隱藏層的神經網路可以近似任何連續函式,假設輸入不具有大間隔。
這個定理首先由 玄貓 在 1989 年提出,使用 sigmoid 活化函式進行示範。這個定理的意義在於,即使是一個相對簡單的神經網路,也可以用於近似複雜的函式。
圖表翻譯:
graph LR
A[輸入] --> B[隱藏層]
B --> C[輸出層]
C --> D[結果]
上述流程圖描述了神經網路的基本結構,包括輸入、隱藏層和輸出層。這個過程展示瞭如何透過活化函式和權重矩陣將輸入轉換為輸出。
3.4.2 引數估計
3.4.2.1 損失函式
在機器學習演算法中,神經網路試圖學習給定資料觀察下的機率分佈。權重 (w_j) 和偏差 (b_j) 必須從學習樣本中估計出來,這些樣本通常由玄貓提供。在一般情況下,我們估計最大似然度(或等效地,對數似然度),這意味著我們嘗試找到一組引數和先驗機率分佈,以建立一個能夠代表資料分佈的模型。根據交叉熵的損失函式,即兩個機率分佈之間的差異,也被稱為負對數似然度,常用於分類別任務。結果是兩個機率分佈之間的差異被稱為損失。這個想法是最小化損失函式,這與對數似然度相反。
對於二元分類別,二元交叉熵是適合的。二元交叉熵對於一組真實標籤和預測標籤可以按以下方式計算:
[L = -\frac{1}{m} \sum_{j=1}^{m} y_j \log(y_j) + (1-y_j) \log(1-y_j)]
其中 (y_j) 代表第 (j) 個樣本的預期結果(實際值),(y_j) 代表玄貓產生的結果(預測值),而 (m) 是樣本數量。它也可以使用另一種表示法來表達:
[L(\theta) = -\frac{1}{m} \sum_{j=1}^{m} y_j \log f(X, \theta) + (1-y_j) \log(1 - f(X, \theta))]
其中 (\theta) 是要估計的引數向量,(f(X, \theta) = p_\theta(Y=1|X)),而 (Y \in {0, 1})。
對於多類別分類別問題,我們考慮將前面的損失函式推廣到 (k) 個類別(最大似然估計):
[L = -\sum_{j=1}^{k} y_j \log y_j]
在迴歸設定中,我們使用均方誤差。損失函式的公式是預期值和預測值之間的平方差:
[L = \frac{1}{2} \sum_{j} (y_j - y_j)^2]
其中 (j) 是輸入-輸出對的索引。
如前所述,儘管有不同的演算法用於最小化損失函式,隨機梯度下降是一個經典的選擇:
[\theta_j]
內容解密:
上述內容介紹了神經網路中引數估計的過程,特別是損失函式的選擇和計算。二元交叉熵和均方誤差是兩種常用的損失函式,分別適用於分類別和迴歸任務。這些函式的目的是衡量模型預測結果與真實結果之間的差異,並透過最小化這些差異來最佳化模型引數。
圖表翻譯:
graph LR
A[真實標籤] -->|輸入|> B[神經網路]
B -->|輸出|> C[預測標籤]
C -->|計算損失|> D[損失函式]
D -->|最小化損失|> E[最佳化模型引數]
這個流程圖展示了真實標籤作為輸入,經過神經網路處理後產生預測標籤,然後計算損失,並透過最小化損失來最佳化模型引數。這個過程是神經網路訓練中的核心步驟。
3.4.2.2 反向傳播:二元分類別
在探討神經網路的演進過程中,Minsky 和 Papert (1969) 的研究指出,限制在神經網路中的挑戰可以透過兩層的前饋網路來克服,但仍然存在著如何調整從輸入層到隱藏層的權重的問題。這就是反向傳播(backpropagation)的概念由來(Parker 1985; Rumelhart 等人 1986; Werbos 1974)。梯度下降法及其替代方法有助於最小化成本函式。反向傳播是一種廣泛使用的演算法,適用於訓練前饋神經網路,計算成本函式 L 對引數的偏導數,並使用它來最佳化,如隨機梯度下降法。給定一個神經網路和一個誤差函式,我們可以計算神經網路的權重和偏差對誤差函式的梯度。反向傳播演算法一次計算一層,並從最後一層開始反向遞迴。這個過程允許我們消除在鏈式法則中中間項的冗餘計算。
反向傳播的應用
在二元分類別問題中,我們可以使用以下損失函式(二元交叉熵):
L = − 1 m m
i = 1 y i
log y i
- 1 − y i log 1 − y i
其中 m 是樣本數,y i 是第 i 個樣本的實際輸出,y i 是第 i 個樣本的預測輸出。
我們需要找到損失函式對權重和偏差的梯度:
∂L
∂W j
∂
∂W j − 1 m m
i = 1 y i
log y i
- 1 − y i log 1 − y i
= − 1 m m
i = 1 y i y i −
1 − y i
1 − y i ∂y i
內容解密
上述公式展示瞭如何計算損失函式對權重的梯度,這是反向傳播演算法中的關鍵步驟。透過這個過程,我們可以更新神經網路的權重和偏差,以最小化損失函式並提高模型的準確度。
圖表翻譯
graph LR
A[輸入層] --> B[隱藏層]
B --> C[輸出層]
C --> D[誤差函式]
D --> E[反向傳播]
E --> F[權重更新]
此圖表展示了神經網路的架構以及反向傳播演算法的流程。輸入層接收資料,隱藏層進行特徵提取,輸出層產生預測結果。誤差函式計算預測結果與實際結果之間的差異,反向傳播演算法根據此差異更新神經網路的權重和偏差。
機器學習演算法之深度剖析
在探討機器學習的複雜世界時,瞭解啟用函式的作用至關重要。讓我們以sigmoid函式為例,該函式的定義為:
φ(x) = 1 / (1 + e^(-x))
這裡,e代表自然對數的底數,約等於2.71828。sigmoid函式的輸出值域為(0, 1),使其成為二元分類別問題的理想選擇。
現在,讓我們深入探討一下如何計算sigmoid函式的導數,特別是在神經網路的背景下。假設我們有一個神經元,其輸出為y,輸入為x,權重為W,偏差為b。則該神經元的輸出可以表示為:
y = φ(W^T * x + b)
其中,φ代表sigmoid函式,W^T代表權重向量的轉置,x代表輸入向量,b代表偏差項。
計算y對W的導數是一個關鍵步驟,可以幫助我們理解神經網路中權重更新的過程。利用鏈式法則,我們可以得到:
∂y/∂W = ∂φ/∂z * ∂z/∂W
其中,z = W^T * x + b代表神經元的輸入總和。
對sigmoid函式求導,得到:
∂φ/∂z = φ(z) * (1 - φ(z))
代入上述式子,我們得到:
∂y/∂W = y * (1 - y) * ∂z/∂W
由於z = W^T * x + b,我們可以計算∂z/∂W如下:
∂z/∂W = x
因此,最終的導數表示式為:
∂y/∂W = y * (1 - y) * x
這個結果對於理解神經網路中的反向傳播演算法至關重要,因為它告訴我們如何根據輸出誤差更新神經元的權重。
內容解密:
上述過程展示瞭如何計算sigmoid函式的導數,並將其應用於神經網路中。這個過程涉及到鏈式法則的使用,以及對sigmoid函式和神經元輸入總和的導數計算。最終得到的導數表示式是神經網路反向傳播演算法中的關鍵組成部分。
graph LR
A[sigmoid函式] -->|導數計算|> B[鏈式法則]
B -->|應用於神經網路|> C[神經元輸出]
C -->|計算導數|> D[權重更新]
D -->|反向傳播演算法|> E[神經網路訓練]
圖表翻譯:
上述Mermaid圖表展示了sigmoid函式導數計算在神經網路中的應用過程。從左到右,圖表展示了從sigmoid函式開始,到計算其導數,然後應用於神經網路中的神經元輸出,最終到達神經網路訓練的過程。這個圖表幫助我們直觀地理解了sigmoid函式導數在神經網路中的作用。
神經網路的反向傳播演算法
在深度學習中,反向傳播(Backpropagation)是一種用於訓練人工神經網路的演算法。它是根據梯度下降法的最佳化方法,透過計算損失函式對模型引數的梯度來更新模型引數。
反向傳播的基本步驟
- 前向傳播:輸入資料透過神經網路的各層,直到輸出層。
- 計算損失:計算輸出層的輸出和真實標籤之間的差異,得到損失值。
- 反向傳播:從輸出層開始,計算損失函式對每個神經元輸出的梯度。
- 更新引數:使用梯度下降法更新模型引數。
反向傳播的數學推導
假設我們有一個簡單的神經網路,輸入層有 $m$ 個神經元,隱藏層有 $n$ 個神經元,輸出層有 $k$ 個神經元。輸入層的輸入為 $\mathbf{x} = (x_1, x_2, \ldots, x_m)$,隱藏層的輸出為 $\mathbf{y} = (y_1, y_2, \ldots, y_n)$,輸出層的輸出為 $\mathbf{z} = (z_1, z_2, \ldots, z_k)$。
前向傳播
$$ \begin{aligned} y_i &= \sigma(\mathbf{w}_i \cdot \mathbf{x} + b_i) \ z_j &= \sigma(\mathbf{v}_j \cdot \mathbf{y} + c_j) \end{aligned} $$
計算損失
$$ E = \frac{1}{2} \sum_{j=1}^k (z_j - t_j)^2 $$
反向傳播
$$ \begin{aligned} \frac{\partial E}{\partial z_j} &= -(t_j - z_j) \ \frac{\partial E}{\partial v_{ji}} &= \frac{\partial E}{\partial z_j} \cdot \frac{\partial z_j}{\partial v_{ji}} = -(t_j - z_j) \cdot y_i \ \frac{\partial E}{\partial w_{ij}} &= \frac{\partial E}{\partial y_i} \cdot \frac{\partial y_i}{\partial w_{ij}} = \left( \sum_{j=1}^k \frac{\partial E}{\partial z_j} \cdot \frac{\partial z_j}{\partial y_i} \right) \cdot x_j \end{aligned} $$
實作反向傳播
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# 初始化引數
w = np.random.rand(3, 2)
v = np.random.rand(2, 1)
b = np.zeros((2, 1))
c = np.zeros((1, 1))
# 設定輸入和真實標籤
x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
t = np.array([[0], [1], [1], [0]])
# 前向傳播
y = sigmoid(np.dot(x, w) + b)
z = sigmoid(np.dot(y, v) + c)
# 計算損失
E = 0.5 * np.sum((z - t) ** 2)
# 反向傳播
dE_dz = -(t - z)
dE_dv = np.dot(y.T, dE_dz)
dE_dw = np.dot(x.T, np.dot(dE_dz, v.T) * sigmoid_derivative(y))
# 更新引數
w -= 0.1 * dE_dw
v -= 0.1 * dE_dv
圖表翻譯:
graph LR
A[輸入層] --> B[隱藏層]
B --> C[輸出層]
C --> D[計算損失]
D --> E[反向傳播]
E --> F[更新引數]
在這個圖表中,我們可以看到神經網路的前向傳播和反向傳播的過程。輸入層的輸入透過隱藏層和輸出層,然後計算損失函式。接著,透過反向傳播計算損失函式對模型引數的梯度,最後更新模型引數以最小化損失函式。
梯度下降法的實作
在機器學習中,梯度下降法是一種常用的最佳化演算法,用於找到模型引數的最佳值。以下是梯度下降法的實作過程:
1. 計算損失函式對權重的梯度
給定輸入樣本 $x_{ij}$,其中 $i$ 是樣本索引,$j$ 是特徵索引。損失函式 $L$ 對權重 $W_j$ 的梯度計算如下:
$$ \frac{\partial L}{\partial W_j} = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}i) x{ij} $$
其中,$m$ 是樣本數,$y_i$ 是真實標籤,$\hat{y}_i$ 是預測值。
2. 計算梯度
對於每個樣本 $i$,計算梯度如下:
$$ \frac{\partial L}{\partial W_j} = \frac{1}{m} \left( (y_1 - \hat{y}1) x{1j} + \cdots + (y_m - \hat{y}m) x{mj} \right) $$
這可以簡化為:
$$ \frac{\partial L}{\partial W_j} = \frac{1}{m} \left( x_{1j} (y_1 - \hat{y}1) + \cdots + x{mj} (y_m - \hat{y}_m) \right) $$
3. 矩陣形式
將上述梯度計算以矩陣形式表示:
$$ \frac{\partial L}{\partial W_j} = \frac{1}{m} X^T (y - \hat{y}) $$
其中,$X$ 是輸入矩陣,$y$ 和 $\hat{y}$ 分別是真實標籤和預測值向量。
4. 計算損失函式對偏差的梯度
損失函式 $L$ 對偏差 $b$ 的梯度計算如下:
$$ \frac{\partial L}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i) $$
由於 $z_i = W^T x_i + b$,因此:
$$ \frac{\partial z_i}{\partial b} = 1 $$
所以:
$$ \frac{\partial L}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i) $$
內容解密:
- 梯度下降法是一種迭代最佳化演算法,用於找到模型引數的最佳值。
- 損失函式對權重和偏差的梯度計算是梯度下降法的核心。
- 矩陣形式的梯度計算可以簡化計算過程。
- 偏差的梯度計算與權重的梯度計算類別似,但不需要考慮特徵索引。
圖表翻譯:
graph LR
A[損失函式] -->|對權重的梯度|> B[梯度下降法]
B -->|對偏差的梯度|> C[最佳化模型引數]
C -->|迭代最佳化|> D[找到最佳值]
這個圖表展示了梯度下降法的基本流程,從損失函式對權重的梯度計算開始,到找到模型引數的最佳值。
人工神經網路中的隨機梯度下降法
隨機梯度下降法(Stochastic Gradient Descent, SGD)是一種用於訓練人工神經網路的最佳化演算法。其基本思想是透過計算損失函式對模型引數的梯度,然後沿著梯度的反方向更新模型引數,以最小化損失函式。
給定模型引數 $\theta_j$,我們可以使用以下公式更新它:
$$ \theta_j = \theta_j - \epsilon \frac{\partial L}{\partial \theta_j} $$
其中,$\epsilon$ 是學習率,$L$ 是損失函式。
在實際應用中,我們需要計算損失函式對權重 $W_j$ 和偏差 $b$ 的梯度,然後更新這些引數:
$$ W_j = W_j - \epsilon \frac{\partial L}{\partial W_j} $$
$$ b = b - \epsilon \frac{\partial L}{\partial b} $$
多類別分類別中的反向傳播
在多類別分類別任務中,我們通常使用交叉熵損失函式。給定 $K$ 個類別,損失函式可以寫成:
$$ L = -\sum_{j=1}^{K} y_j \log \hat{y}_j $$
其中,$y_j$ 是真實標籤,$\hat{y}_j$ 是模型預測的機率。
假設我們有一個多層神經網路,其隱藏層的輸出可以表示為:
$$ h_k^j(x) = \phi\left(\sum_{i} w_{kji} h_{k-1}^i(x) + b_k^j\right) $$
其中,$k$ 表示第 $k$ 層,$j$ 表示第 $j$ 個神經元,$\phi$ 是啟用函式,$w_{kji}$ 是權重,$b_k^j$ 是偏差。
啟用函式的選擇
啟用函式 $a_j(x)$ 的選擇對於神經網路的效能有著重要影響。常用的啟用函式包括 sigmoid、ReLU(修正線性單元)等。
內容解密:
以上公式和概念是人工神經網路中非常重要的基礎。透過瞭解隨機梯度下降法和反向傳播演算法,我們可以更好地設計和訓練神經網路,以解決各種複雜的問題。
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def relu(x):
return np.maximum(x, 0)
# 假設我們有一個簡單的神經網路,其輸入為 x,權重為 w,偏差為 b
x = np.array([1, 2, 3])
w = np.array([0.5, 0.6, 0.7])
b = 0.1
# 計算隱藏層的輸出
h = sigmoid(np.dot(x, w) + b)
# 計算輸出層的輸出
y = relu(h)
print(y)
圖表翻譯:
此圖示為一個簡單的神經網路結構,其中包含輸入層、隱藏層和輸出層。每個神經元都有一個對應的啟用函式,用於計算其輸出。
flowchart TD
A[輸入層] --> B[隱藏層]
B --> C[輸出層]
C --> D[結果]
圖表翻譯:
此圖表展示了神經網路中資料的流動過程。從輸入層開始,資料被傳遞到隱藏層進行處理,然後再被傳遞到輸出層以產生最終結果。每個層都有其特定的功能和啟用函式,用於對資料進行轉換和提取特徵。
深度學習中的softmax函式與其梯度計算
在深度學習中,softmax函式是一種常用的啟用函式,尤其是在多分類別問題中。給定一個輸入向量 (x = (x_1, x_2, \ldots, x_K)),softmax函式的輸出為一個機率分佈,表示每個類別的機率。softmax函式的定義如下:
[ \text{softmax}(x)j = \frac{e^{x_j}}{\sum{k=1}^{K} e^{x_k}} ]
這裡,我們使用 ( \text{softmax}(x)_j ) 來表示輸入向量 (x) 在第 (j) 個類別上的softmax輸出。
梯度計算
計算softmax函式的梯度對於訓練神經網路至關重要。給定輸入 (x),我們想要計算 ( \frac{\partial \text{softmax}(x)_i}{\partial x_j} )。利用softmax函式的定義和鏈式法則,可以推匯出梯度計算公式如下:
[ \frac{\partial \text{softmax}(x)_i}{\partial x_j} = \begin{cases} \text{softmax}(x)_i (1 - \text{softmax}(x)_i) & \text{if } i = j \ -\text{softmax}(x)_i \text{softmax}(x)_j & \text{if } i \neq j \end{cases} ]
這個公式表明了softmax函式對於輸入的梯度如何計算,對於理解和實作反向傳播演算法至關重要。
多維 softmax 函式
在實際應用中,尤其是在神經網路中,softmax函式常常被應用於多維向量上。給定一個多維向量 (f(x) = (f(x)_1, f(x)_2, \ldots, f(x)_K)),其中 (f(x)_j) 代表第 (j) 個元素,我們可以對這個向量應用softmax函式,以得到一個機率分佈。
示例和應用
考慮一個簡單的例子,假設我們有一個神經網路,其輸出層使用softmax函式來預測多分類別問題中的類別機率。輸出層的輸出可以表示為 (f(x) = (f(x)_1, f(x)_2, \ldots, f(x)_K)),其中 (f(x)_j) 代表第 (j) 個類別的機率。
graph LR
A[輸入層] -->|輸入向量 x|> B[隱藏層]
B -->|啟用函式|> C[輸出層]
C -->|softmax 函式|> D[輸出機率分佈]
內容解密:
上述流程圖描述了一個簡單的神經網路結構,其中輸入層接收輸入向量 (x),隱藏層進行特徵提取和轉換,輸出層則使用softmax函式來計算每個類別的機率。這個過程中,softmax函式的梯度計算對於反向傳播演算法和網路引數的更新至關重要。
圖表翻譯:
此圖表示了神經網路中從輸入層到輸出層的資料流程。輸入層接收原始資料,隱藏層進行資料轉換和特徵提取,最後輸出層使用softmax函式產生多分類別問題中的類別機率分佈。這個過程展示瞭如何使用softmax函式來解決多分類別問題,並強調了梯度計算在神經網路訓練中的重要性。
從技術架構視角來看,啟用函式是神經網路的核心組成部分,其非線性特性賦予了網路強大的表達能力。本文討論了多種常見的啟用函式,例如 Sigmoid、ReLU、Tanh 和 Softmax,並深入剖析了它們的數學特性和應用場景。ReLU 因其簡單高效且能有效緩解梯度消失問題而成為主流選擇,但其死區問題仍需關注。相對而言,Sigmoid 和 Tanh 雖能提供平滑的非線性轉換,但在深度網路中容易遭遇梯度消失,限制了其應用範圍。Softmax 則專注於多分類別問題,將輸出轉換為機率分佈。技術團隊在選擇啟用函式時,應根據具體任務需求、網路架構以及潛在的梯度問題綜合考量。展望未來,設計更優異的啟用函式,例如解決 ReLU 死區問題或提升 Sigmoid/Tanh 在深度網路中的效能,將是神經網路研究的持續方向。玄貓認為,隨著研究的深入,新的啟用函式或將湧現,進一步提升神經網路的效能和應用範圍。