神經網絡屬於“聯結主義”,和統計機器學習的理論基礎區別還是很不一樣。
以我自己的理解,統計機器學習的理論基於統計學,理論厚度足夠強,讓人有足夠的安全感;而神經網絡的理論更側重於代數,表征能力特別強,不過可解釋性欠佳。
這兩個屬於機器學習的兩個不同的流派,偶爾也有相互等價的算法。
本文回顧神經網絡最簡單的構件:感知器、多層感知器。一些簡單的代碼實踐可以參考:Python 實現感知器的邏輯電路(與門、與非門、或門、異或門)。
感知器
感知器是二類分類的線性分類模型,將實例划分為正負兩類的分離超平面(separating hyperplane),屬於判別模型。
感知器基於線性閾值單元(Linear Threshold Unit, LTU)構件的。以下是 LTU:
LTU 相當於對輸入做一個線性組合,再加一個階躍函數。
常用的階躍函數是 Heaviside 和 Sign。
哪怕只有一個 LTU 也可以作為簡單的線性二分類器,類似於邏輯回歸或者線性 SVM。
感知器就是由一層 LTU 組成。以下是一個多輸出分類器。
為了求得感知器的權重參數,需要確定一個學習策略,即定義損失函數並將損失函數極小化。有這樣幾種選擇:
1. 誤分類點的總數:損失函數不是 w, b 的連續可導函數,不易優化。
2. 誤分類點到超平面的總距離:感知器所采用的損失函數。
感知器的損失函數是:
$$-\frac{1}{\left \| w \right \|}\sum_{x_i\in M}y_i(wx_i+b)$$
感知器學習問題轉化為上式損失函數的最優化問題,最優化的方法是隨機梯度下降法(stochastic gradient decent)。
感知器收斂性:當訓練數據集線性可分時,感知器學習算法原始形式是收斂的。
感知器的具體算法分為兩種形式:
1. 原始形式
2. 對偶形式:暫不介紹
原始形式算法:
$$w\leftarrow w+\eta y_ix_i$$
$$b\leftarrow b+\eta y_i$$
使用 sklearn 使用感知器算法:
1 import numpy as np 2 from sklearn.datasets import load_iris 3 from sklearn.linear_model import Perceptron 4 5 iris = load_iris() 6 X = iris.data[:, (2, 3)] # petal length, petal width 7 y = (iris.target == 0).astype(np.int) # Iris Setosa? 8 per_clf = Perceptron(random_state=42) 9 per_clf.fit(X, y) 10 11 y_pred = per_clf.predict([[2, 0.5]]) 12 13 print(y_pred)
輸入如下:
[1]
與邏輯回歸相比,感知器不能輸出概率。
多層感知器
MLP 的組成:
- 1 個輸入層
- 1 個以上的隱藏層
- 1 個輸出層
當隱藏層多於 2 層時,又叫深度神經網絡(Deep Neural Network, DNN)。
訓練 MLP 的算法是后饋訓練算法(backpropagation training algorithm)。后饋訓練算法也就是使用反向自動求導(reverse-mode autodiff)的梯度下降法。
1. 前饋:在每個連接層計算每個神經元的輸出。
2. 計算網絡的輸出誤差,並且計算最后一層的每個神經元對於誤差的貢獻程度。
3. 繼續計算上一層的每個神經元對於誤差的貢獻程度。
4. 直到算法到達輸入層。
為了很好地實施后饋訓練算法,D. E. Rumelhart 對於神經網絡架構做了重大的改變:把階躍函數改為了幾率函數(logistic function)$f(z)=\frac{1}{1+e^{-z}}$。因為階躍函數導數都為 0,無法實施梯度下降;而幾率函數處處可導。
除了用幾率函數作為激活函數之外,還有:
- 雙曲正切函數:tanh (z) = 2σ(2z) – 1。S 形狀、連續、可導,不過輸出值在 -1 到 1 之間,使得訓練開始時神經層輸出更加正則化,常常加速收斂。
- ReLU 函數:ReLU (z) = max (0, z)。連續,但是在 z=0 處不可導,可能使梯度下降震盪。但在實際中,ReLU 效果不錯,速度也快。此外,由於它沒有最大值,可以緩解一些梯度下降的問題。
MLP 常常用於分類問題,每個輸出對應一個不同的二值類別。如果類別太多了(比如數字圖片 0~9),輸出層常常用另一個共用的激活函數來代替:Softmax 函數。
參考
- 《Neural networks and deep learning》by Aurélien Géron