神经网络的前向与反向传播过程详解

一、神经网络的前向与反向传播过程详解

我们这里以最简单的神经网络为例说明。有三层网络,一个输入层,一个隐藏层,一个输出层,每层有2个神经元。

如图中所示:i1,i2为两个输入神经元,h1,h2为隐藏层两个神经元,o1,o2为两个输出神经元。

其中i1,i2两个输入值分别为0.05,0.10,真实输出值为0.01与0.99,w1-w8为权重值,是网络要学习的参数。b1,b2是偏置值。

1.前向传播(从输入层--->隐藏层-->输出层)

  • 从输入层到隐藏层

        Net_{h1}=w1*i1 + w2*i2 +b1*1 \\ =0.15*0.05 + 0.20*0.10 + 0.35*1 \\=0.3775

        在这里激活函数使用逻辑函数

        Out_{h1}=\frac{1}{1+ e^{-Net_{h1}}} \\=\frac{1}{1+e^{-0.3775}} \\=0.5932699921071872

        同理,计算隐藏层的第二个神经元:

        Net_{h2}=w3*i1 + w4*i2 +b1*1 \\ =0.25*0.05 + 0.30*0.10 + 0.35*1 \\=0.3925

        Out_{h2}=\frac{1}{1+ e^{-Net_{h2}}} \\=\frac{1}{1+e^{-0.3925}} \\=0.596884378259767

  • 从隐藏层到输出层

        Net_{o1}=w5*Out_{h1} + w6*Out_{h2} +b2*1 \\ =0.4*0.5932699921071872 + 0.45*0.596884378259767 + 0.6*1 \\=1.1059054

        Out_{o1}=\frac{1}{1+ e^{-Net_{01}}} \\=\frac{1}{1+e^{-1.1059054}} \\=0.7513649636166884

        Net_{o2}=w7*Out_{h1} + w8*Out_{h2} +b2*1 \\ =0.5*0.5932699921071872 + 0.55*0.596884378259767 + 0.6*1 \\=1.224921315

        Out_{o2}=\frac{1}{1+ e^{-Net_{02}}} \\=\frac{1}{1+e^{-1.224921315}} \\=0.7729284496841369

2.计算损失(损失函数使用MSE)

        \iota =\sum \frac{1}{2}\left ( target-output \right )^{2}

        这里的targt是真实值,output为计算值.这里的1/2是为了简化计算。

        E_{o1}=\sum \frac{1}{2}\left ( target_{o1}-output_{o1} \right )^{2}\\= \frac{1}{2}\left ( 0.01- 0.7513649636166884\right )^{2}\\=0.27481100463918684

        E_{o2}=\sum \frac{1}{2}\left ( target_{o2}-output_{o2} \right )^{2}\\= \frac{1}{2}\left ( 0.99- 0.7729284496841369\right )^{2}\\=0.023560028978266145

        E_{total}=E_{O1} +E_{O2}\\=0.27481100463918684+0.023560028978266145\\=0.298371033617453

3.反向传播(从输出层-->隐藏层-->输入层)

反向传播的目的是更新所有权重值,使得每个输出神经元与整个网络的损失最小(即真实值与预测值最接近)

输出层

  • 计算梯度

首先让我们来看w5的改变对网络损失的影响,即求偏导:

\frac{\partial E_{total}}{\partial w_{5}}, 也可以叫做求关于w_{5}的梯度。

使用链式法则可得:

\frac{\partial E_{total}}{\partial w_{5}}=\frac{\partial E_{total}}{\partial Out_{o1}}*\frac{\partial Out_{o1}}{\partial Net_{o1}} *\frac{\partial Net_{o1}}{\partial w_{5}}

我们需要计算出这个方程中每一部分。

E_{total}=E_{O1}+E_{O2}\\=\frac{1}{2}\left ( target_{o1} - out_{o1} \right )^{2} + \frac{1}{2}\left ( target_{o2} - out_{o2} \right )^{2}

\frac{\partial E_{total}}{\partial Out_{o1}}=2*\frac{1}{2}\left ( target_{o1} - out_{o1} \right )^{2-1} *{\left ( target_{o1} - out_{o1} \right )}' + \frac{1}{2}\left ( target_{o2} - out_{o2} \right )^{2}\\=2*\frac{1}{2}\left ( target_{o1} - out_{o1} \right )^{2-1} *-1 + \frac{1}{2}\left ( target_{o2} - out_{o2} \right )^{2}\\=2*\frac{1}{2}\left ( target_{o1} - out_{o1} \right )*-1 +0\\=-\left ( target_{o1} - out_{o1} \right )\\=-(0.01-0.7513649636166884)\\=0.7413649636

