机器学习:感知机模型

感知机

感知机 (perceptron) 是二类分类的线性分类模型, 其输入为实例的特征向量, 输出为实例的类别, 取 \(+1\)\(-1\) 二值. 感知机对应于输入空间 (特征空间) 中将实例划分为正负两类的分离超平面, 属于判别模型. 感知机学习旨在求出将训练数据进行线性划分的分离超平面, 为此导入基于误分类的损失函数, 利用梯度下降法对损失函数进行极小化, 求得感知机模型. 感知机学习算法具有简单而易于实现的优点, 分为原始形式和对偶形式. 感知机 1957 年由 Rosenblatt 提出, 是神经网络与支持向量机的基础.

感知机模型

假设输入空间 (特征空间) 是 \(\mathcal{X} = \mathbb{R}^n\), 输出空间是 \(\mathcal{Y} = \{+1, -1\}\), 由输入空间到输出空间的如下函数

\[f(\mathbf{x}) = \text{sign}(\mathbf{\omega}^T \mathbf{x}+b)) \]

称为感知机. 其中, \(\mathbf{\omega} \in \mathbb{R}^n\)\(b \in \mathbb{R}\) 分别为感知机的模型参数权值向量和偏置. 感知机模型属于线性分类模型, 属于判别模型.

感知机模型损失函数

假设训练数据集 \(T = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \cdots, (\mathbf{x}_N, y_N) \}\) 是线性可分的, 感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面 (seperating hyperplane). 感知模型损失函数的一个自然的选择是误分类点总数, 但这样的损失函数不是参数 \(\mathbf{\omega}\)\(b\) 的连续可导函数, 不易优化. 这里的损失函数选择为误分类点到超平面 \(S\) 的总距离. 可以计算得到输入空间 \(\mathbb{R}^n\) 中任一点 \(\mathbf{x}_0\) 到超平面 \(S\) 的距离是

\[\frac{1}{||\mathbf{\omega}||}|\mathbf{\omega}^T \mathbf{x}_0+b| \]

这里的 \(||\mathbf{\omega}||\)\(\mathbf{\omega}\)\(L_2\) 范数. 其次对于误分类的数据 \((\mathbf{x}_i, y_i)\) 来说,

\[-y_i (\mathbf{\omega}^T \mathbf{x}_i+b) > 0 \]

成立, 因此误分类点 \(\mathbf{x}_i\) 到超平面 \(S\) 的距离是 (注意这里的 \(y_i \in \{+1, -1\}\))

\[-\frac{1}{||\mathbf{\omega}||}y_i (\mathbf{\omega}^T \mathbf{x}_i+b) \]

因此假设超平面 \(S\) 的误分类点集合为 \(M\), 那么所有误分类点到超平面 \(S\) 的总距离为

\[-\sum_{\mathbf{x}_i \in M}\frac{1}{||\mathbf{\omega}||}y_i (\mathbf{\omega}^T \mathbf{x}_i+b) \]

分子分母都含有 \(\mathbf{\omega}\), 并且具有固定的倍数关系, 可以对权值向量进行规范化, 即 \(||\mathbf{\omega}||=1\), 此时感知机的损失函数定义为

\[L(\mathbf{\omega}, b) = -\sum_{\mathbf{x}_i \in M} y_i (\mathbf{\omega}^T \mathbf{x}_i+b) \]

显然损失函数 \(L(\mathbf{\omega}, b)\) 是非负的, 若没有误分类点则为 \(0\), 对于一个特定的样本点的损失函数, 在误分类时是参数 \(\mathbf{\omega}\)\(b\) 的线性函数, 在正确分类时为 \(0\). 因此给定训练集 \(T\), 损失函数 \(L(\mathbf{\omega}, b)\) 是参数 \(\mathbf{\omega}\)\(b\) 的连续可导函数.

感知机学习算法原始形式

给定一个训练数据集 \(T = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \cdots, (\mathbf{x}_N, y_N) \}\), 其中 \(\mathbf{x}_i \in \mathcal{X} = \mathbb{R}^n\), \(y_i \in \mathcal{Y} = \{+1, -1\}\), \(i=1,2,\cdots,N\), 感知机学习算法为

\[(\mathbf{\omega},b) = \arg\min_{\mathbf{\omega},b} L(\mathbf{\omega}, b) = \arg\min_{\mathbf{\omega},b} \left[-\sum_{\mathbf{x}_i \in M} y_i (\mathbf{\omega}^T \mathbf{x}_i+b)\right] \]

感知机学习算法是误分类驱动的, 具体采用随机梯度下降法 (stochastic gradient descent). 首先任意选取一个参数为 \((\mathbf{\omega}_0,b_0)\) 的超平面, 然后利用梯度下降法不断地极小化目标函数, 极小化过程不是一次使 \(M\) 中所有误分类点的梯度下降, 而是一次随机选取一个误分类点使其梯度下降. 这里损失函数的梯度由

\[\nabla_{\mathbf{\omega}} L(\mathbf{\omega}, b) = -\sum_{\mathbf{x}_i \in M} y_i \mathbf{x}_i \]

\[\nabla_{b} L(\mathbf{\omega}, b) = -\sum_{\mathbf{x}_i \in M} y_i \]

