神经网络入门 第一部分
来源:互联网 发布:软件介绍ppt 编辑:程序博客网 时间:2024/05/03 08:29
【原文:http://blog.sina.com.cn/s/blog_6a67b5c50100tspb.html】
英文原文链接:http://www.codeproject.com/KB/recipes/NeuralNetwork_1.aspx
作者:Sacha Barber
翻译:本站(http://hi.baidu.com/ebfok)原创
说明:翻译力求保持原貌,删去了一些无关紧要的内容;水平有限,错误难免;转载请注明出处。
-------------------------------------------------------------------------------------
说明
本文是我发表的三篇文章之一。内容如下:
- 第一部分:介绍感知器(单层神经网络)
- 第二部分:介绍多层神经网络,使用反向传播训练方法来解决一个非线性分类问题,即XOR逻辑门问题。这类问题是不能用感知器解决的
- 第三部分:介绍使用遗传算法来训练一个多层神经网络,解决某些逻辑问题
从一些生物知识说起
大脑中的神经细胞被称为神经元。人类大脑中大约含有10^10至10^13个神经元。每个神经元都能与其他几千个神经元联系起来。神经元是大脑用来处理信息的基本单元。
神经元是什么样子
神经元由细胞体以及从细胞体中延伸出来的各种扩展物组成。其中大部分呈枝状被称为树突。有一根特别长的叫做轴突。图中的虚线处就是轴突小丘,也就是信号传输开始的地方。如下图所示
图一 神经元
细胞的外部是细胞膜。膜的内部和外部之间存在电势差(膜电位)。
如果输入足够大,就会产生一个动作电位。接着,这个动作电位(神经冲动)沿着轴突离开细胞体。
图二 神经冲动
突触
两个神经元相互联接的部位称为突触。信息总是经由轴突(见图一)离开一个神经元,然后越过突触到达接收神经元。
神经元激活
神经元只有在输入大于某一阈值时才会激活。It should, however, be noted that firing doesn't get bigger as the stimulus increases, its an all or nothing arrangement.
图三 神经元激活
神经元通过脉冲信号来通信。发送的信息是以来编码的。
神经元的输入
突触分为兴奋性的和抑制性的。
到达兴奋性突触的脉冲信号往往激活接收神经元。到达抑制性突触的脉冲信号则往往抑制接收神经元。
细胞体和突触计算(通过一个复杂的化学/电过程)接收的的兴奋性输入和抑制性输入(时空总和)之间的差值。
当这一差值足够大(相对于该神经元的阈值)时,神经元就激活了。
粗略地说,兴奋性脉冲越快到达突触,神经元就激活得越快(抑制性脉冲相类似)。
什么是人工神经网络
假设每个神经元都有一个激活率。也假设一个神经元与其他m个神经元联接起来,所以接受m个输入"x1 …. … xm",如下图所示:
图四 人工神经元的结构
该结构实际上被称为感知器。感知器(由Rosenblatt [1962]发明)是最早的人工神经网络模型。感知器对单个神经元建模,如果输入的加权和大于某个可调整的阈值就输出1(否则输出0,此即上文提到的生物脉冲)。
图四中,输入信号(x1,x2,x3..xm)和联接权值(w1,w2,w3..wm)通常是实数值,可正可负。若xi趋向于使感知器激活,则权值wi为正值,反之为负值。
感知器本身由权值,加法器,激活函数以及可调阈值(以下称 偏置)组成。
通常为了方便起见,将偏置也作为一个输入信号,如下图所示
图五 将偏置作为附加输入的人工神经元结构
偏置可以被看作是感知器的与其输入无关的激活倾向。图五所示的感知器将被激活,如果加权和>0
激活函数
通常采用以下激活函数。
Sigmoid函数(S函数)
输入越强,神经元激活得越快(激活率越高)。Sigmoid函数在多层网络中同样十分有用,因为S曲线是可微分的(这在多层网络的反向传播训练中是必要的)。
阶跃函数
是一个开关函数, 若 0 > x 则 0, 若 x >= 0 则 1
学习
在开始讨论感知器的学习前先来考虑一个实际生活中的例子:
你是怎么教小孩识别椅子的?你给他看实物,告诉他,“这是椅子,那不是椅子”,直到他学会了椅子的概念。在这一阶段,当被问及“那东西是椅子吗?”,小孩能给出正确的答案。
只要给让孩子接触足够多的正的反的例子训练,那么当他看到一个以前从未见过的新东西时就能正确的识别了。
这就是感知器背后的思想。
感知器学习
感知器的学习就是修改权值和偏置的过程。感知器计算其输入的二值函数。
“感知器是一种能学习概念的程序,即,通过重复地‘学习’提交的例子,它就能对我们提呈的例子做出响应,1或者0。
感知器是是单层神经网络,其权值和偏置能被训练,当输入一个向量,就能得到一个相应的正确的目标向量。用来训练的技术称为感知器学习规则。感知器工作在随机分布的联接之上,具有泛化能力,特别适用于简单的模式分类问题”——英国Warwick大学,科学计算中心,Jianfeng feng教授。
学习规则
训练感知器,对每一个输入向量做出响应,输出0或1.当解存在时,该学习规则被证明是能在有限时间内收敛到某个解的。
b = b + [ T - A ]
W(i) = W(i) + [ T - A ] * P(i)
式中, W 是权值向量, P输入向量, T是期望输出, A 是实际输出, b是偏置.
训练
训练集中的向量是一个接一个的提交到感知器的.
若感知器的输出是正确的则不做改变.
否则,权值和偏置按上面的学习规则进行更新。当每个epoch(所有输入向量的一次完整遍历称为一个epoch)都没有误差,训练就结束。
此时,对训练集中的每个向量,感知器都能得到正确的输出向量。如果输入一个不在训练集中的向量P,感知器将输出这样一个向量,该向量与训练集中类似P的那个向量的输出向量相似,即表现出一定的泛化能力。
神经网络能做什么
单层神经网络
单层神经网络(感知器网络)的输出单元是相互独立的-每个权值仅影响一个输出。感知器网络能用来解决线性分类问题。函数如下图所示(假设网络有2个输入一个输出)
这等价于 AND / OR 逻辑门, 如下图所示。
图六 分类问题
这就是一个关于感知器能做什么的简单例子,但是若把几个感知器连起来会怎么样呢?那样就能得到一些十分复杂的功能。最基本的,能建造一个电路的等价物。
然而感知器确实有许多限制。如果向量不是线性可分的,学习将不会收敛,即不能合适地分类向量。感知器不能解决线性不可分的最著名的例子是XOR问题。
多层神经网络
使用多层神经网络就能解决类似上面的XOR问题的线性不可分问题。后面将会提到使用反向传播算法解决XOR问题。
转载:http://hi.baidu.com/ebfok/blog/item/730cbbdee2f1ae5394ee3787- 神经网络入门 第一部分
- 神经网络入门 第二部分
- 第一部分:Hibernate入门
- 第一部分:Hibernate入门
- 第一部分 Hibernate入门
- 第一部分:Hibernate入门
- 循环神经网络教程-第一部分 RNN介绍
- 循环神经网络教程第一部分-RNN简介
- WMI 脚本入门:第一部分
- WMI 脚本入门:第一部分
- WMI 脚本入门:第一部分
- WMI 脚本入门:第一部分
- WMI 脚本入门:第一部分
- 量子计算入门-第一部分
- AI入门第一脚 BP神经网络
- 十一行Python代码实现一个神经网络(第一部分)
- 十一行Python代码实现一个神经网络(第一部分)
- 神经网络第一部分:背景Neural Networks, Part 1: Background
- new高级用法
- 周赛2-CodeForces 445B-E 题
- 游标使用
- UI08_UItableView(关于cell滑动条消失,隐藏cell线,解决cell的线不对应问题)
- 第十章层次查询
- 神经网络入门 第一部分
- Struts2 入门教程
- Java网络编程概览
- 心得分享:关于对Android的理解,知识点梳理
- JAVA中三种URL连接方法
- JVM内存管理
- Task schedule
- 使用NDCG评估关键词推荐系统的相关性
- 神经网络入门 第二部分