反向传播算法学习

     初学者对于反向传播学习总结,有错误的地方还请大佬指正,非常感谢。

   对于每个训练样例,反向传播算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐藏层神经元;最后根据隐藏层神经元的误差来对连接权重和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已经 到了一个很小的值。反向传播算法的目标是要最小化训练集上的累计误差。 

前向传播过程

         如上图1所示:

        每层的+1是偏置项。

        w_{ij}^{t} 表示权重,代表第 t 层的第 j 个神经元与下一层的第 i 个神经元连接的权重,如w_{10}^{1}表示第一层的第0个神经元(偏置项)与第二层的第一个神经元相连接的权重,w_{12}^{1}表示的是第一层的第二个神经元与第二层的第一个神经元连接的权重。

        z_{i}^{t}表示的是第 t 层第 i 个神经元接收到的输入值。

        a_{i}^{t}表示的是第 t 层第 i 个神经元的激活值,也就是输出值。

                        z_{j}^{t} = \sum_{i}^{}x_{i}^{t-1}\cdot w_{ji}^{t-1}      (方程1)

                z_{1}^{2}= w_{10}^{1}+w_{11}^{1}x_{1}^{1}+w_{12}^{1}x_{2}^{1}

                z_{2}^{2}= w_{20}^{1}+w_{21}^{1}x_{1}^{1}+w_{22}^{1}x_{2}^{1}

                 z_{1}^{3}= w_{10}^{2}+w_{11}^{2}a_{1}^{2}+w_{12}^{2}a_{2}^{2}

                z_{2}^{3}= w_{20}^{2}+w_{21}^{2}a_{2}^{2}+w_{22}^{2}a_{2}^{2}

                z_{1}^{4}= w_{10}^{3}+w_{11}^{3}a_{3}^{3}+w_{12}^{3}a_{2}^{3}

        激活函数为sigmoid函数:a_{i}^{t}= \frac{1}{1+e^{-z_{i}^{t}}}(方程2)

                a_{1}^{2}= \frac{1}{1+e^{-z_{1}^{2}}}a_{2}^{2}= \frac{1}{1+e^{-z_{2}^{2}}}

                a_{1}^{3}= \frac{1}{1+e^{-z_{1}^{3}}}a_{2}^{3}= \frac{1}{1+e^{-z_{2}^{3}}}a_{1}^{4}= \frac{1}{1+e^{-z_{1}^{4}}}

        损失函数为 E^{t} = \frac{1}{2}\sum_{i=1}^{m}\left (y_{i}^{t} - a_{i}^{t}\right )^{2}(方程3)

        y_{}^{t}表示训练集中真实输出值,a^{i}是神经网络产生的实际输出值。

反向传播过程

         如上图2 所示        

         如上图红色部分所示,为反向传播过程。使用梯度下降利用链式求导法则进行权重的更新。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \frac{\partial E}{\partial w}= \frac{\partial E}{\partial a}\cdot \frac{\partial a}{\partial z}\cdot \frac{\partial z}{\partial w}

        \frac{\partial E}{\partial a}=a-y(其中y为真实标签值,根据方程3)

        \frac{\partial a}{\partial z}= a(1-a)  (根据方程2求偏导)

        \frac{\partial z^{t}}{\partial w^{t}} = a^{t-1}      (根据方程1求偏导)

下边计算每个神经元的误差值(如上图红色所示),其中\delta _{ i}^{t}表示的是第t层第 i 个神经元的误差:

       对于最后一层:\delta _{i}^{t}= y_{i}- a_{i}^{t}, 对于中间层:\delta_{i}^{t}= \sum_{j=1}^{m} w_{ji}^{t}\delta _{j}^{t+1}(其中,m是第t+1层神经元的个数)

如上图2所示: \delta _{1}^{4}= y-a_{1}^{3}  (y为真实标签值)

        ​​​​​​​\delta _{1}^{3}= w_{11}^{3}\delta _{1}^{4}\delta _{2}^{3}= w_{12}^{3}\delta _{1}^{4}\delta _{1}^{2}= w_{11}^{2}\delta _{1}^{3}+ w_{21}^{2}\delta _{2}^{3}\delta _{2}^{2}= w_{12}^{2}\delta _{1}^{3}+ w_{22}^{2}\delta _{2}^{3}

       上图二中的\delta _{1}^{1}\delta _{2}^{1}是不需要的(画图时画顺手了,不好意思),因为不需要对输入层求误差

        求出每个神经元的误差值后,再进行调整权重操作,w_{ij}^{t}{}' = w_{ij}^{t} - \eta \delta _{i}^{t+1}\cdot \frac{\mathrm{d} a_{i}^{t+1}}{\mathrm{d} z_{i}^{t+1}}\cdot a_{j}^{t},其中\eta为学习率。根据方程2 ,\frac{\mathrm{d} a}{\mathrm{d} z} = a\left ( 1-a \right )

        w_{11}^{1}{}' = w_{11}^{1} - \eta \delta _{1}^{2}\cdot \frac{\mathrm{d} a_{1}^{2}}{\mathrm{d} z_{1}^{2}}\cdot x_{1}^{1},  w_{12}^{1}{}' = w_{12}^{1} - \eta \delta _{1}^{2}\cdot \frac{\mathrm{d} a_{1}^{2}}{\mathrm{d} z_{1}^{2}}\cdot x_{2}^{1}

        w_{21}^{1}{}' = w_{21}^{1} - \eta \delta _{2}^{2}\cdot \frac{\mathrm{d} a_{2}^{2}}{\mathrm{d} z_{2}^{2}}\cdot x_{1}^{1},  w_{22}^{1}{}' = w_{22}^{1} - \eta \delta _{2}^{2}\cdot \frac{\mathrm{d} a_{2}^{2}}{\mathrm{d} z_{2}^{2}}\cdot x_{2}^{1}

        w_{11}^{2}{}' = w_{11}^{2} - \eta \delta _{1}^{3}\cdot \frac{\mathrm{d} a_{1}^{3}}{\mathrm{d} z_{1}^{3}}\cdot a_{1}^{2},  w_{12}^{2}{}' = w_{11}^{2} - \eta \delta _{1}^{3}\cdot \frac{\mathrm{d} a_{1}^{3}}{\mathrm{d} z_{1}^{3}}\cdot a_{2}^{2}

        w_{21}^{2}{}' = w_{21}^{2} - \eta \delta _{2}^{3}\cdot \frac{\mathrm{d} a_{2}^{3}}{\mathrm{d} z_{2}^{3}}\cdot a_{1}^{2},  w_{22}^{2}{}' = w_{22}^{2} - \eta \delta _{2}^{3}\cdot \frac{\mathrm{d} a_{2}^{3}}{\mathrm{d} z_{2}^{3}}\cdot a_{2}^{2}

        w_{11}^{3}{}' = w_{11}^{3} - \eta \delta _{1}^{4}\cdot \frac{\mathrm{d} a_{1}^{4}}{\mathrm{d} z_{1}^{4}}\cdot a_{1}^{3},  w_{12}^{3}{}' = w_{11}^{3} - \eta \delta _{1}^{4}\cdot \frac{\mathrm{d} a_{1}^{4}}{\mathrm{d} z_{1}^{4}}\cdot a_{2}^{3}

        到此为止,前向传播与反向传播的过程已经完成。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值