美文网首页深度学习-推荐系统-CV-NLP大数据,机器学习,人工智能
深度学习(六):前向传播算法和后向传播算法

深度学习(六):前向传播算法和后向传播算法

作者: 交大小浪花 | 来源:发表于2019-08-26 18:19 被阅读1次
版权声明:本文为博主原创文章,转载请注明出处,商业转载请联系作者(huxingfei097@163.com),谢谢合作!
  • 前向传播算法
     在神经网络中,信息从上一个神经元直接流转到下一个神经元,直到输出,依据每一个神经元的输入并根据相应规则可以计算出输出,最终得到在当前参数下的损失函数的过程,称为前向传播  上图所示的神经网络结构前向传播过程计算如下(为简化计算,省略偏置项):
      隐藏层的输出如下:
        a11 = x1W1,1(1) + x2W2,1(1)
        a12 = x1W1,2(1) + x2W2,2(1)
        a13 = x1W1,3(1) + x2W2,3(1)
      最终输出层的输出如下:
        y^ = a11W1,1(2) + a12W1,2(2)+ a13W1,3(2)
     最终的损失函数计算如下(以均方误差损失函数为例):
        JMSE = ½ |y - y^|2
  • 反向传播算法
    反向传播算法是在前向传播算法的基础上,从神经网络的输出层向输入层依次计算损失函数对于各个参数的梯度,并在给定学习率下更新相关参数。
     在上面的神经网络中,依据链式求导法则,可以依次求出损失函数对每个参数的导数:
       \sigma_1 = \frac{\alpha J_{MSE} }{\alpha W_{1,1}^{(2)}} = \frac{\alpha J_{MSE} }{\alpha y} * \frac{\alpha y }{\alpha W_{1,1}^{(2)}} = {|y - \hat y |} * a_{11}
       ................
       \sigma_9 = \frac{\alpha J_{MSE} }{\alpha W_{1,1}^{(1)}} = \frac{\alpha J_{MSE} }{\alpha y} * \frac{\alpha y }{\alpha a_{1,1} } * \frac{\alpha a_{1,1} }{\alpha W_{1,1}^{(1)} }
          = {|y - \hat y |} * a_{11} * x_1
     其中\sigma_1,...,\sigma_9是损失函数对对应参数求导后得到的梯度(斜率),依据该值即可修正神经网络中的参数:
         W_{1,1}^{(1) '} = W_{1,1}^{(1)} - \eta \sigma_1
    其中\eta是学习率,即沿着梯度(斜率)的方向更新参数。
     利用前向传播算法和反向传播算法不断更新损失函数的值和参数,直到损失函数下降到指定的阈值(或者最小值),即完成神经网络的训练。
  • 算法实例:
     假设如下图的一个神经网络(比上面的要复杂一些)  已知初始值:
     w1 = 0.1,w2 = 0.2,w3 = 0.3,w4 = 0.4
     w5 = 0.5,w6 = 0.4,w7 = 0.3,w8 = 0.2
     i1 = 0.05,i2 = 0.1
     o1 = 0.01,o2 = 0.99
     b1 = 0.25,b2 = 0.45
    输入输出固定,需要优化的参数是权重w1~w8以及偏置b1,b2
    前向传播过程:
    隐藏层计算:
    h_1 = i_1 * w_1 + i_2 * w_3 + b_1 = 0.285
    h_2 = i_1 * w_2 + i_2 * w_4 + b_1 = 0.3
    输出层计算:
    \hat o_1 = h_1 * w_5 + h_2 * w_7 + b_2 = 0.4825
    \hat o_2 = h_1 * w_6 + h_2 * w_8 + b_2 = 0.624
    损失函数计算:
    J_{MSE} = \frac{1}{2}|o_1 - \hat o_1|^2 + \frac{1}{2}| o_2 - \hat o_2|^2 = 0.082103
    后向传播过程:
    权重参数导数计算:
    \sigma_1 = \frac{\alpha J_{MSE}}{\alpha w_1} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_1} * \frac{\alpha h_1}{\alpha w_1} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_1} * \frac{\alpha h_1}{\alpha w_1}
       = ( o_1 - \hat o_1) * w_5 * i_1 + ( o_2 - \hat o_2) * w_6 * i_1
        = -0.0044925
    \sigma_2 = \frac{\alpha J_{MSE}}{\alpha w_2} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_2} * \frac{\alpha h_2}{\alpha w_2} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_2} * \frac{\alpha h_2}{\alpha w_2}
       = ( o_1 - \hat o_1) * w_7 * i_1 + ( o_2 - \hat o_2) * w_8 * i_1
       = -0.0034275
    \sigma_3 = \frac{\alpha J_{MSE}}{\alpha w_3} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_1} * \frac{\alpha h_1}{\alpha w_3} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_1} * \frac{\alpha h_1}{\alpha w_3}
       = ( o_1 - \hat o_1) * w_5 * i_2 + ( o_2 - \hat o_2) * w_6 * i_2
       = -0.008985
    \sigma_4 = \frac{\alpha J_{MSE}}{\alpha w_4} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_2} * \frac{\alpha h_2}{\alpha w_4} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_2} * \frac{\alpha h_2}{\alpha w_4}
       = ( o_1 - \hat o_1) * w_7 * i_2 + ( o_2 - \hat o_2) * w_8 * i_2
       = -0.006855
    \sigma_5 = \frac{\alpha J_{MSE}}{\alpha w_5} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha w_5}
       = ( o_1 - \hat o_1) * h_1
       = -0.1346625
    \sigma_6 = \frac{\alpha J_{MSE}}{\alpha w_6} = \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha w_6}
       = ( o_2 - \hat o_2) * h_1
       = 0.10431
    \sigma_7 = \frac{\alpha J_{MSE}}{\alpha w_7} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha w_7}
       = ( o_1 - \hat o_1) * h_2
       = -0.14175
    \sigma_8 = \frac{\alpha J_{MSE}}{\alpha w_8} = \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha w_8}
       = ( o_2 - \hat o_2) * h_2
       = 0.1098
    权重计算:
    \hat \mu_1 = \frac{\alpha J_{MSE}}{\alpha b_1} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_1} * \frac{\alpha h_1}{\alpha b1} + \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha h_2} * \frac{\alpha h_2}{\alpha b1}
              +\;\frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_1} * \frac{\alpha h_1}{\alpha b1} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha h_2} * \frac{\alpha h_2}{\alpha b1}
               = ( o_1 - \hat o_1) * w_5 * 1 + ( o_1 - \hat o_1) * w_7 * 1
              +\;( o_2 - \hat o_2) * w_6 * 1 + ( o_1 - \hat o_1) * w_8 * 1
                = -0.1584
    \hat \mu_2 = \frac{\alpha J_{MSE}}{\alpha b_2} = \frac{\alpha J_{MSE}}{\alpha o_1} * \frac{\alpha o_1}{\alpha b_2} + \frac{\alpha J_{MSE}}{\alpha o_2} * \frac{\alpha o_2}{\alpha b_2}
               = ( o_1 - \hat o_1) * 1 + ( o_2 - \hat o_2) * 1
                = -0.1065
     以上计算出了在初始权重和偏置的情况下的损失函数,以及损失函数对每个要学习的参数(权重参数和偏置参数)的导数,之后即可按照选定的学习率更新参数,然后不断循环计算损失函数、更新参数直到达到迭代次数或者损失函数达到指定与之或者最小值。更新公式:
    w_{i+1} = w_i - \eta\,\sigma_i
    b_{i+1} = b_i - \eta\,\mu_i

参考资料
 《深度学习》
本系列相关文章
深度学习(五):机器学习基础
深度学习(四):数值计算基础
深度学习(三):概率与信息论基础
深度学习(二):主成分分析算法
深度学习(一):线性代数基础

深度学习新手,文章若有疏漏,欢迎及时指正!

相关文章

网友评论

    本文标题:深度学习(六):前向传播算法和后向传播算法

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