精华内容
下载资源
问答
  • 计算过程现在我们有这样一个神经网络: 输入层有两个神经元i1和i2,隐藏层有两个神经元h1和h2,偏差都...现在一步一步进行计算前向传播输入层 -> 隐藏层 计算隐藏层神经元h1与h2的带权输入: neth1=ω1∗i1+ω2∗

    计算过程

    现在我们有这样一个神经网络:


    输入层有两个神经元i1i2,隐藏层有两个神经元h1h2,偏差都为b1,输出层有两个神经元o1o2,偏差都为b2,权重为w
    神经元的输入经过激活函数转变为输出,即带权输入net经过激活函数转变为输出激活值out,如图所示:

    现在一步一步进行计算

    前向传播

    输入层 -> 隐藏层

    1. 计算隐藏层神经元h1h2带权输入
      neth1=ω1i1+ω2i2+b1

      neth2=ω3i1+ω4i2+b1
    2. 计算h1h2输出激活值(激活函数为sigmoid函数):
      sigmoid函数: S(x)=11+ex
    outh1=11+eneth1
    outh2=11+eneth2

    隐藏层 -> 输出层

    1. 计算输出层神经元o1o2带权输入
      neto1=ω5outh1+ω6outh2+b2

      neto2=ω7outh1+ω8outh2+b2
    2. 计算o1o2输出激活值
      outo1=11+eneto1

      outo2=11+eneto2

    至此,我们就计算出了前向传播的输出,接下来进行反向传播

    反向传播

    计算误差(代价函数)

    1. 分别计算o1o2的误差:
      这里使用二次代价函数: E=12(targetoutput)2
    Eo1=12(targeto1outputo1)2
    Eo2=12(targeto2outputo2)2
    2. 计算总误差:

    总误差为: Etotal=12(targetoutput)2

    Etotal=Eo1+Eo2

    权值更新

    微分知识告诉我们,导数体现变化率,那么权值对于总误差的影响则体现在导数上
    要更新权值,就要计算总误差对权值的偏导数,即权值能对总误差产生多少影响,这里用到了链式法则

    隐藏层 -> 输出层的权值更新
    1. w5为例:

      Etotalouto1outo1neto1neto1ω5=Etotalω5

      下图可以更直观的感受反向传播误差:

    2. 分别计算等号左边的三个式子:

      • Etotalouto1
        Etotal=12(targeto1outputo1)2+12(targeto2outputo2)2

        Etotalouto1=(targeto1outputo1)
      • outo1neto1 (即对sigmoid函数求导):
        outo1=11+eneto1

        outo1neto1=outo1(1outo1)
      • neto1ω5
        neto1=ω5outh1+ω6outh2+b2

        neto1ω5=outh1
    3. 然后乘起来即可:

      Etotalω5=(targeto1outputo1)outo1(1outo1)outh1

      现在我们得到了整体误差E(total)w5的偏导值,为了表达方便,在此我们定义:

      δ 为神经元的误差
      (与上文提到的误差不同,上文着重最终结果的误差,此处更着重单个神经元的误差)

    4. 那么δo1即为神经元o1误差,即:

      δo1=Etotalouto1outo1neto1=Etotalneto1

      δo1=(targeto1outputo1)outo1(1outo1)

      所以,整体误差E(total)w5的偏导为:
      Etotalω5=δo1outh1

      最后,w5得到更新:
      ω5ω5ηEtotalω5

      η 学习速率,也叫步长

    输入层(隐藏层) -> 隐藏层的权值更新
    1. w1为例:

      Etotalouth1outh1neth1neth1ω1=Etotalω1

      计算方法与上面类似,但是有个地方需要变一下,在计算h1的误差时,out(h1)会接受来自o1o2两个神经元的误差,所以在这两个都要计算

    2. 分别计算等号左边的三个式子:

      • Etotalouth1
        Etotalouth1=Eo1outh1+Eo2outh1

        先计算 Eo1outh1
        Eo1outh1=Eo1neto1neto1outh1

        其中:
        Eo1neto1=Eo1outo1outo1neto1

        neto1=ω5outh1+ω6outh2+b2

        neto1outh1=ω5

        得到:
        Eo1outh1=Eo1outo1outo1neto1ω5

        代入上边计算出的结果可得:
        Eo1outh1=(targeto1outputo1)outo1(1outo1)ω5

        观察1,2两个式子,我们可以发现,等号右边的左边两项,其实就是δo1,所以上式可以化简为:
        Eo1outh1=δo1ω5

        同理可得另一项:
        Eo2outh1=δo2ω7

        然后加起来便得到第一项:
        Etotalouth1=δo1ω5+δo2ω7
      • outh1neth1 (即对sigmoid函数求导):
        outh1=11+eneth1

        outh1neth1=outh1(1outh1)
      • neth1ω1
        neth1=ω1i1+ω2i2+b1

        neth1ω1=i1
    3. 然后乘起来即可:

      Etotalω1=(δo1ω5+δo2ω7)outh1(1outh1)i1

    4. 那么δh1即为神经元h1误差,即:
      δh1=Etotalouth1outh1neth1=Etotalneth1

      δh1=(δo1ω5+δo2ω7)outh1(1outh1)

      所以,整体误差E(total)w1的偏导为:
      Etotalω1=δh1i1

      最后,w5得到更新:
      ω1ω1ηEtotalω1

    结论公式

    首先我们重新规定一下命名,z表示带权输入,a表示输出激活值,即为经过激活函数的带权输入,C表示代价函数,L表示神经网络的层数。

    现在我们以sigmoid激活函数为例,用四个公式总结一下反向传播算法

    输出层误差的方程

    L层第j个神经元的误差:

    δLj=CaLjσ(zLj)

    用微分算子表示的矩阵形式为:
    δL=aCσ(zL)

    使用下一层的误差表示当前层的误差

    下一层的误差呈上下一层的权重值,再点乘上当前层的输出,即为当前层的误差:

    δl=(δl+1(ωl+1)T)σ(zl)

    偏置b在代价函数C中的改变率

    仔细观察上述计算过程可以发现,偏置b是带权输入z中的一项,而且偏置b的系数为1,所以我们可以得出,代价函数C对某神经元的偏置b的偏导即为该神经元的误差:

    Cb=δ

    权重ω在代价函数C中的改变率

    根据带权输入的表达式(ain为输入该神经元的激活值):

    z=ωain+b

    可知,代价函数 Cω的偏导是在误差的基础上乘上了输入激活值:
    Cω=ainδout

    总结

    四个公式:

    δL=aCσ(zL)

    δl=(δl+1(ωl+1)T)σ(zl)

    Cb=δ

    Cω=ainδout

    参考:
    1. http://www.cnblogs.com/charlotte77/p/5629865.html
    2. http://neuralnetworksanddeeplearning.com/

    展开全文
  • 详解 误差反向传播算法推导

    万次阅读 多人点赞 2018-09-14 03:58:31
    误差反向传播算法误差 反向传播算法(back propagation,简称BP模型)是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络...

    误差反向传播算法误差

    反向传播算法(back propagation,简称BP模型)是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。

    误差反向传播算法系统的解决了多层神经网络隐含层连接权学习问题,人们把采用这种算法进行误差校正的多层前馈网络称为BP网。BP神经网络具有任意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或(Exclusive OR,XOR)和一些其他问题。

    从结构上讲,BP网络具有输入层、隐藏层和输出层;
    从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。

    因此学习误差反向传播算法对于深度学习的深造起到非常重要的作用,这也是本篇博客的主题。

    由于梯度下降法需要求解相邻层的梯度,这就要求网络中需要处处可导,也就是需要激活函数也必须支持可导性。M-P模型中使用step函数作为激活函数,只能输出0或1,不连续所以不可导。为了使误差能够顺利传播,科学家们提出了可导函数sigmoid作为激活函数 f ( u ) f(u) f(u),但是在后期的使用中发现sigmoid函数也存在一定的问题(梯度饱和问题),于是发展出了ReLU函数及其变形激活函数,想深入了解激活函数的小伙伴可以查看下这篇博客:https://blog.csdn.net/ViatorSun/article/details/82418578

    1) 以单层感知器入

    反向传播算法便于大家理解,下面先解释下单层感知器的梯度下降法。由复合函数求导法则可以知道,误差函数求导如下所示:

    ∂ E ∂ w i = ∂ E ∂ y ∂ y ∂ w i \frac{\partial E}{\partial w_i} = \frac{\partial E}{\partial y}\frac{\partial y}{\partial w_i} wiE=yEwiy

    y = f ( u ) y=f(u) y=f(u),求误差函数 E E E w i w_i wi 的导数为:

    ∂ E ∂ w i = − ( r − y ) ∂ y ∂ w i = − ( r − y ) ∂ f ( u ) ∂ w i \frac{\partial E}{\partial w_i} = -(r-y)\frac{\partial y}{\partial w_i} = -(r-y)\frac{\partial f(u)}{\partial w_i} wiE=(ry)wiy=(ry)wif(u)

    f ( u ) f(u) f(u)的导数就是对复合函数求导

    ∂ E ∂ w i = − ( r − y ) ∂ f ( u ) ∂ u ∂ u ∂ w i \frac{\partial E}{\partial w_i} = -(r-y)\frac{\partial f(u)}{\partial u} \frac{\partial u}{\partial w_i} wiE=(ry)uf(u)wiu

    u u u w i w_i wi求导的结果只和 x i x_i xi相关: ∂ u ∂ w i = x i \frac{\partial u}{\partial w_i} = x_i wiu=xi 整理下上面两个式子,得到:

    ∂ E ∂ w i = − ( r − y ) x i ∂ f ( u ) ∂ u \frac{\partial E}{\partial w_i} = -(r-y)x_i\frac{\partial f(u)}{\partial u} wiE=(ry)xiuf(u)

    在此,我们对激活函数 S i g m o i d Sigmoid Sigmoid σ ( x ) = 1 1 + e − x \sigma(x) = \frac {1}{1+e^{-x}} σ(x)=1+ex1函数求导:

    ∂ σ ( x ) ∂ x = e − x ( 1 + e − x ) 2 \frac{\partial \sigma(x)}{\partial x} = \frac {e^{-x}}{(1+e^{-x})^2} xσ(x)=(1+ex)2ex

    e − x = u e^{-x} = u ex=u 则导函数为:

    ∂ f ( u ) ∂ u = f ( u ) ( 1 − f ( u ) ) \frac{\partial f(u)}{\partial u} = f(u)(1-f(u)) uf(u)=f(u)(1f(u))

    将激活函数的导数代入上面整理结果得到:

    ∂ E ∂ w i = − ( r − y ) x i f ( u ) ( 1 − f ( u ) ) \frac{\partial E}{\partial w_i} = -(r-y)x_i f(u)(1-f(u)) wiE=(ry)xif(u)(1f(u))

    由于输出结果 y = f ( u ) y=f(u) y=f(u),所以单层感知器的权重调整值为(其中 η \eta η为学习率):

    Δ w i = − η ∂ E ∂ w i = η ( r − y ) y ( 1 − y ) x i \Delta w_i = - \eta\frac{\partial E}{\partial w_i} = \eta(r-y)y(1-y)x_i Δwi=ηwiE=η(ry)y(1y)xi

    至此,这就是单层感知器权重的调节量。


    2)多层感知器的反传传播算法

    接下来,我们再分析下多层感知器。多层感知器的误差函数 E E E等于个输出单元的误差总和。 E = 1 2 ∑ j = 1 q ( r j − y j ) 2 E = \frac{1}{2} \sum_{j=1}^q (r_j - y_j)^2 E=21j=1q(rjyj)2

    对误差函数求导得:

    ∂ E ∂ w i j = ∂ E ∂ y j ∂ y j ∂ w i j \frac{\partial E}{\partial w_{ij}} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial w_{ij}} wijE=yjEwijyj

    其中, w i j w_{ij} wij代表 x i x_i xi y j y_j yj之间的连接权重,对 E E E求导的结果只和 y j y_j yj相关,如下所示:

    ∂ E ∂ w i j = − ( r j − y j ) ∂ y j ∂ w i j \frac{\partial E}{\partial w_{ij}} = -(r_j - y_j) \frac{\partial y_j}{\partial w_{ij}} wijE=(rjyj)wijyj

    与单层感知相同,对上式展开后对复合函数求导:

    ∂ E ∂ w i j = − ( r j − y j ) ∂ y j ∂ u j ∂ u j ∂ w i j \frac{\partial E}{\partial w_{ij}} = -(r_j - y_j) \frac{\partial y_j}{\partial u_j} \frac{\partial u_j}{\partial w_{ij}} wijE=(rjyj)ujyjwijuj

    下面与单层感知器一样,对误差函数求导得:

    ∂ E ∂ w i j = − ( r j − y j ) y j ( 1 − y j ) x i \frac{\partial E}{\partial w_{ij}} = -(r_j - y_j) y_j (1-y_j)x_i wijE=(rjyj)yj(1yj)xi

    则权重的调节值为(其中 η \eta η为学习率):

    Δ w i j = η ( r j − y j ) y j ( 1 − y j ) x i \Delta w_{ij} = \eta(r_j - y_j )y_j (1-y_j)x_i Δwij=η(rjyj)yj(1yj)xi

    由此可见,多层感知器中,只需要使用与连接权重 w i j w_{ij} wij相关的输入 x i x_i xi和输出 y j y_j yj,即可计算出连接权重的调节值。

    将神经网络分解开可以更清晰的分析,再将最后一列各变量之间的偏导数累成就是整个链式法则的体现。


    3) 带中间层的多层感知器的反向传播算法

    最后我们再解释下带中间层的多层感知器的梯度下降法。由于中间层的加入,层之间的权重下标我们增加到三个,其中 i i i表示输入层单元, j j j表示中间层单元, k k k表示输出层单元 。如下图所

    首先考虑输出层与中间层之间的连接权重 w 2 j k w_{2jk} w2jk的调整。对权重 w 2 j k w_{2jk} w2jk求导:

    ∂ E ∂ w 2 j k = ∂ E ∂ y k ∂ y k ∂ u 2 k ∂ u 2 k ∂ w 2 j k \frac{\partial E}{\partial w_{2jk}} = \frac{\partial E}{\partial y_k} \frac{\partial y_k}{\partial u_{2k}} \frac{\partial u_{2k}}{\partial w_{2jk}} w2jkE=ykEu2kykw2jku2k

    经过误差函数 E E E对输出 y k y_k yk求导,输出 y k y_k yk求导,输出 y k y_k yk对激活值 u 2 k u_{2k} u2k求导,激活值 u 2 k u_{2k} u2k对连接权重 w 2 j k w_{2jk} w2jk求导之后,得到:

    ∂ E ∂ w 2 j k = − ( r k − y k ) y k ( 1 − y k ) z j \frac{\partial E}{\partial w_{2jk}} = -(r_k - y_k) y_k ( 1-y_k) z_j w2jkE=(rkyk)yk(1yk)zj

    所以,即便是输出层有多个单元,只要对每个输出单元分别求导后,也能得到误差函数对中间层权重的偏导数接下来计算输入层和中间层之间的连接权重 w 1 i j w_{1ij} w1ij的偏导数:

    ∂ E ∂ w 1 i j = ∑ k = 1 q [ ∂ E ∂ y k ∂ y k ∂ u 2 k ∂ u 2 k ∂ w 1 i j ] \frac{\partial E}{\partial w_{1ij}} = \sum_{k=1}^q[ \frac{\partial E}{\partial y_k} \frac{\partial y_k}{\partial u_{2k}} \frac{\partial u_{2k}}{\partial w_{1ij}}] w1ijE=k=1q[ykEu2kykw1iju2k]

    中间层的单元 j j j和输出层的所有单元相连,所以如上式所示,误差函数 E E E对连接权重 W 1 i j W_{1ij} W1ij求偏导,就是对所有输出单元的导数进行加权和,实际使用的是所有输出单元连接权重的总和。将 s i g m o i d sigmoid sigmoid函数的导数和误差函数代入到上式,得:

    ∂ E ∂ w 1 i j = − ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) ∂ u 2 k ∂ w 1 i j ] \frac{\partial E}{\partial w_{1ij}} = -\sum_{k=1}^q[ (r_k - y_k)y_k(1-y_k) \frac{\partial u_{2k}}{\partial w_{1ij}}] w1ijE=k=1q[(rkyk)yk(1yk)w1iju2k]

    由于连接权重 w 1 i j w_{1ij} w1ij只对中间层 z j z_j zj的状态产生影响,所以上式中剩余部分求导后的结果如下:

    ∂ u 2 k ∂ w 1 i j = ∂ u 2 k ∂ z j ∂ z j ∂ w 1 i j \frac{\partial u_{2k}}{\partial w_{1ij}} = \frac{\partial u_{2k}}{\partial z_j } \frac{\partial z_j}{\partial w_{1ij}} w1iju2k=zju2kw1ijzj

    激活值 u 2 k u_{2k} u2k z j z_j zj求导得到连接权重 w 2 j k w_{2jk} w2jk,结合下式就可以求出输入层与中间层之间的连接权重 w 1 i j w_{1ij} w1ij的调整值:

    ∂ z j ∂ w 1 i j = ∂ z j ∂ u 1 j ∂ u 1 j ∂ w 1 i j = z j ( 1 − z j ) x i \frac{\partial z_j}{\partial w_{1ij}} = \frac{\partial z_j}{\partial u_{1j}} \frac{\partial u_{1j}}{\partial w_{1ij}} = z_j ( 1- z_j) x_i w1ijzj=u1jzjw1iju1j=zj(1zj)xi Δ w 1 i j = η ∑ k = 1 q [ ( r k − y k ) y k ( 1 − y k ) w 2 j k ] z j ( 1 − z j ) x i \Delta w_{1ij} = \eta \sum_{k=1}^q [ (r_k - y_k) y_k ( 1- y_k) w_{2jk} ] z_j (1-z_j) x_i Δw1ij=ηk=1q[(rkyk)yk(1yk)w2jk]zj(1zj)xi

    具体推导过程可以参考下列公式

    在此需要注意 z j = f ( u j ) z_j=f(u_j) zj=f(uj),输入层与中间层之间的权重调整值是相关单元在中间层与输出层之间的权重调整值的总和。

    4)小结

    至此,误差反向传播算法的讲解就全部结束了,其中包含了大量的公式,理解起来可能会有一些难度,但是这是必过的槛。如果实在不理解过程的话,只记住最后那张图也可以,那张图便是整个算法的精髓所在。除此之外,在实际应用过程中可能还会遇到一个问题,那就是激活函数使用 S i g m o i d Sigmoid Sigmoid或者 t a n h tanh tanh函数的时候,如果 x x x趋向正负无穷的时候,会出现偏导数为零的情况,见下图,左侧为 S i g m o i d Sigmoid Sigmoid函数图像,右侧为其导函数的图像。这时候,由于权重调整值趋近于0,所以无法调整连接权重,权重所在的单元也就不再起作用。

    这就是误差反向传播算法中的梯度消失导致无法调整连接权重的问题,对于这个问题,需要在训练的过程中合理地调整学习率 η \eta η,以防止梯度消失。

    展开全文
  • 推导CNN中的BP误差反向传播算法

    千次阅读 2019-07-11 22:21:37
    实际上就是一个:梯度下降反向传播更新 如果熟知高数和懂最优化的梯度下降理论,可以直接跳到 四 一、反向传播的由来 在我们开始DL的研究之前,需要把ANN—人工神经元网络以及bp算法做一个简单解释。 输入层...

    实际上就是一个:梯度下降反向传播更新

    如果熟知高数和懂最优化的梯度下降理论,可以直接跳到

    一、反向传播的由来

    在我们开始DL的研究之前,需要把ANN—人工神经元网络以及bp算法做一个简单解释。

    输入层/输入神经元,输出层/输出神经元,隐层/隐层神经元,权值,偏置,激活函数

    接下来我们需要知道ANN是怎么训练的,假设ANN网络已经搭建好了,在所有应用问题中(不管是网络结构,训练手段如何变化)我们的目标是不会变的,那就是网络的权值和偏置最终都变成一个最好的值,这个值可以让我们由输入可以得到理想的输出,于是问题就变成了y=f(x,w,b)(x是输入,w是权值,b为偏置,所有这些量都可以有多个,比如多个x1,x2,x3……最后f()就好比我们的网络它一定可以用一个函数来表示,我们不需要知道f(x)具体是怎样的函数,从小我们就认为只要是函数就一定要是可表示的,像f(x)=sin(x)一样,但是请摈弃这样的错误观念,我们只需要知道一系列的w和b决定了一个函数f(x),这个函数让我们由输入可以计算出合理的y

    最后的目标就变成了尝试不同的w,b值,使得最后的y=f(x)无限接近我们希望得到的值t

    但是这个问题依然很复杂,我们把它简化一下,让误差(y-t)^2的值尽可能的小。于是原先的问题化为了C(w,b)=(f(x,w,b)-t)^2取到一个尽可能小的值。这个问题不是一个困难的问题,不论函数如何复杂,如果C降低到了一个无法再降低的值,那么就取到了最小值(假设我们不考虑局部最小的情况)

    如何下降?数学告诉我们对于一个多变量的函数f(a,b,c,d,……)而言,我们可以求得一个向量,它称作该函数的梯度,要注意的是,梯度是一个方向向量,它表示这个函数在该点变化率最大的方向(这个定理不详细解释了,可以在高等数学教材上找到)于是C(w,b)的变化量ΔC就可以表示成

    其中

    是该点上的微小变化,我们可以随意指定这些微小变化,只需要保证ΔC<0就可以了,但是为了更快的下降,我们为何不选在梯度方向上做变化呢?

    事实上,梯度下降的思想就是这样考虑的,我们使得

    从而保证C一直递减,而对于w来说只要每次更新

    即可。这个公式表示误差C在沿着w的负梯度方向(下降最快的方向)走 η

    ok,到这里,似乎所有的问题都解决了,让我们重新整理一下思绪,我们将问题转化了很多步:

    网络权值偏置更新问题 ==> f(x,w,b)的结果逼近t ==> C(w,b)=(f(x,w,b)-t)^2取极小值问题 ==> C(w,b)按梯度下降问题 ==>取到极小值,网络达到最优

    千万别忘了一点!!推导基于一个前提:我们已经提前知道了当前点的梯度。然而事实并非如此!!

    这个问题困扰了NN研究者多年,1969年M.Minsky和S.Papert所著的《感知机》一书出版,它对单层神经网络进行了深入分析,并且从数学上证明了这种网络功能有限,甚至不能解决象"异或"这样的简单逻辑运算问题。同时,他们还发现有许多模式是不能用单层网络训练的,而对于多层网络则没有行之有效的低复杂度算法,最后他们甚至认为神经元网络无法处理非线性问题。然而于1974年,Paul Werbos首次给出了如何训练一般网络的学习算法—back propagation。这个算法可以高效的计算每一次迭代过程中的梯度,让以上我们的推导得以实现!!

    不巧的是,在当时整个人工神经网络社群中无人知晓Paul所提出的学习算法。直到80年代中期,BP算法才重新被David Rumelhart、Geoffrey Hinton及Ronald Williams、David Parker和Yann LeCun独立发现,并获得了广泛的注意,引起了人工神经网络领域研究的第二次热潮。

    三、一个很好的例子

    现在,我们再把权值考虑进去,以下是一个很好的例子,有助于我们去理解反向传播

    来源:Charlotte77的博客http://www.cnblogs.com/charlotte77/p/5629865.html

    假设,你有这样一个网络层:

    第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。

      现在对他们赋上初值,如下图:

             其中,输入数据  i1=0.05,i2=0.10;

         输出数据 o1=0.01,o2=0.99;

         初始权重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

               w5=0.40,w6=0.45,w7=0.50,w8=0.88

      目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

    Step 1 前向传播

    1.输入层---->隐含层

      计算神经元h1的输入加权和:

    神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

    同理,可计算出神经元h2的输出o2:

    2.隐含层---->输出层:

      计算输出层神经元o1和o2的值:

    这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

    Step 2 反向传播

    1.计算总误差

    总误差:(square error)

    但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:

    2.隐含层---->输出层的权值更新:

    以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)

    下面的图可以更直观的看清楚误差是怎样反向传播的:

    现在我们来分别计算每个式子的值:

    这样我们就计算出整体误差E(total)对w5的偏导值。

    回过头来再看看上面的公式,我们发现:

    为了表达方便,用来表示输出层的误差:

    因此,整体误差E(total)对w5的偏导公式可以写成:

    如果输出层误差计为负的话,也可以写成:

    最后我们来更新w5的值:

    (其中,是学习速率,也就是往负梯度方向前进的步长,这里我们取0.5)

    同理,可更新w6,w7,w8:

    3.隐含层---->隐含层的权值更新:

     方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

    最后,三者相乘:

     为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

    最后,更新w1的权值:

    同理,额可更新w2,w3,w4的权值:

    这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的

    四、最一般的情况

    原理部分参考李宏毅机器学习PPT,以下推导过程详细且易理解。

    1. 变量定义

    2. 代价函数

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

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

    3. 公式及其推导

            本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。

            首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

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

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

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

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

            推导过程:

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

            推导过程:

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

            推导过程:

    4. 反向传播算法伪代码

    1. 输入训练集
    2. 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值:
      1. 前向传播:

    , 

    1. 计算输出层产生的错误:

    1. 反向传播错误:

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

    贴出手写推导:

    参考文献:

    https://www.cnblogs.com/wlzy/p/7751297.html

    https://blog.csdn.net/recsys_ml/article/details/86751401

    展开全文
  • BP神经网络:误差反向传播算法公式推导 开端: BP算法提出 1. BP神经网络参数符号及激活函数说明 2. 网络输出误差(损失函数)定义 3. 隐藏层与输出层间的权重更新公式推导 4. 输入层与隐藏层间的权重更新...

    BP神经网络:误差反向传播算法公式推导

    开端: BP算法提出


    1. BP神经网络参数符号及激活函数说明


     

    2. 网络输出误差(损失函数)定义


     

    3. 隐藏层与输出层间的权重更新公式推导


    4. 输入层与隐藏层间的权重更新公式推导


     

    欢迎转载,转载时请注明出处,谢谢!

    展开全文
  • 误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的。而权重和偏置的调整一般使用梯度下降法。 ...
  • 如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示: 至此,“反向传播算法”及公式推导的过程总算是讲完了啦!个人感觉,尤其是第二组图,还算是蛮通俗...
  • BP神经网络算法即误差传播算法(error Back Propagation),先将输入层输入的数据提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结构;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据...
  • 误差反向传播算法浅解

    万次阅读 2017-09-28 09:24:48
    反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称。由于多层前馈神经网络的训练经常采用误差反向传播算法,人们也常把多层前馈神经网络称为BP网络。
  • 优化算法基本上都是在反向传播算出梯度之后进行改进的,因为反向传播算法是一个递归形式,通过一层层的向后求出传播误差即可。 计算Loss函数的目的:**计算出当前神经网络建模出来的输出数据与理想数据之间的距离,...
  • 反向传播算法是人工神经网络训练时采用的一种通用方法,在现代深度学习...反向传播算法从神经网络的输出层开始,利用递推公式根据后一层的误 差计算本层的误差,通过误差计算本层参数的梯度值,然后将差项传播到前一层
  • 反向传播算法 这个网络只有3层,分别是蓝色的输入层、绿色的隐藏层和红色的输出层。 假设给了m个训练样本,第i个输入输出对表示为: 其中,x和y是3维向量。对于输入x,我们把g称作神经网络的预测(输出)值。 ...
  • 首先来一个反向传播算法的定义(转自维基百科):反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。...
  • ① BP算法全称 (Error) Back Propagation 算法,中文名曰:误差反向传播算法。 ②该算法是干嘛的? 计算梯度。更简单点,求(偏)导。对于简单的函数如下: 我们使用肉眼就可以看出其导数为 但是对于特别复杂的...
  • Yolov-1-TX2上用YOLOv3训练自己数据集的流程(VOC2007-...yolov-5-目标检测:YOLOv2算法原理详解 yolov--8--Tensorflow实现YOLO v3 yolov--9--YOLO v3的剪枝优化 yolov--10--目标检测模型的参数评估指标详解、概...
  • 神经网络-误差反向传播算法 BP算法

    千次阅读 2020-07-25 20:55:22
    BP算法学习笔记 1 学习基础–神经网络的基本原理和前向过程 ​ 如下图所示,这时一个简单的神经网络模型,通过这样一个模型我们就可以完成一些工作。例如我们输入三个数据,a1表示一个公司的银行存款,a2表示所拥有...
  • 在吴恩达《机器学习》的教学视频中,讲神经网络反向传播章节时,神经单元误差是直接给出的推导式,很难让人信服。在网上看了些相关文章后,还是理解的不透彻,之后通过看《深度学习的数学》这本书里的描述才测底明白...
  • 反向传播算法(过程及公式推导)

    万次阅读 多人点赞 2016-04-01 21:19:56
    反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。
  • 上一篇文章介绍的是用数值微分法计算梯度,但这种方法比较耗时间,接下来介绍新的梯度计算法:误差反向传播法。在此之前,先介绍计算图。 一、计算计算图用节点和箭头表示,节点表示某种运算(可以是加减乘除等...
  • https://zhuanlan.zhihu.com/p/25081671 详解反向传播算法(上)
  • 在机器学习算法中,误差反向传播和梯度下降是模型收敛的关键技术,作者将以单隐层模型为例说明误差反向传播和梯度下降的工作原理。 各种算法的单隐层模型结构大同小异 正向传播 假设:主要模型参数有3个,输入...
  • 而是直接利用均方差误差函数计算与One-hot 编码的真实标签之间的误差,所有的网络激活函数全部采用Sigmoid 函数,这些设计都是为了能直接利用梯度推导公式。 二、数据集 通过scikit-learn 库提供的便捷工具生成...
  • 最近看了BP神经网络(Back Propagation Neural Networks),对于其中误差反向传播公式的推导比较困惑,在参考周志华老师的《机器学习》和网上一些博客后,做出一个简单的还原。 1. BP网络模型及变量说明 1.1 模型...
  • 计算图的反向传播 链式法则和计算图 加法节点的反向传播 乘法节点的反向传播 “购买水果”问题的反向传播 激活函数(层)的反向传播 激活函数ReLU的反向传播 激活函数Sigmoid的反向传播 Affine/softmax激活...
  • 在课程中计算反向传播的时候,关于输出层的误差直接就给出了 δL=y−aL. \delta^{L}=y-a^{L}. δL=y−aL. 一直很疑惑,按照公式推算应该是 δL=∂C∂zL=∂C∂aL∂aL∂zL=∂C∂aLσ′(zL). \delta^L=\frac{\partial C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,443
精华内容 6,177
关键字:

反向传播算法误差计算公式