機器學習入門(01)— 感知機概念、實現、侷限性以及多層感知機

1. 感知機概念

下圖是一個接收兩個輸入信號的感知機的例子。

x1x2 是輸入信號, y 是輸出信號, w1w2 是權重( wweight 的首字母)。圖中的 稱爲“神經元”或者“節點”。輸入信號被送往神經元時,會被分別乘以固定的權重( w1*x1w2*x2 )。神經元會計算傳送過來的信號的總和,只有當這個總和超過了某個界限值時,纔會輸出 1。這也稱爲“神經元被激活” 。這裏將這個界限值稱爲閾值,用符號 θ 表示。
感知機示例圖
把上述內容用數學式來表示,見下公式

公式
感知機的多個輸入信號都有各自固有的權重,這些權重發揮着控制各個信號的重要性的作用。也就是說,權重越大,對應該權重的信號的重要性就越高。

2. 感知機實現

2.1 簡單實現

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

與門真值表

以邏輯與門爲例來看看如何實現:

In [1]: def AND(x1, x2):
   ...:     w1, w2, theta = 0.5, 0.5, 0.7
   ...:     result = x1 * w1 + x2 * w2
   ...:     if result >= theta:
   ...:         return 1
   ...:     else:
   ...:         return 0
   ...:         

In [2]: 

按照同樣的步驟,也可以實現與非門和或門,不過讓我們來對它們的實現稍作修改。

2.2 導入權重和偏置

式(2.1)的 θ 換成 −b ,於是就可以用式(2.2)來表示感知機的行爲。
導入權重
式(2.1)和式(2.2)雖然有一個符號不同,但表達的內容是完全相同的。此處,b 稱爲偏置,w1 和 w2 稱爲權重。如式(2.2)所示,感知機會計算輸入信號和權重的乘積,然後加上偏置,如果這個值大於 0 則輸出 1,否則輸出 0。

使用 NumPy 實現 2.2 所描述的感知機,代碼如下:

In [2]: import numpy as np

In [3]: x = np.array([0, 1])	# 輸入

In [5]: w = np.array([0.5, 0.5])	# 權重

In [6]: b = -0.7	# 偏置

In [7]: w * x
Out[7]: array([0. , 0.5])

In [8]: np.sum(w*x)
Out[8]: 0.5

In [9]: np.sum(w*x) + b
Out[9]: -0.19999999999999996	# 大約爲-0.2(由浮點小數造成的運算誤差)

In [10]: 

NumPy 數組的乘法運算中,當兩個數組的元素個數相同時,各個元素分別相乘,因此 w*x 的結果就是它們的各個元素分別相乘([0, 1] *[0.5, 0.5] => [0, 0.5])。之後, np.sum(w*x) 再計算相乘後的各個元素的總和。最後再把偏置加到這個加權總和上,就完成了式(2.2)的計算。

2.3 使用權重和偏置的實現

代碼如下:

In [11]: def AND(x1, x2):
    ...:     x = np.array([x1, x2])
    ...:     w = np.array([0.5, 0.5])
    ...:     b = -0.7
    ...:     result = np.sum(w*x) + b
    ...:     if result <= 0:
    ...:         return 0
    ...:     else:
    ...:         return 1

In [12]: 

這裏把 −θ 命名爲偏置 b ,但是請注意,偏置和權重 w1w2 的作用是不一樣的。

具體地說, w1w2 是控制輸入信號的重要性的參數,而偏置是調整神經元被激活的容易程度(輸出信號爲 1 的程度)的參數。

例如:

  • b−0.1 ,則只要輸入信號的加權總和超過 0.1 ,神經元就會被激活。
  • 但是如果 b−20.0,則輸入信號的加權總和必須超過 20.0,神經元纔會被激活。

像這樣,偏置的值決定了神經元被激活的容易程度。另外,這裏我們將 w1w2 稱爲權重,將 b 稱爲偏置,但是根據上下文,有時也會將 bw1w2 這些參數統稱爲權重。

3. 感知機侷限性

感知機的侷限性就在於它只能表示由一條直線分割的空間。下圖這樣彎曲的曲線無法用感知機表示。另外,由下圖這樣的曲線分割而成的空間稱爲非線性空間,由直線分割而成的空間稱爲線性空間
感知機侷限

4. 多層感知機

與門、或門是單層感知機,而異或門是 2 層感知機。疊加了多層的感知機也稱爲多層感知機( multi-layered perceptron )。
感知機表示異或門
圖2-13中的感知機總共由 3 層構成,但是因爲擁有權重的層實質上只有 2 層(第 0 層和第 1 層之間,第 1 層和第 2 層之間),所以稱爲 “2 層感知機”。不過,有的文獻認爲圖 2-13 的感知機是由 3 層構成的,因而將其稱爲“3 層感知機”。

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

  • 第 0 層的兩個神經元接收輸入信號,並將信號發送至第 1 層的神經元。
  • 第 1 層的神經元將信號發送至第 2 層的神經元,第 2 層的神經元輸出 y。

這種 2 層感知機的運行過程可以比作流水線的組裝作業。第 1 段(第 1 層)的工人對傳送過來的零件進行加工,完成後再傳送給第 2 段(第 2 層)的工人。第 2 層的工人對第 1 層的工人傳過來的零件進行加工,完成這個零件後出貨(輸出)。

通過這樣的結構( 2 層結構),感知機得以實現異或門。這可以解釋爲 “單層感知機無法表示的東西,通過增加一層就可以解決”。也就是說,通過疊加層(加深層),感知機能進行更加靈活的表示。

5. 總結

• 感知機是具有輸入和輸出的算法。給定一個輸入後,將輸出一個既定的值;
• 感知機將權重和偏置設定爲參數;
• 使用感知機可以表示與門和或門等邏輯電路;
• 異或門無法通過單層感知機來表示;
• 使用 2 層感知機可以表示異或門;
• 單層感知機只能表示線性空間,而多層感知機可以表示非線性空間;
• 多層感知機(在理論上)可以表示計算機;

參考:《深度學習入門:基於Python的理論與實現》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章