感知器(Perceptron)
感知器的概念
感知器是人工神经网络中的一种典型结构,它的主要的特点是结构简单,对所能解决的问题存在着收敛算法,并能从数学上严格证明,从而对神经网络研究起了重要的推动作用。
它可以被视为一种最简单形式的前馈式人工神经网络,是一种二元线性分类器。
那么什么是二元线性分类器呢?
首先要先理解什么是线性分类器——在机器学习领域,分类的目标是指将具有相似特征的对象聚集。而一个线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。对象的特征通常被描述为特征值,而在向量中则描述为特征向量。
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc5OS82NWQ5MmYxYmNmZDcyZmJiYThkOThiODliZjAwYzRiNy5wbmc=)
对于一个二元分类问题——可以设想成是将一个线性分类利用超平面划分高维空间的情况:在超平面一侧的所有点都被分类成“是”,另一侧则分成“否”。
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzcyNC8wY2U5OGVhYjVkZTQwNDgyZjAxZjIwNzVjZWYxN2FhYy5wbmc=)
感知器的作用
感知器是二类分类的线性分类模型,它的思想很简单,在一个二维空间中,就是寻找一条直线将红点和蓝点分开(图3),类比到高维空间中,感知器尝试寻找一个超平面,将所有二元类别分开(图4)。
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY4NC82ZWMyODQwNDYwNWExODUzNWZjNTFmYzBlM2M0Y2Y0Yy5wbmc=)
图3 二维空间
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkwNC9kN2RjOGMwY2NhMjRmMDU0NzUxN2UwY2I0NTEwNWFkMC5wbmc=)
图4 三维空间
注意:无论是在二维空间中寻找线、三维空间中寻找平面还是高维空间中寻找超平面,这里所说的空间是指特征空间。
如果我们找不到一条直线的话怎么办?找不到的话那就以为着类别线性不可分(图5),也就意味着感知器模型不适合该类的数据的分类。使用感知器一个最大的前提,就是数据需要是线性可分的。
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUwLzM3NzFmM2FiZDE2ODYxOWM0Y2Q0Mjc5NjdiNWNjMjkyLnBuZw==)
图5 不可分数据
感知器的模型
![[Deep Learning] 感知器(perceptron) [Deep Learning] 感知器(perceptron)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY5MS8yZGU3OGU3MjY3MmMxMzJlZmUzOTY0MTliMTgyMTMyMy5wbmc=)
如果我们有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
例如:将一个新的样本xn+1=(x1n+1,x2n+1,...,xm−1n+1,xmn+1)代入训练好的模型ω⋅x+b,当ω⋅xn+1+b>0时,xn+1被分为1类,当ω⋅xn+1+b≤0时,xn+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)
以上感知器规则是由梯度下降法得来的,对于撸代码来说,知道这套规则就可以了,如果想知道具体的数学推导过程,可以自行了解一下,我也会在之后的文章中写关于梯度下降相关的内容。
若有错误,欢迎大家留言指正!谢谢!