chapter2 感知機
2.1 感知機概述
感知機接收多個輸入信號,輸出一個信號。x1、x2是輸入信號,y是輸出信號,w1、w2是權重(w是weight的首字母)?!鸱Q為“神經(jīng)元”或者“節(jié)點”。輸入信號被送往神經(jīng)元時,會被分別乘以固定的權重. 嚴格地講,本章中所說的感知機應該稱為“人工神經(jīng)元”或“樸素感知機”,但是因為很多基本的處理都是共通的,所以這里就簡單地稱為“感知機”。(w1x1、w2x2)。神經(jīng)元會計算傳送過來的信號的總和,只有當這個總和超過了某個界限值時,才會輸出1。這也稱為“神經(jīng)元被激活”。這里將這個界限值稱為閾值,用符號θ表示。
2.2 感知機的實現(xiàn)
公式如下(2.1):

可以由這條公式實現(xiàn)與門的功能
# 代碼實現(xiàn) , 與門功能
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
res = w1 * x1 + w2 * x2
if res > theta:
return 1
else:
return 0
print(AND(1, 1))
print(AND(1, 0))
我們將其修改為另外一種實現(xiàn)形式。在此之前,首先把式(2.1)的θ換成?b,于
是就可以用式(2.2)來表示感知機的行為。
公式(2.2):

式(2.1)和式(2.2)雖然有一個符號不同,但表達的內(nèi)容是完全相同的。
此處,b稱為偏置,w1和w2稱為權重。如式(2.2)所示,感知機會計算輸入
信號和權重的乘積,然后加上偏置,如果這個值大于0則輸出1,否則輸出0.
用權重和偏置實現(xiàn)門運算:
import numpy as np
# 使用numpy的矩陣簡化運算
# 與門
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
# 非門
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) # 僅權重和偏置與AND不同!
b = 0.7
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
# 或運算
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5]) # 僅權重和偏置與AND不同!
b = -0.2
tmp = np.sum(w * x) + b
if tmp <= 0:
return 0
else:
return 1
2.3 感知機的局限性
2.3.1 能否使用之前的邏輯實現(xiàn)異或門,為什么呢?
答: 不能, 因為無法用一條直線分開 △ 還有 ○ , 但是不使用一條直線 這個前提的話就可以. 于是我們就曲線分割而成的空間稱為非線性空間,由直線 分割而成的空間稱為線性空間。

2.3.2 多層感知機
使用之前的邏輯無法實現(xiàn)異或門, 但是通過組合之前的函數(shù)AND ,OR ,NAND 就可以實現(xiàn)異或.
# 通過AND(NAND(x1,x2), OR(x1,x2)) 實現(xiàn)異或
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
所示的感知機與前面介紹的與門、或門的感知機(圖2-1)形狀不同。實際上,與門、或門是單層感知機,而異或門是2層感知機。疊加了多層的感知機也稱為多層感知機(multi-layered perceptron).這可以解釋為“單層感知機無法表示的東西,通過增加一層就可以解決”。也就是說,通過疊加層(加深層),感知機能進行更加靈活的表示。

2.4 本章所學內(nèi)容
? 感知機是具有輸入和輸出的算法。給定一個輸入后,將輸出一個既
定的值。
? 感知機將權重和偏置設定為參數(shù)。
? 使用感知機可以表示與門和或門等邏輯電路。
? 異或門無法通過單層感知機來表示。
? 使用2層感知機可以表示異或門。
? 單層感知機只能表示線性空間,而多層感知機可以表示非線性空間。
? 多層感知機(在理論上)可以表示計算機