Out_{o1}=\frac{1}{1+ e^{-Net_{o1}}}

逻辑函数\delta的导数是\delta *\left ( 1-\delta \right )

\frac{\partial Out_{o1} }{\partial Net_{o1}}=Out_{o1} \, * \, \left ( 1-Out_{o1} \right )=0.7513649636166884 * \left ( 1-0.7513649636166884 \right )\\=0.18681565506598094

Net_{o1}=w5*Out_{h1} + w6*Out_{h2} +b2*1

\frac{\partial Net_{o1}}{\partial w_{5}}=Out_{h1} + 0 + 0=0.5932699921071872

汇总

\frac{\partial E_{total}}{\partial w_{5}}=\frac{\partial E_{total}}{\partial Out_{o1}}*\frac{\partial Out_{o1}}{\partial Net_{o1}} *\frac{\partial Net_{o1}}{\partial w_{5}}=0.7413649636 *0.18681565506598094 *0.5932699921071872\\=0.08216705224532783

至此我们求得了关于W_{5}的梯度。

  • 更新权重

使用梯度下降法更新权重值

W_{5}^{+}=W_{5}-\eta *\frac{\partial E_{total}}{\partial w_{5}}\\=0.4-0.5*0.08216705224532783=0.3589164738773361

同理我们可以计算出W_{6}^{+},W_{7}^{+},W_{8}^{+}的值,这里不再一一列举。

\eta表示学习率是超参数,这里设置为0.5。

隐藏层

在这里我们继续计算该层的权重参数W_{1},W_{2},W_{3},W_{4}的新值。

计算梯度

首先我们看W1的改变对整个损失的影响。

\frac{\partial E_{total}}{\partial w_{1}}=\frac{\partial E_{total}}{\partial Out_{h1}}*\frac{\partial Out_{h1}}{\partial Net_{h1}} *\frac{\partial Net_{h1}}{\partial w_{1}}

\frac{\partial E_{total}}{\partial Out_{h1}}=\frac{\partial E_{o1}}{\partial Out_{h1}} + \frac{\partial E_{o2}}{\partial Out_{h1}}

我们先求等式右边的第一项,依据链式法则:

\frac{\partial E_{o1}}{\partial Out_{h1}}=\frac{\partial E_{o1}}{\partial Out_{o1}} * \frac{\partial Out_{o1}}{\partial Net_{o1}} * \frac{\partial Net_{o1}}{\partial Out_{h1}}

E_{o1}=\frac{1}{2}\left ( target_{o1} - out_{o1} \right )^{2}

\frac{\partial E_{o1}}{\partial Out_{o1}}=2*\frac{1}{2}\left ( target_{o1} - out_{o1} \right )^{2-1} *{\left ( target_{o1} - out_{o1} \right )}'\\=-\left ( target_{o1} - out_{o1} \right )=0.7413649636

\frac{\partial Out_{o1} }{\partial Net_{o1}}=Out_{o1} \, * \, \left ( 1-Out_{o1} \right )=0.7513649636166884 * \left ( 1-0.7513649636166884 \right )\\=0.18681565506598094

Net_{o1}=w_{5} * Out_{h1} + w_{6} * Out_{h2} + b_{2}*1

\frac{\partial Net_{o1}}{\partial Out_{h1}}=w_{5} + 0 + 0

\frac{\partial E_{o1}}{\partial Out_{h1}}=0.7413649636 *0.18681565506598094*0.4=0.05539943252716045

接下来求:

\frac{\partial E_{o2}}{\partial Out_{h1}}= \frac{\partial E_{o2}}{\partial Out_{o2}}* \frac{\partial Out_{o2}}{\partial Net_{o2}} * \frac{\partial Net_{o2}}{\partial Out_{h1}}

E_{o2}=\frac{1}{2}\left ( target_{o2} - out_{o2} \right )^{2}

\frac{\partial E_{o2}}{\partial Out_{o2}}=2*\frac{1}{2}\left ( target_{o2} - out_{o2} \right )^{2-1} *{\left ( target_{o2} - out_{o2} \right )}'\\=-\left ( target_{o2} - out_{o2} \right )= 0.7729284496841369-0.99\\=-0.21707155031586312

\frac{\partial Out_{o2} }{\partial Net_{o2}}=Out_{o2} \, * \, \left ( 1-Out_{o2} \right )=0.7729284496841369 * \left ( 1-0.7729284496841369 \right )\\= 0.17551006135301356

Net_{o2}=w_{7} * Out_{h1} + w_{8} * Out_{h2} + b_{2}*1

