一、Sigmoid函數
Sigmoid函數是最經典的激活函數之一,具有將實數映射到(0, 1)的特性,其公式如下:
def sigmoid(x):
return 1 / (1 + np.exp(-x))
其中,np.exp()表示$e^x$函數。
Sigmoid函數的優點是其能夠將輸出映射成概率形式,因此在分類問題中得到了廣泛的應用。但是其存在梯度問題,容易出現梯度消失或梯度爆炸的情況,同時輸出不是以零為中心的,對後續網絡的學習帶來一定的困難。
二、ReLU函數
ReLU(Rectified Linear Unit)函數是近些年來最流行的激活函數,具有非線性特性,其公式如下:
def relu(x):
return np.maximum(0, x)
其中,np.maximum()函數表示取x與0的最大值。
ReLU函數相比於Sigmoid函數,具有計算速度快的優點,同時梯度計算也比較簡單。但是當輸入為負數時,其梯度為0,導致神經元失活,這也是ReLU函數的不足之處。
三、LeakyReLU函數
LeakyReLU函數是對ReLU函數的改進,其公式如下:
def leaky_relu(x, alpha=0.01):
return np.where(x > 0, x, alpha*x)
其中,np.where()表示當x>0時,輸出x;當x<=0時,輸出alpha*x。
LeakyReLU函數在輸入為負數時,梯度不為0,避免了神經元失活問題,並且可以克服ReLU函數在參數更新時的死亡Relu問題。但是需要小心設置alpha值,其值過大或過小都會導致梯度問題。
四、ELU函數
ELU(Exponential Linear Unit)是一種帶負數飽和度的非線性函數,其公式如下:
def elu(x, alpha=1.0):
return np.where(x > 0, x, alpha*(np.exp(x)-1))
由公式可知,當x>0時,輸出x;當x<=0時,輸出$alpha*(e^x-1)$,其與ReLU相比,具有輸出以零為中心的優點。同時,ELU函數能夠避免ReLU函數在輸入為負時產生的梯度問題,且梯度不會飽和。
五、Softmax函數
Softmax函數是一種將多個輸出變量映射為概率分布的函數,其公式如下:
def softmax(x):
exp_x = np.exp(x)
return exp_x / np.sum(exp_x, axis=1, keepdims=True)
其中,np.sum()函數表示將exp_x矩陣的每個元素相加,axis=1表示對每行進行相加,keepdims=True表示保留行維度。
Softmax函數適用於多分類問題,將輸出映射為概率分布形式,方便後續的訓練和預測。但是其存在梯度消失和梯度爆炸問題,需要小心設置學習率。
總結
常見的激活函數有Sigmoid函數、ReLU函數、LeakyReLU函數、ELU函數和Softmax函數,每種激活函數都有其特點和不足,需要根據具體情況選擇合適的函數。
原創文章,作者:CESLA,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/371278.html