Pytorch 中的啟用函式
Pytorch 是一個開源機器學習框架,廣泛用於建立機器學習模型,並提供各種函式來建立神經網路。啟用函式是神經網路的關鍵組成部分。啟用函式根據節點的輸入或輸入集確定神經網路中節點的輸出。啟用函式在神經網路節點的輸出中引入了非線性,這對於解決複雜的機器學習問題是必要的。
什麼是啟用函式?
人工智慧中的神經網路由輸入層、隱藏層和輸出層組成。輸入層以不同的形式接收使用者輸入,隱藏層執行一些隱藏的計算,輸出層給出結果,作為下一個連線節點的輸入。因此,啟用函式應用於使用者輸入以執行計算,並透過輸出層給出輸出。
Pytorch 提供的啟用函式型別
Pytorch 提供了不同的啟用函式,可以在不同的機器學習問題中使用。
ReLU 啟用函式
Leaky ReLU 啟用函式
Sigmoid 啟用函式
Tanh 啟用函式
Softmax 啟用函式
ReLU 啟用函式
修正線性單元啟用函式 (ReLU) 是神經網路中廣泛使用的啟用函式。ReLU 函式定義為f(x) = max(0,x)。它是一個非線性函式,對於負輸入始終輸出零,並且不改變正輸入的輸出。因此,當輸入為負時,不會發生學習。ReLU 函式可以從 torch.nn 包中匯入。ReLU 函式的圖形如下所示:
示例
在下面的示例中,我們建立了一個數組並將其傳遞給 Relu 啟用函式。Relu 啟用函式根據 Relu 啟用函式轉換陣列的每個輸入元素。
#pip install numpy import numpy as np def relu(x): return np.maximum(0, x) x = np.array([-1, 2, -3, 4, 0]) y = relu(x) print(y)
輸出
[0 2 0 4 0]
Leaky ReLU 啟用函式
Leaky ReLU 啟用函式類似於 ReLU 啟用函式,但 Leaky ReLU 函式對於負輸入不輸出零,因此在負輸入的情況下也會發生學習。Leaky ReLU 函式定義為LeakyReLU(x)=max(0,x)+negative_slope∗min(0,x)。Leaky ReLU 函式的圖形如下所示。
Leaky ReLU 也是非線性的,並解決了當函式輸出零或在負輸入值的情況下神經元的學習/訓練時發生的神經元死亡問題。
示例
在下面的示例中,我們使用 numpy 建立了一個數組,並將陣列傳遞給 leaky_relu 函式,該函式根據 leaky_relu 函式轉換陣列的每個元素。
import numpy as np def leaky_relu(x, alpha=0.1): return np.maximum(alpha * x, x) x = np.array([-1, 2, -3, 4, 0]) y = leaky_relu(x) print(y)
輸出
[-0.1 2. -0.3 4. 0. ]
Sigmoid 啟用函式
Sigmoid 函式是神經網路中最常用的啟用函式之一。它定義為 f(x) = 1/(1+exp(-x))。Sigmoid 函式將任何輸入對映到 0 到 1 之間的值。它適用於二元分類問題,其中輸出為 0 或 1。Sigmoid 函式也用作深度神經網路中輸出層的啟用函式。在二元分類問題中,Sigmoid 函式的輸出通常被視為機率。Sigmoid 啟用函式的圖形表示如下所示。
Sigmoid 函式可能會出現梯度消失問題。
示例
在下面的示例中,我們使用 numpy 建立了一個數組,並將陣列傳遞給 sigmoid 函式,該函式根據 sigmoid 函式轉換陣列的每個元素。
import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.array([-1, 2, -3, 4, 0]) y = sigmoid(x) print(y)
輸出
[0.26894142 0.88079708 0.04742587 0.98201379 0.5 ]
Tanh 啟用函式
雙曲正切函式是一個非線性啟用函式,它對任何輸入值都輸出 -1 到 1 之間的值。tanh 啟用函式定義為f(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x))。Tanh 函式的 S 形圖形如下所示。
使用 Tanh 函式時可能出現梯度消失問題。
示例
在下面的示例中,我們使用 numpy 建立了一個數組,並將陣列傳遞給 tanh 函式,該函式根據 tanh 函式轉換陣列的每個元素。
import numpy as np def tanh(x): return np.tanh(x) x = np.array([-1, 2, -3, 4, 0]) y = tanh(x) print(y)
輸出
[-0.76159416 0.96402758 -0.99505475 0.9993293 0. ]
Softmax 啟用函式
Softmax 函式用於多類分類問題。它定義為f(x) = exp(x_i)/sum(exp(x_j))(對於所有 i)。Softmax 函式將任何輸入對映到類上的機率分佈。它適用於多類分類問題,其中輸出可以屬於多個類中的一個。Softmax 函式也用作深度神經網路中輸出層的啟用函式。Softmax 函式通常與其他啟用函式結合使用,並放置在最後一層。
示例
在下面的示例中,我們使用 numpy 建立了一個數組,並將陣列傳遞給 softmax 函式,該函式根據 softmax 函式轉換陣列的每個元素。
import numpy as np def softmax(x): exp_x = np.exp(x - np.max(x)) # to prevent overflow return exp_x / np.sum(exp_x) x = np.array([1, 2, 3, 4, 5]) y = softmax(x) print(y)
輸出
[0.01165623 0.03168492 0.08612854 0.23412166 0.63640865]
結論
啟用函式在神經網路中起著至關重要的作用,PyTorch 提供了各種可供選擇的啟用函式。啟用函式的選擇取決於問題的型別和神經網路的結構。透過使用合適的啟用函式,我們可以提高神經網路的效能並獲得更好的結果。