精华内容
下载资源
问答
  • 该文件包含三种格式的文件pdf、xmind、png,神经网络分类的内容详解介绍见本人博客(https://blog.csdn.net/weixin_43935696/article/details/109000889)
  • 随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型、反馈神经网络模型以及图网络. 1.前馈型神经网络模型 前馈神经网络(FeedforwardNeuralNetwork...

           随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型、反馈型神经网络模型以及图网络.

    1.前馈型神经网络模型

          前馈神经网络(Feedforward Neural Network ,FNN),简称前馈网络。

          把每个神经元按接收信息的先后分为不同的组,每一组可以看做是一个神经层。每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元

          整个网络中的信息是朝着一个方向传播的,即输入到输出方向,没有反向的信息传播(和误差反向传播不是一回事),可用有向无环图表示

          前馈神经网络包括全连接前馈神经网络(FC)卷积神经网络(CNN)

          前馈神经网络可以看做是一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。

     

    2.反馈型神经神经网络

    反馈神经网络中神经元不但可以接收其他神经元的信号,而且可以接收自己的反馈信号

    和前馈神经网络相比,反馈神经网络中的神经元具有记忆功能,在不同时刻具有不同的状态。反馈神经网络中的信息传播可以是单向也可以是双向传播,因此可以用一个有向循环图或者无向图来表示。

    常见的反馈神经网络包括循环神经网络(RNN)、Hopfield网络和玻尔兹曼机。

    而为了进一步增强记忆网络的记忆容量,可以映入外部记忆单元和读写机制,用来保存一些网络的中间状态,称为记忆增强网络,比如神经图灵机。

     

    3. 图网络

    前馈神经网络和反馈神经网络的输入都可表示为向量或者向量序列,但实际应用中很多数据都是图结构的数据,比如知识图谱、社交网络和分子网络等。这时就需要用到图网络来进行处理。

    图网络是定义在图结构数据上的神经网络,图中每个结点都由一个或者一组神经元组成。结点之前的连接可以是有向的,也可以是无向的。每个结点可以收到来自相邻结点或自身的信息。

     

    perference

    1、深度学习之前馈神经网络(前向传播和误差反向传播

    展开全文
  • 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()
    

     

    展开全文
  • 本文介绍了反馈神经网络,包括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

    展开全文
  • 神经网络模型分类总结

    千次阅读 2021-11-28 19:55:27
    一般的,神经网络模型基本结构按信息输入是否反馈,可以分为两种:前馈神经网络和反馈神经网络。 1.1 前馈神经网络 前馈神经网络(Feedforward Neural Network)中,信息从输入层开始输入,每层的神经元接收前一级...

    一、神经网络类别

    一般的,神经网络模型基本结构按信息输入是否反馈,可以分为两种:前馈神经网络和反馈神经网络。

    1.1 前馈神经网络

    前馈神经网络(Feedforward Neural Network)中,信息从输入层开始输入,每层的神经元接收前一级输入,并输出到下一级,直至输出层。整个网络信息输入传输中无反馈(循环)。即任何层的输出都不会影响同级层,可用一个有向无环图表示。

    常见的前馈神经网络包括卷积神经网络(CNN)、全连接神经网络(FCN)、生成对抗网络(GAN)等。

     

    1.2 反馈神经网络

    反馈神经网络(Feedback Neural Network)中,神经元不但可以接收其他神经元的信号,而且可以接收自己的反馈信号。和前馈神经网络相比,反馈神经网络中的神经元具有记忆功能,在不同时刻具有不同的状态。反馈神经网络中的信息传播可以是单向也可以是双向传播,因此可以用一个有向循环图或者无向图来表示。

    常见的反馈神经网络包括循环神经网络(RNN)、长短期记忆网络(LSTM)、Hopfield网络和玻尔兹曼机。

     

    二、经典神经网络模型介绍

    全连接神经网络(FCN)

    全连接神经网络是深度学习最常见的网络结构,有三种基本类型的层: 输入层、隐藏层和输出层。当前层的每个神经元都会接入前一层每个神经元的输入信号。在每个连接过程中,来自前一层的信号被乘以一个权重,增加一个偏置,然后通过一个非线性激活函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。

     

    卷积神经网络(CNN)

    图像具有非常高的维数,因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。卷积神经网络提供了一个解决方案,利用卷积和池化层,来降低图像的维度。由于卷积层是可训练的,但参数明显少于标准的隐藏层,它能够突出图像的重要部分,并向前传播每个重要部分。传统的CNNs中,最后几层是隐藏层,用来处理“压缩的图像信息”。

     

    残差网络(ResNet)

    深层前馈神经网络有一个问题,随着网络层数的增加,网络会发生了退化(degradation)现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当再增加网络深度的话,训练集loss反而会增大。为了解决这个问题,残差网络使用跳跃连接实现信号跨层传播

     

    生成对抗网络(GAN)

    生成对抗网络是一种专门设计用于生成图像的网络,由两个网络组成: 一个鉴别器和一个生成器。鉴别器的任务是区分图像是从数据集中提取的还是由生成器生成的,生成器的任务是生成足够逼真的图像,以至于鉴别器无法区分图像是否真实。随着时间的推移,在谨慎的监督下,这两个对手相互竞争,彼此都想成功地改进对方。最终的结果是一个训练有素的生成器,可以生成逼真的图像。鉴别器是一个卷积神经网络,其目标是最大限度地提高识别真假图像的准确率,而生成器是一个反卷积神经网络,其目标是最小化鉴别器的性能。

     

    变分自动编码器(VAE)

    自动编码器学习一个输入(可以是图像或文本序列)的压缩表示,例如,压缩输入,然后解压缩回来匹配原始输入,而变分自动编码器学习表示的数据的概率分布的参数。不仅仅是学习一个代表数据的函数,它还获得了更详细和细致的数据视图,从分布中抽样并生成新的输入数据样本。

    Transformer

    Transformer是Google Brain提出的经典网络结构,由经典的Encoder-Decoder模型组成。在上图中,整个Encoder层由6个左边Nx部分的结构组成。整个Decoder由6个右边Nx部分的框架组成,Decoder输出的结果经过一个线性层变换后,经过softmax层计算,输出最终的预测结果。

     

     

    循环神经网络 (RNN)

    循环神经网络是一种特殊类型的网络,它包含环和自重复,因此被称为“循环”。由于允许信息存储在网络中,RNNs 使用以前训练中的推理来对即将到来的事件做出更好、更明智的决定。为了做到这一点,它使用以前的预测作为“上下文信号”。由于其性质,RNNs 通常用于处理顺序任务,如逐字生成文本或预测时间序列数据(例如股票价格)。它们还可以处理任意大小的输入。

     

    长短期记忆网络(LSTM)

    LSTM结构是专门为解决RNN在学习长的的上下文信息出现的梯度消失、爆炸问题而设计的,结构中加入了内存块。这些模块可以看作是计算机中的内存芯片——每个模块包含几个循环连接的内存单元和三个门(输入、输出和遗忘,相当于写入、读取和重置)。信息的输入只能通过每个门与神经元进行互动,因此这些门学会智能地打开和关闭,以防止梯度爆炸或消失。

     

    Hopfield网络

    Hopfield神经网络是一种单层互相全连接反馈型神经网络。每个神经元既是输入也是输出,网络中的每一个神经元都将自己的输出通过连接权传送给所有其它神经元,同时又都接收所有其它神经元传递过来的信息。

     

    展开全文
  • 神经网络分类

    千次阅读 2021-02-18 20:30:34
    概念:人工神经网络是在现代神经生物学研究基础上提出的模拟生物过程,反映人脑某些特性的一种计算结构。 人工神经元模型中的激活函数 其中 w_i·x_i为输入信号加权,θ为阈值(偏置量) 常见的形式有四种: 阶跃...
  • 针对动态信号模式分类问题,提出了一种反馈过程神经网络模型和基于该模型的分类方法。这种网络的输入可直接为时变函数,网络的信息传输既有与前馈神经网络一样的前向流,也有后面各层节点到前层节点的反馈,且可...
  • 神经网络分类 前馈式网络,反馈式网络,图网络 二.前馈网络(Feedforward Neural Network,FNN) 输入:向量或向量序列 包括:全连接前馈神经网络,卷积神经网络 表示:有向无环图 信息传播:朝着一个方向...
  • 本文介绍了反馈神经网络,包括Hopfield网络,离散Hopfield网络(DHNN),连续Hopfield网络(CHNN),双向联想记忆网络(BAM),玻尔兹曼机(BM),受限玻尔兹曼机(RBM)。其中对于BAM、BM、RBM只是对其进行了简单的...
  • 常用神经网络分类

    万次阅读 多人点赞 2018-03-05 16:05:19
    本文主要介绍了当前常用的神经网络,这些神经网络主要有哪些用途,以及各种神经网络的优点和局限性。 1 BP神经网络 BP (Back Propagation)神经网络是一种神经网络学习算法。其由输入层、中间层、输出层组成的阶层...
  • 循环神经网络

    2021-01-06 22:35:19
    循环神经网络特点:为更好地处理时序信息而设计的。它引⼊状态变量来存储过去的信息,并⽤其与当前的输⼊共同决定当前的输出。 循环神经⽹络常⽤于处理序列数据,如⼀段⽂字或声⾳、购物或观影的顺序,甚⾄是图像中...
  • 人工神经网络模型与分类

    万次阅读 2017-07-05 21:57:59
    1. 人工神经网络分类 按性能分:连续型和离散型网络,或确定型和随机型网络。 按拓扑结构分:前向网络和反馈网络。 前向网络有自适应线性神经网络(AdaptiveLinear,简称Adaline)、单层感知器、多层感知...
  • 卷积神经网络报告

    2018-03-22 13:39:30
    卷积神经网络是近年发展起来,并引起广泛重视的...20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络。
  • Hopfield Neural Network——Hopfield神经网络的python代码,基于Language: Python 3.5.x,API: Google TensorFlow 1.0.x。实验案例有训练Hopfield网络对MNIST数字进行分类等。
  • 目录1 思维导图1 神经网络雏形--感知机2 前馈神经网络(feedforward neural network,FNN)2.1 单层前馈神经网2.1.1 径向基神经网络(Radial Basis Function,RBF)2.1.1.1 广义回归神经网络(General Regression Neural ...
  • 神经网络分类算法 数据挖掘

    万次阅读 2017-02-09 16:36:47
    神经网络分类介绍:  神经网络就是一组相互连接的输入输出单元,这些单元之间的每个连接都关联一个权重。在网络学习阶段,网络通过调整权重来实现输入样本与其相应(正确)类别的对应。由于网络学习主要是针对其中...
  • 在特征提取的基础上进行模式分类是基于基因的计算机辅助诊断的重要步骤,如人工神经网络分类方法已广泛的应用于疾病诊断及预防系统之中。 人工神经网络的研究已有半个多世纪的历史,起源于20世纪40年代,20世纪80...
  • 神经网络分类

    万次阅读 2017-09-19 15:37:27
    人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的...
  • 本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 。   第0节、引例   本文以Fisher的Iris数据集作为神经网络程序的测试...
  • 用于图像分类的经典的卷积神经网络CNN

    万次阅读 多人点赞 2019-07-08 09:49:01
    本文详细介绍了CNN在图像分类中的发展过程中的几个经典的网络,包括了从LeNet,AlexNet,VGGNet,GoogleNet,ResNet到DenseNet的一路改进、优化的过程。
  • 浅谈神经网络算法

    2021-02-25 03:00:06
    但是考虑到实际情况,一般的神经网络(BP网络)不需要设计的那么复杂,不需要包含反馈和递归。人工智能的一大重要应用,是分类问题。本文通过分类的例子,来介绍神经网络。一个最简单的分类,是在平面上画一条直线,...
  • 首先我们从人脑发挥功能的最基本的单元,即神经元的模型出发,来了解神经网络分类器究竟是如何发挥作用的。 人工神经元是生物神经元的模拟模型。 生物神经元包括四个主要部分:细胞体、树突、轴突和突触。 树突的...
  • BP神经网络分类

    千次阅读 2016-09-26 15:27:26
    本文主要内容包括: (1) 介绍神经网络基本原理,(2) AForge.NET实现前向神经网络的方法,(3) Matlab实现前向神经网络的方法 。 第0节、引例   本文以Fisher的Iris数据集作为神经网络程序的测试数据集。Iris...
  • 几种主要的神经网络一、全连接神经网络二、前馈神经网络(Feedforward neural network,FNN)三、卷积神经网络(Convolutional Neural Network,CNN)四、循环神经网络(Recurrent neural network,RNN ) ...
  • 用BP神经网络解决简单的分类问题

    万次阅读 多人点赞 2018-03-09 20:13:21
    有关于BP神经网络原理前人之述备矣,这里就暂且略过。从一年前第一次接触机器学习到现在,已经学习很多类似的智能学习算法,无论是遗传算法、群算法、模拟退火算法还是神经网络算法,在有监督的学习算法中,无非就是...
  • 卷积神经网络基于胸部CT扫描的COVID-19分类 描述 此仓库中有两个Jupyter笔记本(在notebooks文件夹中)。 1-卷积神经网络简介 本笔记本向不熟悉该领域的人介绍了深度神经网络(DNN)和卷积神经网络(CNN)。 我...
  • 基于RBF神经网络的信用分类方法

    千次阅读 2020-09-29 15:50:13
    提出基于RBF神经网络的信用分类的一种方法。此方法可根据客户提供的烦多而复杂的资料数据来评估客户信用的好坏。发挥RBF神经网络模拟生物体中神经网络的某些结构和功能,能进行重复学习的特性。将客户资料与客户信用...
  • 基于故障特征气体与C_2H_2_C_2H_4比值分类反馈神经网络电力变压器故障诊断.pdf
  • 第1章线性神经网络的工程应用 1.1系统辨识的MATLAB实现 1.2自适应系统辨识的MATLAB实现 1.3线性系统预测的MATLAB实现 1.4线性神经网络用于消噪处理的MATLAB实现 第2章神经网络预测的实例分析 2.1地震预报的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,156
精华内容 8,462
关键字:

反馈神经网络分类