精华内容
下载资源
问答
  • 前馈神经网络 & 反馈神经网络
    千次阅读
    2020-07-22 22:52:17

    前馈神经网络(feedforward neural network,FNN)

    我们学的基本都是前馈神经网络

    前馈神经网络也叫做多层感知机,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈

    个人理解就是我们普通的全连接网络

    反馈神经网络

    与前馈神经网络对应的是反馈神经网络

    反馈神经网络是一种反馈动力学系统。在这种网络中,每个神经元同时将自身的输出信号作为输入信号反馈给其他神经元,它需要工作一段时间才能达到稳定

    Hopfield网络(HNN)、波尔兹曼机均属于这种类型

    更多相关内容
  • 反馈神经网络

    2019-03-18 10:20:23
    这是一种非常好的优化算法,可以完整运行,请放心下载。
  • 前馈神经网络的结构一般包含输入层输出层及隐含层隐含层可以是一层或多层各神经元只接收前一层的输出作为自己的输入并且将其输出给下一层整个网络中没有反馈每一个神经元都可以有任意多个输入但只允许有一个输出图1...
  • 反馈神经网络是一种反馈动力学系统。在这种网络中,每个神经元同时将自身的输出信号作为输入信号反馈给其他神经元,它需要工作一段时间才能达到稳定。Hopfield神经网络是反馈网络中最简单且应用广泛的模型,它具有...
  • 反馈神经网络ppt

    2017-08-26 16:00:48
    介绍了几种常见的反馈神经网络
  • 资源名:反馈神经网络_神经网络原理与实例_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有...
  • 反馈神经网络的动态行为研究 人工神经网络 动态行为 混沌
  • 资源名:MATLAB神经网络原理与实例精解_matlab_反馈神经网络 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群...
  • 神经网络第5讲 反馈神经网络-Hopfield网络.doc
  • 关于径向基函数神经网络、两个典型的反馈神经网络Hopfield网络、Elman网络的简单示例,适合初学者掌握径向基函数网络和反馈网络的神经网络工具箱函数,为全面学习这两类网络打下基础。
  • 反馈神经网络算法

    万次阅读 多人点赞 2019-01-17 17:23:37
    在具体的误差反馈和权重更新的处理上,不论是全连接层的更新还是卷积层的更新,使用的都是经典的反馈神经网络算法,这种方法较原本较为复杂的、要考虑长期的链式法则转化为只需要考虑前后节点输入和输出误差对权重的...

    典型的卷积神经网络,开始阶段都是卷积层以及池化层的相互交替使用,之后采用全连接层将卷积和池化后的结果特征全部提取进行概率计算处理。
    在具体的误差反馈和权重更新的处理上,不论是全连接层的更新还是卷积层的更新,使用的都是经典的反馈神经网络算法,这种方法较原本较为复杂的、要考虑长期的链式法则转化为只需要考虑前后节点输入和输出误差对权重的影响,使得当神经网络深度加大时能够利用计算机计算,以及卷积核在计算过程中产生非常多的数据计算。

    反馈神经网络正向与反向传播公式推导

    经典反馈神经网络主要包括3个部分,数据的前向计算、误差的反向传播以及权值的更新。如下图所示。
    在这里插入图片描述
      可以看到每个层l(假设是卷积或者池化层的一种)都会接一个下采样层l+1。对于反馈神经网络来说,要想求得层l的每个神经元对应的权值更新,就需要先求层l的每一个神经元点的灵敏度。简单来说,总体有以下几个权重以及数值需要在传递的过程中进行计算,即:
      1.输入层-卷积层
      2.卷积层-池化层
      3.池化层-全连接层
      4.全连接层-输出层
      这是正向的计算,而当权值更新时,需要对其进行反向更新,即:
      1.输出层-全连接层
      2.全连接层-池化层
      3.池化层-卷积层
      4.卷积层-输出层

    1.前向传播算法
      对于前向传播的值传递,隐藏层输出值定义如下:
             a h H 1 a^{H1}_h ahH1= W h H 1 W^{H1}_h WhH1× X i X_i Xi
             b h H 1 b^{H1}_h bhH1 = f ( a h H 1 ) f(a^{H1}_h) f(ahH1)
      其中 X i X_i Xi是当前输入节点的值, W h H 1 W^{H1}_h WhH1是连接到此节点的权重, a h H 1 a^{H1}_h ahH1是输出值。f是当前阶段的激活函数, b h H 1 b^{H1}_h bhH1是当前节点的输入值经过计算后被激活的值。
      对于输出层,定义如下:
             a k a_k ak = ∑ W h k × b h H 1 \displaystyle\sum_{}^{} W_{hk}×b^{H1}_h Whk×bhH1
      其中, W h k W_{hk} Whk为输入的权重, b h H 1 b^{H1}_h bhH1为输入到输出节点的输入值。对所有输入值进行权重计算后求得和值,将其作为神经网络的最后输出值 a k a_k ak

    2.反向传播算法
      与前向传播类似,首先定义两个值 δ k δ_k δk δ h H 1 δ^{H1}_h δhH1:
             δ k δ_k δk = ∂ L ∂ a k \frac{∂L}{∂a_k} akL = (Y - T)
             δ h H 1 δ^{H1}_h δhH1 = ∂ L ∂ a h H 1 \frac{∂L}{∂a^{H1}_h} ahH1L
      其中, δ k δ_k δk为输出层的误差项,其计算值为真实值与模型计算值的差值。Y是计算值,T是输出真实值。 δ h H 1 δ^{H1}_h δhH1为输出层的误差。
      神经网络反馈算法,就是逐层地将最终的误差进行分解,即每一层只与下一层打交道(如下图所示)。因此,可以假设每一层均为输出层的前一个层级,通过计算前一个层级与输出层的误差得到权重的更新。
    在这里插入图片描述
       因此反馈神经网络计算公式定义如下:
       δ h H 1 δ^{H1}_h δhH1 = ∂ L ∂ a h H 1 \frac{∂L}{∂a^{H1}_h} ahH1L
          = ∂ L ∂ b h H 1 \frac{∂L}{∂b^{H1}_h} bhH1L × ∂ b h H 1 ∂ a h H 1 \frac{∂b^{H1}_h}{∂a^{H1}_h} ahH1bhH1
          = ∂ L ∂ b h H 1 \frac{∂L}{∂b^{H1}_h} bhH1L × f’( a h H 1 a^{H1}_h ahH1)
          = ∂ L ∂ a k \frac{∂L}{∂a_k} akL × ∂ a k ∂ b h H 1 \frac{∂a_k}{∂b^{H1}_h} bhH1ak × f’( a h H 1 a^{H1}_h ahH1)
          = δ k δ_k δk × ∑ W h k \displaystyle\sum_{}^{} W_{hk} Whk × f’( a h H 1 a^{H1}_h ahH1)
          = ∑ W h k \displaystyle\sum_{}^{} W_{hk} Whk × δ k δ_k δk × f’( a h H 1 a^{H1}_h ahH1)
       即当前层输出值对误差的梯度可以通过下一层的误差与权重和输出值的梯度乘积获得。在公式 ∑ W h k \displaystyle\sum_{}^{} W_{hk} Whk × δ k δ_k δk × f’( a h H 1 a^{H1}_h ahH1)中, δ k δ_k δk若为输出层,即可以通过 δ k δ_k δk = ∂ L ∂ a k \frac{∂L}{∂a_k} akL = (Y - T)求得;而 δ k δ_k δk为非输出层时,可以使用逐层反馈方式求得 δ k δ_k δk的值。
       换一种形式将上面的公式表示为:
        δ l δ^{l} δl = ∑ W i j l \displaystyle\sum_{}^{} W^l_{ij} Wijl × δ j l + 1 δ^{l+1}_j δjl+1 × f’( a i j a^{j}_i aij)
      通过更为泛化的公式把当前层的输出对输入的梯度计算转化成求下一个层级的梯度计算值。

    3.权重的更新
      反馈神经网络计算的目的是对权重进行更新。与梯度下降法类似,其更新可以仿照梯度下降对权值的更新公式:
       θ = θ - α(f(θ) - y i y_i yi) x i x_i xi
       即:
       W j i W_{ji} Wji= W j i W_{ji} Wji + α× δ j l δ^{l}_j δjl× x j i x_{ji} xji
       b j i b_{ji} bji= b j i b_{ji} bji + α× δ j l δ^{l}_j δjl
       其中ji表示为反向传播时对应的节点系数,通过对 δ j l δ^{l}_j δjl的计算来更新对应的权重值。

    展开全文
  • 将Mercer的核思想与自联想反馈神经网络的理论相结合,提出了核化的自联想反馈神经网络KARN,它是对多值自联想反馈神经网络MREM的有效扩展.实验结果证明,相对于自联想反馈神经网络,核化的自联想反馈神经网络的主要优势...
  • 反馈神经网络.wmv

    2019-07-26 20:47:57
    基于MATLAB实现的反馈神经网络,该视频详细的展现了使用MATLAB的实现过程
  • 本文介绍了反馈神经网络,包括Hopfield网络,离散Hopfield网络(DHNN),连续Hopfield网络(CHNN),双向联想记忆网络(BAM),玻尔兹曼机(BM),受限玻尔兹曼机(RBM)。其中对于BAM、BM、RBM只是对其进行了简单的...

    本文介绍了反馈神经网络,包括Hopfield网络,离散Hopfield网络(DHNN),连续Hopfield网络(CHNN),双向联想记忆网络(BAM),玻尔兹曼机(BM),受限玻尔兹曼机(RBM)。其中对于BAM、BM、RBM只是对其进行了简单的介绍,并没有详细地推导算法。本文的目的旨在了解这些算法,先知道这些网络的改进和应用场景,当有业务需求的时候,再详细研究。


    系列文章:

    1. 【神经网络算法详解 01】-- 人工神经网络基础
    2. 【神经网络算法详解 02】 – 感知神经网络与反向传播算法(BP)
    3. 【神经网络算法详解 03】 – 竞争神经网络【SONN、SOFM、LVQ、CPN、ART】
    4. 【神经网络算法详解 04】 – 反馈神经网络 【Hopfield、DHNN、CHNN、BAM、BM、RBM】
    5. 【神经网络算法详解 05】-- 其它类型的神经网络简介【RBF NN、DNN、CNN、LSTM、RNN、AE、DBN、GAN】


    1. 反馈神经网络

    1.1 知识回顾:前馈神经网络

    前馈神经网络(FeedForwardNN):是一种最简单的神经网络,采用单向多层结构各神经元分层排列,每个神经元只与前一层的神经元相连。接收前一层的输出并输出给下一层各层间没有反馈。

    前馈网络包括三类节点·

    • 输入节点(lnputNodes):外界信息输入,不进行任何计篇,仅向下一层节点传递信息
    • 的藏节点(HiddenNodes):接收上一层节点的输入,进行计算,并将信息传到下一层节点
    • 输出节点(OutputNodes):接收上一层节点的输入,进行计算,并将结果输出
      在这里插入图片描述
      输入层和输出层须有,隐藏层可以没有,即为单层感知器藏层也可以不止一层,有藏层的前馈网络即多层感知器。

    1.2 反馈与前馈神经网络的区别

    反馈神经网络(FeedBackNN):又称递归网络、回归网络,是一种将输出经过一步时移再接入到输入层的神经网络系统。这类网络中,神经元可以互连,有些神经元的输出会被反馈至同层甚至前层的神经元。常见的有Hopfield神经网络、Elman神经网络、Boltzmann机等。

    前馈神经网络和反馈神经网络的主要区别:

    • 前馈神经网络各层神经元之间无连接,神经元只接受上层传来的数据,处理后传入下一层,数据正向流动;反馈神经网络层间神经元有连接,数据可以在同层间流动或反馈至前层。
    • 前馈神经网络不考虑输出与输入在时间上的滞后效应只表达输出与输入的映射关系;反馈神经网络考虑输出与输入之间在时间上的延迟,需要动态方程来描述系统的模型。
    • 前馈神经网络的学习主要采用误差修止法(如BP算法),计算过程一般比较慢,收敛速度也比较慢;反馈神经网络主要采用Hebb学习规则,一般情况下计算的收敛速度很快。
    • 相比前馈神经网络,反馈神经网络更适合应用在联想记忆和优化计算等领域。

    在这里插入图片描述


    2. Hopfield 网

    在这里插入图片描述

    John J. Hopfield

    HopfieId网】是一种单层对称全反馈网络,1982年由加州理工学院的物理学家上J. J.HopfieId 提出,因此被称作HopfieId网。他在该反馈网络中引入了“能量函数”,即认为该网络为一种基于能量的的模型(Energy Based Model,EBM)。能量函数的提出意义重大,它保证了向局部极小的收敛,使神经网络运行稳定性的判断有了明确的可靠的依据。Hopfield网提供了模拟人类记忆的模型。1985年的时候还和D.W.Tank一块模拟电子线路实现了Hopfield网络,并用此解决了旅行商TSP问题。

    • 根据激活函数不同,分为两种:离散HopfieId网(Discrete Hopfield Neural Network,DHNN)连续 Hopfield网(Continuous Hopfield Neural Network,CHNN)
    • DHNN主要用于联想记忆,输入部分信息即可联想到完整的输出,即具有容错性;
    • CHNN主要用于优化计算,如旅行商TSP、调度等。

    3. 离散Hopfield网络(DHNN)

    3.1 DHNN的特点

    • 单层、全连接、反馈:任一神经元输出 x i x_i xi 均通过权重 w i j w_{ij} wij反馈至所有神经元 x j x_j xj作为输入,即让任一神经元的输出都能受到所有神经元的控制,从而使袢经元的输出能互相制约。
    • 每个神经元均有一个阈值 T j T_j Tj,以反映对输入噪声的控制。DHHN网的关踺因素为权重矩阵及神经元阈值,因此也可以简单记作: N = ( W , T ) N=(W,T) N=(W,T)

    在这里插入图片描述
    网络系统具有若干个稳定状态,当网络从某一初始状态开始运动,网络系统总可以收敛于一个稳定状态。

    系统稳定的平衡状态可以通过设计网络的权值而被存储到网络中。简单的来讲就是,Hopfield网络的主要功能是联想记忆。既然如此,首先应该让网络实现“记忆”,我们需要一些数据,然后训练网络,训完练完成之后,可以的得到一组可用的权值信息,形成网络的“记忆”功能。,当输入数据不完整时,根据训练得到的权重去运算,得到一个稳定的输出状态,这就是联想功能。

    3.2 DHNN网络状态

    在这里插入图片描述
    DHHN反馈网络实质上能存储若干个预先设置的稳定状态的网络,运行时外界提供一个输入作为初始网络状态,网络将该输入对应的输出反馈回来作为下次的输入,经过多次循环迭代后,在某些条件下,网络会最终稳定在某一个预先设定好的定点。稳态使得DHHN具有联想记忆功能。

    网络稳定性:网络从初态 X ( 0 ) X(0) X(0) 开始,经过有限次递归后,其状态不再发生变化,即 X ( t + 1 ) = X ( t ) X(t+1)=X(t) X(t+1)=X(t),则称该网络是稳定的。

    在这里插入图片描述

    3.3 能量函数

    能量函数用来表征系统的稳定性,在满足一定的条件下,某种“能量函数”的能量在网络运行过程中不断减小,当能量最终定于一个常数时,网络趋于最终的稳定态。
    E ( t ) = − 1 2 X T ( t ) W X ( t ) + X T ( t ) T E(t) = - \frac{1}{2} X^T(t)WX(t) + X^T(t)T E(t)=21XT(t)WX(t)+XT(t)T
    利用网络的能量数可实现优化求解功能。网络的能量函数在网络状态按一定规则变化时,能自动趋向能量的极小点。如果把一个待求解问题的目标函数以网络能量函数的形式表达出来,当能量函数趋于最小时,对应的网络状态就是问题的最优解。网络的初态可视为问题的初始解,而网络从初态向稳态的收敛过程便是优化计算的过程,这种寻优搜索是在网络演变过程中自动完成的。

    网络达到稳定时的状态 X X X称为网络的吸引子。若把需记忆的样本信息存储于网络的不同吸引子,当输入含有部分记忆信息的样本时网络的演变过程就是便是从部分信息寻找全部信息即联想回忆的过程。

    3.4 DHNN的工作方式

    在这里插入图片描述

    3.5 DHNN例子

    三节点的DHNN网络,其阈值、权重值都已经确定,即该网络能够存储的记忆值均以确定。按照异步工作模式,计算网络的演变过程。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    演进图推导流程:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    继续分析演进图:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    经过以上分析,有3个节点的输入状态,共有八种( 2 3 2^3 23)初始状态的可能情况。
    在这里插入图片描述

    3.6 DHNN网络容量

    DHNN网络容量:简单理解为DHNN网络可以准确记住的模式个数。当其规模为 n n n,且权重阵的对角线元素为0,那么该网络的容量的上界为ne实际上由于多种原因,很难达到上界。

    让网络准确记住一个模式比较容易,但在记忆模式个数增加时,会出现以下两种情况:

    • 权值侈动:当网络记住第一个模式后,在记忆第二模式的时候,会导致原来的矩阵发生变化,有可能会导致对之前模式的“遗忘”。下式中通Hebb规则进行权重更新,当K值较小时,可以将输入样本变为吸引子;当K值较大时,不但难以成为吸引子,而且很可能影响之前的吸引子,引发对之前样本的遗忘,称作“疲劳”。
      W = W + X K ( X K ) T − 1 W = W + X^K(X^K)^T - 1 W=W+XK(XK)T1
    • 交叉干扰:当网络学习多个样本后,在回忆阶段即验证记忆样本时,所产生的干扰成为交叉干扰。如果记忆模式之间并非正交的话,记忆容量会严重下降。

    3.7 DHNN 设计权重和阈值

    在这里插入图片描述

    3.7.1 联立方程组法

    联立方程组法:通过预先设定的吸引子,列出联立方程组,求解方程组,确定每个权值和阈值的取值范围,找任一组符合上述范围要求的值即可。
    在这里插入图片描述
    得到约束方程组:
    在这里插入图片描述
    求解思路:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    经过以上推导可知,满足吸引子,所以是满足条件的解。但是当节点数量增多时则不适用(指数级上升, 2 N , N 为 节 点 数 2^N,N为节点数 2N,N),因此提出了外积法。

    3.7.2 外积法

    外积法:通过Hebb规则,确定网络的权重(包括阈值)。该方法更通用,并且可以处理节点比较多的情况。
    在这里插入图片描述
    实例:
    在这里插入图片描述

    3.8 DHNN简单应用案例:OCR字符识别

    通过DHNN联想记忆功能,预先建立DHNN网络模型,将需要识别的字符(信息),通过网络的权重和阈值保存到网络中。应用于识别有噪声的字符。
    在这里插入图片描述
    以上识别效果不好,进行改进:
    思路:增加像素数目,即将原来5×3的像素块,变为9×9的像素块,这样,网络“记忆”的信息就多了,识别也更准确。
    在这里插入图片描述


    4. 连续Hopfield网络

    CHNN&DHNN的主要区别:

    • 输入输出不同:DHNN输入输出都是离散值,CHNN输入输出都是连续的模拟量;
    • 激活函数不同:DHNN的激活函数为符号函数,CHNN激活函数支持多种,包括线性函数、非线性函数(sigmoid)等;
    • 工作方式不同:DHNN支持同步或者异步,CHNN主要是同步工作。

    4.1 CHNN网络结构

    • CHNN中所有神经元都随时间t并行更新,网络状态随时间连续变化;
    • CHNN模型可与电子线路对应,每一个神经元可用一个运算放大器来模拟;
    • 神经元的输入与输出分别用运算放大器的输入电压 u i u_i ui和输出电压 v i v_i vi表示;
    • 连接权 w i j w_{ij} wij用输入端的电导表示
    • 每个神经元有一个用于设置活电平的外界输入偏置电流,相当于阈值
    • c i c_i ci 1 g i \frac{1}{g_i} gi1上分别为运放的等效输入电容和电阻,模拟生物神经元的输出时间常数。

    在这里插入图片描述

    4.2 CHNN网络拓扑

    在这里插入图片描述

    4.3 CHNN几个特点

    • 具有良好的收敛性;
    • 具有有限个平衡点;
    • 如果平衡点稳定,则网络是渐进稳定的;
    • 渐进稳定平衡点是网络能量函数的局部极小点;
    • 能将任意一组希望存储的正交化矢量综合为网络的渐进平衡点;
    • 网络的存储信息表现为神经元之间互相连接的分布式动态存储;
    • 网络以大规模、非线性、并行的方式进行信息处理;

    4.4 CHNN应用的几个步骤

    应用CHNN解决实际问题,通畅由以下步骤组成:

    • 对于给定问题,要选择一种合适的表示方法,使得神经网络的输出与问题的解相对应;
    • 构造网络能量函数,使其最小值对应于问题的最佳解;
    • 将构造的能量函数和标准能量函数的方程比较,可推出神经网络的权值与偏流的表达式,从而确定网络结构;
    • 构建网络后,其稳态就是在一定条件下的问题优化解,可以通过电路或者计算机模拟求解。

    4.5 TSP 问题

    在这里插入图片描述
    旅行商问题:某旅行商要拜访多个城市,要求:

    • 从某个城市出发,最后回到该城市
    • 每个城市只能访问一次
    • 所走路程最近

    当有3个城市:有 1 1 1 种方法
    当有5个城市:有 12 12 12 种方法
    当有7个城市:有 360 360 360 种方法
    当有10个城市:有 181440 181440 181440 种方法
    当有15个城市:有生 4.36 × 1 0 10 4.36\times10^{10} 4.36×1010 种方法
    当有20个城市有: 2.43 × 1 0 19 2.43 \times 10^{19} 2.43×1019 种方法
    当有31个城市有: 1.27 × 1 0 35 1.27×10^{35} 1.27×1035 种方法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    5. 双向联想记忆神经网络(BAM)

    在这里插入图片描述

    Bart Kosko
    双向联想记忆网络(Bidirectional Associative Memory,BAM):由 Bart Kosko 在1988年提出,可实现双向联想。BAM网有离散型、连续型、自适应型等多种形式。

    在这里插入图片描述

    • 双层双向网络
    • 信息可以双向传播
    • 状态输出为单极性二进制{1,0},或者双极性离散值{1,一1}
    • 不同方向的输入,使用的权重矩阵互为转置 W W W W T W^T WT

    5.1 网络运行过程

    在这里插入图片描述

    5.2 能量函数与权值设计

    在这里插入图片描述

    5.3 网络特点

    1.网络设计比较简单

    • 只需要几组输入和几组典型输出
    • 权值由输入输出简单计算得到
    • 运行时由实际输出与权向量矩阵做内积计算得到相应的输出

    2.大规模并行处理,可以处理较大的数据量
    3.实时性和容错性较好
    4.无需对输入向量进行预处理,可直接输入,不需要编码和解码


    6. 玻尔兹曼机(BM)

    在这里插入图片描述
    玻尔兹曼机〈Bolt zmann Machine):也称Stochastic Hopfield Network with Hidden Units,是一种随机递归神经网络,可以看做是一种随机生成的HopfieId网络。1983年-1986年,由Hinton和Sejnowski提出,该神经网络只有0和1两种状态,其取值根据规律统计法则决定,其形式与注明的统计力学家
    BoItzmann提出的分布相似,因此被称为BoItzmann机。

    • 有可见节点和藏节点之分;
    • 形式上和单层反馈网络DHNN非韋接近;
    • 可见节点实现输入输出,隐藏节点实现输入输出间的联系;
    • 从功能上看,和三层BP网络比较接近;
    • 权重矩阵对称,且自反馈为0,即 w i j = w j i w_{ij}=w_{ji} wij=wji w i i = 0 w_{ii}=0 wii=0

    在这里插入图片描述

    6.1 模拟退火算法

    模拟退火算法(SimulatedAnneal)】:所谓退火是指物体温度逐渐降低的现象,随着温度降低,物体的能量状态会低,在结晶状态时能量最低。模拟退火算法也是模拟退火的过程,但是它在搜索过程中加入了随机因素:即在达到最优值(可能是局部最优值)后会以一定的概率跳出来。如右图,当搜索到局部最优值B后,会按照某个概率继续向右移动,使得搜索有可能跳出局部最优值,而去获得下一个最优值(可能是局部最优也可能是全局最优)。

    在这里插入图片描述
    在这里插入图片描述

    6.2 BM的能量函数

    在这里插入图片描述
    在这里插入图片描述

    6.3 BM的特点

    在这里插入图片描述

    6.4 自联想与异联想

    自联想的输出节点和输出节点相同,即可见节点既是输入节点又是输出节点;异联想的输出节点
    和输入节点不同,即部分可见节点为输入节点,其余可见节点为输出节点。
    在这里插入图片描述
    通过有导师学习,BM可以对训练集中各模式的概率分布进行模拟,从而实现联想记忆。学习的
    目的是通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现。

    • 到第一阶段:正向学习
      向网络输入一对输入一输出模式,将网络的输入一输出节点限制到期望的状态,即固定住输入输出的状态,而去自由调整隐藏层,以完成输入输出之间的映射。

    • 第二阶段:反向学习
      对于异联想学习,用输入模式固定输入节点,而让输出和隐藏节点自由活动;对于自联想学习让可见节点和隐藏节点都自由活动,以体现输入一输出对应规律的模拟情况。输入一输出的对应规律表现为网络达到热平衡时,相连节点状态同时为1的概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段所对应的平均概率的差值,基于该值去调节权重。

    6.5 受限玻尔兹曼机

    聪明绝顶警告!
    在这里插入图片描述

    Paul Smolesky

    受限玻尔兹曼机(Restricted Boltzmann Machine,RBM),是一种简化的特殊的玻尔兹曼机,1986年由Paul Smolensky提出。和BM比,其隐藏层中的节点之间没有互相连接,其可见节点间也没有连接,因此其计算相对更简单。RBM可以应用于降维、分类、协同过滤、特征学习和主题建模等领域,根据任务的不同,可以选择监督学习或者非监督学习等方式进行神经网络模型训练。

    在这里插入图片描述

    • 到两层结构:可见层和隐藏层
    • 同层内无连接,不同层全连接:同层内节点激活状态独立
    • 节点状态二值状态:0 和 1
    • 计算相对BM简单
    • 只要隐层节点足够多,能拟合任何离散分布

    课程链接:https://edu.aliyun.com/course/1923

    展开全文
  • 空间分集接收可补偿信道衰落,提出了一种基于幅相联合激励法的连续多阈值神经元反馈神经网络(RNNCMVN)的光基带信号直接盲检测方法。针对多进制相移键控(MPSK)信号的特点,设计了两种连续相位多阈值激励函数形式,并...
  • 1.反馈神经网络原理及公式推导 梯度下降算法在衡量模型的优劣的过程中,需要计算梯度,即求不同权重的偏导数。因此,当隐层神经元个数增加(权重个数增加)或隐层个数增加(求导过程拉长)会大大拉长计算过程,即...

    目录

    1.反馈神经网络原理及公式推导

    2.反馈神经网络原理与公式推导

    2.1 原理

    2.2 公式推导

    2.2.1 定义一:前项传播算法

    2.2.2 定义二:反向传播算法

     2.2.3 定义三:权重的更新

    2.2.4 激活函数

    3.反馈神经网络python实现(BP)


    1.反馈神经网络原理及公式推导

    梯度下降算法在衡量模型的优劣的过程中,需要计算梯度,即求不同权重的偏导数。因此,当隐层神经元个数增加(权重个数增加)或隐层个数增加(求导过程拉长)会大大拉长计算过程,即很多偏导数的求导过程会反复涉及到,因此在实际中对于权值达到上十万和上百万的神经网络来说,此种重复冗余的计算会浪费大量的计算资源。

    同样是为了求得对权重的更新,反馈神经网络算法将误差E作为以权重向量中每个元素为变量的高纬函数,通过不断的更新权重,寻找训练误差的最低点,按误差函数梯度下降的方向更新权值。

    2.反馈神经网络原理与公式推导

    2.1 原理

    误差反向更新

    step 1.计算输出层与真实层之间差值

    step 2.反向传播到上一个节点,计算出节点误差值

    step3. 以step2中计算出的误差为起点,依次向后传播误差。(隐藏层误差由多个节点共同确定:加权和)

    权值正向更新

    step4. 通俗解释,误差的产生是由于输入值和权重的计算产生的,同时,输入值往往固定,因此,对于误差的调节只能通过权重的更新。权重的误差是以预测值与真实值之间的误差为基础的,当step1中所计算出的误差被一层层反向传播回来后,每个节点则仅需要更新其所需承担的误差量。

     为权重更新之前的权重值,学习速率,当前层当前神经元所对应的误差,当前层中当前神经元的输入(也是前一层的输出)。注:权重更新过程中是减法

    2.2 公式推导

    【注意事项】

    ①对于输出层单元,误差项是真实值与模型计算值之间的差值

    ②对于隐藏层单元,因为缺少直接的目标值来计算隐藏单元的误差因此需要以间接的方式来计算隐藏层的误差项对受隐藏层影响的每一个单元的误差进行加权求和。

    ③权值的更新方向,主要依靠学习速率、该权值对应的输入,以及单元的误差项。

    2.2.1 定义一:前项传播算法

    隐藏层的输出值:

     输出层的输出值:

    2.2.2 定义二:反向传播算法

    L:激活函数

    输出层的误差项:

     输出层的误差:

    【提示】

    对于“输出层的误差项”和“输出层的误差”来说,无论定义在哪个位置,都可以看做当前的输出值对于输入值的梯度计算。(当前层的输出值对输入值的偏导数

    反馈神经网络计算公式:

    为当前层的下一层的权值和误差的乘积的和,为当前层的输出值对输入值的梯度,即将当前层的输出值带入梯度函数的导函数中。

    或者换一种表述形式将上图中的最终公式转换为:

     2.2.3 定义三:权重的更新

    反馈神经网络计算的目的是对权重的更新,因此与梯度下降算法类似,其更新可以仿照梯度下降对权值的更新公式:

     其中,ji表示为反向传播是对应的节点系数,通过计算当前层输出对于输入的梯度,就可以更新对应的权重。b的更新类似。

    2.2.4 激活函数

    对于生物神经元来说,传递进来的电信号通过神经元进行传递,由于每个神经元的突出强弱是有一定的敏感度的,也就是只会对超过一定范围的信号进行反馈。即这个电信号必须大于某个阙值,神经元才会被激活引起后续的传递。以前应用范围较广的为Sigmod函数。因为,其在运行过程中只接受一个值输出,也为一个值的信号,且其输出值为0到1之间

     图像为:

     导数:

    说明:

    Sigmod函数讲一个实数值压缩到0~1之间,特别是对于较大的值的负数被映射成为0,而较大的正数被映射成为1,所以,其经常容易出现区域饱和,即:当一开始数值非常大或非常小时,该区域的梯度(偏导数值:斜率)均接近于0,这样在后续的传播时会造成梯度消散的现象,因此,并不适合现代的神经网络模型的使用。

    近年来大量的激活函数模型,均为解决传统的sigmod模型在更新程度上的神经网络所产生的各种不良影响。MaxoutTanhReLU

    3.反馈神经网络python实现(BP)

    import numpy as np
    import math
    
    
    # ==1.定义辅助函数
    def make_matrix(m, n):
        """
        生成(m, n)列的矩阵
        :param m: 行
        :param n: 列
        :return: 返回m行n列数组
        """
        return np.zeros((m, n))
    
    
    def sigmoid(x):
        """
        激活函数
        :param x: 转换数值
        :return: 返回0~1之间的小数
        """
        return 1.0 / (1.0 + math.exp(-x))
    
    
    def sigmoid_derivate(x):
        """
        激活函数的导数
        :param x: 转换数值
        :return: 导数值
        """
        return x*(1 - x)
    
    
    class BPNeuralNetwork:
        """
        BP神经网络类
        """
        def __init__(self):
            """
            数据内容初始化
            """
            # 输入层数
            self.input_n = 0
            # 隐藏层数
            self.hidden_n = 0
            # 输出层数
            self.output_n = 0
            # 输入层输入数据
            self.input_cells = []
            # 隐藏层输出数据
            self.hidden_cells = []
            # 输出层输出数据
            self.output_cells = []
            # 输入层权重数据
            self.input_weights = []
            # 输出层权重数据
            self.output_weights = []
    
        def setup(self, ni, nh, no):
            """
            对init中定义的数据进行初始化
            :param ni: 输入层节点个数 2
            :param nh: 隐藏层节点个数 5
            :param no: 输出层节点个数 1
            :return: None
            """
            # 第一列为偏执项(调整分类决策面)
            self.input_n = ni + 1
            self.hidden_n = nh
            self.output_n = no
    
            # 初始化节点数值
            self.input_cells = [1.0] * self.input_n
            self.hidden_cells = [1.0] * self.hidden_n
            self.output_cells = [1.0] * self.output_n
    
            # 定义输出层和隐藏层权重矩阵
            # x:(3000, 2)
            # iw:(2(特征数), 4(隐层神经元个数))
            # o:(3000, 4)
            # ow:(4, 1)
            # re:(3000, 1)
            self.input_weights = make_matrix(self.input_n, self.hidden_n)
            self.output_weights = make_matrix(self.hidden_n, self.output_n)
    
            # 随机填充权重矩阵元素值
            for i in range(self.input_n):
                for h in range(self.hidden_n):
                    self.input_weights[i][h] = np.random.uniform(-0.2, 0.2)
            for h in range(self.hidden_n):
                for o in range(self.output_n):
                   self.output_weights[h][o] = np.random.uniform(-0.2, 0.2)
    
        def predict(self, inputs):
            """
            反馈神经网络前向计算
            :param inputs: 输入层数据(一行:一个对象)
            :return: 输出层数据
            """
            # 将对象数据传入input_cells
            for i in range(self.input_n - 1):
                self.input_cells[i] = inputs[i]
    
            # 计算隐藏层输出
            for j in range(self.hidden_n):
                total = 0.0
                for i in range(self.input_n):
                    total += self.input_cells[i] * self.input_weights[i][j]
                self.hidden_cells[j] = sigmoid(total)
    
            # 计算输出层输出
            # self.hidden_cells.shape = (1, 4)
            for k in range(self.output_n):
                total = 0.0
                for j in range(self.hidden_n):
                    total += self.hidden_cells[j] * self.output_weights[j][k]
                self.output_cells[k] = sigmoid(total)
            return self.output_cells[:]
    
        def back_propagate(self, case, label, learn):
            """
            误差反向传播,并更新权重和偏执项
            :param case: 输入层数据(一个对象)
            :param label: 当前对象对应的分类标签
            :param learn: 学习速率
            :return: 当前对象的预测误差
            """
            # 先正向传播
            self.predict(case)
    
            # 计算输出层误差
            # error:误差项
            # output_deltas:误差
            output_deltas = [0.0] * self.output_n
            for k in range(self.output_n):
                error = label[k] - self.output_cells[k]
                output_deltas[k] = sigmoid_derivate(self.output_cells[k]) * error
    
            # 计算隐藏层误差
            hidden_deltas = [0.0] * self.hidden_n
            for j in range(self.hidden_n):
                error = 0.0
                for k in range(self.output_n):
                    error += output_deltas[k] * self.output_weights[j][k]
                hidden_deltas[j] = sigmoid_derivate(self.hidden_cells[j]) * error
    
            # 更新隐藏层权重
            for i in range(self.input_n):
                for j in range(self.hidden_n):
                    self.input_weights[i][j] += learn * hidden_deltas[j] * self.input_cells[i]
    
            # 更新输出层权重
            for j in range(self.hidden_n):
                for k in range(self.output_n):
                    self.output_weights[j][k] += learn * output_deltas[k] * self.hidden_cells[j]
    
            error = 0
            for o in range(len(label)):
                error += 0.5 * (label[o] - self.output_cells[o])**2
    
            return error
    
        def train(self, cases, labels, maxiter=100, learn=0.05):
            """
            模型训练函数
            :param cases: 数据集
            :param labels: 标签集
            :param limit: 最大迭代次数
            :param learn: 学习速率
            :return: None
            """
            # 迭代maxiter次
            total_error = []
            for i in range(maxiter):
                # 遍历每一个对象
                error = 0
                for i in range(len(cases)):
                    label = labels[i]
                    case = cases[i]
                    error += self.back_propagate(case, label, learn)
                total_error.append(error)
            return total_error
    
        def test(self):
            """
            模型预测函数
            :return: None
            """
            cases = [[0, 0], [0, 1], [1, 0], [1, 1]]
            labels = [[0], [1], [1], [0]]
            self.setup(2, 5, 1)
            
            error = self.train(cases, labels, 100000, 0.05)
            print("model train error:", error)
            
            for case in cases:
                print(self.predict(case))
    
    
    if "__main__" == __name__:
        nn = BPNeuralNetwork()
        nn.test()
    

     

    展开全文
  • 神经网路04 反馈神经网络8 (1).pptx
  • 随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型、反馈神经网络模型以及图网络. 1.前馈型神经网络模型 前馈神经网络(FeedforwardNeuralNetwork...
  • 针对执行器发生部分失效故障的空间机器人,提出一种基于比例因子识别的自校正反馈神经网络容错算法.首先,针对无故障系统设计一种常规的神经网络控制算法;然后,利用比例因子观测器对真实的比例因子进行识别;最后,将该...
  • 第五章反馈神经网络 北京工商大学信息工程学院 5反馈神经网络 根据神经网络运行过程中的信息流向,可分为前馈式 和反馈式两种基本类型前馈网络的输出仅由当前输入和 权矩阵决定,而与网络先前的输出状态无关 美国加州...
  • 人工智能算法的视角卷一草稿 第十一章 反馈神经网络 第十一章 反馈神经网络 如第九章所述反馈神经网络 feedback neural network 或称循环神经网络 recurrent neural network, RNN 是包含回路的神经网络从某一神经元...
  • 非线性动态系统中的反馈神经网络逼近.pdf
  • 安全技术-网络信息-反馈神经网络的结构设计学习算法及其应用研究.pdf
  • 基于反馈神经网络的稀疏信号恢复的优化算法.pdf
  • 基于动态反馈神经网络的城市轨道交通短期客流预测.pdf
  • matlab程序9 反馈神经网络
  • 该方法利用反馈神经网络实现了在误差最小条件下的电压暂降检测,检测精度高、响应速度快、实时性好,为实现快速、准确电压暂降检测提供了一种新方法。仿真结果证明了该方法的有效性和优良性能。
  • matlab反馈神经网络聚类设计.zip
  • 以离散H op field神经网络为例,详细研究了学习算法对反馈神经网络故障性能的影响。简要介绍了离散 H op field神经网络及其采用的Hebb学习算法。详细分析了连接故障在学习过程中对网络连接权值故障性能的影响。给出了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,567
精华内容 15,026
关键字:

反馈神经网络

友情链接: 461518359T2FLToolbox.zip