Slides:百度云 提取码: gs3n

神经网络的梯度下降

我们之前在学习线性分类器的时候,使用Loss函数以及梯度下降法来更新权重。那么对于神经网络,我们该如何计算每层神经元的权重呢?

对每层W直接求导(愚蠢的方法)

计算机视觉中的深度学习6: 反向传播
如上公式所示,Loss函数最终是能被表达成由各层W组成的函数公式,并且也完全有可能直接对其进行求导。

问题

  • 非常乏味,需要大量矩阵演算,需要大量纸张
  • 如果我们想改变损失怎么办? 例如。 使用softmax代替SVM? 需要从头开始重新派生。这种方式不是模块化的。
  • 对于非常复杂的NN模型不可行!

计算图

公式f(x,y,z)=(x+y)zf(x,y,z)=(x+y)z的计算图如下
计算机视觉中的深度学习6: 反向传播

例子1

  1. 向前传播过程
    1. q=x+y  , f=qzq = x+y\ \ , \ f=qz
    2. 计算机视觉中的深度学习6: 反向传播
  2. 反向传播过程
    1. 我们想要的是fx\partial f\over \partial x, fy\partial f\over \partial y, fz\partial f\over \partial z
    2. 计算机视觉中的深度学习6: 反向传播
    3. 用链式规则可以得到如下的公式计算机视觉中的深度学习6: 反向传播
    4. 同理对于fx\partial f\over \partial x,我们是很容易能够得出对于当前节点位置的偏导是什么的计算机视觉中的深度学习6: 反向传播

例子2

公式为
f(x,w)=11+e(w0x0+w1x1+w2)f(x,w)={1\over 1+e^{-(w_0x_0+w_1x_1+w_2)}}

向前传播过程
计算机视觉中的深度学习6: 反向传播
反向传播的第一部分

0.53=11.372-0.53 = -{1\over 1.37^2}
计算机视觉中的深度学习6: 反向传播
反向传播的第三步

0.2=e1.00.53-0.2 = e^{-1.0} * -0.53
计算机视觉中的深度学习6: 反向传播

这个例子就非常具体地显示了怎么计算本地梯度以及连式法则的运用。

模块API设计

对于每一个神经层,在实现这个神经层的时候,都会知道输入输出的矩阵长宽,以及**函数的使用。所以在pytorch,tensorflow等实现的时候,都已经实现好了这个**函数和输入输出矩阵的节点向前传播,向后传播的函数,直接将这个节点拿去使用即可。

计算机视觉中的深度学习6: 反向传播

向量化

计算机视觉中的深度学习6: 反向传播
第一例为单输入单输出,第二列为输入向量,输出单数,第三列为输入输出向量

例子1

对于一个4输入4输出的函数,我们可以得出它的Jacobian矩阵如下
计算机视觉中的深度学习6: 反向传播
我们可以发现,Jacobian矩阵大部分都是0;这是一个非常常见的情况,Jacobian矩阵是非常非常稀疏的,所以绝对不要显式地表示Jacobian矩阵,而是应该用隐式的方式去压缩。

例子2

矩阵输入,矩阵输出,感兴趣的可以看看幻灯片里面的具体讲解
计算机视觉中的深度学习6: 反向传播

相关文章:

  • 2021-04-11
  • 2021-05-08
  • 2021-10-08
  • 2021-08-17
  • 2021-10-31
  • 2021-05-16
猜你喜欢
  • 2021-10-02
  • 2022-01-19
  • 2021-05-24
  • 2021-05-03
  • 2021-11-29
  • 2021-10-23
相关资源
相似解决方案