天天看點

深度學習入門筆記(三):感覺機

作者:AI人工智能知識庫

本章通俗易懂,容易了解,沒有太多很難了解的數學公式,适合數學水準一般、零基礎入門學習的學生,同時本文章通過python原生代碼來實作感覺機,從底層原理去深入了解并熟練掌握,隻要學過python基礎的東西就都能看懂。

感覺機是由美國學者FrankRosenblatt在1957年提出來的。為何我們現在還要學習這一很久以前就有的算法呢?因為感覺機也是作為神經網絡(深度學習)的起源的算法。是以,學習感覺機的構造也就是學習通向神經網絡和深度學習的一一種重要思想。

文章目錄

  • 1. 什麼是感覺機
  • 2. 簡單邏輯電路
  • 2.1 與門
  • 2.2 與非門和或門
  • 3. 感覺機的實作
  • 3.1 簡單代碼實作
  • 3.2 導入權重和偏置
  • 3.3 使用權重和偏置的代碼實作
  • 4. 感覺機的局限性
  • 4.1 異或門
  • 4.2 線性和非線性
  • 5. 多層感覺機
  • 5.1 已有門電路的組合
  • 5.2 異或門的實作
  • 6. 小結
深度學習入門筆記(三):感覺機

如果需要擷取到【人工智能-深度學習入門筆記】的話幫忙轉發、轉發、轉發一下然後再關注我私信回複“ 1 ”得到擷取方式吧!

1. 什麼是感覺機

感覺機接收多個輸入信号,輸出一個信号。這裡所說的“信号”可以想象成電流或河流那樣具備“流動性”的東西。像電流流過導線,向前方輸送電子一樣,感覺機的信号也會形成流,向前方輸送資訊。但是,和實際的電流不同的是,感覺機的信号隻有“流/不流"(1/0)兩種取值。在本書中,0對應“不傳遞信号”,1對應“傳遞信号”

圖2-1是一個接收兩個輸人信号的感覺機的例子。x 1 , x 2 是輸入信号,y 是輸出信号,w 1 , w 2是權重(w是weight的首字母)。圖中的O稱為 “神經元" 或者 “節點”。輸人信号被送往神經元時,會被分别乘以固定的權重(w 1 x 1 , w 2 x 2 )。 神經元會計算傳送過來的信号的總和,隻有當這個總和超過了某個界限值時,才會輸出1。這也稱為 “神經元被激活”。這裡将這個界限值稱為 門檻值,用符号 θ θθ 表示。

深度學習入門筆記(三):感覺機

感覺機的運作原理隻有這些!把上述内容用數學式來表示(式2-1):

深度學習入門筆記(三):感覺機

2. 簡單邏輯電路

2.1 與門

與門是有兩個輸入和一個輸出的門電路。圖2-2這種輸入信号和輸出信号的對應表稱為“真值表”。如圖2-2所示,與門僅在兩個輸人均為1時輸出1,其他時候則輸出0。

下面考慮用感覺機來表示這個與門。需要做的就是确定能滿足圖2-2的真值表的w 1 , w 2 ,θ的值。那麼,設定什麼樣的值才能制作出滿足圖2-2的條件的感覺機呢?

實際上,滿足圖2-2的條件的參數的選擇方法有無數多個。比如,當( w 1 , w 2 , θ ) = (0.5, 0.5,0.7)時,可以滿足圖2-2的條件。此外,當(w 1 , w 2 , θ )為(0.5, 0.5, 0.8)或者(1.0, 1.0, 1.0)時,同樣也滿足與門的條件。設定這樣的參數後,僅當x 1和x 2 同時為1時,信号的權重總和才會超過給定的門檻值θ。

2.2 與非門和或門

與非門就是颠倒了與門的輸出。用真值表表示的話,如圖2-3所示,僅當x I 和x 2同時為1時輸出0,其他時候則輸出1。那麼與非門的參數又可以是什麼樣的組合呢?

深度學習入門筆記(三):感覺機

要表示與非門,可以用( w 1 , w 2 , θ ) = (-0.5, -0.5, -0.7)這樣的組合(其他的組合也是無限存在的)。實際上,隻要把實作與門的參數值的符号取反,就可以實作與非門。

接下來看一下圖2-4所示的 或門。或門是“隻要有一個輸入信号是1,輸出就為1”的邏輯電路。那麼我們來思考一下,應該為這個或門設定什麼樣的參數呢?

如上所示,我們已經知道使用感覺機可以表示與門、與非門、或門的邏輯電路。這裡重要的一點是:與門、與非門、或門的感覺機構造是一樣的。

實際上,3個門電路隻有參數的值(權重和門檻值)不同。也就是說,相同構造的感覺機,隻需通過适當地調整參數的值,就可以像“變色龍演員"表演不同的角色一樣,變身為與門、與非門、或門。

