感知機(jī)(perceptron) 算法由美國(guó)學(xué)者Frank Rosenblatt在1957年提出。感知機(jī)是神經(jīng)網(wǎng)絡(luò)的起源算法,因此,要想學(xué)習(xí)機(jī)器學(xué)習(xí),了解感知機(jī)的重要思想是非常必要的。
1.感知機(jī)是什么
感知機(jī)就是接收多個(gè)輸入信號(hào),給出一個(gè)輸出信號(hào)的模型。
如圖,是一個(gè)有兩個(gè)輸入,一個(gè)輸出的最基本的感知機(jī)。圖中圓圈為神經(jīng)元,當(dāng)兩個(gè)輸入乘以對(duì)應(yīng)的權(quán)重并加和進(jìn)入該神經(jīng)元后,如果值大于設(shè)定的閾值 ,則該神經(jīng)云被激活,輸出1,否則輸出0,閾值用
表示。
<img src="https://raw.githubusercontent.com/lizhuoranget/pictures/master/7901577959743_.jpg" width="130" height="130" />
<center>圖1 有兩個(gè)輸入的感知機(jī)</center>數(shù)學(xué)式表示如下:
公式1
2.簡(jiǎn)單邏輯電路
感知機(jī)可以表示基本電路如與門(mén)電路表如下:
<center>表1 與門(mén)真值表</center>
| x1 | x2 | y |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
如何用感知機(jī)表示呢?很簡(jiǎn)單,只需要人工設(shè)定好一定的權(quán)值,即可得到,如權(quán)值 設(shè)為:(0.5,0.5,0.7),(1.0,1.0,1.0)等都可滿足。
同樣的,或門(mén)與非門(mén)也可以通過(guò)設(shè)定不同的參數(shù),使用感知機(jī)進(jìn)行表示。
這里參數(shù)是通過(guò)人工設(shè)定的,而機(jī)器學(xué)習(xí)的目的就是通過(guò)訓(xùn)練數(shù)據(jù)讓計(jì)算機(jī)找到正確的參數(shù),該過(guò)程就叫做學(xué)習(xí)。
3.感知機(jī)的實(shí)現(xiàn)
為了更加數(shù)學(xué)化的表示以上實(shí)現(xiàn)過(guò)程,作如下改變:
公式2
此處,b為偏置, 為權(quán)重。權(quán)重表示了控制輸入信號(hào)的重要性,偏置則是激活神經(jīng)元的容易程度。
實(shí)現(xiàn)形式如下:
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
4.感知機(jī)的局限
如下,異或邏輯電路的真值表如下
<center>表2 異或門(mén)真值表</center>
| x1 | x2 | y |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
發(fā)現(xiàn)無(wú)論如何對(duì)感知機(jī)調(diào)參,感知機(jī)都無(wú)法實(shí)現(xiàn)異或邏輯電路的表示。
<img src="https://raw.githubusercontent.com/lizhuoranget/pictures/master/7921577959745_.jpg" width="130" height="130" />
<center>圖2 可否通過(guò)一條直線分開(kāi)圓形和三角</center>
<img src="https://raw.githubusercontent.com/lizhuoranget/pictures/master/7911577959744_.jpg" width="130" height="130"/>
<center>圖3 使用曲線可以分開(kāi)圓形和三角</center>
所以,感知機(jī)只能表示由一條直線分割的空間,即線性空間,不能表示非線性空間。
5.多層感知機(jī)
不用悲觀的是,如下圖所示,我們通過(guò)之前實(shí)現(xiàn)的多個(gè)感知機(jī),就可以實(shí)現(xiàn)異或邏輯的表示。如圖,多層感知機(jī)就是一個(gè)多層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
<img src="https://raw.githubusercontent.com/lizhuoranget/pictures/master/7941577959747_.jpg" width="150" height="60" />
<center>圖4 通過(guò)組合與、與非、或門(mén)實(shí)現(xiàn)異或門(mén)</center>
<img src="https://raw.githubusercontent.com/lizhuoranget/pictures/master/7951577959748_.jpg" width="100" height="60" />
<center>圖5 用感知機(jī)表示異或門(mén)</center>
<center>表3 異或門(mén)真值表</center>
| x1 | x2 | s1 | s2 | y |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 1 | 0 | 0 | 0 |
理所當(dāng)然,異或門(mén)的實(shí)現(xiàn)也相當(dāng)簡(jiǎn)單,按照組合邏輯調(diào)用之前的門(mén)函數(shù)即可:
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
理論證明,通過(guò)組合多層感知機(jī)可以表示任意電路,甚至可以表示計(jì)算機(jī)。其實(shí),理論上2層就夠表示計(jì)算機(jī),即現(xiàn)實(shí)現(xiàn)與門(mén)和或門(mén),然后實(shí)現(xiàn)全加器和半加器,接著實(shí)現(xiàn)算數(shù)邏輯單元ALU,最后實(shí)現(xiàn)CPU。