第2章 由感知機(jī)導(dǎo)入神經(jīng)網(wǎng)絡(luò)

重點(diǎn):

  1. 感知機(jī)將權(quán)重與偏置設(shè)定為參數(shù)。
  2. 不改變結(jié)構(gòu),只改變參數(shù)可以使感知機(jī)實(shí)現(xiàn)不同的功能。
  3. 單層感知機(jī)只能表示線性空間,多層感知機(jī)可以表示非線性空間。

2.1 感知機(jī)是什么

感知機(jī)接收多個(gè)(0,1)輸入信號(hào),輸出一個(gè)(0,1)信號(hào)。

下圖展示了一個(gè)二輸入的感知機(jī)的例子:

x1,x2是輸入信號(hào),y是輸出信號(hào),w1,w2是權(quán)重,?表示一個(gè)神經(jīng)元,還有一個(gè)重要參數(shù)沒在圖中表示出來,是閾值θ,大于閾值輸出1,小于閾值輸出0。具體公式如下:


當(dāng)w1x1+w2x2>θ時(shí),輸出為1,稱“神經(jīng)元被激活”。

小結(jié):

  1. 閾值θ決定了輸出神經(jīng)元激活的難易程度
  2. 權(quán)重w1,w2決定了輸入信號(hào)x1和x2的重要性。

2.2 簡(jiǎn)單邏輯電路

2.2.1 與門

與門真值表:

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

考慮用上面的二輸入感知機(jī)實(shí)現(xiàn)與門,可調(diào)的參數(shù)只有3個(gè),分別是權(quán)重w1,w2和閾值θ。

w1,w2,θ可取的值為:

w1 w2 θ
0.5 0.5 0.7
0.5 0.5 0.8
1.0 1.0 1.0

可以驗(yàn)證,當(dāng)參數(shù)取上面3種情況時(shí),只有x1,x2都為1,輸出y才為1。除了上面3種取法,還有無數(shù)種,可見參數(shù)的選擇不唯一。

2.2.2 與非門

與非門真值表:

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

與非門就是在與門基礎(chǔ)上,取反

w1,w2,θ可取的值為:

w1 w2 θ
-0.5 -0.5 -0.7
-0.5 -0.5 -0.8
-1.0 -1.0 -1.0

與非門的參數(shù)選擇亦有無數(shù)種,不唯一。

2.2.3 或門

或門真值表:

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

w1,w2,θ可取的值為:

w1 w2 θ
0.5 0.5 0.3
0.5 0.5 0.4
1.0 1.0 0.7

或門的參數(shù)選擇亦有無數(shù)種,不唯一。

重點(diǎn): 與,或,與非門的感知機(jī)構(gòu)造都是一樣的,都是用二輸入感知機(jī)實(shí)現(xiàn),通過選取不同的參數(shù),實(shí)現(xiàn)不同的邏輯計(jì)算。

機(jī)器學(xué)習(xí)的目標(biāo)就是告訴計(jì)算機(jī)要實(shí)現(xiàn)的目標(biāo),讓計(jì)算機(jī)自動(dòng)選擇合適的參數(shù)。


2.3 感知機(jī)的Python實(shí)現(xiàn)

2.3.1 用偏置代替閾值

將上面的數(shù)學(xué)表達(dá)式的θ移到右邊,令b=-θ,換一種表達(dá)方式:


image

我們稱b為偏置,效果就像穿木屐,在計(jì)算b+w1x1+w2x2的過程中,權(quán)重w和輸入x都知道的時(shí)候,b總是將計(jì)算結(jié)果抬到一個(gè)高度,使其更容易或更難大于0。

權(quán)重w1,w2是控制輸入信號(hào)的重要性的參數(shù)。

偏置b是調(diào)整神經(jīng)元被激活的容易程度的參數(shù)。

2.3.2 用Python實(shí)現(xiàn)與門,與非門,或門

與門:

import numpy as np

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   
    
    #mumpy中數(shù)組相乘,為其對(duì)應(yīng)位置元素相乘,構(gòu)成表達(dá)式b+w1x1+w2x2
    
    if tmp <= 0:
        return 0
    else:
        return 1

與非門:

import numpy as np

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])  #只更改了參數(shù),結(jié)構(gòu)沒變
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

或門:

import numpy as np

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])    #只更改了參數(shù),結(jié)構(gòu)沒變
    b = -0.2
    tmp = np.sum(w*x) + b 
    if tmp <= 0:
        return 0
    else:
        return 1

2.4 感知機(jī)的局限性

2.4.1 異或門

我們來看一下異或門的真值表:

異或門真值表:

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

只有當(dāng)輸入x1和x2不一樣時(shí),輸出才為1。

我們用前面使用的二輸入感知機(jī)無法實(shí)現(xiàn)異或門,可以通過畫圖理解。

下面是或門的輸入輸出分布圖,●表示0,▲表示1,可以通過參數(shù)的選取,w1=1,w2=1,b=-0.5。


image

用直線-0.5+x1+x2=0可以將兩個(gè)不同的輸出區(qū)域分割開。


但是觀察異或門的輸入輸出分布圖:

image

很明顯,如果遵從數(shù)學(xué)公式:

image

無法使用一條直線b+w1x1+w2x2=0將不同的輸出區(qū)域分割開。

2.4.2 線性和非線性

感知機(jī)的局限性就在于它只能表示由一條直線分割的空間。

倘若我們要分割異或門的輸入輸出空間,就必須使用曲線。


image

這種由曲線分割而成的空間稱為非線性空間。

而由直線分割而成的空間稱為線性空間


2.5 多層感知機(jī)

2.5.1 異或門的實(shí)現(xiàn)

單層二輸入感知機(jī)無法實(shí)現(xiàn)異或門的表達(dá),但是通過疊加感知機(jī),可以實(shí)現(xiàn)更多的邏輯表達(dá)。

用下面的符號(hào)來表達(dá)已有的可以用一個(gè)感知機(jī)表達(dá)的邏輯:


可以通過組合,疊加感知機(jī),實(shí)現(xiàn)異或門。


s1是與非門的輸出結(jié)果,s2是或門的輸出結(jié)果,將s1,s2作為與門的輸入,得到y(tǒng),可以實(shí)現(xiàn)異或門。

x1 x2 s1 s2 y
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

2.5.2 異或門的python實(shí)現(xiàn)

#要先從包含與,或,與非門的模塊導(dǎo)入對(duì)應(yīng)的函數(shù)
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

用感知機(jī)表示異或門,如下圖所示


image

從圖可以看出,異或門是一個(gè)多層感知機(jī)。

最左邊一層神經(jīng)元稱為第0層,為的是與Python的列表邏輯符合,由于上圖中,擁有權(quán)重的層實(shí)際上只有2層(第0層和第1層之間,第1層和第2層之間),所以稱為2層感知機(jī),有的文獻(xiàn)也稱為3層,忽略權(quán)重。

通過疊加層,感知機(jī)能進(jìn)行更靈活的表示,例如表示非線性空間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容