神经网络常用激活函数
生活随笔
收集整理的這篇文章主要介紹了
神经网络常用激活函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
激活函數(shù):只是一個抽象概念,使用激活函數(shù)時為了讓中間輸出多樣化,能夠處理更復雜的問題。
激活函數(shù)給神經(jīng)元引入了非線性因素,若無激活函數(shù),則每一層最后輸出的都是上一層輸入的線性函數(shù),不管加多少層神經(jīng)網(wǎng)絡,我們最后的輸出也只是最開始輸入數(shù)據(jù)的線性組合而已。當加入多層神經(jīng)網(wǎng)絡時,就可以讓神經(jīng)網(wǎng)絡擬合任何線性函數(shù)及非線性函數(shù),從而使得神經(jīng)網(wǎng)絡可以適用于更多的非線性問題,而不僅僅是線性問題。
>> 01 sigmoid函數(shù)
????????
- ?sigmoid函數(shù)是機器學習中的一個比較常用的函數(shù),用于隱層神經(jīng)元輸出,取值范圍為(0,1);
- 它可以將一個實數(shù)映射到(0,1)的區(qū)間,用來做二分類,而且是單調(diào)遞增,比較容易優(yōu)化;
- 在特征相差比較復雜或是相差不是特別大時效果比較好;
- 優(yōu)點:平滑、易于求導;
- 缺點:①收斂比較慢,反向傳播求誤差梯度時,求導涉及除法;②Sigmoid是軟飽和,反向傳播時,容易產(chǎn)生梯度消失,從而無法完成深層網(wǎng)絡的訓練;(當x趨于無窮大的時候,也會使導數(shù)趨于0)③Sigmoid函數(shù)并不是以(0,0)為中心點;?
from matplotlib import pyplot as plt
import numpy as np
import mathdef sigmoid_function(x_list):fx = []for x in x_list:# print(x)fx.append(1 / (1 + np.exp(-x)))return fxif __name__ == '__main__':x_list = np.arange(-10, 10, 0.01)fx = sigmoid_function(x_list)ax = plt.gca() # get current axis 獲得坐標軸對象ax.spines['right'].set_color('none') # 將右邊的兩條邊顏色設置為空ax.spines['top'].set_color('none') # 將上邊的兩條邊顏色設置為空ax.xaxis.set_ticks_position('bottom') # 指定下邊的邊為 x 軸ax.yaxis.set_ticks_position('left') # 指定左邊的邊為 y 軸ax.spines['bottom'].set_position(('data', 0)) # 指定的x軸綁定到0這個點ax.spines['left'].set_position(('data', 0)) # 指定的y軸綁定到0這個點plt.plot(x_list, fx, label='Sigmoid ', linestyle="-") # label為標簽plt.legend(['Sigmoid '])plt.title('Sigmoid Function')plt.show()
??>> 02 tanh函數(shù)
- 優(yōu)點:①函數(shù)輸出以(0,0)為中心;②收斂速度相對于Sigmoid更快;
- 缺點:tanh函數(shù)并沒有解決sigmoid梯度消失的問題
from matplotlib import pyplot as plt
import numpy as np
import mathdef tanh_function(x_list):fx = []for x in x_list:fx.append((np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)))return fxif __name__ == '__main__':x_list = np.arange(-10, 10, 0.01)fx = tanh_function(x_list)ax = plt.gca() # get current axis 獲得坐標軸對象ax.spines['right'].set_color('none') # 將右邊的兩條邊顏色設置為空ax.spines['top'].set_color('none') # 將上邊的兩條邊顏色設置為空ax.xaxis.set_ticks_position('bottom') # 指定下邊的邊為 x 軸ax.yaxis.set_ticks_position('left') # 指定左邊的邊為 y 軸ax.spines['bottom'].set_position(('data', 0)) # 指定的x軸綁定到0這個點ax.spines['left'].set_position(('data', 0)) # 指定的y軸綁定到0這個點plt.plot(x_list, fx, label='Tanh', linestyle="-") # label為標簽plt.legend(['Tanh'])plt.title('Tanh Function')plt.show()
?>> 03 tanh函數(shù)
- 優(yōu)點:①收斂速度快;②有效的緩解了梯度消失問題;③對神經(jīng)網(wǎng)絡可以使用稀疏表達;④對于無監(jiān)督學習,也能獲得很好的效果。
- 缺點:在訓練過程中容易出現(xiàn)神經(jīng)元失望,之后梯度永遠為0的情況。
from matplotlib import pyplot as plt
import numpy as np
import mathdef sigmoid_function(x_list):fx = []for x in x_list:fx.append(np.where(x < 0, 0, x))return fxif __name__ == '__main__':x_list = np.arange(-10, 10, 0.01)fx = sigmoid_function(x_list)print(len(fx))ax = plt.gca() # get current axis 獲得坐標軸對象ax.spines['right'].set_color('none') # 將右邊的兩條邊顏色設置為空ax.spines['top'].set_color('none') # 將上邊的兩條邊顏色設置為空ax.xaxis.set_ticks_position('bottom') # 指定下邊的邊為 x 軸ax.yaxis.set_ticks_position('left') # 指定左邊的邊為 y 軸ax.spines['bottom'].set_position(('data', 0)) # 指定的x軸綁定到0這個點ax.spines['left'].set_position(('data', 0)) # 指定的y軸綁定到0這個點plt.plot(x_list, fx, label='Tanh', linestyle="-") # label為標簽plt.legend(['Tanh'])plt.title('Tanh Function')plt.show()
?
??
總結(jié)
以上是生活随笔為你收集整理的神经网络常用激活函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 镀锌钢管多少钱一米啊?
- 下一篇: 鼋头渚特惠票怎么买