【火炉炼AI】深度学习001-神经网络的基本单元-感知器
【火炉炼AI】深度学习001-神经网络的基本单元-感知器
(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
在人工智能领域,深度学习已经脱颖而出,越来越成为大型复杂问题的首选解决方案。深度学习相对传统机器学习的区别主要在于,使用模拟人类大脑的神经网络来构建模型。早期的浅层次神经网络也可以认为是机器学习领域的一个分支,但是目前,由于神经网络的层次不断加深,参数越来越复杂,能够的解决实际问题越来越多,研究神经网络,特别是深度神经网络的文章越来越多,故而深度学习被划分到一个单独的分支中。
1. 感知器简介
为了更好的理解神经网络,我们首先来看看神经网络的基本组成单元-神经元,神经元是生物学的术语,在计算机领域,我们称之为感知器。
感知器是一种早期的神经网络模型,由美国学者F.Rosenblatt于1957年提出.感知器中第一次引入了学习的概念,使人脑所具备的学习功能在基于符号处理的数学到了一定程度模拟,所以引起了广泛的关注。
感知器的结构:
1,输入:一个感知器有一个或多个输入,用于接收特征数值。
1,权重:每个输入都有一个权重,表示该输入对结果的影响力。
2,偏置:虽然权重能够表示该输入对结果的影响力,但为了更好的拟合结果,有时还需要对输入进行左右移动,即平行地增大或减小,故而有了偏置。
3,输出:经过计算后会给出一个或多个输出。
通俗一点来理解,感知器就像一个复杂一点的函数y=f(u,v),其中的u,v就是输入的特征数值,f表示权重和偏置的组合方式,也就是计算过程,y为输出。所以可以用下列公式来表示感知器。
其中的x表示输入,w为权重,sita为偏置,f则为激活函数,v为输出。所以,完全可以将感知器理解成一个复杂一点的函数。
2. 感知器的训练
如果我们要用一条直线拟合一系列数据,假设该直线的方程为y=a*x+b,那么,我们要做的就是计算出最合适的a和b即可。同理,由于感知器的函数中有两个未知变量(权重和偏置),故而,我们要做的就是计算出最合适的权重和偏置,这一计算过程就是感知器的训练。
感知器的训练是基于感知器规则的,感知器规则认为,如果样本输入函数是线性可分的,那么感知器学习算法经过有限次迭代之后,便可以收敛得到正确的权值和偏置,也就是说,不管开始时权重和偏置是多少,经过N次迭代后,总能得到唯一的确定的权重和唯一的确定的偏置。这也就是为什么我们在初始时设置权重和偏置为随机数或0的原因。
感知器的训练过程可以简单概括为:在训练时,每次从训练数据中取出一个样本的输入向量,使用感知器计算其输出,再根据感知器规则来调整权重。每处理一个样本就调整一次权重。经过多轮迭代后(即全部的训练数据被反复处理多轮),就可以训练出感知器的权重,使之实现目标函数。
关于感知器的数学推导和基本理论,可以参考博文:感知器(Perception)
那么,从代码上如何训练感知器了?运行下列代码之前,请先通过pip install neurolab来安装neurolab模块。
首先准备数据集,并将数据集的分布情况显示出来,这部分代码太简单,可以直接看代码。
# 建立感知器模型
import neurolab as nl
perceptron = nl.net.newp([[dataset_X[:,0].min(),dataset_X[:,0].max()], # 指定特征1的最小和最大值
[dataset_X[:,1].min(),dataset_X[:,1].max()]], # 特征2的min和max
1) # 只有1个感知器
# 为了适合于train,需要将dataset_y处理成二维
dataset_y=dataset_y[:,np.newaxis]
cost=perceptron.train(dataset_X,dataset_y,epochs=50,show=10,lr=0.01)
# 训练该单个感知器,50个回合,每10个回合显示一下训练结果,学习速率为0.01
# 显示下训练过程中cost的变化趋势
plt.plot(cost)
plt.xlabel('Number of epochs')
plt.ylabel('Training cost')
plt.grid()
plt.title('Training cost progress')
########################小**********结###############################
1,感知器方面主要是理解其基本的含义和理论知识,因为感知器是神经网络的基本组成单元。
2,感知器的训练在以后的深度学习中用处不大,一般成熟的深度学习框架都已经整合了这部分内容,此处仅仅用于演示。
#################################################################
注:本部分代码已经全部上传到(我的github)上,欢迎下载。
参考资料:
1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译