精华内容
下载资源
问答
  • 首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。...

    一、定义

    首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。 该方法对网络中所有权重计算损失函数的梯度。 这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。(误差的反向传播)


    二、案例1

    首先明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重,只要能明确上面两点,那么下面的例子,只要会一点链式求导规则,就一定能看懂!

    BP算法,也叫δ算法,下面以3层的感知机为例进行举例讲解。


    上图的前向传播(网络输出计算)过程如下:(此处为网络的整个误差的计算,误差E计算方法为mse) 

     

    上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

    误差E有了,怎么调整权重让误差不断减小?
    E是权重w的函数,何如找到使得函数值最小的w。
    解决上面问题的方法是梯度下降算法(简单图示如下),大家如有不太懂的可先行查阅别的资料,只要能达到理解线性回归梯度下降算法的水平即可,这里不再赘述。

    就算上面的所有东西你都看的迷迷糊糊,通过下面的例子,相信绝大多数人也能很轻松的理解BP算法。如图是一个简单的神经网络用来举例: 

     

    下面是前向(前馈)运算(激活函数为sigmoid):

     

    下面是反向传播(求网络误差对各个权重参数的梯度):

    我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:


     

    导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程: 

     如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:

    展开全文
  • 自己学习机器学习,深度学习也有好长一段时间了,一直以来都想写点有价值的技术博客,以达到技术分享记录自己成长的目的,奈何之前一直拖着,近来算是醒悟,打算以后不定时写一写博客,也算是作为自己不断学习,...

    前言(扯犊子)

    自己学习机器学习,深度学习也有好长一段时间了,一直以来都想写点有价值的技术博客,以达到技术分享及记录自己成长的目的,奈何之前一直拖着,近来算是醒悟,打算以后不定时写一写博客,也算是作为自己不断学习,不断进步的记录。既然是写博客,希望自己的博客以后要做到“准确、生动、简洁、易懂”的水平,做到对自己、对读者负责,希望大家多交流,共同进步!

    言归正传,想起当时自己刚入门深度学习的时候,当时对神经网络的“反向传播”机制不是很理解(这对理解以后的很多概念来说,很重要!!一定要搞懂!!),当时查了很多资料,花费了很多时间,感谢当时所查阅的很多资料的作者,本篇博客就网络上很多优秀的资料和我个人的理解,争取生动、简单地讲解一下BP算法,希望能够帮助到大家。

    定义

    首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。 该方法对网络中所有权重计算损失函数的梯度。 这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。(误差的反向传播)

    算法讲解(耐心看)

    如果去问一下了解BP算法的人“BP算法怎推导?”,大概率得到的回答是“不就是链式求导法则嘛”,我觉得这种答案对于提问题的人来说没有任何帮助。BP的推导需要链式求导不错,但提问者往往想得到的是直观的回答,毕竟理解才是王道。直观的答案,非图解莫属了。
    注:下图的确是反向传播算法,但不是深度学习中的backprop,不过backward的大体思想是一样的,毕竟误差没法从前往后计算啊。(在深度学习中操作的是计算图—Computational graph),如果暂时不理解上面那句话,你可以当我没说过,不要紧~(手动?)

    下面通过两组图来进行神经网络前向传播反向传播算法的讲解,第一组图来自国外某网站,配图生动形象。如果对你来说,单纯的讲解理解起来比较费劲,那么可以参考第二组图——一个具体的前向传播和反向传播算法的例子。通过本篇博客,相信就算是刚刚入门的小白(只要有一点点高等数学基础知识),也一定可以理解反向传播算法!

    CASE 1(图示讲解,看不太懂没关系,看第二组图)

    首先拿一个简单的三层神经网络来举例,如下:
    在这里插入图片描述

    每个神经元由两部分组成,第一部分(e)是输入值权重系数乘积的,第二部分(f(e))是一个激活函数(非线性函数)的输出, y=f(e)即为某个神经元的输出,如下:
    在这里插入图片描述

    下面是前向传播过程:
    在这里插入图片描述
    -----------手动分割-----------
    在这里插入图片描述
    -----------手动分割-----------
    在这里插入图片描述

    到这里为止,神经网络的前向传播已经完成,最后输出的y就是本次前向传播神经网络计算出来的结果(预测结果),但这个预测结果不一定是正确的,要和真实的标签(z)相比较,计算预测结果和真实标签的误差( δ \delta δ),如下:
    在这里插入图片描述

    下面开始计算每个神经元的误差( δ \delta δ):
    在这里插入图片描述
    (If propagated errors came from few neurons they are added. The illustration is below: )

    在这里插入图片描述

    下面开始利用反向传播的误差,计算各个神经元(权重)的导数,开始反向传播修改权重(When the error signal for each neuron is computed, the weights coefficients of each neuron input node may be modified. In formulas below d f ( e ) d e \dfrac {df\left( e\right) }{de} dedf(e) represents derivative of neuron activation function (which weights are modified). ):
    在这里插入图片描述
    在这里插入图片描述
    -----------手动分割-----------
    在这里插入图片描述
    -----------手动分割-----------
    在这里插入图片描述

    Coefficient η \eta η affects network teaching speed.
    到此为止,整个网络的前向,反向传播和权重更新已经完成,推荐参考上面给出的本教程的链接,如果对纯理论讲解较难接受,没关系,强烈推荐第二组图的例子!!!

    CASE 2(具体计算举例,嫌麻烦的可直接看这个,强烈推荐!!!!!)

    首先明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重,只要能明确上面两点,那么下面的例子,只要会一点链式求导规则,就一定能看懂!

    BP算法,也叫 δ \delta δ算法,下面以3层的感知机为例进行举例讲解。
    在这里插入图片描述

    上图的前向传播(网络输出计算)过程如下:(此处为网络的整个误差的计算,误差E计算方法为mse)

    在这里插入图片描述

    上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

    1. 误差E有了,怎么调整权重让误差不断减小?
    2. E是权重w的函数,何如找到使得函数值最小的w。

    解决上面问题的方法是梯度下降算法(简单图示如下),大家如有不太懂的可先行查阅别的资料,只要能达到理解线性回归梯度下降算法的水平即可,这里不再赘述。
    在这里插入图片描述

    划重点,划重点,划重点!!!
    BP算法的具体例子来喽!!

    就算上面的所有东西你都看的迷迷糊糊,通过下面的例子,相信绝大多数人也能很轻松的理解BP算法。如图是一个简单的神经网络用来举例:
    在这里插入图片描述

    下面是前向(前馈)运算(激活函数为sigmoid):
    在这里插入图片描述

    下面是反向传播(求网络误差对各个权重参数的梯度):

    我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:
    在这里插入图片描述

    导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程
    在这里插入图片描述

    上面的图已经很显然了,如果还看不懂真的得去闭门思过了(开玩笑~),耐心看一下上面的几张图,一定能看懂的。

    如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:
    在这里插入图片描述

    至此,“反向传播算法”及公式推导的过程总算是讲完了啦!个人感觉,尤其是第二组图,还算是蛮通俗易懂的,希望能帮助到大家,共同进步!

    感觉本篇讲的有点啰嗦了,直接放第二组图可能会更简洁,以后争取改进。

    以上(麻烦大家 点赞 + 关注 一波啊)

    References

    http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html
    https://www.cnblogs.com/charlotte77/p/5629865.html
    https://blog.csdn.net/han_xiaoyang

    展开全文
  • 神经网络中的反向传播(BackPropagation)介绍及公式推导 神经网络中的激活函数的作用,最常用的两个激活函数Sigmoid 和TanH 代价函数对介绍二次代价函数(Quadratic Cost),交叉熵代价函数(Cross-entropy Cost)
  • 吴恩达机器学习课程反向传播算法的数学推导 Proof of Back Propagation Algorithm.pdf 【本文旨在给出吴恩达机器学习课程反向传播算法的数学推导
  • 反向传播算法过程及公式推导
                                       
                   
    反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
    (1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
    (2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
    (3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。

            反向传播算法的思想比较容易理解,但具体的公式则要一步步推导,因此本文着重介绍公式的推导过程。


    1. 变量定义



            上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
            表示第层的第个神经元连接到第层的第个神经元的权重;
            表示第层的第个神经元的偏置;
            表示第层的第个神经元的输入,即:
            表示第层的第个神经元的输出,即:
            其中表示激活函数。

    如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

    2. 代价函数

            代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):

            其中,表示输入的样本,表示实际的分类,表示预测的输出,表示神经网络的最大层数。

    3. 公式及其推导

            本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。
            首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:


            本文将以一个输入样本为例进行说明,此时代价函数表示为:


    公式1(计算最后一层神经网络产生的错误):



            其中,表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。 公式1的推导过程如下:



    公式2(由后往前,计算每一层神经网络产生的错误):



            推导过程:


    公式3(计算权重的梯度):



            推导过程:



    公式4(计算偏置的梯度):



            推导过程:



    4. 反向传播算法伪代码


    • 输入训练集

    • 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值
      • 前向传播:
    , 
      • 计算输出层产生的错误:

      • 反向传播错误:


    • 使用梯度下降(gradient descent),训练参数:

     








                         
    展开全文
  • 反向传播算法 这个网络只有3层,分别是蓝色的输入层、绿色的隐藏层和红色的输出层。 假设给了m个训练样本,第i个输入输出对表示为: 其中,x和y是3维向量。对于输入x,我们把g称作神经网络的预测(输出)值。 ...

    BP(Back Propagation)神经网络通常是指具有三层网路结构的浅层神经网络。

                                                   

    反向传播算法

    1.什么是BP 算法?
    BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。BP神经网络是由一个输入层、一个输出层和一个或多个隐层构成的,它的激活函数采用sigmoid函数。在这其中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
    2.为什么要使用BP算法?直接使用梯度下降不行吗?
    梯度下降可以应对带有明确求导函数的情况,或者说可以应对那些可以求出误差的情况,比如逻辑回归,我们可以把它看做没有隐层的网络;但对于多隐层的神经网络,输出层可以直接求出误差来更新参数,但其中隐层的误差是不存在的,因此不能对它直接应用梯度下降,而是先将误差反向传播至隐层,然后再应用梯度下降,其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助,因此反向传播算法可以说是梯度下降在链式法则中的应用。 

                                                     

    这个网络只有3层,分别是蓝色的输入层、绿色的隐藏层和红色的输出层。

    假设给了m个训练样本,第i个输入输出对表示为:
    其中,x和y是3维向量。对于输入x,我们把g称作神经网络的预测(输出)值。

    对于每个训练样本来说,有:

    给定输入x,我们要找到使得预测值g与输出值y相等或比较相近的一组网络权重。因此,我们加入了误差函数,定义如下:

    我们推广到一般情况,而不是之前的3个输出单元。假设输出层有任意数量的输出单元,设为n,对于这种情况此时的总误差(损失函数)为:

    用z来代表某个输出单元的总输入,求出下面公式的值:

    但是,g是关于z的函数,应用链式法则,把它重写为:

    g作为Logistic函数,z是它的输入,所以可以表示为:

    进而得到:

    设绿色单元的预测值为g’,绿色层中的单元k与红色层(输出层)中的单元j之间的连接权重设为:

    图中,黄色输出单元对应的总输入z。为了计算这个总输入,先获得每个绿色单元的输出值,在把其与连接绿色单元和黄色单元的红色箭头权重相乘,并将它们全部相加。

                                                   

    进行推广,假如有任意数量的绿色单元,设为n,这个n与上面定义的不同,可以表示为:

    推导还没有完成,我们仍需要计算误差相对于第一层和第二层连接权重的导数。接下来,计算误差与第k个绿色单元输出值的变化关系:

    由于第k个单元有j个连接权重,我们也考虑在内:

    推导到这里结束,我们得到了总误差相对于某个单元输出值的导数。现在,我们可以忽略红色输出层,把绿色层作为网络的最后一层,并重复上述所有步骤来计算总误差E相对于输入权重的导数。

     

    展开全文
  • 反向传播层层梯度结果和中间数据deltas # activations存放每一层的输出,输入层就是X,其它层先构建好输出的形状 activations = [X] activations.extend(np.empty((batch_size, n_fan_out)) for n_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,184
精华内容 4,473
关键字:

反向传播算法过程及公式推导