前面的总结
单层感知器,线性神经网络,BP网络与径向基网络都属于前向神经网络。在这种网络中,各层神经元节点接收前一层输入的数据,经过处理输出到下一层,数据正向流动,没有反馈连接。前向网络的输出仅由当前的输入和网络经过多次训练后得到的最终的权值决定的。
反馈神经网络
典型的反馈神经网络有:Hopfield网络,Elman网络,CG网络模型,盒中脑(BSB)模型和双向联想记忆(BAM)等。在这个阶段我学习的是前两个模型。
Hopfield网络
Hopfield网络分为离散型和连续型两种模式,DHNN 和CHNN。 最初提出的Hopfield网络是离散网络,输出是只能取0和1。分别表示是神经元的抑制和兴奋状态。
xi为输入神经元,没有实际功能,即无函数计算。
yi为输出神经元,其功能是使用阙值函数对计算结果进行二值化。即前面在单层感知器使用过的函数。
bi为中间层,输入层和中间层之间的存在连接权值为Wij,中间层的神经元之间若有连接,则有连接权值为Wii。
b为偏置。
于是有t时刻时:
输出y的值(t+1)时刻时:
网络的稳定性
Hopfield网络按神经动力学的方式运行,工作过程为状态的演化过程,对于给定的初始状态,按“能量”减少的方式演化,最终达到稳定状态。
对于反馈神经网络来说,稳定性是至关重要的性质,但是反馈网络不一定都能收敛。网络从初态Y(0)开始,经过有限次递归之后,如果状态不再发生变化,即y(t+1)=y(t),则称该网络是稳定的。
对于不稳定系统往往是从发散到无穷远的系统,对于离散网络来说,由于输出只能取二值化的值,因此不会出现无穷大的情况,此时,网络出现有限幅度的自持振荡,在有限个状态中反复循环,称为有限环网络。在有限环网络中,系统在不确定的几个状态中循环往复。系统也不可能收敛于一个确定的状态,而是在无限多个状态之间变化,但是轨迹并不发散到无穷远,这种现象称为混沌。
稳定的数学定义:
然后系统的行为用关于状态的微分方程来描述:
对于一个稳定状态的系统来说就是:
平衡态记为:
这里需要使用一个极限的思想:
若对任意的正数σ,存在T>0,当t>T时,有
可以用这个去理解稳定的数学含义。
而且如果Hopfiled网络是稳定的,则称一个或若干个稳定的状态为网络的吸收子,能够最终演化为该吸收子演化的初始状态的集合,称为该吸收子的吸收域。
这里就存在一个演化过程:
设计网络
Hopfield网络可以用于联想记忆,因此又称联想记忆网络,于人脑的联想记忆功能类似。分为两个阶段:
①记忆阶段:
在记忆阶段中,外界输入数据,是系统自动调整网络的权值,最终用合适的权值使系统具有若干个的稳定状态,即吸收子。其吸收域半径定义为吸收子所能吸收的状态的最大距离。吸收域半径越大,说明联想能力越强。联想记忆网络的记忆容量定义为吸收子的数量。
②联想阶段:
网络中神经元的个数与输入向量长度相同。初始化完成后,根据下式反复迭代,直到神经元的状态不再发生变化为止,此时输出的吸引子就是对应于输入u进行联想的返回结果。
t时刻的输出等于(t+1)的输入。
学习算法:
外积法
伪逆法
暂时还不能很好的理解,上述都是关于离散Hopfield网络的定义,关于连续网络,它更多是使用电子硬件来实现的,我暂时学习的是计算机控制
Elman神经网络
前辈牛人们根据语音处理问题提出了Elman神经网络。基本的Elman神经网络由输入层,隐含层,连接层和输出层组成。与BP网络相比,在结构上多了一个连接层,用于构成局部反馈。连接层的传递函数为线性函数,但是函数组成中存在延迟单元,因此连接层可以记忆过去的状态,并在下一时刻与网络的输入一起作为隐含层的输入,使得网络具有动态记忆的功能 。
我主要就学习上述提到的定义
相关工具箱函数的学习
神经网络工具箱
net=hewhop(T);生成一个离散的Hopfield网络输入参数是一个RxQ矩阵,包含Q个长度为R的向量。
A=satlin(N) 饱和线性传递函数satlin函数是神经网络的传输函数,函数只有一个输入函数N,是一个SXQ矩阵,包含Q个长度为s的向量。
A=satlin(N) 对称饱和线性传递函数
net=newlm(P,T,[S1....SN],[TF1....TFN],BTF,BLF,PF)P:输入向量T;目标向量si:隐含层神经元的个数TFi:传递函数BTF:反向传播网络的训练函数BLF:反向传播权值/阙值学习函数PF:性能函数
这些都是属于工具箱函数,我们看看就行。
实例
在二维平面上定义两个平衡点:[1,-1]与[-1,1]。使所有的输入向量经过迭代最后都收敛到这两个点。
c1=[-1,1]; %设置2个吸引子c2=[1,-1];w11=1/2*(c1(1)*c1(1)+c2(1)*c2(1)); %外积法计算权值w12=1/2*(c1(1)*c1(2)+c2(1)*c2(2));w21=1/2*(c1(2)*c1(1)+c2(2)*c2(1));w22=1/2*(c1(2)*c1(2)+c2(2)*c2(2));w=[0 w12;w21 0 ]; %权值矩阵主对角线元素为0 这里的话暂时不考虑阙值bb=[0 0];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%先调整第一个隐含层神经元的状态,按照串行运行规则用y1与权值矩阵的第一列相乘y1=[-1,1]; %初始输入y21=y1*w(:,1)+b(1); %更新第一个神经元,用t时刻的输入乘上权值矩阵中,得到第一神经元的输出为y21,即改变t时刻输入的一个元素y22=[y21,y1(2)]*w(:,2)+b(2); %更新第二个神经元,用t+1时刻的输入乘上权值矩阵中,得到第二神经元的输出为y22,即改变t+1时刻输入的二个元素y2=[y21,y22] %最终结果,那么此时建立的系统就记住两个平衡点。%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%下面输入随机数据,观察系统能否收敛到平衡点。y0=rand(1,2)*2-1; %随机生成两个数y0(y0>=0)=1; %二值化这两个数,然后也是按照上面的步骤。y11=y0*w(:,1)+b(1); %更新第一个神经元,用t时刻的输入乘上权值矩阵中,得到第一神经元的输出为y11,即改变t时刻输入的一个元素y12=[y11,y0(2)]*w(:,2)+b(2); %更新第二个神经元,用t+1时刻的输入乘上权值矩阵中,得到第二神经元的输出为y12,即改变t+1时刻输入的二个元素y1=[y11,y12] %最终结果,可见达到平衡点[-1,1]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%再用一组y3=[-1,-1];y31=y3*w(:,1)+b(1); %更新第一个神经元,用t时刻的输入乘上权值矩阵中,得到第一神经元的输出为y31,即改变t时刻输入的一个元素y32=[y31,y3(2)]*w(:,2)+b(2); %更新第二个神经元,用t+1时刻的输入乘上权值矩阵中,得到第二神经元的输出为y32,即改变t+1时刻输入的二个元素y3=[y31,y32] %最终结果,可见达到平衡点[1,-1]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
以上的过程就是先设定吸引子,然后利用权值学习算法计算权值矩阵,然后选择演化方法是串行还是并行。
这是关于反馈神经网络的初认识。