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 提供了各種可供選擇的啟用函式。啟用函式的選擇取決於問題的型別和神經網路的結構。透過使用合適的啟用函式,我們可以提高神經網路的效能並獲得更好的結果。

更新於:2023年4月17日

980 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告