精华内容
下载资源
问答
  • 反向传播
    千次阅读 多人点赞
    2019-05-18 22:58:54

    简介

    误差反向传播算法简称反向传播算法(Back Propagation)。使用反向传播算法的多层感知器又称为BP神经网络。

    BP算法是一个迭代算法,它的基本思想如下:

    1. 将训练集数据输入到神经网络的输入层,经过隐藏层,最后达到输出层并输出结果,这就是前向传播过程。
    2. 由于神经网络的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
    3. 在反向传播的过程中,根据误差调整各种参数的值(相连神经元的权重),使得总损失函数减小。
    4. 迭代上述三个步骤(即对数据进行反复训练),直到满足停止准则。

    示例

    有如下一个神经网络:

    1.png

    第一层是输入层,包含两个神经元 i 1 i_1 i1 i 2 i_2 i2 和偏置项 b 1 b_1 b1;第二层是隐藏层,包含两个神经元 h 1 h_1 h1 h 2 h_2 h2 和偏置项 b 2 b_2 b2;第三层是输出 o 1 o_1 o1 o 2 o_2 o2。每条线上标的 w i w_i wi 是层与层之间连接的权重。激活函数是 s i g m o d sigmod sigmod 函数。我们用 z z z 表示某神经元的加权输入和;用 a a a 表示某神经元的输出。

    上述各参数赋值如下:

    参数
    i 1 i_1 i10.05
    i 2 i_2 i20.10
    w 1 w_1 w10.15
    w 2 w_2 w20.20
    w 3 w_3 w30.25
    w 4 w_4 w40.30
    w 5 w_5 w50.40
    w 6 w_6 w60.45
    w 7 w_7 w70.50
    w 8 w_8 w80.55
    b 1 b_1 b10.35
    b 2 b_2 b20.60
    o 1 o_1 o10.01
    o 2 o_2 o20.99

    Step 1 前向传播

    输入层 —> 隐藏层

    神经元 h 1 h_1 h1 的输入加权和:
    输入加权和
    神经元 h 1 h_1 h1 的输出 a h 1 a_{h1} ah1
    a h 1 = 1 1 + e − z h 1 = 1 1 + e − 0.3775 = 0.593269992 a_{h1} = \frac{1}{1+e^{-z_{h1}}} = \frac{1}{1+e^{-0.3775}} = 0.593269992 ah1=1+ezh11=1+e0.37751=0.593269992
    同理可得,神经元 h 2 h_2 h2 的输出 a h 2 a_{h2} ah2
    a h 2 = 0.596884378 a_{h2} = 0.596884378 ah2=0.596884378

    隐藏层 —> 输出层

    计算输出层神经元 o 1 o1 o1 o 2 o2 o2 的值:
    隐藏层->输出层
    前向传播的过程就结束了,我们得到的输出值是 [ 0.751365069 , 0.772928465 ] [0.751365069, 0.772928465] [0.751365069,0.772928465] ,与实际值 [ 0.01 , 0.99 ] [0.01, 0.99] [0.01,0.99] 相差还很远。接下来我们对误差进行反向传播,更新权值,重新计算输出。

    Step 2 反向传播

    1. 计算损失函数:

    E t o t a l = ∑ 1 2 ( t a r g e t − o u t p u t ) 2 E_{total} = \sum\frac{1}{2}(target - output)^2 Etotal=21(targetoutput)2

    但是有两个输出,所以分别计算 o 1 o_1 o1 o 2 o_2 o2 的损失值,总误差为两者之和:
    E o 1 = 1 2 ( 0.01 − 0.751365069 ) 2 = 0.274811083 E o 2 = 1 2 ( 0.99 − 0.772928465 ) 2 = 0.023560026 E t o t a l = E o 1 + E o 2 = 0.274811083 + 0.023560026 = 0.298371109 E_{o_1} = \frac {1}{2}(0.01 - 0.751365069)^2 = 0.274811083 \\ E_{o_2} = \frac {1}{2}(0.99 - 0.772928465)^2 = 0.023560026 \\ E_{total} = E_{o_1} + E_{o_2} = 0.274811083 + 0.023560026 = 0.298371109 Eo1=21(0.010.751365069)2=0.274811083Eo2=21(0.990.772928465)2=0.023560026Etotal=Eo1+Eo2=0.274811083+0.023560026=0.298371109

    1. 隐藏层 —> 输出层的权值更新

    以权重参数 w 5 w_5 w5 为例,如果我们想知道 w 5 w_5 w5 对整体损失产生了多少影响,可以用整体损失对 w 5 w_5 w5 求偏导:
    ∂ E t o t a l ∂ w 5 = ∂ E t o t a l ∂ a o 1 ∗ ∂ a o 1 ∂ z o 1 ∗ ∂ z o 1 ∂ w 5 \frac{\partial E_{total}}{\partial w_5} = {\frac {\partial E_{total}}{\partial a_{o_1}}}*{\frac {\partial a_{o_1}}{\partial z_{o_1}} }*{ \frac {\partial z_{o_1}} {\partial w_5} } w5Etotal=ao1Etotalzo1ao1w5zo1
    下面的图可以更直观了解误差是如何反向传播的:

    2.png

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

    计算 ∂ E t o t a l ∂ a o 1 \frac {\partial E_{total}} {\partial a_{o_1}} ao1Etotal
    E t o t a l = 1 2 ( t a r g e t o 1 − a o 1 ) 2 + 1 2 ( t a r g e t o 2 − a o 1 ) 2 ∂ E t o t a l ∂ a o 1 = 2 ∗ 1 2 ( t a r g e t o 1 − a o 1 ) ∗ − 1 ∂ E t o t a l ∂ a o 1 = − ( t a r g e t o 1 − a o 1 ) = 0.751365069 − 0.01 = 0.741365069 E_{total} = \frac {1}{2}(target_{o_1} - a_{o_1})^2 + \frac {1}{2}(target_{o_2} - a_{o_1})^2 \\ \frac {\partial E_{total}} {\partial a_{o_1}} = 2 * \frac {1}{2} (target_{o_1} - a_{o_1})*-1 \\ \frac {\partial E_{total}} {\partial a_{o_1}} = -(target_{o_1} - a_{o_1}) = 0.751365069-0.01=0.741365069 \\ Etotal=21(targeto1ao1)2+21(targeto2ao1)2ao1Etotal=221(targeto1ao1)1ao1Etotal=(targeto1ao1)=0.7513650690.01=0.741365069
    计算 ∂ E t o t a l ∂ a o 1 \frac {\partial E_{total}} {\partial a_{o_1}} ao1Etotal
    a o 1 = 1 1 + e − z o 1 ∂ a o 1 ∂ z o 1 = a o 1 ∗ ( 1 − a o 1 ) = 0.751365069 ∗ ( 1 − 0.751365069 ) = 0.186815602 a_{o_1} = \frac {1}{1+e^{-z_{o_1}}} \\ \frac {\partial a_{o_1}} {\partial z_{o_1}} = a_{o_1}*(1-a_{o_1}) = 0.751365069*(1-0.751365069) = 0.186815602 ao1=1+ezo11zo1ao1=ao1(1ao1)=0.751365069(10.751365069)=0.186815602
    计算 ∂ z o 1 ∂ w 5 \frac {\partial z_{o_1}} {\partial w_5} w5zo1
    z o 1 = w 5 ∗ a h 1 + w 6 ∗ a h 2 + b 2 ∗ 1 ∂ z o 1 ∂ w 5 = a h 1 = 0.593269992 z_{o_1} = w_5*a_{h1} + w_6*a_{h2} + b_2*1 \\ \frac {\partial z_{o_1}} {\partial w_5} = a_{h_1} = 0.593269992 zo1=w5ah1+w6ah2+b21w5zo1=ah1=0.593269992
    最后三者相乘:
    ∂ E t o t a l ∂ w 5 = 0.741365069 ∗ 0.186815602 ∗ 0.593269992 = 0.082167041 \frac {\partial E_{total}} {\partial w_5} = 0.741365069*0.186815602*0.593269992 = 0.082167041 w5Etotal=0.7413650690.1868156020.593269992=0.082167041
    这样我们就算出整体损失 E t o t a l E_{total} Etotal w 5 w_5 w5 的偏导值。
    ∂ E t o t a l ∂ w 5 = − ( t a r g e t o 1 − a o 1 ) ∗ a o 1 ∗ ( 1 − a o 1 ) ∗ a h 1 \frac {\partial E_{total}} {\partial w_5} = -(target_{o_1} - a_{o_1}) * a_{o_1}*(1-a_{o_1}) * a_{h_1} w5Etotal=(targeto1ao1)ao1(1ao1)ah1
    针对上述公式,为了表达方便,使用 δ o 1 \delta_{o_1} δo1 来表示输出层的误差:
    δ o 1 = ∂ E t o t a l ∂ a o 1 ∗ ∂ a o 1 ∂ z o 1 = ∂ E t o t a l ∂ z o 1 δ o 1 = − ( t a r g e t o 1 − a o 1 ) ∗ a o 1 ∗ ( 1 − a o 1 ) \delta_{o_1} = {\frac {\partial E_{total}}{\partial a_{o_1}}}*{\frac {\partial a_{o_1}}{\partial z_{o_1}} } = \frac {\partial E_{total}} {\partial z_{o_1}} \\ \delta_{o_1} = -(target_{o_1} - a_{o_1}) * a_{o_1}*(1-a_{o_1}) δo1=ao1Etotalzo1ao1=zo1Etotalδo1=(targeto1ao1)ao1(1ao1)
    因此整体损失 E t o t a l E_{total} Etotal w 5 w_5 w5 的偏导值可以表示为:
    ∂ E t o t a l ∂ w 5 = δ o 1 ∗ a h 1 \frac {\partial E_{total}}{\partial w_5} = \delta_{o_1}*a_{h_1} w5Etotal=δo1ah1
    最后我们来更新 w 5 w_5 w5 的值:
    w 5 + = w 5 − η ∗ ∂ E t o t a l ∂ w 5 = 0.4 − 0.5 ∗ 0.082167041 = 0.35891648 η : 学 习 率 w_5^+ = w_5 - \eta * \frac {\partial E_{total}} {\partial w_5} = 0.4 - 0.5*0.082167041 = 0.35891648 \qquad \eta: 学习率 w5+=w5ηw5Etotal=0.40.50.082167041=0.35891648η:
    同理可更新 w 6 , w 7 , w 8 w_6, w_7, w_8 w6,w7,w8
    w 6 + = 0.408666186 w 7 + = 0.511301270 w 8 + = 0.561370121 w_6^+ = 0.408666186 \\ w_7^+ = 0.511301270 \\ w_8^+ = 0.561370121 w6+=0.408666186w7+=0.511301270w8+=0.561370121

    1. 隐藏层 —> 隐藏层的权值更新:

    计算 ∂ E t o t a l ∂ w 1 \frac {\partial E_{total}} {\partial w_1} w1Etotal 与上述方法类似,但需要注意下图:

    3.png

    计算 ∂ E t o t a l ∂ a h 1 \frac {\partial E_{total}} {\partial a_{h_1}} ah1Etotal
    ∂ E t o t a l ∂ a h 1 = ∂ E o 1 ∂ a h 1 + ∂ E o 2 ∂ a h 1 \frac {\partial E_{total}} {\partial a_{h_1}} = \frac {\partial E_{o_1}} {\partial a_{h_1}} + \frac {\partial E_{o_2}} {\partial a_{h_1}} ah1Etotal=ah1Eo1+ah1Eo2

    先计算 ∂ E o 1 ∂ a h 1 \frac {\partial E_{o_1}} {\partial a_{h_1}} ah1Eo1

    o1h1

    同理可得:
    ∂ E o 2 ∂ a h 1 = − 0.019049119 \frac {\partial E_{o_2}} {\partial a_{h_1}} = -0.019049119 ah1Eo2=0.019049119
    两者相加得:
    ∂ E t o t a l ∂ a h 1 = 0.055399425 − 0.019049119 = 0.036350306 \frac {\partial E_{total}} {\partial a_{h_1}} = 0.055399425 - 0.019049119 = 0.036350306 ah1Etotal=0.0553994250.019049119=0.036350306
    计算 a h 1 z h 1 \frac {a_{h_1}} {z_{h_1}} zh1ah1
    a h 1 z h 1 = a h 1 ∗ ( 1 − a h 1 ) = 0.593269992 ∗ ( 1 − 0.593269992 ) = 0.2413007086 \frac {a_{h_1}} {z_{h_1}} = a_{h_1} * (1-a_{h_1}) = 0.593269992*(1-0.593269992) = 0.2413007086 zh1ah1=ah1(1ah1)=0.593269992(10.593269992)=0.2413007086
    计算 ∂ z h 1 ∂ w 1 \frac {\partial z_{h_1}} {\partial w_1} w1zh1
    ∂ z h 1 ∂ w 1 = i 1 = 0.05 \frac {\partial z_{h_1}} {\partial w_1} = i_1 = 0.05 w1zh1=i1=0.05
    最后三者相互乘:
    ∂ E t o t a l ∂ w 1 = 0.036350306 ∗ 0.2413007086 ∗ 0.05 = 0.000438568 \frac {\partial E_{total}} {\partial w_1} = 0.036350306 * 0.2413007086 * 0.05 = 0.000438568 w1Etotal=0.0363503060.24130070860.05=0.000438568

    为了简化公式,用 δ h 1 \delta_{h_1} δh1 表示隐藏层单元 h 1 h_1 h1 的误差:

    simplify

    最后更新 w 1 w_1 w1 的权值:
    w 1 + = w 1 − η ∗ ∂ E t o t a l ∂ w 1 = 0.15 − 0.5 ∗ 0.000438568 = 0.149780716 w_1^+ = w_1 - \eta * \frac {\partial E_{total}} {\partial w_1} = 0.15 - 0.5*0.000438568 = 0.149780716 w1+=w1ηw1Etotal=0.150.50.000438568=0.149780716
    同理,更新 w 2 , w 3 , w 4 w_2, w_3, w_4 w2,w3,w4 权值:
    w 2 + = 0.19956143 w 3 + = 0.24975114 w 4 + = 0.29950229 w_2^+ = 0.19956143 \\ w_3^+ = 0.24975114 \\ w_4^+ = 0.29950229 w2+=0.19956143w3+=0.24975114w4+=0.29950229
    这样,反向传播算法就完成了,最后我们再把更新的权值重新计算,不停地迭代。在这个例子中第一次迭代之后,总误差 E t o t a l E_{total} Etotal 由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为 [ 0.015912196 , 0.984065734 ] ( 原 输 入 为 [ 0.01 , 0.99 ] [0.015912196,0.984065734](原输入为[0.01,0.99] [0.015912196,0.984065734]([0.01,0.99] ,证明效果还是不错的。

    公式推导

    4.png

    符号说明

    符号说明
    n l n_l nl网络层数
    y j y_j yj输出层第 j j j 类标签
    S l S_l Sl l l l 层神经元个数(不包括偏置项)
    g ( x ) g(x) g(x)激活函数
    w i j l w_{ij}^{l} wijl l − 1 l-1 l1 层的第 j j j 个神经元连接到第 l l l 层第 i i i 个神经元的权重
    b i l b_i^{l} bil l l l 层的第 i i i 个神经元的偏置
    z i l z_i^{l} zil l l l 层的第 i i i 个神经元的输入加权和
    a i l a_i^{l} ail l l l 层的第 i i i 个神经元的输出(激活值)
    δ i l \delta_i^{l} δil l l l 层的第 i i i 个神经元产生的错误

    推导过程

    基本公式

    basic expresssion

    梯度方向传播公式推导

    初始条件

    6

    递推公式

    7

    反向传播伪代码

    1. 输入训练集。
    2. 对于训练集的每个样本 x ⃗ \vec x x ,设输入层对应的激活值为 a l a^l al
      • 前向传播: z l = w l ∗ a l − 1 + b l , a l = g ( z l ) z^l = w^l*a^{l-1}+b^l, a^l = g(z^l) zl=wlal1+bl,al=g(zl)
      • 计算输出层产生的误差: δ L = ∂ J ( θ ) ∂ a L ⊙ g ′ ( z L ) \delta^L = \frac {\partial J(\theta)} {\partial a^L} \odot g'(z^L) δL=aLJ(θ)g(zL)
      • 反向传播错误: δ l = ( ( w l + 1 ) T ∗ δ l + 1 ) ⊙ g ′ ( z l ) \delta^l = ((w^{l+1})^T*\delta^{l+1}) \odot g'(z^l) δl=((wl+1)Tδl+1)g(zl)
    3. 使用梯度下降训练参数:
      • w l ⇢ w l − α m ∑ x δ x , l ∗ ( a x , l − 1 ) T w^l \dashrightarrow w^l - \frac {\alpha} {m} \sum_x\delta^{x, l}*(a^{x, l-1})^T wlwlmαxδx,l(ax,l1)T
      • b l ⇢ b l − η m ∑ x δ x , l b^l \dashrightarrow b^l - \frac {\eta} {m} \sum_x\delta^{x, l} blblmηxδx,l

    交叉熵损失函数推导

    对于多分类问题, s o f t m a x softmax softmax 函数可以将神经网络的输出变成一个概率分布。它只是一个额外的处理层,下图展示了加上了 s o f t m a x softmax softmax 回归的神经网络结构图:

    softmax

    递推公式仍然和上述递推公式保持一致。初始条件如下:

    8

    s o f t m a x softmax softmax 偏导数计算:
    ∂ y j p ∂ a i n l = { − y i p ∗ y j p i ≠ j y i p ∗ ( 1 − y i p ) i = j \frac {\partial y_j^p} {\partial a_i^{nl}} = \left\{ \begin{aligned} -y_i^p*y_j^p \qquad i \neq j \\ y_i^p*(1-y_i^p) i = j \end{aligned} \right. ainlyjp={yipyjpi̸=jyip(1yip)i=j

    推导过程

    9


    参考自:

    更多相关内容
  • 神经网络的前向传播和反向传播推导 x1x_{1}x1​和x2x_{2}x2​表示输入 wijw_{ij}wij​表示权重 bijb_{ij}bij​表示偏置 σi\sigma_{i}σi​表示激活函数,这里使用sigmoid激活函数 outoutout表示输出 yyy表示真实值...
  • 吴恩达机器学习课程反向传播算法的数学推导 Proof of Back Propagation Algorithm.pdf 【本文旨在给出吴恩达机器学习课程反向传播算法的数学推导】
  • sign函数可以对数值进行二值化,但在梯度反向传播是不好处理,一般采用一个近似函数的梯度作为代替,如上图的Htanh。在[-1,1]直接梯度为1,其他为0。 #使用修饰器,建立梯度反向传播函数。其中op.input包含输入值、...
  • 反向传播算法是人工神经网络训练时采用的一种通用方法,在现代深度学习中得到了大 规模的应用。全连接神经网络(多层感知器模型,MLP),卷积神经网络(CNN),循环神 经网络(RNN)中都有它的实现版本。算法从多元复合...
  • 反向传播:代码演示篇概述正文1、从零开始2、借助深度学习框架 概述 本节继上一节反向传播:公式推导篇的代码演示,本节将从零开始演示反向传播训练参数的整个过程,除此之外还将使用TF2.0来进行快速求导作为拓展...
  • 本文为作者本人对卷积神经网络的前向及反向传播过程数学推导的总结笔记,对深度学习初学者来说是个对卷积神经网络深度了解很好的机会,是自己搭建卷积神经网络的理论支持,欢迎下载,共同进步
  • 反向传播算法PPT

    2018-11-30 20:16:59
    这是我在机器学习课程上做汇报用的反向传播算法的PPT,主要是通过学习吴恩达老师的课程总结得来
  • 神经网络中的反向传播(BackPropagation)介绍及公式推导 神经网络中的激活函数的作用,最常用的两个激活函数Sigmoid 和TanH 代价函数对介绍二次代价函数(Quadratic Cost),交叉熵代价函数(Cross-entropy Cost)
  • 前馈神经网络(反向传播算法)用到的数据集,包含5000张数字图片X及对应标签y。由于是matlab类型的数据,X需要转置。
  • 今天有朋友咨询我反向传播算法,我觉得不需要太复杂的推导,就可以解释清楚这个算法的原理。 序 假定神经网络采用下面的结构: 1. 最简单的神经网络模型 我们考虑最简单的情况:一个输入节点、一个输出节点、一个...
  • 反向传播的目的是计算成本函数C对网络中任意w或b的偏导数。一旦我们有了这些偏导数,我们将通过一些常数 α的乘积和该数量相对于成本函数的偏导数来更新网络中的权重和偏差。这是流行的梯度下降算法。而偏导数给出了...
  • 反向传播算法.rar

    2019-12-07 11:06:22
    本项目主要实现了python端的反向传播算法,通过实现算法本身而不是调用库实现,另外里面还进行了包括调整激活函数,学习参数,学习率的调整方法等对原始程序进行了改进,可以用来进行不同参数下实现的比较
  • 该代码实现了用于教程目的的多层反向传播神经网络,并允许在输入、输出和隐藏层中训练和测试任意数量的神经元。 隐藏层的数量也可以变化。 共有三个文件,其中 MLBPN_Train.m 用于在所需输入模式上构建和训练多层...
  • RNN通过反向传播和记忆机制,能够处理任意长度的序列,在架构上比前馈神经网络更符合生物神经网络的结构,它的产生也正是为了解决这类问题而应用而生的。  RNN及改进的LSTM等深度学习模型都是基于神经网络而发展的...
  • 为了在保证图像质量的前提下进一步加快毫米波全息成像的图像重建速度,提出了基于降维策略的快速反向传播重建 (DR-BP) 算法。基于亚毫米波单站式成像实验(280~320 GHz)以及多发多收正交阵列成像FEKO电磁仿真实验(70~...
  • 这段代码展示了工具箱神经网络如何工作并实现反向传播。 数据输入和输出用于航天飞机挑战者的O形环和下一次准备温度的预测。
  • LF_BPA_反向传播_

    2021-09-30 14:17:54
    marlab - 基于反向传播算法的潮流分析。
  • 【李宏毅机器学习笔记】1、...【李宏毅机器学习笔记】7、反向传播(Backpropagation) 【李宏毅机器学习笔记】8、Tips for Training DNN 【李宏毅机器学习笔记】9、Convolutional Neural Network(CNN) ——————
  • 这是一个让代价函数最小化的算法——反向传播算法。 首先来看一下神经网络的代价函数: 要做的就是设法找到参数θ,使得J(θ)取到最小值,为了使用梯度下降法或者其他某种高级优化算法,需要做的就是写一段代码,...
  • BP算法(即反向传播算法)是在有导师指导下,适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间...
  • 训练输入向量和目标向量分别从文件 data1in 和 data1out 中读取。 输入和输出层的节点数取决于节点数。 这些数据集中的行数。 隐藏层数、每个隐藏层的节点数和目标误差(设为0.1)由用户输入。 ...
  • 反向传播算法

    2021-02-11 15:05:02
    反向传播算法
  • 主要为大家详细介绍了TensorFlow如何实现反向传播,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 反向传播神经网络.rar

    2019-06-18 09:50:59
    此资源包含着反向传播的应用程序,教你怎么下载和使用。
  • 一种借助群智能 (SI) 技术开发自组织反向传播人工神经网络 (BPANN) 或简单反向传播神经网络 (BPN) 的新技术。 本文提出了一种用于训练神经网络的重叠群智能算法,其中将粒子群分配给每个神经元以搜索该神经元的权重...
  • 本文提出了一种新型的两阶段集成方案集成反向传播(TP-ES-BP)算法,可以大大减轻标准BP(SBP)算法的局部极小问题,并克服了单个成分BP在分类性能上的局限性通过集成Ensemble方法。 三组模拟实验的经验和t检验结果...
  • 为了有效地控制激光铣削层质量,建立了激光铣削层质量(铣削层深度、铣削层宽度)与铣削层参数(激光功率、扫描速度和离焦量)之间的反向传播(BP)神经网络预测模型。利用遗传算法(GA)优化了BP神经网络的权值和阈值,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,020
精华内容 46,808
关键字:

反向传播

友情链接: 新建文件夹 (3).zip