3. 感覺機的實作

3.1 簡單代碼實作

現在,我們用Python來實作剛才的邏輯電路。這裡,先定義一個接收參數 x 1和 x 2 的AND函數。

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

在函數内初始化參數w1、w2、theta,當輸入的權重總和超過門檻值時傳回1,否則傳回0。

3.2 導入權重和偏置

剛才的與門的實作比較直接、容易了解,但是考慮到以後的事情,我們将其修改為另外一種實作形式。在此之前,首先把式(2.1)的 0 換成 -b,于是就可以用式(2.2)來表示感覺機的行為。

深度學習入門筆記(三):感覺機

式(2.1)和式(2.2)雖然有一個符号不同,但表達的内容是完全相同的。此處,b稱為 偏置, w 1和 w 2 稱為 權重。如式(2.2)所示,感覺機會計算輸人信号和權重的乘積,然後加上偏置,如果這個值大于0則輸出1,否則輸出0。

下面,我們使用NumPy,按式(2.2) 的方式實作感覺機。在這個過程中,我們用Python的解釋器逐一确認結果。

>>> import numpy as np
>>> x = np.array([0,1]) #輸人
>>> w = np.array([0.5, 0.5]) #權重
>>> b =-0.7 #偏置
>>> w*x
array([ 0.,0.5])
>>> np.sum(w*x)
0.5
>>> np.sum(W*x) + b
- 0.19999999999996 #大約為-0.2(由浮點小數造成的運算誤差)           

如上例所示,在NumPy數組的乘法運算中,當兩個數組的元素個數相同時,各個元素分别相乘,是以 w ∗ x w*xw∗x 的結果就是它們的各個元素分别相乘 ( [ 0 , 1 ] ∗ [ 0.5 , 0.5 ] = [ 0 , 0.5 ] ([0,1] * [0.5,0.5] = [0, 0.5]([0,1]∗[0.5,0.5]=[0,0.5]。 之後,n p . s u m ( w ∗ x ) np.sum(w*x)np.sum(w∗x) 再計算相乘後的各個元素的總和。最後再把偏置加到這個權重總和上,就完成了式(2.2)的計算。

3.3 使用權重和偏置的代碼實作

python代碼實作與門

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           

這裡把一 θ θθ 命名為偏置 b bb,但是請注意,偏置和權重w 1 、w 2 的作用是不一樣的。具體地說,w 1 和w 2 是控制輸入信号的重要性的參數,而偏置是調整神經元被激活的容易程度(輸出信号為1的程度)的參數。比如,若b為 − 0.1 -0.1−0.1,則隻要輸入信号的權重總和超過 0.1 0.10.1,神經元就會被激活。但是如果b為 − 20.0 -20.0−20.0,則輸入信号的權重總和必須超過 20.0 20.020.0,神經元才會被激活。像這樣,偏置的值決定了神經元被激活的容易程度。另外,這裡我們将 w 1 和 w 2 稱為權重,将b稱為偏置,但是根據上下文,有時也會将 b 、 w 1 、 w 2 這些參數統稱為權重。

接着,我們繼續實作與非門和或門。

def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) #僅權重和偏置與AND不同!
b=0.7
tmp = np. sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1           
def OR(x1,,x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5]) #僅權重和偏置與AND不同!
b= -0.2
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0 :
else:
return 1           

4. 感覺機的局限性

到這裡我們已經知道,使用感覺機可以實作與門、與非門、或門三種邏輯電路。現在我們來考慮一下 異或門(XOR gate)。

4.1 異或門

異或]也被稱為邏輯異或電路。如圖2-5所示, 僅當 x 1 或 x 2 中的一方為1時,才會輸出1(“異或”是拒絕其他的意思)。那麼,要用感覺機實作這個異或門的話,應該設定什麼樣的權重參數呢?

深度學習入門筆記(三):感覺機

實際上,用前面介紹的感覺機是無法實作這個異或門的。為什麼用感覺機可以實作與門、或門,卻無法實作異或門呢?下面我們嘗試通過畫圖來思考其中的原因。

首先,我們試着将或門的動作形象化。或門的情況下,當權重參數 ( b , w 1 , w 2 ) = ( − 0.5 , 1.0 , 1.0 ) 時,可滿足圖2-4的真值表條件。此時,感覺機可用下面的式(2.3)表示。

深度學習入門筆記(三):感覺機

式(2.3) 表示的感覺機會生成由直線 − 0.5 + x 1 + x 2 = 0 分割開的兩個空間。其中一個空間輸出1,另一個空間輸出0,如圖2-6所示。

深度學習入門筆記(三):感覺機