给出. 因此随机选择一个误分类点 \((\mathbf{x}_i, y_i)\), 对\((\mathbf{\omega},b)\) 进行更新为 \(\mathbf{\omega} \leftarrow \mathbf{\omega} + \eta y_i \mathbf{x}_i\)\(b \leftarrow b + \eta y_i\). 式中 \(\eta\) (\(0<\eta \leq 1\)) 是学习率. 这样通过迭代可使损失函数不断减小直到为 \(0\).

下面将感知机学习算法的原始形式总结如下,

输入: 训练数据集 \(T = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \cdots, (\mathbf{x}_N, y_N) \}\), 其中 \(\mathbf{x}_i \in \mathcal{X} = \mathbb{R}^n\), \(y_i \in \mathcal{Y} = \{+1, -1\}\), \(i=1,2,\cdots,N\), 学习率 \(\eta\) (\(0<\eta \leq 1\)).

输出: 感知机模型 \(f(\mathbf{x}) = \text{sign}(\mathbf{\omega}^T \mathbf{x}+b))\).

  1. 选取初始参数为 \((\mathbf{\omega}_0,b_0)\).

  2. 在训练集中随机选择数据 \((\mathbf{x}_i, y_i)\).

  3. 如果 \(y_i \left(\mathbf{\omega} \mathbf{x}_i +b \right) \leq 0\), 更新

    \[\mathbf{\omega} \leftarrow \mathbf{\omega} + \eta y_i \mathbf{x}_i \]

    \[b \leftarrow b + \eta y_i \]

  4. 转至第 2 步, 直至训练集中没有误分类点.

感知机学习算法对偶形式

对偶形式的基本想法是, 将 \(\mathbf{\omega}\)\(b\) 表示为实例 \(\mathbf{x}_i\) 和标记 \(y_i\) 的线性组合的形式, 通过求解其系数而求得 \(\mathbf{\omega}\)\(b\). 不失一般性, 可以假设初始参数 \(\mathbf{\omega}_0\)\(b_0\) 均为 \(0\). 对误分类点 \((\mathbf{x}_i, y_i)\) 通过 \(\mathbf{\omega} \leftarrow \mathbf{\omega} + \eta y_i \mathbf{x}_i\)\(b \leftarrow b + \eta y_i\) 逐步更新, 假设更新 \(n\) 次, 则 \(\mathbf{\omega}\), \(b\) 的增量分别为 \(\alpha_i y_i \mathbf{x}_i\)\(\alpha_i y_i\), 这里 \(\alpha = n_i \eta\), \(n_i\) 是第 \(i\) 个实例点因为误分类而进行更新的次数. 这样最后学习到的 \(\mathbf{\omega}\), \(b\) 可以分别表示为

\[\mathbf{\omega} = \sum^N_{i=1} \alpha_i y_i \mathbf{x}_i \]

\[b = \sum^N_{i=1} \alpha_i y_i \]

实例点更新次数越多, 意味着它离分离超平面越近, 也就越难正确的分类, 这样的实例对学习结果影响最大.

感知机学习算法对偶形式在每一轮迭代判断误分类条件时, 用 \(y_i \left(\sum^N_{j=1} \alpha_j y_j \mathbf{x}_j \cdot \mathbf{x}_i +b \right) \leq 0\) 代替 \(y_i \left(\mathbf{\omega} \mathbf{x}_i +b \right) \leq 0\) 判断误分类. 注意到对偶形式中训练实例仅以内积的形式出现, 为了方便可以预先将训练集中实例间的内积计算出来并以矩阵的形式储存, 即 Gram 矩阵:

\[G = [\mathbf{x}_i \cdot \mathbf{x}_j]_{N \times N} \]

下面将感知机学习算法的原始形式总结如下,

输入: 训练数据集 \(T = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \cdots, (\mathbf{x}_N, y_N) \}\), 其中 \(\mathbf{x}_i \in \mathcal{X} = \mathbb{R}^n\), \(y_i \in \mathcal{Y} = \{+1, -1\}\), \(i=1,2,\cdots,N\), 学习率 \(\eta\) (\(0<\eta \leq 1\)).

输出: 感知机模型 \(f(\mathbf{x} = \text{sign}\left(\sum^N_{j=1} \alpha_j y_j \mathbf{x}_j \cdot \mathbf{x}_i +b\right)\).

  1. 选取初始参数为 \((\mathbf{\omega}_0,b_0)\).

  2. 在训练集中随机选择数据 \((\mathbf{x}_i, y_i)\).

  3. 如果 \(y_i \left(\sum^N_{j=1} \alpha_j y_j \mathbf{x}_j \cdot \mathbf{x}_i +b \right) \leq 0\), 更新

    \[\alpha_i \leftarrow \alpha_i + \eta \]

    \[b \leftarrow b + \eta y_i \]

  4. 转至第 2 步, 直至训练集中没有误分类点.

感知机不能表示异或

感知机是线性模型, 并且只能处理线性可分问题, 例如下图中与, 或, 非问题都存在一个超平面直接将他们分开, 但异或模型却不能.

perceptron_xor1
线性可分的与或非问题, 以及线性不可分的异或问题.

如下图中使用两层感知机就能解决异或问题.

perceptron_xor2
能解决异或问题的两层感知机
posted @ 2020-12-07 21:56  肥嘟嘟左衛門  阅读(443)  评论(0)    收藏  举报