zoukankan      html  css  js  c++  java
  • 向后传播神经网络分类总结

    1.神经网络

      粗略的说,神经网络是一组连接的输入/输出单元,其中每个连接都与一个权重相关联。在学习阶段,通过调整这些权重,使得他能够预测输入元组的正确类标号来学习。由于单元之间的连接,神经网络学习又称连接着学习(connectionist learning)。

      神经网络需要很长的训练时间,因而更适合具有足够长的训练时间的应用。它需要大量的参数,如网络拓扑或“结构”,通常这些主要靠经验确定。神经网络常常因器可解释性差而备受批评。然而,神经网络的优点包括其对噪声数据的高承受能力,以及它对未经训练的数据的模式分类能力。当你在缺乏属性与类之间的联系的知识时也可以使用它们。不像大部分决策树算法,它们非常适合连续值的输入和输出。

    2.多层前馈神经网络

      向后传播算法在多层前馈神经网络上学习。它迭代地学习用于元组类标号预测的一组权重。多层前馈(multilayer feed-forward)神经网络由一个输入层、一个活多个隐藏层和一个输出层组成。

                              

      每层由一些单元组成。网络的输入对应与对每个训练元组的观察属性。输入同事提供给构成输入层的单元。这些输入通过输入层,然后加权同时地提供给称做隐藏层的“类神经元的”第二层。该隐藏层单元的输出可以输入到另一个隐藏层,诸如此类。隐藏层的数量是任意的,尽管实践中通常只有一层,理论验证表明,两层的神经网络就可以模拟任何的非线性结构。最好一个隐藏层的权重输出作为构成输出层的单元的输入。输出层发布给定元组的网络预测。

      输入层的单元称做输入单元。隐藏层和输出层的单元,由于其符号生物学基础,有时称做神经节点(neurodes),或称输出单元。因此,我们称之为两层神经网络。(不计算输入层,因为它只是用来传递输入值到下一层),类似的,包含两个隐藏层的网络称做三层神经网络等。网络是前馈的,因为其权重都不回送到输入单元,或前一层的输出单元。网络是全连接的,如果每个单元都向下一层的每个单元提供输入。

      每个输出单元取前一层单元输出的加权和作为输入。它应用一个非线性(激活)函数作用于加权输入。多层前馈神经网络可以将类预测作为输入的非线性组合建模。从统计学的观点来看,它们进行非线性回归。给定足够多的隐藏单元和足够多的训练样本,多层前馈神经网络可以逼近任意函数。

    3.定义网络拓扑

      在开始训练之前,用户必须确定网络拓扑,说明输入层的单元数、隐藏层数、每个隐藏层的单元数和输出层的单元数。

      对训练元组中的每个属性的输入测量值进行规范化将有助于加快学习过程。通常,对输入值规范化,使得它们落在0.0 和 1.0之间。离散值属性可以重新编码,使得每个域值有一个输入单元。

      神经网络可以用于分类(预测给定元组的类标号) 和数值预测(预测连续值输出) 。对于分类,一个输出单元可以用来表示两个类(其中值1代表一个类,而值0代表另一个类)。如果多于两个类,则每个类使用一个输出单元。

    4.向后传播

      向后传播通过迭代地处理训练元组数据集,把每个元组的网络预测与实际已知的目标值进行比较学习。目标值可以使训练元组的已知类标号(对于分类)或者是连续值(对于预测)。对于每个训练样本,修改权重使得网络预测和实际目标值之间的均方差最小。这种修改“向后”进行,即由输出层,经由每个隐藏层,到第一个隐藏层(因此称作向后传播)。尽管不能保证,一般而言,权重将最终收敛,学习过程停止。

      算法:向后传播。    使用向后传播算法,学习分类或预测的神经网络

      输入:

         D:由训练元组和其相关联的目标值组成的数据集;

         L:学习率;

         network:多层前馈网络。

      输出:训练后的神经网络。

      方法:

        初始化network的所有权重和偏倚。

        while  终止条件不满足 {

          for  D中每个训练元组X{

            for  每个输入层单元j  {

              Oj=Ij;

              for  隐藏或输出层的每个单元j  {

                Ij=Σwij*Oj+θj ;  //关于前一层i,计算单元j 的净输入

                Oj=1/(1+exp(-Ij))  ;  //使用  logistic  函数或称S型 ( sigmoid ) 函数计算单元j的输出,这个函数大有来头,能将R中的数转换为(0,1),其函数图像与中学微生物生长曲线类似

              }

              //一下逻辑为描述向后传播误差

              for  输出层的每个单元 j 

                Errj=Oj*(1-Oj)*(Tj-Oj) ;  //计算输出层的误差

              for  由最后一个到第一个隐藏层,对于隐藏层的每个单元j

                Errj=Oj*(1-Oj)*Σ Errk*wjk ;  //计算关于下一个较高层k的误差

              for  network 中的每个权wij {

                ΔWij=(L)*Errj*Oi  ;  //权重增量

                Wij =Wij  +ΔWij ;   //更新权重

              }

              for  network 中的每个偏倚 Θij {

                ΔΘj=(L)*Errj  ;  //偏倚增量

                Θj=Θj+ΔΘj ;   //偏倚更新

              }

            }

          }

        }

        终止条件:训练停止,如果

              前一周期所有的ΔWij都太小,小于某个指定的阈值,或者

              前一周期误分类的元组百分比小于某个阈值,或者

              超过预先指定的周期数。

    5.有效性

      计算的有效性依赖于训练网络所用的时间。给定|D|个元组和w个权重,则每个周期需要O(|D|*w)时间。然而,在最坏情况下,周期数可能是输入元组数n的指数。在实践中,网络收敛所需要的实践是非常不确定的。存在一些加快训练速度的技术。例如,可以使用一种称做模拟退火的技术,它能确保收敛到全剧最优。

    6.如何分类

      为了对未知元组X分类,把该元组输入到训练过的网络,计算每个单元的净输入和输出。(不需要计算误差或它们的向后传播),如果每个类有一个输出节点,则具有最高输出值的节点决定X的预测类标号,如果只有一个输出节点,则输出值大于或等于0.5可以视为正类,而值小于0.5可以视为负类。

  • 相关阅读:
    python修改python unittest的运行顺序
    史上最强大的python selenium webdriver的包装
    第六种方式,python使用cached_property缓存装饰器和自定义cached_class_property装饰器,动态添加类属性(三),selnium webdriver类无限实例化控制成单浏览器。
    python带参装饰器的改良版
    第五种方式,python使用组合来添加类方法和属性(二),以selenium的webdriver为例
    python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)
    linux添加PYTHONPATH环境变量
    linux 按照端口一句命令杀死进程,按照进程名称一句命令杀死进程
    python __all__用法
    使用pycharm,追求最优的代码。
  • 原文地址:https://www.cnblogs.com/evilKing/p/4081926.html
Copyright © 2011-2022 走看看