感知機模型

發表於2024-03-09

感知機

基本形式

感知機是一種線性分類模型,同時也為判別模型。其形式如下:
\begin{equation}
f(x) = \mathrm{sign}(w \cdot x + b)
\end{equation}

其中\(\mathrm{sign}\)為符號函式滿足下式:

\[\begin{equation} \mathrm{sign}(x) = \begin{cases} +1, &x \geq 0 \\ -1, &x < 0 \end{cases} \end{equation} \]

即認為當樣本滿足\(w \cdot x + b \geq 0\)時被模型認為是正樣本,而當\(w \cdot x + b < 0\)時被認為時負樣本。而一種比較直接的想法去評判模型的損失就是統計樣本中所有誤分類點的個數,形式如下:
\begin{equation}
\mathcal{L} = \sum_{i=1}^{N}\mathrm{I}(y_i \mathrm{sign}(w\cdot x + b) < 0)
\end{equation}
這裡使用指示函式\(\mathrm{I}\)表示若真實類別與預測類別異號則進行誤分類點統計。但是很明顯,這種損失函式並不可導,因此需要設計其他的損失函式。
利用點到直線的距離可以完成損失函式的設計,思路如下:
點到直線(平面)的距離可以表示如下:
\begin{equation}
\mathrm{d} = \frac{|w\cdot x_i + b|}{\Vert w \Vert} \geq0
\end{equation}
此式子也可用於損失函式,但是由於含有絕對值,所以不方便。
考慮誤分類點\(x_i\),其到平面的距離d可以改寫為下式:
\begin{equation}
\mathrm{d}^{\prime}=-\frac{y_i(w \cdot x + b)}{\Vert w \Vert}
\end{equation}
這樣就可以透過距離來表示誤分類樣本的損失了。
在不考慮\(\Vert w\Vert\)的情況西,最終的損失函式可以表示如下:
\begin{equation}
\mathcal{L}(w,b) = -\sum_{x_i\in M}y_i(w \cdot x_i + b)
\end{equation}
其中\(M\)表示所有誤分類樣本的集合。

顯然上述損失函式是可以求偏導的,我們對引數\(w, b\)求偏導可得:

\[\begin{equation} \begin{cases} \frac{\partial{\mathcal{L}}}{\partial w} = -\sum y_i x_i \\ \frac{\partial{\mathcal{L}}}{\partial b} = -\sum y_i \end{cases} \end{equation} \]

因此當使用梯度下降演算法(GD)時,引數的更新可以由下面的式子表示:

\[\begin{equation} \begin{cases} w &=& w + \eta\sum y_ix_i \\ b &= &b + \eta\sum y_i \end{cases} \end{equation} \]

但在實際訓練中,通常不這麼做,為了減少時間開銷往往使用隨機梯度下降法(SGD),即隨機挑選一個樣本進行更新,形式如下:

\[\begin{equation} \begin{cases} w &=& w + \eta y_ix_i \\ b &= &b + \eta y_i \end{cases} \end{equation} \]

最後訓練過程簡要描述如下:
step1:構建分類模型 \(f(x) = \mathrm{sign}(w \cdot x + b)\)
step2:初始化\(w, b, \eta\)
step3:遍歷樣本,若\(\exists f(x_i) \neq y_i\), 使用SGD進行引數更新直至無錯誤分類樣本

對偶形式

初次學習感知機的對偶形式時,不明所以,糾結了很長時間。如今再次回看,感覺豁然開朗,下面是自己的理解。

從上面的更新式中不難發現,同一個樣本可能會更新多次。
比如,在第一次更新時\(N\)個樣本中共有\(M\)個分類錯誤的樣本\(\{x_1, x_2, \cdots x_M\}\), 那麼就可能選擇樣本\(x_i\)進行更新。
在第二更新時\(N\)個樣本經過第一輪的更新存在\(M'\)個錯誤樣本\(\{x_1, x_2, x_{M'}\}\),此時仍然有可能選擇到與上一輪相同的樣本進行更新。

這樣一來對於每個樣本\(x_i\),它可能在整個過程中被更新\(n_i\)次,那麼\(w\)每次更新的量就是\(\alpha_i y_i x_i\)\(b\)每次更新量為\(\alpha_i y_i\),其中\(\alpha_i = n_i\eta\)
那麼顯然整個更新過程可以一次就完成,即\(w, b\)可以可以表示為下式:

\[\begin{equation} \begin{cases} w = \sum_{i=1}^{N}\alpha_i y_i x_i \\ b = \sum_{i=1}^{N}\alpha_i y_i \end{cases} \end{equation} \]

所以模型的對偶形式可以表示為如下:
\begin{equation}
f(x) = \mathrm{sign}(\sum_{i=1}^{N}\alpha_i y_i x_i + \sum_{i=1}^{N}\alpha_i y_i)
\end{equation}

最後模型的訓練過程可由下面簡要表示:
step1:構建分類模型\(f(x)\)
step2:初始化\(\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_N), \eta, n\)
step3:遍歷樣本每個樣本\(x_i\),若為錯誤樣本則更新\(\alpha_i = \alpha_i + \eta\),直至沒有錯誤。

相關文章