本文是这几天学习人工神经网络入门知识的总结。
我们从下面四点认识人工神经网络(ANN: Artificial Neutral Network):神经元结构、神经元的激活函数、神经网络拓扑结构、神经网络选择权值和学习算法。
1. 神经元:
我们先来看一组对比图就能了解是怎样从生物神经元建模为人工神经元。
下面分别讲述:
生物神经元的组成包括细胞体、树突、轴突、突触。树突可以看作输入端,接收从其他细胞传递过来的电信号;轴突可以看作输出端,传递电荷给其他细胞;突触可以看作I/O接口,连接神经元,单个神经元可以和上千个神经元连接。细胞体内有膜电位,从外界传递过来的电流使膜电位发生变化,并且不断累加,当膜电位升高到超过一个阈值时,神经元被激活,产生一个脉冲,传递到下一个神经元。
为了更形象理解神经元传递信号过程,把一个神经元比作一个水桶。水桶下侧连着多根水管(树突),水管既可以把桶里的水排出去(抑制性),又可以将其他水桶的水输进来(兴奋性),水管的粗细不同,对桶中水的影响程度不同(权重),水管对水桶水位(膜电位)的改变就是水桶内水位的改变,当桶中水达到一定高度时,就能通过另一条管道(轴突)排出去。
神经元是多输入单输出的信息处理单元,具有空间整合性和阈值性,输入分为兴奋性输入和抑制性输入。
按照这个原理,科学家提出了M-P模型(取自两个提出者的姓名首字母),M-P模型是对生物神经元的建模,作为人工神经网络中的一个神经元。
M-P模型由MP模型的示意图,我们可以看到与生物神经元的相似之处,x_i表示多个输入,W_ij表示每个输入的权值,其正负模拟了生物神经元中突出的兴奋和抑制;sigma表示将全部输入信号进行累加整合,f为激活函数,O为输出。下图可以看到生物神经元和MP模型的类比:
往后诞生的各种神经元模型都是由MP模型演变过来。
2. 激活函数
激活函数可以看作滤波器,接收外界各种各样的信号,通过调整函数,输出期望值。ANN通常采用三类激活函数:阈值函数、分段函数、双极性连续函数(sigmoid,tanh):
3. 学习算法
神经网络的学习也称为训练,通过神经网络所在环境的刺激作用调整神经网络的自由参数(如连接权值),使神经网络以一种新的方式对外部环境做出反应的一个过程。每个神经网络都有一个激活函数y=f(x),训练过程就是通过给定的海量x数据和y数据,拟合出激活函数f。学习过程分为有导师学习和无导师学习,有导师学习是给定期望输出,通过对权值的调整使实际输出逼近期望输出;无导师学习给定表示方法质量的测量尺度,根据该尺度来优化参数。常见的有Hebb学习、纠错学习、基于记忆学习、随机学习、竞争学习。
- Hebb学习:
(贴公式不方便,只简述原理)这是最早提出的学习方法,原理是如果突触(连接)两边的两个神经元被同时(同步)激活,则该突触的能量(权重)就选择性增加;如果被异步激活,则该突出能量减弱或消除。 - 纠错学习:
计算实际输出和期望输出的误差,再返回误差,修改权值。原理简单,用到最多,最小梯度下降法(LMS最小均方误差算法)就是这种方法。 - 基于记忆的学习:
主要用于模式分类,在基于记忆的学习中,过去的学习结果被存储在一个大的存储器中,当输入一个新的测试向量时,学习过程就是把新向量归到已存储的某个类中。算法包括两部分:一是用于定义测试向量局部领域的标准;二是在局部领域训练样本的学习规则。常用最近邻规则。 - 随机学习算法:
也叫Bolzmann学习规则,根据最大似然规则,通过调整权值,最小化似然函数或其对数。
模拟退火算法是从物理和化学退火过程类推过来,是“对物体加温后再冷却的处理过程”的数学建模。整个过程分为两步:首先在高温下进行搜索,此时各状态出现概率相差不大,可以很快进入“热平衡状态”,这时进行的是“粗搜索”,也就是大致找到系统的低能区区域;随着温度降低,各状态出现的概率差距逐渐被扩大,搜索精度不断提高,这就可以越来越准确地找到网络能量函数的全局最小点。 - 竞争学习:
神经网络的输出神经元之间相互竞争,在任一时间只能有一个输出神经元是活性的。
4. 神经网络拓扑结构
常见的拓扑结构有单层前向网络、多层前向网络、反馈网络,随机神经网络、竞争神经网络。
5. 神经网络的发展
-
单层感知器:
1958年提出,与MP模型不同处在于权值可变,这样就可以进行学习。它包含一个线性累加器和二值阈值元件(激活函数是阈值函数),还包括外部偏差b。单层感知器被设计用来对输入进行二分类,当感知器输出+1时,输入为一类;当输出为-1时,输入为另一类。之后还有应用LMS算法的单层感知器。 单层感知器的缺陷是只能对线性问题分类。如下图,左边能用一根线分开,但右边却不能。 该缺陷来自激活函数。改进思路就是修改激活函数(把分类线变成曲线,如椭圆线)、增加神经网络层数(让两条直线或多条直线来分类)。主流做法是增加层数,于是有了多层感知器。 -
多层感知器:
在输入层和输出层之间增加隐含层(因为不能在训练样本中观察到它们的值,所以叫隐含层)。
多层感知器多层感知器分类能力如下:
随着隐层层数的增多,凸域将可以形成任意的形状,因此可以解决任何复杂的分类问题。Kolmogorov理论指出:双隐层感知器就足以解决任何复杂的分类问题。但层数的增多带来隐含层的权值训练问题,对于各隐层的节点来说,它们并不存在期望输出,所以也无法通过感知器的学习规则来训练多层感知器。1966年,Minisky和Papert在他们的《感知器》一书中提出了上述的感知器的研究瓶颈,指出理论上还不能证明将感知器模型扩展到多层网络是有意义的。人工神经网络进入低谷期。直到出现误差反向传播算法(BP:ErrorBack Propagation),解决了多层感知器的学习问题。 -
BP神经网络:
BP神经网络存在两条信号线,工作信号正向传播,误差信号反向传播。反向传播过程中,逐层修改连接权值。BP算法可以看作LMS算法的累加版,因为对于输出层的单个神经元,其学习算法为LMS算法。 BP网络结构
(不能贴公式不好解释啊 -_-!)sigma是误差信号,yita是学习率,net是输入之和,V是输入层到隐含层的权重矩阵,W是隐含层到输出层的权重矩阵。
之后还有几种
-
径向基网络(RBF:Radial Basis Function):
RBF神经网络属于多层前向神经网络,它是一种三层前向网络。输入层由信号源节点组成;第二层为隐含层,隐单元个数由所描述的问题而定,隐单元的变换函数是对中心点径向对称且衰减的非负非线性函数;第三层为输出层。其基本思想是:用径向基函数作为隐单元的“基”,构成隐含层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分问题在高维空间内线性可分。RBF网络分为正规化网络和广义网络。区别在于隐含层的个数。基函数一般选用格林函数。
左边为正规化网络,右边为广义网络
RBF要学习的算法有三个:基函数的中心、基函数的方差、权值。学习中心要用到聚类算法,常用K-均值聚类算法。确定中心后,可以用数学公式求出方差。学习权值可以用LMS算法。
RBF网络与BP网络比较:RBF能够逼近任意非线性函数。BP网络是对非线性映射的全局逼近,而RBF网络使用局部指数衰减的非线性函数进行局部逼近。要达到相同的精度,RBF网络所需要的参数比BP网络要少得多。
-
支持向量机(SVM:Support Vector Machine):
之前的BP神经网络存在的几个问题:
1、BP算法是用梯度法导出的,因此优化过程可能陷入局部极值。
2、BP算法的目标函数是经验风险,它只能保证分类误差对于有限个样本是极小,无法保证对所有可能的点达到极小。
3、神经网络结构的设计(如隐节点数目的选择)依赖设计者的先验知识,缺乏一种有理论依据的严格设计程序。
于是有了支持向量机:
支持向量机拓扑结构 -
其他:
还有Hopfield神经网络、随机神经网络Boltzmann机、Hamming竞争神经网络等。
随着计算机硬件计算能力越来越强,用来训练的数据越来越多,神经网络变得越来越复杂。在人工智能领域常听到DNN(深度神经网络)、CNN(卷积神经网络)、RNN(递归神经网络)。其中,DNN是总称,指层数非常多的网络,通常有二十几层,具体可以是CNN或RNN等网络结构。
参考资料:
- 《神经网络》教材
- 漫谈ANN:http://hahack.com/reading/ann2/
- BP神经网络的数学原理及其算法实现
http://blog.csdn.net/zhongkejingwang/article/details/44514073 - 神经网络:
http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C - 反向传播算法:
http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95
网友评论