深度學習1感知機及實現簡單反向傳播網絡

感知機是什麼?
感知機接受多個輸入信號,輸出一個信號
感知機的信號只有“流/不流”兩種取值,0對應“不傳遞信號”,1對應“傳遞信號”。
輸入信號在被送往神經元時,會被分別乘以固定的權重。神經元會計算傳送過來的信號的總和,只有當這個總和超過某個界限值時,纔會輸出1。這也稱爲“神經元被激活”。
上述內容用數學式來表示,就是:
y=0(w1x1+w2x2<=θ)
1 (w1x1+w2x2>θ)
在這裏插入圖片描述
簡單邏輯電路
與門 and gate:與門是具有兩個輸出和一個輸入的門電路。 與門僅在兩個輸入均爲1時輸出1,其他時候輸出0
與非門 NAND gate
或門

感知機的實現
與門的實現

def AND(x1,x2):
    w1,w2,theta = 0.5,0.5,0.7
    tmp = w1*x1+w2*x2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

導入權重和偏置
y=0(b+w1x1+w2x2<=0)
1(b+w1x1+w2x2>0)
偏置的值決定了神經元被激活的容易程度

感知機的侷限性
異或門,僅當x1和x2中的一方爲1時,纔會輸出1.
一條直線無法分開 真值表中的4個點

曲線分割的空間稱爲非線性空間,直線分割的空間稱爲線性空間。

多層感知機

異或門的實現
AND函數。NAND函數。OR函數。疊加

def XOR(x1, x2):
    s1= NAND(x1,x2)
    s2= OR(x1,x2)
    y=AND(s1,s2)
    return y

反向傳播網絡

#定義激活函數
import numpy as np
def sigmoid(x, deriv=Flase)
    if deriv==True:
        return x*(1-x)
    return 1/(1+np.exp(-x))
#網絡結構
w0 = np.random.random(( , ))
w1 =  np.random.random(( , ))
#前向傳播
l0 = x
l1 = sigmoid(np.dot(l0, w0))
l2 = sigmoid(np.dot(l1,w1))
l2_error = l2 - y
#反向傳播
l2_delta = l2_error * sigmode(l2, deriv=True)
l1_error = np.dot(l2_delta, w1.T)
l1_delta = l1_error*sigmode(l1, deriv=True)
#更新參數
w1-=l1.T .dot( l2_delta)
w0-=l0.T .dot( l1_delta)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章