\frac{\partial Net_{o2}}{\partial Out_{h1}} =w_{7} + 0 + 0

\frac{\partial E_{o2}}{\partial Out_{h1}}=-0.21707155031586312 *0.17551006135301356*0.5\\=-0.019049120556965452

\frac{\partial E_{total}}{\partial Out_{h1}}=\frac{\partial E_{o1}}{\partial Out_{h1}} + \frac{\partial E_{o2}}{\partial Out_{h1}}\\=0.05539943252716045-0.019049120556965452\\=0.036350311970195004

Out_{h1}=\frac{1}{1+ e^{-Net_{h1}}}

\frac{\partial Out_{h1} }{\partial Net_{h1}}=Out_{h1} \, * \, \left ( 1-Out_{h1} \right ) =0.5932699921071872 * \left ( 1-0.5932699921071872 \right )\\=0.24130070857232525

Net_{h1}=w1*i_{1} + w2*i_{2} +b1*1

\frac{\partial Net_{h1}}{\partial w_{1}}=i_{1} + 0 + 0=0.05

\frac{\partial E_{total}}{\partial w_{1}}=\frac{\partial E_{total}}{\partial Out_{h1}}*\frac{\partial Out_{h1}}{\partial Net_{h1}} *\frac{\partial Net_{h1}}{\partial w_{1}}\\=0.036350311970195004*0.24130070857232525*0.05\\=0.00043856780176165653

更新权重

使用梯度下降法更新权重值

W_{1}^{+}=W_{1}-\eta *\frac{\partial E_{total}}{\partial w_{5}}\\=0.15-0.5*0.00043856780176165653=0.14978071609911917

同理我们可以计算出W_{2}^{+},W_{3}^{+},W_{4}^{+}的值,这里不再一一列举。

\eta表示学习率是超参数,这里设置为0.5。

最终我们使用同样的方法更新所有权重参数值。

参考:

A Step by Step Backpropagation Example | Matt Mazur

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络的计算过程涉及到两个重要步骤,即前向传播和反向传播前向传播是指将输入数据通过神经网络的各层,一直到输出层的过程。在每一层中,输入数据会被加权、激活函数处理,并传递到下一层。具体来说,每个神经元会将输入数据与其对应的权重相乘,并将乘积累加起来,然后再通过激活函数处理后输出给下一层的神经元。这个过程可以用下面的公式表示: $$ a^{[l]} = g^{[l]}(z^{[l]}) = g^{[l]}(W^{[l]}a^{[l-1]} + b^{[l]}) $$ 其中,$a^{[l]}$ 表示第 $l$ 层神经元的输出,$z^{[l]}$ 表示第 $l$ 层神经元的加权和,$g^{[l]}(\cdot)$ 表示第 $l$ 层神经元的激活函数,$W^{[l]}$ 表示第 $l$ 层神经元的权重矩阵,$a^{[l-1]}$ 表示第 $l-1$ 层神经元的输出,$b^{[l]}$ 表示第 $l$ 层神经元的偏置。 反向传播是指根据网络输出的误差,将误差通过神经网络反向传播,更新各层神经元的权重和偏置。反向传播过程可以分为两个步骤:计算误差和更新参数。 计算误差的过程可以用损失函数来表示,常用的损失函数有均方误差(MSE)和交叉熵(Cross-Entropy)。假设 $y$ 表示真实标签,$\hat{y}$ 表示网络输出的预测值,那么均方误差和交叉熵的公式分别为: $$ MSE = \frac{1}{m}\sum_{i=1}^{m}(y^{(i)} - \hat{y}^{(i)})^2 $$ $$ CE = -\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(\hat{y}^{(i)}) + (1-y^{(i)})\log(1-\hat{y}^{(i)})] $$ 其中,$m$ 表示样本数量。 更新参数的过程是通过梯度下降算法实现的。梯度下降算法的核心思想是通过求解损失函数的梯度,来更新网络中所有的权重和偏置,使得损失函数的值不断减小。梯度下降算法的公式如下: $$ \theta = \theta - \alpha \frac{\partial J}{\partial \theta} $$ 其中,$\theta$ 表示网络中的权重和偏置,$\alpha$ 表示学习率,$J$ 表示损失函数。通过计算损失函数对权重和偏置的偏导数,就可以得到梯度信息,然后根据梯度信息来更新网络中的参数。 综上所述,神经网络前向传播和反向传播神经网络计算的核心过程,通过这两个步骤,神经网络可以将输入数据映射为输出标签,并不断优化网络的参数,提高预测的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值