感知機
感知機(Perceptron)是二類分類的線性分類模型,對應於輸入空間(特征空間)中將實例划分為正負兩類的分離超平面,屬於判別模型。感知機關鍵字信息:二分類模型、線性可分。
感知機預測是學習得到的感知機模型對新的輸入實例進行分類。感知機模型求解方法:導入基於誤分類的損失函數,利用梯度下降法對損失函數進行極小化,求得感知機模型。
感知機接收多個輸入信號量,經過計算並判斷結果是否超過閾值,而決定下一個神經元是否被激活。
以包含兩個輸入信號量為例,創建數學模型 y = w1*x1 + w2x2 + b。表達式w1*x1 + w2x2 + b作為模擬信號量完成計算,結果>0,返回1;否則返回0。
1、簡單邏輯電路實現
通過感知機顯示與門、或門等簡單電路。與門、或門、與非門對應真值表如下:
x1 | x2 | x1 & x2 | x1 | x2 | !(x1 & x2) |
0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
由人工根據“真值表”,可設計出無窮個w1、w2、b組合的解。而機器學習的目標應是,根據數學模型和訓練數據集,設計出最優解。
以下則通過Python代碼,給出與門的其中一種解法:
def AndGate(x1, x2): x = np.array([x1, x2]) w = np.array([0.3, 0.5]) b = -0.7 if np.sum(x * w) + b <= 0: return 0 else: return 1
在設計過程中,或門、與非門的實現僅僅是在參數的設定上有所區別,如下所示:
def NAndGate(x1, x2): x = np.array([x1, x2]) w = np.array([-0.3, -0.5]) b = 0.7 if np.sum(x * w) + b <= 0: return 0 else: return 1 def OrGate(x1, x2): x = np.array([x1, x2]) w = np.array([0.3, 0.5]) b = -0.2 if np.sum(x * w) + b <= 0: return 0 else: return 1
2、多層感知機
根據感知機二分類的線性分類模型的特點,因此僅能表示由一條直線分割的線性空間。
嘗試使用感知機實現異或門電路,異或門真值表如下表所示:
x1 | x2 | x1 ^ x2 |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
通過平面圖形表示上記真值表,其中⚪表示0值,而▲表示1,如下所示:
上記異或門的圖形無法利用一條直線進行分割,由於感知機只能表示線性空間。因此單層感知機無法表示異或門,其無法分離非線性空間。
但是通過上文真值表的組合運算,能夠實現異或門運算。如下所示:
x1 | x2 | !(x1 & x2) s1 |
x1 | x2 s2 |
s1 & s2 |
0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
借助與非門、或門的組合運算能夠實現異或操作,單層感知機可分別實現與非門和或門。因此可通過疊加感知機的方式實現異或運算,從而分離出非線性空間。
def XorGate(x1, x2): s1 = NAndGate(x1, x2) s2 = OrGate(x1, x2) return AndGate(s1, s2)
上記代碼,通過圖表示如下:
通過上圖可看出,異或門是一種多層結構的神經網絡,是一個2層的感知機。
通過感知機的疊加,實現對非線性空間的表示。