深度學習基礎學習-第二章-感知器
阿新 • • 發佈:2021-10-05
感知器
1.定義
輸入多個訊號輸出一個訊號。
例:x1,x2為輸入訊號。y是輸出訊號。w1,w2是權重,y是輸出訊號,Θ是閾值。高於閾值感知器被啟用輸出y。(權重越大說明越被看重,閾值是啟用得難易度)
2.例項
2.1 與門
邏輯電路中的與門,就是感知器得一種,輸入x1,x2得到y,真值表:
同時還有與非門(與門加非),或門。
程式碼實現
def AND(x1, x2): w1,w2,theta = 0.5,0.5,0.7 tmp = x1 * w1 + x2 * w2 if tmp > theta: return 1 elif tmp <= theta: return 0
將公式編寫把Θ變為-b
程式碼修改
import numpy as np
def ANDD(x1,x2):
x = np.array([x1,x2])
w = np.array([0.5,0.5])
b = 0.7
y = np.sum(x * w) - b
if y > 0:
return 1
elif y <= 0:
return 0
同樣的與非們和或門也可以使用類似程式碼表示。
或門得影象表達:
可以看到感知機是被直線分割
2.2異或門
異或門是輸入得x1,x2相同為1不同為零。但是用之前的方法擬合不出來,因為他並不是線性分割。
異或門影象:
但是我們還有方法擬合,我們可以通過,利用數位電路的方式來擬合。
從上圖可以看出,我們使用與門,與非門,或門就可以組成異或門。
真值表:
程式碼:
import numpy as np def AND(x1,x2): x = np.array([x1,x2]) w = np.array([0.5,0.5]) theta = 0.7 y = np.sum(x * w) - theta if y>0: return 1 elif y<=0: return 0 def NAND(x1,x2): x = np.array([x1,x2]) w = np.array([-0.5,-0.5]) theta = -0.7 y = np.sum(x * w) - theta if y > 0: return 1 elif y <= 0: return 0 def OR(x1,x2): x = np.array([x1,x2]) w = np.array([0.5,0.5]) theta = 0.2 y = np.sum(x * w) - theta if y > 0: return 1 elif y <= 0: return 0 def XOR(x1,x2): y1 = NAND(x1,x2) print(f"NAND is {y1}") y2 = OR(x1,x2) print(f"OR is {y2}") y = AND(y1,y2) return y print(XOR(1,1))
3.從與非門到計算機
計算機是處理資訊的機器,像計算機中輸入一些資訊之後,會按照一定處理,輸出結果。這和感知器的思路是一致的。所以理論上只要通過與非門的組合,就可以實現計算機了。推薦書籍《計算機系統要素:從零開始構建現代計算機》,通過NAND構建俄羅斯方塊的計算機的過程。理論上兩次感知器可以擬合任何東西,也可以用來擬合計算機,但是隻有兩層的話,感知器的權重很難確定。還是應該先實現各個構件在組合,如全加器,ALU等等。