Lecture4 神经网络与反向传播(1)

一、反向传播

1.定义

        反向传播就是用链式法则逐层计算导数再在每个输入节点中存上函数对当前这个节点上输入的参数的偏导值。

2.应用场景

        在特定情况下,神经网络的损失函数就是需要求导的函数f(x),而训练集的数据和神经网络的权重就是输入x。比如SVM分类器,我们需要求解的就是损失函数关于权重W和偏置项b的偏导数,得到偏导数后我们才能据此来更新参数。同时,在之后我们将会了解到,梯度对于模型的可视化和可解释性也是十分重要的。

3. 链式求导法则

        对于简单的函数求偏导是十分轻松的,比如下面的偏导计算:

        对哪个变量求偏导就是将其看成自变量,其他的看成常数即可。但是对于一个复合函数如果比较复杂就很难直接求得关于某个变量的偏导数。比如这样一个例子:f(x,y,z) = (x+y)z,当然这个式子还是比较简单的,可以通过拆开的方式求得,但我们以此式子为例来介绍一种新的求偏导的方法,链式求导法。具体来说,我们先将原先的式子拆成两个阶段:q=x+y 和 f=qz 。我们可以很轻松的对这两个式子分别求导。但是q的偏导数对我们没有意义,因为我们的目标是求出f关于xyz的偏导数。链式法则告诉我们,可以这样计算:,实际上它就是两个梯度的相乘,举例如下:

         # set some inputs
        x = -2; y = 5; z = -4
 
        # perform the forward pass
        q = x + y # q becomes 3
        f = q * z # f becomes -12
 
        # perform the backward pass (backpropagation) in reverse order:
        # first backprop through f = q * z
        dfdz = q # df/dz = q, so gradient on z becomes 3
        dfdq = z # df/dq = z, so gradient on q becomes -4
        dqdx = 1.0
        dqdy = 1.0
        # now backprop through q = x + y
        dfdx = dfdq * dqdx  # The multiplication here is the chain rule!
        dfdy = dfdq * dqdy     

        · 涉及的两个概念:

                Local gradient 局部梯度: 即某个节点的输出关于其输入的梯度。

                Upstream gradient 上游梯度:即最终结果关于当前节点的输出的梯度。

4. 反向传播的直观理解

        反向传播就是一个局部进行的过程。每一个节点(或者称为门gate)得到一些输入,然后会自动地计算出他们的输出,这些输出或许又会成为其他节点的输入,同时他们可以很轻松地计算出他们的局部梯度,即他们的输出关于输入的偏导数。所有的节点执行这些操作无需知晓整个过程的细节,只需要关注自身。当 输出 和 局部梯度 计算完成后,就可以进行反向传播了。递归地应用链式法则,反向传播使得节点可以得到最终输出关于该节点输入变量的偏导数,只需要将局部梯度和上游梯度(即最终输出关于该节点输出的偏导数)相乘即可。

        换一个角度理解这一过程,假设有一个加法门(之所以称为门是因为节点接受一个输入给出一个输出,就好像经过一道门一样,其实就是运算图上的一个节点)收到输入 [-2,5],那么它会计算并输出 3,同时计算出局部梯度,即该门的输出关于输入x,y的梯度,由于是加法,所以梯度都为1。假设加法门后还有一些运算,并且输出最终结果为-12,现在进行反向传播,从最终结果开始反向计算最终输出关于每个节点输入的偏导数,当计算到加法门时,假设上游梯度为-4,表示最终结果关于加法门的输出的梯度为-4。我们可以理解成,如果我们想要最终结果的数值提升,那么我们需要将加法门的输出减少(因为梯度是负数),并且加法门的输出减少带来的影响力为4。

        我们继续进行反向传播,将上游梯度和局部梯度相乘,得到最终结果关于加法门的输入的梯度,由于局部梯度为1,所以得到的结果仍然为-4,这说明,如果x,y的值减小,那么最终结果的数值将会增加,且影响力为4。这也很好理解,因为是加法,所以x,y值的减小会导致加法门的输出减小,且影响力为1,而加法门的输出减小会导致最终结果增加,影响力为4。

        由此可见,反向传播可以看成门之间的通信,其通信媒介就是梯度,通信内容就是门的输出对最终结果的影响(正相关还是负相关,以及影响的力度)。

5. 常见运算对梯度的影响

        在神经网络中比较常见的运算有加法、乘法和max,这些运算与梯度有什么关系呢?

        以下面的例子来说明:

        从图中我们可以发现,在反向传播的过程中,每个运算实际是将输出处的梯度以一定的规律分配给输入端:

  • 加法:

    将输出端的梯度等价地分配给输入端,并且与输入端的数值大小无关。其原因是,加法运算的局部梯度为1,所以所有输入端的梯度就是将输出端的梯度和1相乘,自然是相等的。

  • max操作:

    max操作就像一个路由器,将梯度路由给值较大的输入,例如上图中的 z 的值大于 w ,所以将 max 门的输出端的梯度 2.00 分配给 z 下方,而 w 下方就为0,这也和max函数的性质相关。

  • 乘法:

    乘法运算对梯度的分配稍微复杂一点,它是将输出端的梯度和另外一个输入的值相乘作为当前输入的梯度,例如 x 的梯度就是 y = -4 和 输出端的梯度 2 相乘得到的结果,可以看成一个梯度的交换器。

    值得注意的是,当输入的值一个非常大,而另外一个非常小的时候,乘法会将一个很大的梯度分配给小的输入,而将一个很小的梯度分配给大的输入。这就说明,输入值的量级会影响到梯度的大小。这就是为什么需要进行归一化的原因,如果输入数据量级差异太大,就会导致梯度相差很大。还有一个值得注意的点在于,如果在预处理的时候将输入全部都增大的1000倍,那么梯度也会增大1000倍,那么学习率就需要相应地变小来抵消。

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值