社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【火炉炼AI】深度学习001-神经网络的基本单元-感知器

炼丹老顽童 • 6 年前 • 496 次点击  
阅读 50

【火炉炼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著,陶俊杰,陈小莉译


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/5zdI4Ddtog
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/25877
 
496 次点击