天天看點

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

每個神經元都必須有激活函數。它們為神經元提供了模拟複雜非線性資料集所必需的非線性特性。該函數取所有輸入的權重和,進而生成一個輸出信号。你可以把它看作輸入和輸出之間的轉換。使用适當的激活函數,可以将輸出值限定在一個定義的範圍内。

如果 xi 是第 j 個輸入,Wj 是連接配接第 j 個輸入到神經元的權重,b 是神經元的偏置,神經元的輸出(在生物學術語中,神經元的激活)由激活函數決定,并且在數學上表示如下:

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

這裡,g 表示激活函數。激活函數的參數 ΣWjxj​+b 被稱為神經元的活動。

這裡對給定輸入刺激的反應是由神經元的激活函數決定的。有時回答是二進制的(是或不是)。例如,當有人開玩笑的時候...要麼不笑。在其他時候,反應似乎是線性的,例如,由于疼痛而哭泣。有時,答複似乎是在一個範圍内。

下面整理了tensorflow中提供的激活函數:

1、sigmoid激活函數

sigmoid函數也被稱為S型函數,它可以将整個實數區間映射到(0,1)區間,是以經常被用來計算機率,它也是在傳統神經網絡中被經常使用的一種激活函數。

sigmoid函數可以由下列公式定義

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

sigmoid函數對x求導的公式:

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

sigmoid激活函數的優點:

    1)輸出的映射區間(0,1)内單調連續,非常适合用作輸出層;

    2)比較容易求導;

    3)輸出範圍有限,資料不會發散

sigmoid激活函數的缺點:

    1)導數從0開始很快就又趨近于0了(如上圖所示),易造成“梯度消失”現象。

sigmoid的tensoflow函數

x = tf.constant([[-1,-2],[3,4],[5,6]],dtype=tf.float32)
    sess = tf.Session()
    print(sess.run(tf.sigmoid(x)))
           

2、log_sigmoid激活函數

對sigmoid函數求log,它将整個實數區間映射到了(負無窮,0)

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

log_sigmoid的tensoflow函數:

import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
 
    if __name__ == "__main__":
        x = tf.constant(np.arange(-10,10),dtype=tf.float32)
        sess = tf.Session()
        y = sess.run(tf.log_sigmoid(x))
        print(y)
        plt.plot(np.arange(-10,10),y)
        plt.show()
           

 3、tanh激活函數

tanh是雙曲正切函數,它将整個實數區間映射到了(-1,1),tanh函數也具有軟飽和性。它的輸出是以0為中心,tanh的收斂速度比sigmoid要快,由于存在軟飽和性,是以tanh也存在梯度消失的問題。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

通過對比tanh與sigmoid函數,可以發現

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

tanh可以由sigmoid縮放平移得到。

優點:

1)輸出範圍[-1,1],解決了sigmoid非零均值的問題。

缺點:

1)仍然存在梯度消失和幂運算的問題。

2)如果給tanh的輸入值很大,那在反向求梯度的時候就很小(從下圖的斜率可以看出),不利于網絡收斂。

tanh的tensoflow函數:

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.tanh(x))
    print(y)
    plt.plot(np.arange(-10,10),y)
    plt.show()
           

4、ReLU激活函數

relu激活函數現在是最受歡迎的激活函數,經常被使用在神經網絡中。

relu函數在x<0時,輸出始終為0。由于x>0時,relu函數的導數為1,是以relu函數能夠在x>0時保持梯度不斷衰減,進而緩解梯度消失的問題,還能加快收斂速度,還能是神經網絡具有稀疏性表達能力,這也是relu激活函數能夠被使用在深層神經網絡中的原因。

由于當x<0時,relu函數的導數為0,導緻對應的權重無法更新,這樣的神經元被稱為"神經元死亡"。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

優點:

1)使網絡可以自行引入稀疏性,提高了訓練速度;

2)計算複雜度低,不需要指數運算,适合後向傳播。

缺點:

1)輸出不是零均值,不會對資料做幅度壓縮;