或門在 ( x 1 , x 2 ) = ( 0 , 0 ) 時輸出0,在 ( x 1 , x 2 ) 為(0,1)、(1,0)、 (1,1)時輸出1。圖2-6中,O 表示0,△ △△表示1。如果想制作或門,需要用直線将圖2-6中的O和△ △△分開。實際上,剛才的那條直線就将這4個點正确地分開了。

那麼,換成異或門的話會如何呢?能否像或門那樣,用一條直線作出分割圖2-7中的O和△ △△的空間呢?

深度學習入門筆記(三):感覺機

想要用一條直線将圖2-7中的O和△ △△分開,無論如何都做不到。事實上,用一條直線是無法将O和△ △△分開的。

4.2 線性和非線性

圖2-7中的O和△ △△無法用一條直線分開,但是如果将“直線”這個限制條件去掉,就可以實作了。比如,我們可以像圖2-8那樣,作出分開O和△ △△的空間。

深度學習入門筆記(三):感覺機

感覺機的局限性就在于它隻能表示由一 條直線分割的空間。圖2-8這樣彎曲的曲線無法用感覺機表示。另外,由圖2-8這樣的曲線分割而成的空間稱為 非線性空間,由直線分割而成的空間稱為線性空間。線性、非線性這兩個術語在機器學習領域很常見,可以将其想象成圖2-6和圖2-8所示的直線和曲線。

5. 多層感覺機

感覺機不能表示異或門讓人深感遺憾,但也無需悲觀。實際上,感覺機的絕妙之處在于它可以 “疊加層”(通過疊加層來表示異或門是本節的要點)。這裡,我們暫且不考慮疊加層具體是指什麼,先從其他視角來思考一下異或門的問題。

5.1 已有門電路的組合

異或門的制作方法有很多,其中之一就是組合我們前面做好的 與門、與非門、或門進行配置。這裡,與門、與非門、或門用圖2-9中的符号表示。另外,圖2-9中與非門前端的O表示反轉輸出的意思。

深度學習入門筆記(三):感覺機

那麼,請思考一下,要實作異或門的話,需要如何配置與門、與非門和或門呢?這裡給大家一個提示,用與門、與非門、或門代替圖2-10中的各個“?”,就可以實作異或門。

深度學習入門筆記(三):感覺機

異或門可以通過圖2-11所示的配置來實作。這裡, x 1 和 x 2表示輸人信号,y表示輸出信号。x I 和 x 2是與非門和或門的輸入,而與非門和或門的輸出則是與門的輸入。

深度學習入門筆記(三):感覺機

現在,我們來确認一下圖2-11的配置是否真正實作了異或門。這裡,把 x 1 作為與非門的輸出,把 x 2 作為或門的輸出,填入真值表中。結果如圖2-12所示,觀察 x 1 、 x 2 、 y ,可以發現确實符合異或門的輸出。

深度學習入門筆記(三):感覺機

5.2 異或門的實作

下面我們試着用Python來實作圖2-11所示的異或門。使用之前定義的AND函數、NAND函數、OR函數,可以像下面這樣(輕松地)實作。

def X0R(x1, x2):
s1 = NAND(x1, x2)
s2 = 0R(x1, x2)
y = AND(s1, s2)
return y           

這樣,異或門的實作就完成了。下面我們試着用 感覺機的表示方法(明确地顯示神經元)來表示這個異或門,結果如圖2-13所示。

如圖2-13所示,異或門是一種 多層結構的神經網絡。這裡,将最左邊的一列稱為第0層,中間的一列稱為第1層,最右邊的一列稱為第2層。

圖2-13所示的感覺機與前面介紹的與門、或門的感覺機(圖2-1)形狀不同。實際上,與門、或門是 單層感覺機,而異或門是2層感覺機。疊加了多層的感覺機也稱為多層感覺機(multi-layered perceptron)。

深度學習入門筆記(三):感覺機

在圖2-13所示的2層感覺機中,先在第0層和第1層的神經元之間進行信号的傳送和接收,然後在第1層和第2層之間進行信号的傳送和接收,具體如下所示。

第0層的兩個神經元接收輸入信号,并将信号發送至第1層的神經元。

第1層的神經元将信号發送至第2層的神經元,第2層的神經元輸出y。

6. 小結

本章所學的内容

  • 感覺機是具有輸入和輸出的算法。給定一個輸入後,将輸出一個既定的值。
  • 感覺機将權重和偏置設定為參數。
  • 使用感覺機可以表示與門和或門等邏輯電路。
  • 異或門無法通過單層感覺機來表示。
  • 使用2層感覺機可以表示異或門。
  • 單層感覺機隻能表示線性空間,而多層感覺機可以表示非線性空間。
深度學習入門筆記(三):感覺機