天天看點

深度學習——激活函數sigmoid

激活函數是神經網絡中能夠産生非線性特質的一個根源,如果沒有激活函數的存在,那麼整個網絡隻剩下線性運算,線性運算的複合還仍然線性運算,最終的效果隻相當于單層的線性模型。是以,激活函數是拟合一個預期資料分布的關鍵。

1.sigmoid函數

數學表達式如下:

深度學習——激活函數sigmoid

函數圖像如下所示:

深度學習——激活函數sigmoid

特征:

輸入:正負均可(圖示為-10~+10)

輸出(0,1)當輸入極大或極小時,可以取到實數0和實數1.

缺點:

1.在深度神經網絡中梯度反向傳遞時導緻梯度爆炸或梯度消失,其中梯度爆炸發生的機率非常小,而梯度消失發生的機率比較大。若初始化神經網絡的權值為 [0,1] 之間的随機值,那麼梯度在穿過多層後将變得非常小(0~0.25之間),即出現梯度消失現象;當網絡權值初始化為 (1,+∞) 區間内的值,則會出現梯度爆炸情況。

2.Sigmoid 的 output 不是0均值(即zero-centered),這會導緻後一層的神經元将得到上一層輸出的非0均值的信号作為輸入。 産生的一個結果是使得收斂緩慢。 如果按batch去訓練,則可以得到不同的信号,這個問題可以緩解一下。是以,非0均值這個問題雖然會産生一些不好的影響,不過比梯度消失問題相比要好一些。

3.解析式中含有幂運算,計算機求解時相對來講比較耗時。對于規模比較大的深度網絡,會較大地增加訓練時間。

優點:

平滑、易于求導。

在Python中畫sigmoid曲線:

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
    return 1.0/(1+np.exp(-x))
sigmoid_inputs=np.arange(-10,10,0.1)
sigmoid_outputs=sigmoid(sigmoid_inputs)
print("Sigmoid Function Input :: {}".format(sigmoid_inputs))
print("Sigmoid Function Output :: {}".format(sigmoid_outputs))
plt.plot(sigmoid_inputs,sigmoid_outputs)
plt.xlabel("Sigmoid Inputs")
plt.ylabel("Sigmoid Outputs")
plt.show()
           

繼續閱讀