前向传播和反向传播

作者: 格物致知Lee | 来源:发表于2019-06-17 11:58 被阅读2次

    前向传播和反向传播是神经网络中的重要基础。两者存在一些联系,所以本文将两者一起讲述,有利于大家理解。同时反向传播是理解神经网络模型训练的重点,需要一些微积分基础(导数,偏导数,链式法则)。如果你准备好了,那我们开始吧。

    1.前向传播Forward-Propagation

    前向传播如图所示:图片下方的单词表示该层所使用的active function。


    Forward-propagation
    Input Layer-->h1 Layer矩阵计算细节:
    Matrix Operation
    Relu operation

    举个例子:


    Input -->h1 example
    h1 Layer-->h2 Layer矩阵计算细节:
    Matrix Operation Sigmoid Operation

    例子:


    h1-->h2 example
    h2 -->output 矩阵计算细节:
    Matrix Operation
    Softmax Operation

    例子:


    h2-->output example

    上面的[0.2698, 0.3223, 0.4078],便是我们将[0.1, 0.2, 0.7]输入模型后得到的结果。好了我们来通俗解释一下什么是前向传播。

    Forward-propagation:将固定的数值的一个样本x输入模型,模型利用weight ,bias(随机初始),active function对x进行一系列的运算最后输出一个结果\hat y(actual output)。

    2.损失函数 loss function

    好奇的小伙伴可能会想不是要说back-propagation么?为什么搞个loss function 出来?慢慢看下去你就明白了。
    在监督学习的任务中,我们会有大量的固定的输入X和固定的输出Y(desired output)作为样本。我们将一个样本x输入参数随机初始化后的模型得到一个输出\hat y,但\hat y只是一个估计值,我们想得到的是y。于是就想怎么样可以使\hat y尽量的接近y呢?这个问题好像有点复杂,那我们先衡量一下\hat yy的差距吧。
    均方误差 MSE(mean square error)常用于回归任务:

    MSE
    交叉熵 (cross-entropy)常用于分类任务:
    cross entropy

    我们知道在训练阶段,模型的输入X和输出Y是固定的,只能够调节模型中的weight和bias 使 \hat y 尽量的接近 y,即调节模型中的参数使loss function计算出的loss尽可能的小。更进一步的可以理解为:

    当loss 逐步变小时,weight和bias应该如何变化。原来loss function 就像一个教练,它能够指导模型去学习最优的weight和bias去完成预测任务。

    具体的weight和bias的更新过程就是back-propagation所要做的啦。


    cross entropy

    例子:


    loss

    3.反向传播 Back-Propagation

    output Layer-->h2 Layer的反向传播:
    Backpropagating errors to h2 weights

    a. E_1O_{out1} 的变化关系:

    交叉熵偏导公式 Matrix of cross-entropy derivatives

    例子:


    cross entropy偏导矩阵值

    b.O_{out1}O_{in1}的变化关系:

    softmax偏导公式
    Matrix of softmax derivatives
    例子:
    softmax偏导矩阵值

    c.O_{in1}W_{k1l1}的变化关系:

    偏导公式
    例子:
    偏导矩阵和偏导矩阵值

    d.E_1W_{k1l1}的变化关系:由链式法则可得

    Chain rule breakdown of Error derivative
    output-->h2的反向传播
    例子:
    数值矩阵

    以0.01的学习率对 W_{kl} 更新:

    反向传播对W的更新值
    h2 Layer-->h1 Layer的反向传播:
    Backpropagating errors to h1 weights

    a.h2_{out1}h2_{in1}的变化关系:

    Derivative of sigmoid output wrt h2 input
    例子:
    h2 output 和 input 的偏导矩阵值

    b.h2_{in1}W_{j1k1}的变化关系:

    h2 input 和 weight的偏导公式
    例子:
    h2 input 和 weight_jk 的偏导矩阵值

    c.E_totalh2_{out1}的变化关系:由链式法则可得





    例子:

    d.E_totalW_{j1k1}的变化关系:由链式法则可得

    error 和 weight_jk的偏导公式
    error 和 weight_jk的偏导矩阵
    例子:

    以0.01的学习率对W_{jk}进行更新:

    h1 Layer-->Input Layer 的反向传播:

    a.h1_{out1}h1_{in1}的变化关系:



    例子:

    b.h1_{in1}W_{i1j1}的变化关系:


    例子:

    c.与的变化关系:由链式法则可得

    例子:

    c.E_{total}W_{ij}的变化关系:由链式法则可得


    例子:

    以0.01的学习率对W_{ij}进行更新:

    4.总结

    模型随机初始化的全部weight:


    向模型输入一个样本x:[0.1, 0.2, 0.7]和y:[1.0, 0.0, 0.0],通过forward propagation 模型输出一个结果\hat y:[0.2698, 0.3223, 0.4078]。然后利用loss function 计算y\hat y 的loss,以loss 变小为原则指导back propagation,最终实现weight的一次更新。

    更新后的全部weight:


    summary

    小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下 谢谢你!

    相关文章

      网友评论

        本文标题:前向传播和反向传播

        本文链接:https://www.haomeiwen.com/subject/notdfctx.html