感知器(Perceptron)
感知器的概念
感知器是人工神经网络中的一种典型结构,它的主要的特点是结构简单,对所能解决的问题存在着收敛算法,并能从数学上严格证明,从而对神经网络研究起了重要的推动作用。
它可以被视为一种最简单形式的前馈式人工神经网络,是一种二元线性分类器。
那么什么是二元线性分类器呢?
首先要先理解什么是线性分类器——在机器学习领域,分类的目标是指将具有相似特征的对象聚集。而一个线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。对象的特征通常被描述为特征值,而在向量中则描述为特征向量。
对于一个二元分类问题——可以设想成是将一个线性分类利用超平面划分高维空间的情况:在超平面一侧的所有点都被分类成“是”,另一侧则分成“否”。
感知器的作用
感知器是二类分类的线性分类模型,它的思想很简单,在一个二维空间中,就是寻找一条直线将红点和蓝点分开(图3),类比到高维空间中,感知器尝试寻找一个超平面,将所有二元类别分开(图4)。
图3 二维空间
图4 三维空间
注意:无论是在二维空间中寻找线、三维空间中寻找平面还是高维空间中寻找超平面,这里所说的空间是指特征空间。
如果我们找不到一条直线的话怎么办?找不到的话那就意味着类别线性不可分(图5),也就意味着感知器模型不适合该类数据的分类。使用感知器一个最大的前提,就是数据需要是线性可分的。
图5 不可分数据
感知器的模型
如果我们有n个样本,每个样本有m维空间和一个二元输出类别:
((x11,x21,...,xm−11,xm1,y1),(x12,x22,...,xm−12,xm2,y2),...,(x1n,x2n,...,xm−1n,xmn,yn)
感知器的目标是找到一个超平面:
ω1x1+ω2x2+...+ωmxm+b=0
让其中一个类别的样本满足
ω1x1+ω2x2+...+ωmxm+b>0,而另一类样本满足
ω1x1+ω2x2+...+ωmxm+b<0,从而实现样本线性可分。但这样的超平面不是唯一的,感知器模型采取不同的初始值
(ω0
,b0)解可能会不同。
我们用向量方式对上式进行表达:
ω
⋅x
+b=0,由此感知器模型可以定义为:
y=f(ω
⋅x
+b)
注意:感知器的激活函数可以有很多选择,这里我们选择阶跃函数
f来作为激活函数:
f(z)={1 z>00 otherwise
例如:将一个新的样本
x
n+1=(x1n+1,x2n+1,...,xm−1n+1,xmn+1)代入训练好的模型
ω
⋅x
+b,当
ω
⋅x
n+1+b>0时,
x
n+1被分为1类,当
ω
⋅x
n+1+b≤0时,
x
n+1被分为0类。
感知器的训练过程
找到一个合适函数的过程就是感知器的训练过程,对下面具体的公式来说,就是找到一组合适的权重和偏置项,使得样本的输出与预期的结果接近,最好是完全一样。
一般情况下,需要对加权求和做一个偏置运算,这样训练感知器的时候,更加方便。感知器本质是一个线性函数,线性函数就是一条直线(不是准确说法,只是方便大家理解,二维空间下是直线,三维空间下是平面,高维空间下是超平面),所谓训练感知器就是调整直线,调整直线就是调整直线的斜率和截距。其中最后一项,作为加权求和的偏置项。
y=factivity(ω1x1+ω2x2+...+ωmxm+b)
感知器训练过程如下:
- 随机初始化一组权重
ω
和偏置
b
- 每次从训练数据中取出一个样本的输入向量
x
,使用感知器模型计算其输出
y^
- 根据计算输出
y^,与样本实际值y,通过下面的感知器规则计算
ω
的调整值
Δω以及b的调整值
Δb
- 根据上一步计算出来的调整值
Δω和
Δb,调整
ω
和b
- 继续第二步,经过多轮迭代(即全部的训练数据被反复处理多轮),就可以训练出感知器的权重和偏置
ωi←ωi+Δωi
b←b+Δb
其中:
Δωi=η(y^−y)xi
Δb=η(y^−y)
ωi是与输入
xi对应的权重项,b是偏置项。y是训练样本的实际值,一般称为label。而
y^是感知器的输出值。
η是一个称为学习速率的常数,其作用是控制每一步调整权的幅度。
以上感知器规则是由梯度下降法得来的,对于撸代码来说,知道这套规则就可以了,如果想知道具体的数学推导过程,可以自行了解一下,我也会在之后的文章中写关于梯度下降相关的内容。
若有错误,欢迎大家留言指正!谢谢!