2)容易造成神經元壞死現象,某些神經元可能永遠不會被激活,導緻相應參數永遠不會更新。

relu的tensorflow函數:

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.nn.relu(x))
    print(y)
    plt.plot(np.arange(-10,10),y)
    plt.show()
           

5、relu6激活函數

定義min(max(features,0),6),也就是說它的取值區間被限定在了[0,6]之間。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

relu6的tensorflow函數:

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.nn.relu6(x))
    print(y)
    plt.plot(np.arange(-10,10),y)
    plt.show()
           

6、crelu激活函數

定義為[relu(x),relu(-x)]相對于relu(x),crelu的輸出會增加一倍。

CReLU的全稱Concatenated RectifiedLinear Units,相當于把兩個ReLU級聯起來,輸出次元會自動加倍,比如:CeLU(−3)= [0,3],CeLU(3) = [3,0]。是以,在使用CReLU時要有意識的将濾波器數量減半,否則會将輸入的feature map的數量擴充為兩倍,網絡參數将會增加。

crelu的tensorflow函數為:

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.nn.crelu(x))
    print(y)
           

7、softplus激活函數

定義為log((e^x)+1),被稱為平滑的relu。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

softplus的tensorflow函數為:

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.nn.leaky_relu(x,alpha=0.2))
    print(y)
    plt.plot(np.arange(-10,10),y)
    plt.show()
           

8、leak_relu激活函數

leak_relu激活函數會給x<0,一個斜率,而不是将所有x<0都輸出0,預設斜率是0.2,x>0的部分仍然輸出是x,即斜率為1,保持不變。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

alpha稱為slope系數,一般是一個比較小的非負數,在tensorflow中預設alpha = 0.2。 

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

優點:

1)Leaky ReLU與ReLU的差別在于,當x<0時,不再輸出0。是以可以解決ReLU帶來的神經元壞死的問題。

缺點:

2)實際表現不一定就比ReLU好。 

x = tf.constant(np.arange(-10,10),dtype=tf.float32)
    sess = tf.Session()
    y = sess.run(tf.nn.leaky_relu(x,alpha=0.2))
    print(y)
    plt.plot(np.arange(-10,10),y)
    plt.show()
           

9、PReLU激活函數

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

PReLU即Parametric Leaky ReLU,它與Leaky ReLU的差别在于,Leaky ReLU的系數是一個标量,而PReLU的系數是形如的一組向量,在不同通道系數不同,上式中i表示第i個通道的系數,且系數本身是可以進行學習的。

10、RReLU激活函數

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

RReLU即Randomized Leaky ReLU,其中系數a_ji服從均勻分布U(l, u),l<u,l和u在[0,1)範圍内。

       RReLU是Leaky ReLU的随機化改進。在訓練階段,a_ji是從均勻分布U(l, u)上随機采樣得到的;在測試階段則采用固定的參數a_test = (l+u)/2。

總結來說,Leaky ReLU中的是固定的;PReLU中的a_i是根據資料變化的;RReLU中a_ij的是在給定的範圍内随機抽取的值,這個值在測試環節就會固定下來。

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

11、ELU (tf.nn.elu)激活函數

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數
tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

ELU全稱為Exponential Linear Unit,a是一個可調的參數,它控制ELU負值部分在何時飽和。

優點:

1)右側線性部分使得ELU能夠緩解梯度消失,左側的軟飽和提升了對噪聲的魯棒性。

2)ELU的輸出均值接近于0,收斂速度更快。

但是在tensorflow的代碼中,設定a=1,該參數不可調。

12、SeLU (tf.nn.selu)激活函數

tensorflow激活函數總結分析2、log_sigmoid激活函數 3、tanh激活函數4、ReLU激活函數5、relu6激活函數6、crelu激活函數7、softplus激活函數

SeLU全稱是scaled exponential linearunits,是在ELU的基礎上增加了一個scale因子,即,使得經過該激活函數後使得樣本分布自動歸一化到0均值和機關方差,網絡具有自歸一化功能。

其中,λ=1.050700987355480493419334985,α=1.67326324235437728481704299。

繼續閱讀