1. 程式人生 > 其它 >深度學習基礎學習-第二章-感知器

深度學習基礎學習-第二章-感知器

感知器

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等等。