Java教程

感知机模型

本文主要是介绍感知机模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

感知机

基本形式

感知机是一种线性分类模型,同时也为判别模型。其形式如下:
\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\),直至没有错误。

这篇关于感知机模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!