今天小编给大家带来感知机算法的详解。感知机算法由Rosenblatt在1957年提出,是一类简单的线性判别算法,通过扩展又可以与许多其他算法密切相关。如逻辑回归模型、支持向量机、前馈神经网络(多层感知机)、线性判别分析等。因此感知机算法尽管很少单独使用,但它对于理解其他模型和算法非常有用,很适合作为开始机器学习的一个切入点,同时也是建立知识体系的一个枢纽。
本文首先简要介绍感知机,然后讲解感知机的模型、策略、算法,最后分析感知机算法与各个算法之间的联系并做出总结。
感知机是一种二分类模型,其输入为样本的特征向量,输出为样本的类别,取+1和-1二值。要得到正确的模型,感知机要求数据集本身线性可分:
在二维平面上,线性可分意味着能用一条直线将正、负样本分开;
在三维空间中,线性可分意味着能用一个平面将正、负样本分开;
在n维空间中,线性可分意味着能用n-1维超平面将正、负样本分开。
|
|
为找出正确的分离超平面、确定感知机模型参数,需要确定一个学习策略。在监督学习中,使用某种策略即是选用相应的损失函数。
考虑以在S划分下误分类点的总数作为损失函数,该函数可以自然地监督感知机的分类性能,但它不是参数 w w w和 b b b的连续可导函数,不易优化。如图4,当超平面在空间中由 S 1 S1 S1连续变化至 S 3 S3 S3时,相应的法向量 w w w也连续变化,而误分类点数量则是不连续的。
为此感知机采用的损失函数为:误分类点到超平面 S S S的总距离,该函数对 w w w和 b b b连续可导。
单个点 x i x_i xi到超平面 S S S的距离为 − 1 ∥ w ∥ ∣ w x i + b ∣ -\frac{1}{\Vert w \Vert}\vert wx_i+b \vert −∥w∥1∣wxi+b∣,
对于误分类点数据 ( x i , y i ) (x_i,y_i) (xi,yi),有 − y i ( w x i + b ) > 0 -y_i(wx_i+b)>0 −yi(wxi+b)>0,因为 y i y_i yi 与 w x i + b wx_i+b wxi+b 异号
设超平面 S S S的误分类集合为 M M M,则所有误分类点到超平面 S S S的总距离为 − 1 ∥ w ∥ ∑ x i ∈ M y i ( w x i + b ) -\frac{1}{\Vert w \Vert}\sum_{x_i\in M}y_i(wx_i+b) −∥w∥1xi∈M∑yi(wxi+b)
不考虑式中的 − 1 ∥ w ∥ -\frac{1}{\Vert w \Vert} −∥w∥1,即得到感知机学习的损失函数。
易知损失函数是非负的,误分类点越少,误分类点离超平面越近,损失函数值就越小。如果没有误分类点,则损失函数值时0.
感知机学习的策略是在假设空间中选取使损失函数取值最小的模型参数。
目标:感知机学习算法的原始形式是求解最优化问题 m i n w , b L ( w , b ) = − ∑ x i ∈ M y i ( w x i + b ) {min}_{w,b}L(w,b)=-\sum_{x_i\in M}y_i(wx_i+b) minw,bL(w,b)=−xi∈M∑yi(wxi+b)其中 M M M为误分类点的集合。
算法:误分类驱动的随机梯度下降法
首先选取初始超平面 w 0 , b 0 w_0,b_0 w0,b0,然后计算在该参数取值处的梯度,用梯度下降法不断的极小化目标函数。极小化过程中,不是一次使用 M M M中所有误分类点计算梯度,而是一次随机选取一个误分类点使其梯度下降。设误分类点集合 M M M是固定的,则损失函数的梯度为: ∇ w L ( w , b ) = − ∑ x i ∈ M y i x i \nabla_w L(w,b)=-\sum_{x_i\in M}y_ix_i ∇wL(w,b)=−xi∈M∑yixi ∇ b L ( w , b ) = − ∑ x i ∈ M y i \nabla_bL(w,b)=-\sum_{x_i\in M}y_i ∇bL(w,b)=−xi∈M∑yi由于采用随机梯度下降,一次随机选取一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi), w , b w,b w,b的更新公式为: w ← w + η y i x i w\leftarrow w+\eta y_ix_i w←w+ηyixi b ← b + η y i b\leftarrow b+\eta y_i b←b+ηyi式中 η ( 0 ≤ η ≤ 1 ) \eta(0\leq\eta\leq1) η(0≤η≤1)称为学习率。
整理称为算法形式如下:
每次根据 ( x i , y i ) (x_i,y_i) (xi,yi)调整 w , b w,b w,b时,分离超平面将向该误分类点移动,以减少该误分类点与超平面的距离,越过该误分类点使其正确分类。
感知机学习算法的收敛性有定理保证,这里不再详细阐述,有兴趣的读者可以查阅相关资料。
感知机学习算法的原始形式是每一步直接更新参数 w , b w,b w,b,经过n步达到收敛。对偶形式的基本想法是,将 w w w和 b b b表示为实例 x i x_i xi和标记 y i y_i yi的线性组合的形式,通过求解其系数而求得 w w w和 b b b.假设初值 w 0 , b 0 w_0,b_0 w0,b0均为0,对误分类点 ( x i , y i ) (x_i,y_i) (xi,yi)通过 w ← w + η y i x i w\leftarrow w+\eta y_ix_i w←w+ηyixi b ← b + η y i b\leftarrow b+\eta y_i b←b+ηyi逐步修改 w , b w,b w,b,设收敛过程中,第 i i i个点共修改了 n i n_i ni次,则 w , b w,b w,b关于 ( x i , y i ) (x_i,y_i) (xi,yi)的增量分别是 α i y i x i \alpha_i y_ix_i αiyixi 和 α i y i \alpha_iy_i αiyi,其中 α i = n i η \alpha_i=n_i\eta αi=niη.对N个样本点上 w , b w,b w,b的增量求和,有 w = ∑ i = 1 N α i y i x i w=\sum_{i=1}^N\alpha_iy_ix_i w=i=1∑Nαiyixi b = ∑ i = 1 N α i y i b=\sum_{i=1}^N\alpha_iy_i b=i=1∑Nαiyi从而感知机可以写成由系数 α i , b \alpha_i,b αi,b表示的形式
f ( x ) = s i g n ( ∑ j = 1 N α j y j x j ⋅ x + b ) f(x)=sign(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b) f(x)=sign(j=1∑Nαjyjxj⋅x+b),上述过程整理为算法2.
感知机模型简单、易学习,是基本的机器学习模型,很多机器学习模型是在感知机模型的基础上变化扩展而得到的。
感知机模型由于其简单,在应用时也有一定的局限,主要体现在以下几点。
为解决以上的局限性,其他算法从不同方向对感知机模型进行了扩展。
相同点
感知机与支持
向量机都是求解能正确划分样例的超平面
不同点
感知机是误分类驱动的,其损失函数来源于误分类点到分离超平面的距离之和。数据集线性可分时,能正确划分样例的超平面有无穷多个。
支持向量机不仅要求正确划分正负样例,还要求正负样例间隔最大,在最大间隔约束下,划分超平面(的法向量)有唯一解。
|
|
感知机优化目标:
m i n w , b L ( w , b ) = − ∑ x i ∈ M y i ( w x i + b ) {min}_{w,b}L(w,b)=-\sum_{x_i\in M}y_i(wx_i+b) minw,bL(w,b)=−xi∈M∑yi(wxi+b) 支持向量机优化目标: m a x w , b d {max}_{w,b} d maxw,bd
感知机与逻辑回归都是判别模型,都是对线性运算的结果进行判别,区别是采用了不同判别方式。
当把感知机看成单个神经元时,该神经元的堆叠就形成了神经网络。最常用的前馈神经网络就是感知机分层堆叠而形成的,也叫多层感知机MLP.感知机的激活函数是阶跃函数(符号函数):
f ( x ) = s i g n ( x ) = { 1 , x > 0 − 1 , x ≤ 0 f(x)=sign(x)=\begin{cases}1, x>0\\-1,x\leq0\end{cases} f(x)=sign(x)={1,x>0−1,x≤0
目前常用神经网络的激活函数是线性整流函数(ReLU):
f ( x ) = R e L U ( x ) = { x , x > 0 − 1 , x ≤ 0 f(x)=ReLU(x)=\begin{cases}x, x>0\\-1,x\leq0\end{cases} f(x)=ReLU(x)={x,x>0−1,x≤0
|
关于感知机算法的理论部分小编就介绍这么多,它的实现可以使用常用机器学习开源库sklearn中的模块MLPClassifier来完成。感兴趣的读者不妨去试试哦。