深度學習入門筆記:感知機
程式設計導航:nav.wenancoding.com
個人blog:wenancoding.com
gzh:【問安coding】
定義
感知機接收多個輸入訊號,輸出一個訊號。感知機的訊號只有1/0兩種取值,0對應“不傳遞訊號”,1對應“傳遞訊號”。
- x 1 ,x 2 是輸入訊號。
- y是輸出訊號。
- w 1 、w 2 是權重(w是weight的首字母)。每個變數都有權重,權重越大,對應該權重的訊號的重要性就越高。
- 圖中的○稱為“神經元”或者“節點”。
輸入訊號被送往神經元時,會被分別乘以固定的權重(w 1 x 1 、w 2 x 2 )。神經元會計算傳送過來的訊號的總和,只有當這個總和超過了某個界限值時,才會輸出1。這也稱為“神經元被啟用” 。這裡將這個界限值稱為閾值,用符號θ表示。
匯入權重和偏置
為方便後續的計算,把感知機公式改為:
對比兩個公式:雖然有符號不同,但表達的內容是完全相同的。b稱為偏置,w 1 和w 2 稱為權重。感知機會計算輸入訊號和權重的乘積,然後加上偏置,如果這個值大於0則輸出1,否則輸出0。
−θ命名為偏置b,但是請注意,偏置b和權重w 1 、w 2 的作用是不一樣的。具體地說,w 1 和w 2 是控制輸入訊號的重要性的引數,而偏置是調整神經元被啟用的容易程度(輸出訊號為1的程度)的引數。比如,若b為−0.1,則只要輸入訊號的加權總和超過0.1,神經元就會被啟用。但是如果b為−20.0,則輸入訊號的加權總和必須超過20.0,神經元才會被啟用。像這樣,偏置的值決定了神經元被啟用的容易程度。另外,這裡我們將w 1 和w 2 稱為權重,將b稱為偏置,但是根據上下文,有時也會將b、w 1 、w 2 這些引數統稱為權重。
簡單的邏輯電路
與門(AND gate)
- 全真為真,其餘為假
- 全為1才是1,否則為0
感知機實現與門
公式的不同形式實現,後續以第二種數學公式為主
def AND(x1, x2): w1, w2, theta = 0.5, 0.5, 0.7 tmp = x1*w1 + x2*w2 if tmp <= theta: return 0 elif tmp > theta: return 1 ================ AND(0, 0) # 輸出0 AND(1, 0) # 輸出0 AND(0, 1) # 輸出0 AND(1, 1) # 輸出1
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
與非門(NAND gate)
- NAND:not and,和與門相反。
- 全真為假,其餘為真
- 全為1則是0,否則為1
感知機實現與非門
def NAND(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
或門(OR gate)
- 有真為真,全假為假
- 有1便是1,全0才是0
感知機實現或門
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
感知機的侷限性
異或門
- 一個真才是真,其餘為假
- 只有一個1才是1,其餘為0
使用實現與、非與、或
的感知機無法實現異或
原因分析
以或門為例,當權重引數(b, w 1 , w 2 ) = (−0.5, 1.0, 1.0)時,可滿足或門的條件。此時,感知機可表示為:
分析該分段函式,該直線把平面分為兩個值為1或0的區域,直線下方為0,直線上方為1。
類似的,與門,非與門同樣可以表示成類似影象。換言之,對於 與、非與、或 我們可以使用一條直線把平面分為兩個區域。這種由直線分割而成的空間稱為線性空間。
對於異或影象,想要用一條直線將圖的○和△分開,無論如何都做不到。事實上,用一條直線是無法將○和△分開的。
只能使用曲線把它們分割開來
這樣的曲線分割而成的空間稱為非線性空間。
如何實現異或門
- 利用已有的門進行組合疊加即可實現異或門
門的符號:
異或門的實現:
from and_gate import AND
from or_gate import OR
from nand_gate import NAND
# y的程式碼
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
多層感知機
對比與、非與、或
的感知機
異或
的感知機
圖中的感知機總共由3層構成,但是因為擁有權重的層實質上只有2層(第0層和第1層之間,第1層和第2層之間),所以稱為“2層感知機”。不過,有的文獻認為該圖感知機是由3層構成的,因而將其稱為“3層感知機”。
- 第0層的兩個神經元接收輸入訊號,並將訊號傳送至第1層的神經元。
- 第1層的神經元將訊號傳送至第2層的神經元,第2層的神經元輸出y。
這種2層感知機的執行過程可以比作流水線的組裝作業。第1段(第1層)工人對傳送過來的零件進行加工,完成後再傳送給第2段(第2層)的工人。第2層的工人對第1層的工人傳過來的零件進行加工,完成這個零件後出貨(輸出)。像這樣,在異或門的感知機中,工人之間不斷進行零件的傳送。通過這樣的結構(2層結構),感知機得以實現異或門。這可以解釋為“單層感知機無法表示的東西,通過增加一層就可以解決”。也就是說,通過疊加層(加深層),感知機能進行更加靈活的表示。
感知機的拓展
多層感知機可以實現比之前見到的電路更復雜的電路。比如,進行加法運算的加法器也可以用感知機實現。此外,將二進位制轉換為十進位制的編碼器、滿足某些條件就輸出1的電路(用於等價檢驗的電路)等也可以用感知機表示。實際上,使用感知機甚至可以表示計算機!
內容小結
- 感知機是具有輸入和輸出的演算法。給定一個輸入後,將輸出一個既定的值。
- 感知機將權重和偏置設定為引數。
- 使用感知機可以表示與門和或門等邏輯電路。
- 異或門無法通過單層感知機來表示。
- 使用2層感知機可以表示異或門。
- 單層感知機只能表示線性空間,而多層感知機可以表示非線性空間。
- 多層感知機(在理論上)可以表示計算機。