【Machine Learning】Backpropagation 详解

来源:互联网 发布:vmware 12 mac版下载 编辑:程序博客网 时间:2024/06/05 09:37

在一个神经网络中,ln 是第 n 个样本神经网络的输出 yn 与样本标记 y^n 的 cross entropy,即第 n 个样本的 loss function.
总的损失函数可以写为 L=n=1Nln.
只要知道 lw,再对所有样本加起来,就可以知道总的 loss function 的梯度了,知道梯度之后,不就能使用梯度下降法了?

Backpropagation

下面以这个图为例,讲解怎么求解 lw1.
首先,可以从图中看出,w1 只通过节点 z 影响最终的 l,就可以用链式求导法则写为:lw1=lzzw1.
接下来就分为了两部分:

  • 因为 z=w1x1+w2x2+b,所以zw1=x1.
  • lz 不容易直接求得,因为 z 经过 activation function 转变为 a=σ(z),然后该节点会影响到后面的每一层,从而再影响到输出。因此,可以再做一次链式法则:lz=laaz,然后:

    • az=σ(z),这可以直接由 activation function 得到。
    • la 不太好求,因为 a 会影响到后面的每一层,但依旧可以通过链式求导法则来展开。假设 a 后面那层有两个节点 zz′′,那么有 la=lzza+lz′′z′′a,而 z=aw3+z′′=aw4+,一步步往回代入后就有:

lz=σ(z)(w3lz+w4lz′′)
上式可以从另一个角度来看,就是另一种的 neural network 连接方式,即 lzlz′′ 通过权重 w3w4 连接,再通过一个 σ(z) 的放大,连接到前一个神经元,假设在已经知道 lzlz′′ 的情况下,就可以得到 lz 了。这就是 backward 的含义。

那怎么知道 lzlz′′ 呢?

  • 如果 zz′′ 已经是最后一层了,它们再经过一个 activation function 就得到了输出 y1y2,则可以直接得出 lz=ly1y1zlz′′=ly2y2z′′.
  • 如果 zz′′ 不是最后一层,那么它们也是通过后面那层再往后连接的,因此求 lzlz′′,无非就是再把求 lz 的过程再重复一遍,直到求到最后一层为止。

综上,要求 lw1 ,只需要用 forward pas 求 lz,用 backward pass 求 zw1,两者都求出来之后,就得到了梯度。

原创粉丝点击