魚書(深度學(xué)習(xí)入門):第二章 感知器
一、感知器的原理
????感知機(perceptron)接收多個輸入信號,輸出一個信號。x1、x2是輸入信號,?y是輸出信號,w1、w2是權(quán)重(w是weight的首字母)。輸入信號被送往神經(jīng)元時,會被分別乘以固定的權(quán)重(w1x1、w2x2)。神經(jīng)元會計算傳送過來的信號的總和,只有當(dāng)這個總和超過了某個界限值時,才會輸出1。這也稱為“神經(jīng)元被激活”。這里將這個界限值稱為閾值,用符號θ表示。

????其數(shù)學(xué)原理如下:

????其中權(quán)重控制了各個輸入的重要程度,而閾值控制了感知器被激活的難易程度。
????將上式中的θ改為-b,可得新的表達(dá)方式。

????此處,b稱為偏置,w1和w2稱為權(quán)重。感知機會計算輸入信號和權(quán)重的乘積,然后加上偏置,如果這個值大于0則輸出1,否則輸出0。
二、簡單邏輯電路
????1.與門(AND gate)

示例代碼:
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
? ? if tmp<=0:
? ? ? ? return 0
? ? else:
? ? ? ? return 1
2.與非門(NAND gate)

示例代碼:
def NAND(x1,x2):
? ? x=np.array([x1,x2])
? ? w=np.array([-0.5,-0.5]) #僅權(quán)重與偏置不同
? ? b=0.7
? ? tmp=np.sum(w*x)+b
? ? if tmp<=0:
? ? ? ? return 0
? ? else:
? ? ? ? return 1
3.或門(OR gate)

示例代碼:
def OR(x1,x2):
? ? x=np.array([x1,x2])
? ? w=np.array([0.5,0.5])
? ? b=-0.2 #僅權(quán)重與權(quán)重不同
? ? tmp=np.sum(w*x)+b
? ? if tmp<=0:
? ? ? ? return 0
? ? else:
? ? ? ? return 1
三、感知器的局限性
????下圖是感知器的可視化,其中灰色部分與白色部分分別輸出不同的結(jié)果。

????感知器的局限性在于,其只能用直線分割空間。由直線分割的空間稱為線性空間,由曲線分割而成的空間成為非線性空間,如下圖。

四、多層感知機
????通過“疊加層”,構(gòu)建多層感知機,便可以表示非線性空間。此處以構(gòu)建異或門(XOR gate)為例。

????通過組合上一節(jié)中的與門,或門,與非門便可以構(gòu)造出異或門。如下圖所示。

其代碼實現(xiàn):
def XOR(x1,x2): ?#利用多個門實現(xiàn)新門,也即多層感知機
? ? s1=NAND(x1,x2)
? ? s2=OR(x1,x2)
? ? y=AND(s1,s2)
? ? return y
????這樣,我們便實現(xiàn)了異或門。異或門是一種多層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)。其過程真值表如下。

????這里,將最左邊的一列稱為第0層,中間的一列稱為第1層,最右邊的一列稱為第2層。實際上,與門、或門是單層感知機,而異或門是2層感知機。疊加了多層的感知機也稱為多層感知機(multi-layered perceptron)。

五、感知器與計算機
????計算機可以通過組合感知器表示。理論上可以說2層感知機就能構(gòu)建計算機。這是因為,已有研究證明,2層感知機(嚴(yán)格地說是激活函數(shù)使用了非線性的sigmoid函數(shù)的感知機)可以表示任意函數(shù)。