what is 激活函數(shù)
感知機(jī)的網(wǎng)絡(luò)結(jié)構(gòu)如下:
左圖中,,偏置b沒有被畫出來,如果要表示出b,,可以像右圖那樣做,。 用數(shù)學(xué)式來表示感知機(jī): 上面這個(gè)數(shù)學(xué)式子可以被改寫:
我們表達(dá)的意義是:輸入信號(hào)的總和被h(x)轉(zhuǎn)換成輸出y。
像h(x)函數(shù)一樣,,將輸入信號(hào)的總和轉(zhuǎn)換為輸出信號(hào),,這種函數(shù)一般被稱為激活函數(shù)。上面這個(gè)h(x)表示的激活函數(shù)稱為階躍函數(shù),。
表示激活函數(shù)計(jì)算過程的圖如下:
激活函數(shù)的python實(shí)現(xiàn)
python實(shí)現(xiàn)階躍函數(shù)
為了方便階躍函數(shù)的參數(shù)取Numpy數(shù)組,,用以下方式實(shí)現(xiàn)階躍函數(shù)。
對(duì)numpy數(shù)組進(jìn)行不等號(hào)運(yùn)算后,,數(shù)組的各個(gè)元素都會(huì)進(jìn)行不等號(hào)運(yùn)算,,生成一個(gè)布爾型數(shù)組。
這個(gè)代碼里數(shù)組中x大于0的元素轉(zhuǎn)換成True,,小于等于0的元素轉(zhuǎn)換成False,。由于階躍函數(shù)要輸出int類型的0或1,所以添加一個(gè)dtype=np.int32,。
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int32)
if __name__ == '__main__':
X = np.arange(-5.0, 5.0, 0.1)
# 在-0.5到5.0范圍內(nèi),,以0.1為單位生成Numpy數(shù)組
# [-5.0,-4.9,...,4.9,5.0]
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1) # 指定圖中繪制的y軸的范圍
plt.show()
python實(shí)現(xiàn)sigmoid函數(shù)
下面定義的函數(shù)的參數(shù)x是Numpy數(shù)組時(shí),,結(jié)果也能正確被計(jì)算。因?yàn)镹umpy具有廣播功能,,如果標(biāo)量和Numpy數(shù)組進(jìn)行數(shù)值運(yùn)算,,那么這個(gè)標(biāo)量將和Numpy數(shù)組中的各個(gè)元素進(jìn)行運(yùn)算。
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
if __name__ == '__main__':
X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()
python實(shí)現(xiàn)ReLU函數(shù)
代碼中使用Nmupy的maximum函數(shù),,該函數(shù)會(huì)從輸入的數(shù)值中選擇較大的值進(jìn)行輸出,。
import numpy as np
import matplotlib.pylab as plt
def relu(x):
return np.maximum(0, x)
if __name__ == '__main__':
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1.0, 5.5)
plt.show()
激活函數(shù)的特點(diǎn)
上面的激活函數(shù)無論是階躍、sigmoid還是ReLU,,使用的都是非線性函數(shù),,如果使用線性函數(shù),比如h(x)=ax作為激活函數(shù),,那么y(x) = h(h(h(x)))的運(yùn)算對(duì)應(yīng)3層神經(jīng)網(wǎng)絡(luò),,這個(gè)運(yùn)算會(huì)進(jìn)行y(x) = aaax的乘法運(yùn)算,,但是同樣的處理可以由y(x)=bx(b=aaa)這一次乘法運(yùn)算表示,,也還是相當(dāng)于一層神經(jīng)網(wǎng)絡(luò)。也就是說,,使用線性函數(shù)的話,,加深神經(jīng)網(wǎng)絡(luò)的層數(shù)就沒有意義了。為了發(fā)揮疊加層的優(yōu)勢(shì),,激活函數(shù)必須使用非線性函數(shù),。
|