深度學習入門

 

1.感知機

感知機算法是由美國學者 Frank Rosenblatt 在1957年提出來的。感知機算法自己很是簡單,可是它是神經網絡(深度學習)的起源的算法。下面,就簡單介紹下這個算法。python

1.1 感知機算法簡介

感知機接收多個輸入信號,輸出一個信號。感知機的信號只有(1/0)兩種取值。算法

下圖是一個接收兩個輸入信號的感知機的例子。x1 和 x2是輸入信號, y是輸出信號,ω1、ω2 是權重。圖中的 ⭕️表示神經元(或者節點)。神經元會計算傳送過來的信號的總和,只有當這個總和超過了某個界限值時,纔會輸出1。這也稱爲「神經元被激活」。這裏將這個界限值稱爲閾值,用符號 θ 表示。網絡

那麼感知機的公式就能夠很容易表示出來了 :ide

   

(公式 1.1)學習

1.2 簡單邏輯電路

簡單邏輯電路其實是感知機的一個簡單的應用場景,這裏定義3個概念:與門(AND gate)、 與非門(NAND gate)、或門(OR gate)、異或門(XOR gate)。spa

這和邏輯條件的判斷類似,對於參數肯定的感知機模型,x和 x2取相應的值時,對應的y值以下圖: 3d

 針對每個電路實例,很容易獲得結論: 前3種能夠有多種不一樣類型的感知機,不一樣的模型,參數不一致。code

下面,是用python實現3種感知機模型(肯定ω1、ω2,讓它們知足與門、與非門和或門的條件):blog

 1 def AndGate(x1,x2):
 2     theata = 0.6
 3     w1 = 0.5
 4     w2 = 0.5
 5     sum = w1*x1 + w2*x2
 6     if sum <= theata:
 7         return 0
 8     else: return 1
 9 
10 def NotAndGate(x1,x2):
11     theata = -0.6
12     w1 = -0.5
13     w2 = -0.5
14     sum = w1*x1 + w2*x2
15     if sum <= theata:
16         return 0
17     else: return 1
18 
19 def OrGate(x1,x2):
20     theata = 0.3
21     w1 = 0.5
22     w2 = 0.5
23     sum = w1*x1 + w2*x2
24     if sum <= theata:
25         return 0
26     else: return 1
View Code

 下面,想象着對感知機的公式作一個變體,讓θ = -b,那麼公式就變成了:深度學習

(公式1.2)

 固然,這時候問題變成了,若是肯定了 b、ω1、ω2,也能夠肯定感知機模型,下面一樣道理,咱們快速寫出該模型的python代碼(只要讓 b= -θ 便可):

 1 import numpy as np 
 2 
 3 def AndGateSecond(x1,x2):
 4     X = np.array([x1,x2])
 5     w1,w2 = 0.5,0.5 
 6     b=-0.6 
 7 #     print (np.array([w1,w2])*X)
 8     sum = b + np.sum(np.array([w1,w2])*X)
 9     if sum<=0 : 
10         return 0
11     else:
12         return 1 
13 
14 def NotAndGateSecond(x1,x2):  
15     X = np.array([x1,x2])
16     w1,w2 = -0.5,-0.5 
17     b=0.6 
18 #     print (np.array([w1,w2])*X)
19     sum = b + np.sum(np.array([w1,w2])*X)
20     if sum<=0 : 
21         return 0
22     else:
23         return 1
24     
25 def OrGateSecond(x1,x2):  
26     X = np.array([x1,x2])
27     w1,w2 = 0.5, 0.5 
28     b = -0.3
29 #     print (np.array([w1,w2])*X)
30     sum = b + np.sum(np.array([w1,w2])*X)
31     if sum<=0 : 
32         return 0
33     else:
34         return 1
View Code

 1.3 感知機的侷限性

異或門,不能用感知機表示,下面用圖形的方式來解釋緣由。

y = ω1*x1ω2*x1 + b 能夠理解爲一條直線,二維空間。若是 ω1 = 1 , ω2 = 1 , b = -0.5 ,是知足或門的參數。下圖是該參數的直線,將三角和圓形符號區分開了。

三角形符號: (1,0) ,  (0,1) ,  (1,1)   圓形符號:(0,0) 

 

那麼,異或門,實際上找到一條曲線,將下圖中的三角和圓形符號區分開。

 

很明顯,用直線沒法將上圖中三角和圓形符號區分開。 只能用曲線了:

 

 

感知機的侷限性就在於它只能表示由一條直線分割的空間。而沒法解決上邊異或門的曲線問題。

  1.4 多層感知機

上一節中,提到了感知機的侷限性,沒法實現異或門。也就是說,在線性空間中,感知機沒法實現異或門。 

可是,咱們能夠經過前邊3個感知機的組合來實現異或門,看下邊的真值表:

 

容易發現,咱們使用與非門、或門和與門組合完成了異或門的實現。這樣,python實現代碼也容易完成: 

1 def NotOrGate(x1,x2):
2     s1=NotAndGateSecond(x1,x2)
3     s2=OrGateSecond(x1,x2)
4     y=AndGateSecond(s1,s2)
5     return y
6 
7 NotOrGate(0,0),NotOrGate(1,0),NotOrGate(0,1),NotOrGate(1,1)
View Code

疊加了多層的感知機也稱爲多層感知機(multi-layered perceptron)

圖形化表示異或門,以下:

相關文章
相關標籤/搜索