这个发现激发了人们对神经系统的进一步思考。神经-中枢-大脑的工作过程,或许是一个不断迭代,不断抽象的过程。
两个关键字:迭代跟抽象;
从原始信号到低级抽象逐渐向高级抽象迭代。高层的特征是底层特征的组合,从底层到高层的特征表示约来越抽象,越来越能表现语义跟意图。
小结:任何事物都可以划分为粒度合适的浅层特征(粒度特征),这个浅层特征一般就是我们的第二层输入;
小结:结构向特征具有明显的层级概念,从较小粒度划分,再用划分的基本特征组成上层特征,依次类推,可以展现特征的结构性。
深度学习和传统的神经网络
相同之处:二者都是相似的分层结构,包括输入层、隐层和输出层的多层网络;
不同之处:传统的神经网络一般只有两层至三层的神经网络,参数和计算单元有限,对复杂函数的表示能力有限,学习能力也有限;深度学习具有五层至十层,甚至更多的神经网络,并且引入了更有效的算法。
人工神经网络
BP神经网络
有导师学习方式;误差逆传播算法;BP网络数学意义明确、步骤分明的学习,更使其有广泛的应用前景;
BP神经网络的创建
进行BP网络设计时,要对网络层数;每层中的神经元数;初始值以及学习速率这几方面考虑;
- 已经证明:三层的BP网络可以实现多维空间Rm到Rn的映射,既能够逼近任何有理函数;
- 具体设计时,比较实际的做法是隐含层取输入层的两倍,然后适当的加上一点余量;
- 初始值的选取对于学习是否达到局部最小、是否收敛以及训练时间长短有很大关系,一般去初始值在(-1,1)之间的随机数,也可取[-2.4/n,2.4/n]之间的随机数,n为输入特征的个数;
- 如同初始值选取一样,在一个神经网络的设计中,网络要经过几个不同的学习速率的训练,通过观察每一次训练后的误差平方和的下降速率来判断所选定的学习速率是否合适;对于每一个具体网络都存在一个适合的学习速率,为了减少寻找学习速率的训练次数,比较合适的方法就是采用变化的自适应学习速率,是网络的训练在不同的阶段自动设置不同的速率。
- 对训练过程有较大影响的是权系数的初值、学习速率;
一. 在MATLAB中运用神经网络时主要分为三步:设计、训练、测试;
设计包括:
设计每层神经元数目(输入层,隐含层,输出层)
设定转移函数σ:(每一层的神经元基本上都会用同一个转移函数)
设定训练方法:traingdx(梯度下降)、trainlm(Levenburg-Marquardt,一种结合了梯度下降法和牛顿法的方法)
其他可选部分:误差函数(默认MSE),训练过程作图,等等。
- MATLAB用newff()函数创建一个前馈反向传播网络,(较新的版本推荐使用feedforwardnet,newff,已经过时,新函数feedforwardnet似乎可以分割training set和testing set,实验中不想要这个功能,所以暂时还是使用习惯的newff,等有时间再熟悉新函数),我们用newff()构建BP网络,为了选择不同的调整BP网络的参数,只需要修改最后一个参数,如下表1所示,newff()的第一个参数代表训练集输入节点的特征维数范围,newff第二个变量,用来设定隐含层和输出层神经元的数目。第三个变量,设定转移函数:tansig(反正切),与默认的函数(sigmoidal)效果一样好。我们通常在输出层选择一个线性函数,所以我们选择(purelin);
- 调用MATLAB的train(bpnet,p,t),训练BP网络。
- 对待测样品调用MATLAB的sim函数,利用已经训练好的BP网络识别。Sim函数定义为:[t,x,y]=sim(net,timespan,options,ut);timespan表示循环次数,options表示可选条件,ut是输入向量,t表示网络输出向量结构,x表示仿真状态矩阵,y表示仿真输出矩阵;
BP网络学习训练过程主要由四部分组成:
- 输入模式顺传播
- 输出误差逆传播
- 循环记忆训练(模式顺传播与误差逆传播的计算过程反复交替循环进行)
- 学习结果判别(判定全局误差时候趋于极小值)
图2 三层BP网络学习分为正向传播输出与反向传播修正权值两个阶段
BP网络训练原理:
- 确定参数
确定输入向量X=[x1,x2,x3,x4·····,xn]T,(n输入层单元个数)
确定输出向量Y和希望输出向量O
Y=[y1,y2,y3····yq]T(q是输出层的单元数)
O=[o1,o2,o3,····oq]T
初始化输入层至隐含层的连接权值Wj=[wj1,wj2,wj3,···wjn]T,j=1,2,`````p;
初始化隐含层至输出层的连接权值;
- 输入模式顺传播
- 计算隐含层个神经元的激活值sj;
(j=1,2,3,4,5.........p)
其中wji为输入层至隐含层的连接权值;θj为隐含层单元的阈值;
激活函数采用S型函数,即
- 计算隐含层j单元的输出值,将上面的激活值代入激活函数中可得隐含层j单元的输出值为
阈值θj在学习过程中和权值一样也不断的修正;
同理,可求得输出端的激活值和输出值;
利用以上各式就可以计算出一个输入到输出的顺传播过程;
- 输出误差的逆传播过程
在上一个过程中我们得到了网络的实际输出值,当这些实际的输出值与希望的输出值之间有误差大于限定的数值是,就要对网络进行校正;
- 输出层的校正误差为
(k=1,2,3,4.....q)
其中yk为实际输出;ok为希望输出;
- 隐含层各单元的校正误差为
这里应当注意的是每一个中间单元的校正误差都是由q个输出层单元校正误差传递而产生的。当校正误差求得之后,则可利用dk和ej沿着逆方向座层调整输出层至隐含层,隐含层至输出层的权重;
- 输出层到隐含层连接权跟输出层阈值校正量为
其中bj为隐含层j单元的输出;dk为输出层的校正误差;α为学习系数,α>0
- 隐含层到输入层的校正量
其中ej为隐含层j单元的校正误差;β为学习系数,0<β<1;
这里可以看出调整量与学习系数成正比,通常学习系数为0.1到0.8,为使得整个学习过程加快,又不引起震荡,可采用变学习速率的方法,即在学习初期去的较大的学习系数,随着学习过程的进行逐渐减少其值;
- 循环记忆训练
- 学习结果判定
判别的目的主要是检查输出误差是否已经小到可以允许的地步。学习或者训练就是网络全局误差趋向极小值的过程,对于BP网络来说,存在俩个缺陷,一是收敛速度慢,二是存在局部极小点问题。导致这一缺陷的主要原因是采用了按误差函数梯度下降的方向进行校正。
所以BP网络的收敛依赖于学习模式的初始化位置,适当的更改BP网络的隐含层单元个数,或者给每一个连接权值加上一个很小的随机数,都哟可能使收敛过程避开局部极小值点。
学习速率是一个很重要的参数,它与负梯度的乘积决定了权值与阈值的调整量,学习速率越大,调整步伐越大。学习速率过大,算法就会变得很不稳定。如果学习速率很小,算法的收敛时间就会变得很大。训练停止的条件;
- 超过最大迭代次数epochs
- 表现函数值小于误差指标goal;
- 梯度值小于精度min_grad
- 训练所用时间超过时间限制time
- 最大失败次数超过次数限制max_fail