zoukankan      html  css  js  c++  java
  • 神经网络后馈算法剖析

    在coursera中Ng的机器学习课程中,他介绍了神经网络中的前向传播算法以及后馈算法,但是对于后馈算法中,为什么要那么做,只用了一句需要使用复杂的数学来证明。我查阅了相关的资料,对这一部分的原理进行了学习,现将这部分知识记录下来,以供共同学习。

    1、简单的线性模型中误差分析

    使用一个大小为N的训练集对一个预测(分类)模型进行训练时,总误差为:

             ————(1)

    而在一个线性模型中,第k个输出yk是输入xi的线性组合:

                           ————(2)

    其中,wki是第i个输入到第k个输出的边权。对于某个输入数据(另外一种讲法叫模式n,它的误差函数被定义为:

          ————(3)

    其中,ynk为:

      ————(4)

    tnk是输入数据n是先所打上的标签,即真实结果。

    由(3)和(4)可求得:

              ————(5)

    我们可以看到,误差对某个边权wji的偏导,等于这个边所连输出端的误差信号ynj-tnj)与这个边所连输入端的变量的乘积。

    2、神经网络的后馈算法

    2.1 前馈过程

    一个简单的神经网络模型如下图所示:

    这个神经网络有1个输入层,2个隐层以及1个输出层;对于某个unit(神经元),它的输入等于各个前一层神经元的加权和:

                  ————(6)

    其中,带括号的上标表示层数,(6)也可以写成向量的形式:

                         ————(7)

    经过每个神经元activation函数h()的处理后,第l层第j个神经元的输出为:

                             ————(8)

    需要注意的是,我们可以在每一层中,加入一个修正神经元,它的activation输出始终是+1。神经网络不断地重复(6)、(8),直到输出层产生相应的输出,神经网络的输出层神经元直接将输入加权作为结果输出,而不经过h()的处理。这是神经网络的前馈过程。

    2.2 后馈过程

    现在我们考虑后馈的过程,Enwji的偏导只通过输入ai传导到神经元j,应用偏导的链式法则有:

            ————(9)

    我们定义:

                          ————(10)

    它表示(l+1)层神经元j误差。而:

                              ————(11)

    将(10)、(11)代入(9),可得:

                      ————(12)

    (12)说明在神经网络中,误差对l层某个边权wji的偏导,等于这个边所连输出端(l+1层第j个神经元)的误差与这个边所连输入端(l层第i个神经元的输出)的乘积。(12)写成向量的形式为:

                 ————(13)

    这个就是最终的结论!

    2.3 误差的后馈传播

    下面介绍如何计算

    在输出层中,有:

        ————(14)

    而对于隐层或者输入层,有:

        ————(15)

    (15)式实际上表示了一个误差后馈的过程,l层的误差是l+1层的误差通过w(l)传递过来的。由于:

                               ————(16)

    由(6)、(7)式可得:

                   ————(17)

    (16)、(17)代入(15)可以得到:

         ————(18)

    (18)写成向量的形式为:

                                                                                                      ————(19)

    其中.*表示点乘。

    2.3 误差后馈总结

    1. 将一个输入向量xn输入到网络中,使用公式(6)、(8)前向转播;
    2. 使用(14)式计算输出层的误差δ
    3. 后馈输出层的δ,并计算每一个隐层的δ
    4. 使用(13)计算所求的偏导。

     


    作者:Chenny Chen
    出处:http://www.cnblogs.com/XjChenny/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    第一个vbscript程序
    判定VBscript方法是否存在
    我的模块加载系统 v24
    libnet/libnids库函数介绍
    程序员应知道的12件事
    基于poll实现的echo服务器
    师者
    OSI/RM参考模型和TCP/IP协议的关系
    TCP(虚电路)和UDP的区别
    python中 __name__及__main()__的妙处
  • 原文地址:https://www.cnblogs.com/XjChenny/p/3106105.html
Copyright © 2011-2022 走看看