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

Slides:百度云 提取码: gs3n

神经网络的梯度下降

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

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

在这里插入图片描述
如上公式所示,Loss函数最终是能被表达成由各层W组成的函数公式,并且也完全有可能直接对其进行求导。

问题

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

计算图

公式 f ( x , y , z ) = ( x + y ) z f(x,y,z)=(x+y)z f(x,y,z)=(x+y)z的计算图如下
在这里插入图片描述

例子1
  1. 向前传播过程
    1. q = x + y    ,   f = q z q = x+y\ \ , \ f=qz q=x+y  , f=qz
    2. 在这里插入图片描述
  2. 反向传播过程
    1. 我们想要的是 ∂ f ∂ x \partial f\over \partial x xf, ∂ f ∂ y \partial f\over \partial y yf, ∂ f ∂ z \partial f\over \partial z zf
    2. 在这里插入图片描述
    3. 用链式规则可以得到如下的公式在这里插入图片描述
    4. 同理对于 ∂ f ∂ x \partial f\over \partial x xf,我们是很容易能够得出对于当前节点位置的偏导是什么的在这里插入图片描述
例子2

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

向前传播过程
在这里插入图片描述
反向传播的第一部分

− 0.53 = − 1 1.3 7 2 -0.53 = -{1\over 1.37^2} 0.53=1.3721
在这里插入图片描述
反向传播的第三步

− 0.2 = e − 1.0 ∗ − 0.53 -0.2 = e^{-1.0} * -0.53 0.2=e1.00.53
在这里插入图片描述

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

模块API设计

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

在这里插入图片描述

向量化

在这里插入图片描述
第一例为单输入单输出,第二列为输入向量,输出单数,第三列为输入输出向量

例子1

对于一个4输入4输出的函数,我们可以得出它的Jacobian矩阵如下
在这里插入图片描述
我们可以发现,Jacobian矩阵大部分都是0;这是一个非常常见的情况,Jacobian矩阵是非常非常稀疏的,所以绝对不要显式地表示Jacobian矩阵,而是应该用隐式的方式去压缩。

例子2

矩阵输入,矩阵输出,感兴趣的可以看看幻灯片里面的具体讲解
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值