什么是感知机
-
是一种人工神经网络
感知机可以通过数学统计学方法完成对函数的估计或近似,能在外界信息的基础上改变内部结构,是一种自适应系统,通俗的讲就是具备学习功能。
-
是一种最简单形式的前馈神经网络
感知机模型的参数从输入层向输出层单向传播,整个网络中无反馈。感知机是最简单形式是因为只包含一层传播。
-
是一种二元线性分类器
感知机的输出结果只有+1 和–1二值,所以说感知机是一个二元分类器;
在二维空间中,感知机的模型就是一条直线,将平面中的正负样本点分离成两份,在三维中,感知机的模型就是一个平面,将空间中的正负样本点分离成两份,放到更高维的空间中,感知机的模型就是一个超平面;
这也就是说,如果在二维空间中,不存在直线刚好将正负样本点分离成两份,在三维空间中,不存在平面将空间中的正负样本点分离成两份,那么你的数据就无法使用感知机模型;
感知机的使用前提是数据本身线性可分。
感知机模型
假设我们有n个样本,每个样本包含m维输入特征和一个二元类别输出,如下所示:
(x1(1),x1(2),x1(3),…,x1(m),y1),(x2(1),x2(2),x2(3),…,x2(m),y2),….(xn(1),xn(2),xn(3),…,xn(m),yn)(x^{(1)}_{1}, x^{(2)}_{1}, x^{(3)}_{1}, …, x^{(m)}_{1}, y_{1}), (x^{(1)}_{2}, x^{(2)}_{2}, x^{(3)}_{2}, …, x^{(m)}_{2}, y_{2}),….(x^{(1)}_{n}, x^{(2)}_{n}, x^{(3)}_{n}, …, x^{(m)}_{n}, y_{n})(x1(1),x1(2),x1(3),…,x1(m),y1),(x2(1),x2(2),x2(3),…,x2(m),y2),….(xn(1),xn(2),xn(3),…,xn(m),yn)
其中,(x1(1),x1(2),x1(3),…,x1(m),y1)(x^{(1)}_{1}, x^{(2)}_{1}, x^{(3)}_{1}, …, x^{(m)}_{1}, y_{1})(x1(1),x1(2),x1(3),…,x1(m),y1) 代表一个样本,x1(1)x^{(1)}_{1}x1(1)表示样本的一个输入特征,其下标表示这是第几个样本,上标表示这是这个样本的第几个输入特征;y1y_1y1 表示样本的输出,其下标表示这是第几个样本;
我们的目的是找到这样一个超平面,即:
θ0+θ1x(1)+θ2x(2)+…+θmx(m)=0\theta_{0}+\theta_{1}x^{(1)}+\theta_{2}x^{(2)}+…+\theta_{m}x^{(m)}=0θ0+θ1x(1)+θ2x(2)+…+θmx(m)=0
其满足对于所以有的正样本:θ0+θ1x(1)+θ2x(2)+…+θmx(m)>0\theta_{0}+\theta_{1}x^{(1)}+\theta_{2}x^{(2)}+…+\theta_{m}x^{(m)}>0θ0+θ1x(1)+θ2x(2)+…+θmx(m)>0 ,对于所有的负样本:$ \theta_{0}+\theta_{1}x{(1)}+\theta_{2}x{(2)}+…+\theta_{m}x^{(m)}<0$ ;从而得到线性可分。如果数据线性可分,这样的超平面一般都不是唯一的,也就是说感知机模型可以有多个解。
简化超平面:将 θ1x(1)+θ2x(2)+…+θmx(m)\theta_{1}x^{(1)}+\theta_{2}x^{(2)}+…+\theta_{m}x^{(m)}θ1x(1)+θ2x(2)+…+θmx(m) 记为向量 (θ1,θ2,θ3,…,θm)(\theta_{1}, \theta_{2}, \theta_{3}, …, \theta_{m})(θ1,θ2,θ3,…,θm) 与输入特征向量 (x(1),x(2),x(3),…,x(m))(x^{(1)}, x^{(2)}, x^{(3)}, …, x^{(m)})(x(1),x(2),x(3),…,x(m)) 的内积,可得超平面为:
θ0+(θ1,θ2,θ3,…,θm)⋅(x(1),x(2),x(3),…,x(m))=0\theta_{0}+(\theta_{1}, \theta_{2}, \theta_{3}, …, \theta_{m}) \cdot (x^{(1)}, x^{(2)}, x^{(3)}, …, x^{(m)})=0θ0+(θ1,θ2,θ3,…,θm)⋅(x(1),x(2),x(3),…,x(m))=0
将 θ0\theta_{0}θ0 记为 b (偏置 bias),将 (θ1,θ2,θ3,…,θm)(\theta_{1}, \theta_{2}, \theta_{3}, …, \theta_{m})(θ1,θ2,θ3,…,θm) 记做 w (权值 weight),可得超平面为:
w⋅x+b=0w \cdot x + b = 0w⋅x+b=0
所以,我们将感知机模型定义为:
f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x+b)f(x)=sign(w⋅x+b)
其中:
sign(x)={+1x≥0−1x<0sign(x)=\begin{cases} +1 & x \geq 0 \\-1 & x<0\end{cases}sign(x)={+1−1x≥0x<0
感知机损失函数
我们知道了感知机模型,我们还需要评价感知机模型的方法,也就是损失函数。我们将所有误分类点到超平面的总距离作为感知机模型的损失函数。
首先我们知道空间 RRR 中任一点 xxx 到平面 SSS 的距离是:
1∣∣w∣∣∣w⋅x+b∣\frac{1}{||w||} |w \cdot x + b|∣∣w∣∣1∣w⋅x+b∣
其中:∣∣w∣∣||w||∣∣w∣∣ 是 www 的L2L_2L2 范数 (L2L_2L2 范数是指向量各元素的平方和然后求平方根)。
接下来,我们假设所有误分类点的集合为 MMM ,因为当w⋅x+b>0w\cdot x+b>0w⋅x+b>0时,=y=−1=y=-1=y=−1,而当w⋅x+b<0w \cdot x+b<0w⋅x+b<0时,=y=+1=y=+1=y=+1 。所以对于误分类点来说其到平面 SSS 的距离可写作:
−1∣∣w∣∣y(w⋅x+b)-\frac{1}{||w||} y(w \cdot x + b)−∣∣w∣∣1y(w⋅x+b)
那么所有误分类点 MMM 到超平面 SSS 的总距离为:
−1∣∣w∣∣∑x∈My(w⋅x+b)-\frac{1}{||w||} \sum_{x \in M}{y(w \cdot x + b)}−∣∣w∣∣1x∈M∑y(w⋅x+b)
不考虑−1∣∣w∣∣-\frac{1}{||w||}−∣∣w∣∣1 ,我们就得到了感知机学习的损失函数。
L(w,b)=−∑x∈My(w⋅x+b)L(w,b)=-\sum_{x \in M}{y(w \cdot x + b)}L(w,b)=−x∈M∑y(w⋅x+b)
感知机学习算法
我们知道了评价感知机模型的方法,也就是损失函数。那么我们对于模型的优化也就是求解损失函数的极小化。
求解w,bw, bw,b , 使其为以下损失函数极小化问题的解:
minw,bL(w,b)=−∑x∈My(w⋅x+b)min_{w,b}L(w,b)=-\sum_{x \in M}{y(w \cdot x + b)}minw,bL(w,b)=−x∈M∑y(w⋅x+b)
我们采用随机梯度下降法求解损失函数极小化问题。极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
我们知道对于误分类集合M固定时,那么损失函数L(w,b)的梯度为:
∇wL(w,b)=−∑x∈Myx\nabla_{w}L(w,b)=-\sum_{x\in M}yx ∇wL(w,b)=−x∈M∑yx
∇bL(w,b)=−∑x∈My\nabla_{b}L(w,b)=-\sum_{x\in M}y ∇bL(w,b)=−x∈M∑y
我们每次随机选取一个误分类点 (xi,yi)(x_{i}, y_{i})(xi,yi) 对w,bw, bw,b 进行更新,那么对w,bw, bw,b 的更新为:
w←w+ηyixiw\leftarrow w+\eta y_{i}x_{i}w←w+ηyixi
b←b+ηyib \leftarrow b+\eta y_{i}b←b+ηyi
其中η(0<η≤1)\eta (0 < \eta \leq 1)η(0<η≤1) 是步长,在机器学习中又称为学习率(learning rate)。
具体的训练步骤如下:
(1) 任意选取平面S0S_{0}S0 ,使用 (w0,b0)(w_{0}, b_{0})(w0,b0) 表示平面 S0S_{0}S0 ;
(2) 在误分类点集MMM 中选取一个误分类点 (xi,yi)(x_{i}, y_{i})(xi,yi) ;
(3) 对(w,b)(w, b )(w,b) 进行一次梯度下降,即:
w←w+ηyixiw\leftarrow w +\eta y_{i}x_{i}w←w+ηyixi
b←b+ηyib \leftarrow b +\eta y_{i}b←b+ηyi
(4) 使用新平面 SSS 判断是否任有误分类点,如有跳转至第二步,如无即完成模型训练;
这种学习算法易于理解,可直观解释为:当存在样本点被误分类时,就调整分离超平面的位置也就是(w,b)(w,b)(w,b),使分离超平面超误分类点的一侧移动,以减少该误分类点与分离超平面间的距离,直至分离超平面越过该误分类点使其被正确分类。
此学习算法为感知机学习的基本算法,对应于后面将提到的对偶形式,称为感知机学习算法的原始形式。
感知机学习算法的对偶形式
感知机学习算法的对偶形式相较与原始形式来说,要难理解一些。但是如果你已经完全理解原始形式,那么对偶形式也很好理解;如果你对于原始形式还不是很理解,我建议完全消化了原始形式再来看对偶形式。
从某种角度来说,可以认为对偶形式是原始形式数学层面的优化,其存在的意义在于优化感知机学习算法的学习效率。
其实也不尽然,对偶形式不仅仅是数学层面的优化,其基本思路是能够解释得通的,而且这个思路在其它机器学习算法中是可以沿用的。本节将尽可能解释其基本思路。
首先,在原始算法中我们使用 (w,b)(w, b)(w,b) 来表示最终的分离超平面 SSS ,通过分析原始形式的迭代过程,也就是:
w←w+ηyixiw\leftarrow w+\eta y_{i}x_{i}w←w+ηyixi
b←b+ηyib \leftarrow b+\eta y_{i}b←b+ηyi
我们知道,每次对于 www 的更新是在原 www 的基础上加上了某一个误分类点的输入特征、输出特征与学习率 η\etaη 的乘积,每次对于 bbb 的更新是在原 bbb 的基础上加上了某一个误分类点的输出特征与学习率 η\etaη 的乘积,(w,b)(w, b)(w,b) 每次迭代的增量分别是 ηyixi\eta y_{i}x_{i}ηyixi、ηyi\eta y_{i}ηyi 。
那么我们可以认为,(w,b)(w, b)(w,b) 最终由初始 (w0,b0)(w_{0}, b_{0})(w0,b0) 加上增量总和组成, (w,b)(w, b)(w,b) 的增量总和可以使用 $ \sum_{i=1}{N}a_{i}y_{i}x_{i}$、$\sum_{i=1}{N}a_{i}y_{i}$ 来分别表示,这里的 a=(a1,a2,a3,…,an)T=(n1η,n2η,n3η,…,nnη)Ta = {(a_{1}, a_{2}, a_{3},… ,a_{n})}^T = {(n_{1}\eta, n_{2}\eta, n_{3}\eta,… ,n_{n}\eta)}^Ta=(a1,a2,a3,…,an)T=(n1η,n2η,n3η,…,nnη)T ,nin_{i}ni 为迭代过程中样本集中第 iii 个样本共被选中几次进行梯度下降.
综上所诉,可以用以下公式来表示(w,b)(w, b)(w,b) :
w=w0+∑i=1Naiyixiw = w_{0} + \sum_{i=1}^{N}a_{i}y_{i}x_{i}w=w0+i=1∑Naiyixi
b=b0+∑i=1Naiyib = b_{0} + \sum_{i=1}^{N}a_{i}y_{i}b=b0+i=1∑Naiyi
因为, (w0,b0)(w_{0}, b_{0})(w0,b0) 为随机选定的初始分离超平面,可令初始值 w0,b0w_{0},b_{0}w0,b0 均为0,那么(w,b)(w, b)(w,b) 为:
w=∑i=1Naiyixiw = \sum_{i=1}^{N}a_{i}y_{i}x_{i}w=i=1∑Naiyixi
b=∑i=1Naiyib = \sum_{i=1}^{N}a_{i}y_{i}b=i=1∑Naiyi
那么,感知机模型 f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x+b)f(x)=sign(w⋅x+b) 被重新定义为:
f(x)=sign(∑i=1Naiyixi⋅x+b)f(x) = sign( \sum_{i=1}^{N}a_{i}y_{i}x_{i} \cdot x+b)f(x)=sign(i=1∑Naiyixi⋅x+b)
我们求解的值由 (w,b)(w, b)(w,b) 变更为 (a,b)(a, b)(a,b) 。
具体的训练步骤如下:
(1) 令 (a,b)(a, b)(a,b) 均为0;
(2) 在误分类点集MMM 中选取一个误分类点 (xi,yi)(x_{i}, y_{i})(xi,yi) ;
(3) 对(a,b)(a, b )(a,b) 进行一次更新,即:
ai←ai+ηa_{i}\leftarrow a_{i}+\etaai←ai+η
b←b+ηyib \leftarrow b+\eta y_{i}b←b+ηyi
(4) 使用新平面S1S_{1}S1 判断是否任有误分类点,如有跳转至第二步,如无即完成模型训练;
那么,为什么说对偶形式相对于原始形式计算速度更快呢??
这是因为,在原始形式中,每次迭代 (w,b)(w, b)(w,b) ,我们要计算 nnn(样本数量)次 w⋅xw \cdot xw⋅x ,这里的计算量非常大;而在对偶形式中,观察模型函数可以看到,我们涉及到的内积计算是 xi⋅xx_{i} \cdot xxi⋅x ,我们可以事先计算出训练集中样本之间的内积并以矩阵的形式存储,这个矩阵就是所谓的 Gram 矩阵:
G=[xi⋅xj]N×NG = [x_{i} \cdot x_{j}]_{N \times N}G=[xi⋅xj]N×N
那么每次迭代过程中都不再涉及内积计算了,直接从 Gram 矩阵获取。这就是为什么说对偶形式相对于原始形式计算速度更快的原因。
总结
感知机算法是一个简单易懂的机器学习算法,但是麻雀虽小五脏俱全,其所涉及到的学习方法、损失函数求解以及优化方法是机器学习的核心思想。也是支持向量机、神经网络等算法的基石。虽说现在的实用价值不高了,但是对感知机算法的融会贯通会让你更容易理解在此基础上发展的更为复杂的其它算法。