美文网首页
Day 6 Back propagation

Day 6 Back propagation

作者: 本地路过 | 来源:发表于2018-02-20 23:53 被阅读18次

    关键词:链式法则

    这节课重点就讲了一个重点:链式法则(个人观点:类似连续求导)

    Back-propagation

    上述示例表示为 f = q * z = ( x + y ) * z

    反向传播的处理过程

    1. 正向传播,计算各个节点的输出值 

    2. 计算局部导数:df/df = 1, df/dq = z = -4; df/dz = q = (-2 + 5) = -3; dq/dx=dq/dy = 1; 

    3. 利用链式法则(chain rule) 进行反向传播获得最终我们需要的导数,如

    df/dx = (df/dq) * (dq/dx) = -4 * 1 = -4

    上述过程不需要考虑整个网络,只需要单独计算各个节点,然后利用链式法则,将当前节点与它的top节点相连即可。

    注:正向传播过程中的,每个节点的计算结果都要保存起来,因为反向传播时会使用到这些数值。所以如果只做正向传播,可以在代码中调整,不存储这些中间节点的计算结果。因为对于嵌入式设备而言,内存的耗用还是需要注意的。

    链式求导:就是将各个Gates(节点)的导数相乘。

    链式求导

    Sigmoid Gate

    有些函数的导数是已知的,就不用一步步求导了,举例:Sigmoid Gate

    Sigmoid Gate

    注:横线上的绿色数字是正向传播的每个点的输出值,下测红色字体是反向传播的各个节点的梯度。

    举例:

    f(x) = 1/x 的导数是 -1 / x的平方,对应的数值 = -1/ (1.37*1.37) = -0.53 (用该节点的输入值求导)

    g(x) = e^x 的导数还是e^x,该节点的导数 = g(x)的导数 * f(x)的导数 = e^(-1) * (-0.53) = -0.196,(+1的那个节点的导数为1,所以相当于乘以1,所以在这里暂时忽略了)  

    Gate的三种类型

    add gate: gradient distributor

    add gate不会给他的输入带来改变,会将它输出的梯度直接传递过去

    max gate: gradient router

    max gate 中只有一个分支会有梯度,另外一个为0,会把他的输出的导数传递到较大的输入中

    mul gate: gradient switcher

    某个输入的梯度等于输出的梯度与其他因子的乘积,比如f=(x+y)*z 中 x的梯度:

    df/dx = (df/dq) * (dq/dx) = (dq/dx) * z = 1 * -4 = -4

    最后,提到现在的Deep Learning Framework,每一个神经网络就是一系列层的集合,运算时,每一个曾都能实现一部分的功能(池化、Relu,Sigmoid等等)就是将各种层(layer)放在一起,然后需要的时间进行调用。

    Torch Github - nn 

    相关文章

      网友评论

          本文标题:Day 6 Back propagation

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