文章目錄
- 激活函數
- 1. Sigmoid 激活函數
- 例子及推導過程
- 代碼
- 2. ReLU 激活函數
- 例子及推導過程
- 3. Tanh 激活函數
- 例子及推導過程
- 代碼
- 4. Softmax 激活函數
- 例子及推導過程
- 代碼
- CNN 中的卷積層工作原理
- 卷積計算過程
- 卷積后的輸出及 ReLU 應用
激活函數
激活函數在神經網絡中扮演著至關重要的角色,主要用于引入非線性,使神經網絡能夠學習和表示復雜數據,如圖像、聲音、文本等。以下是幾種常見的激活函數及其數學表達式。
1. Sigmoid 激活函數
Sigmoid 函數是一個經典的激活函數,通常用于二分類問題中。它的數學表達式為:
σ ( x ) = 1 1 + e ? x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e?x1?
Sigmoid 函數的輸出范圍在 0 到 1 之間,適合用作輸出概率。然而,它也存在梯度消失問題,特別是當 x 的值非常大或非常小的時候。
例子及推導過程
假設卷積操作的輸出特征圖為:
[ 0.8 ? 0.9 1.2 ? 1.1 ] \begin{bmatrix} 0.8 & -0.9 \\ 1.2 & -1.1 \\ \end{bmatrix} [0.81.2??0.9?1.1?]
應用 Sigmoid 激活函數的計算過程是將這個特征圖中的每個元素通過 Sigmoid 函數轉換。Sigmoid 函數的數學表達式是 σ ( x ) = 1 1 + e ? x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e?x1?。
因此,Sigmoid 激活后的特征圖為:
[ σ ( 0.8 ) σ ( ? 0.9 ) σ ( 1.2 ) σ ( ? 1.1 ) ] \begin{bmatrix} \sigma(0.8) & \sigma(-0.9) \\ \sigma(1.2) & \sigma(-1.1) \\ \end{bmatrix} [σ(0.8)σ(1.2)?σ(?0.9)σ(?1.1)?]=
[ 1 1 + e ? 0.8 1 1 + e 0.9 1 1 + e ? 1.2 1 1 + e 1.1 ] \begin{bmatrix} \frac{1}{1 + e^{-0.8}} & \frac{1}{1 + e^{0.9}} \\ \frac{1}{1 + e^{-1.2}} & \frac{1}{1 + e^{1.1}} \\ \end{bmatrix} [1+e?0.81?1+e?1.21??1+e0.91?1+e1.11??]
代碼
import numpy as np# Sigmoid 激活函數定義
def sigmoid(x):return 1 / (1 + np.exp(-x))# 假設的卷積層輸出特征圖
feature_map = np.array([[0.8, -0.9], [1.2, -1.1]])# 應用 Sigmoid 激活函數
activated_feature_map = sigmoid(feature_map)print("Sigmoid 激活后的特征圖:\n", activated_feature_map)
2. ReLU 激活函數
ReLU(Rectified Linear Unit)函數是深度學習中最常用的激活函數之一。它的數學表達式為:
ReLU ( x ) = max ? ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
ReLU 函數在正數區間內保持線性,這使得計算效率非常高。但在負數區間內,它不進行激活,可能導致“死神經元”問題。
例子及推導過程
假設我們有以下輸入數據和權重:
- 輸入值: ( x = [1.0, -2.0, 3.0] )
- 權重: ( w = [0.4, 0.3, 0.5] )
- 偏置: ( b = -0.5 )
計算加權輸入 ( z ):
z = w 1 × x 1 + w 2 × x 2 + w 3 × x 3 + b z = w_1 \times x_1 + w_2 \times x_2 + w_3 \times x_3 + b z=w1?×x1?+w2?×x2?+w3?×x3?+b
z = 0.4 × 1.0 + 0.3 × ( ? 2.0 ) + 0.5 × 3.0 ? 0.5 z = 0.4 \times 1.0 + 0.3 \times (-2.0) + 0.5 \times 3.0 - 0.5 z=0.4×1.0+0.3×(?2.0)+0.5×3.0?0.5
應用 ReLU 激活函數:
ReLU ( z ) = max ? ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)
在此例中,我們首先計算了加權輸入 z,然后應用了 ReLU 函數。ReLU 函數的作用是將所有負值置為 0,而保留正值不變
3. Tanh 激活函數
Tanh 函數是 Sigmoid 函數的變體,輸出范圍在 -1 到 1 之間。其數學表達式為:
tanh ? ( x ) = e x ? e ? x e x + e ? x \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+e?xex?e?x?
Tanh 函數的輸出是零中心的,這使得在某些情況下,它比 Sigmoid 函數表現更好。
例子及推導過程
假設卷積操作的輸出特征圖為:
[ 0.5 ? 0.6 0.9 ? 1.0 ] \begin{bmatrix} 0.5 & -0.6 \\ 0.9 & -1.0 \\ \end{bmatrix} [0.50.9??0.6?1.0?]
應用 Tanh 激活函數的計算過程是將這個特征圖中的每個元素通過 Tanh 函數轉換。Tanh 函數的數學表達式是 tanh ? ( x ) = e x ? e ? x e x + e ? x \tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+e?xex?e?x?。
因此,Tanh 激活后的特征圖為:
[ tanh ? ( 0.5 ) tanh ? ( ? 0.6 ) tanh ? ( 0.9 ) tanh ? ( ? 1.0 ) ] \begin{bmatrix} \tanh(0.5) & \tanh(-0.6) \\ \tanh(0.9) & \tanh(-1.0) \\ \end{bmatrix} [tanh(0.5)tanh(0.9)?tanh(?0.6)tanh(?1.0)?]=
[ e 0.5 ? e ? 0.5 e 0.5 + e ? 0.5 e ? 0.6 ? e 0.6 e ? 0.6 + e 0.6 e 0.9 ? e ? 0.9 e 0.9 + e ? 0.9 e ? 1.0 ? e 1.0 e ? 1.0 + e 1.0 ] \begin{bmatrix} \frac{e^{0.5} - e^{-0.5}}{e^{0.5} + e^{-0.5}} & \frac{e^{-0.6} - e^{0.6}}{e^{-0.6} + e^{0.6}} \\ \frac{e^{0.9} - e^{-0.9}}{e^{0.9} + e^{-0.9}} & \frac{e^{-1.0} - e^{1.0}}{e^{-1.0} + e^{1.0}} \\ \end{bmatrix} [e0.5+e?0.5e0.5?e?0.5?e0.9+e?0.9e0.9?e?0.9??e?0.6+e0.6e?0.6?e0.6?e?1.0+e1.0e?1.0?e1.0??]
代碼
import numpy as np# Tanh 激活函數定義
def tanh(x):return np.tanh(x)# 假設的卷積層輸出特征圖
feature_map = np.array([[0.5, -0.6], [0.9, -1.0]])# 應用 Tanh 激活函數
activated_feature_map = tanh(feature_map)print("Tanh 激活后的特征圖:\n", activated_feature_map)
4. Softmax 激活函數
Softmax 函數通常用于多分類神經網絡的輸出層。它將輸入轉換為概率分布。對于給定的類別集合,Softmax 的數學表達式為:
Softmax ( x i ) = e x i ∑ j e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} Softmax(xi?)=∑j?exj?exi??
其中 ( x_i ) 是一個特定輸出節點的輸入,分母是所有輸出節點輸入的指數和。這確保了所有輸出概率的總和為 1。
例子及推導過程
假設一個多分類問題的輸出層得到以下得分:
scores = [ 2.0 , 1.0 , 0.1 ] \text{scores} = [2.0, 1.0, 0.1] scores=[2.0,1.0,0.1]
應用 Softmax 激活函數的計算過程是將這些得分通過 Softmax 函數轉換。Softmax 函數的數學表達式是:
Softmax ( x i ) = e x i ∑ j e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} Softmax(xi?)=∑j?exj?exi??
其中 ( x_i ) 是特定類別的得分,分母是所有類別得分的指數和。
因此,Softmax 激活后的概率分布為:
[ e 2.0 e 2.0 + e 1.0 + e 0.1 e 1.0 e 2.0 + e 1.0 + e 0.1 e 0.1 e 2.0 + e 1.0 + e 0.1 ] \begin{bmatrix} \frac{e^{2.0}}{e^{2.0} + e^{1.0} + e^{0.1}} & \frac{e^{1.0}}{e^{2.0} + e^{1.0} + e^{0.1}} & \frac{e^{0.1}}{e^{2.0} + e^{1.0} + e^{0.1}} \\ \end{bmatrix} [e2.0+e1.0+e0.1e2.0??e2.0+e1.0+e0.1e1.0??e2.0+e1.0+e0.1e0.1??]
代碼
import numpy as np# Softmax 激活函數定義
def softmax(x):e_x = np.exp(x - np.max(x)) # 防止數值過大return e_x / e_x.sum()# 多分類問題的輸出層得分
scores = np.array([2.0, 1.0, 0.1])# 應用 Softmax 激活函數
probabilities = softmax(scores)print("Softmax 激活后的概率分布:", probabilities)
CNN 中的卷積層工作原理
卷積神經網絡(CNN)中的卷積層主要用于特征提取。卷積操作涉及將卷積核(或濾波器)應用于輸入數據。
卷積計算過程
考慮一個簡單的例子,我們有一個 3x3 的輸入矩陣和一個 2x2 的卷積核:
-
輸入矩陣:
[ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{bmatrix} ?147?258?369? ? -
卷積核:
[ ? 1 0 0 1 ] \begin{bmatrix} -1 & 0 \\ 0 & 1 \\ \end{bmatrix} [?10?01?]
卷積操作包括將卷積核滑動過輸入矩陣的每個區域,并計算元素的點乘,然后將結果求和。
例如,卷積核覆蓋輸入矩陣左上角時的計算:
[ 1 2 4 5 ] ⊙ [ ? 1 0 0 1 ] = 1 × ( ? 1 ) + 2 × 0 + 4 × 0 + 5 × 1 = 4 \begin{bmatrix} 1 & 2 \\ 4 & 5 \\ \end{bmatrix} \odot \begin{bmatrix} -1 & 0 \\ 0 & 1 \\ \end{bmatrix} = 1 \times (-1) + 2 \times 0 + 4 \times 0 + 5 \times 1 = 4 [14?25?]⊙[?10?01?]=1×(?1)+2×0+4×0+5×1=4
這個過程在整個輸入矩陣上重復進行,生成輸出特征圖。
卷積后的輸出及 ReLU 應用
假設卷積操作的輸出特征圖為:
[ 4 3 2 1 ] \begin{bmatrix} 4 & 3 \\ 2 & 1 \\ \end{bmatrix} [42?31?]
應用 ReLU 激活函數的計算過程是將這個特征圖中的每個元素與 0 比較,取較大者。ReLU 函數的數學表達式是 ReLU ( x ) = max ? ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
因此,ReLU 激活后的特征圖為:
[ max ? ( 0 , 4 ) max ? ( 0 , 3 ) max ? ( 0 , 2 ) max ? ( 0 , 1 ) ] \begin{bmatrix} \max(0, 4) & \max(0, 3) \\ \max(0, 2) & \max(0, 1) \\ \end{bmatrix} [max(0,4)max(0,2)?max(0,3)max(0,1)?]=
[ 4 3 2 1 ] \begin{bmatrix} 4 & 3 \\ 2 & 1 \\ \end{bmatrix} [42?31?]
在這個例子中,由于所有值都是正的,ReLU 激活后的特征圖與原特征圖相同。