反向传播笔记

      斯坦福CS231n课程确实很好,学了有两三遍,每次都有不一样的收获,理解的也更深刻。这里把自己觉得重要的东西记录下来,以加深印象,同时便于查阅。CS211n简书笔记链接:https://www.jianshu.com/p/182baeb82c71

      反向传播是利用链式法则递归计算表达式梯度的方法。核心问题:给定函数f(x),其中x是输入数据的向量,需要计算函数f关于x的梯度,即▽f(x)。f为损失函数,输入x包含训练数据和神经网络的权重。

      通常只计算参数(W,b)的梯度,xi梯度可用于可视化。函数对于每个变量的导数指明了整个表达式对于该变量的敏感程度。

      例如,即梯度实际上是个向量。利用链式法则计算复合表达式最简单的公式为:


      例如f(x,y,z)=(x+y)z,则变量梯度为[dfdx,dfdy,dfdz]。

      在计算线路图中,每个门单元都会得到一些输入并立即计算(一些函数可组成门,如sigmoid函数):(1)这个门的输入值;(2)其输出值关于输入值的局部梯度。

      在不同分支的梯度要相加:变量x,y在前向传播表达式中出现多次,使用+=而不是+来累计变量的梯度。

      加法操作将梯度相等的分发给它的输入;取最大操作将梯度路由给更大的输入;乘法门拿取输入激活数据,对它们进行交换,然后乘以梯度。

      

      前向传播从输入计算到输出(绿色),反向传播从尾部开始,根据链式法则递归地向前计算梯度(显示为红色),一直到网络的输入端。可以认为,梯度是从计算链路中回流。

      若在计算过程中对所有输入数据样本xi乘以1000,那么权重梯度将会增大1000倍,这样就必须降低学习率来弥补。所以数据预处理关系重大,它即使是只有微小变化,也会产生巨大影响。

      向量化操作计算梯度:注意关注维度和转置操作。矩阵相乘的梯度的计算最有技巧(也适用于矩阵和向量,向量和向量相乘)。

补充知识点:

      对标量求导:(1)向量对标量求导,结果是个向量(向量每个元素对标量求导)。例如:y(x)=(y1,y2,...,yn),其中x是标量,则∂y/∂x=(∂y1/∂x,∂y2/∂x,...,∂yn/∂x);

      (2)矩阵对标量求导,结果是个矩阵(矩阵每个元素对标量求导),例如Y(x)=(yij),则∂Y(x)/∂x=∂yij/∂x

      对向量求导:(1)标量对向量求导,结果是向量。事实上这就是所谓的gradient,对一般标量函数f(x),其中x=(x1,x2,...,xn),则∂f/∂x=(∂f/∂x1,∂f/∂x2,...,∂f/∂fxn),也记为▽f。

      (2)向量对向量对导,结果是矩阵(matrix gradient),即对于向量值函数f(x),其中x=(x1,x2,...,xn),f=(f1,f2,...,fm),则▽f=∂y/∂x=(∂f1/∂x,∂f2/∂x,...,∂fm/∂fx)=...  在实际运算中还会出现∂y/∂xT=(▽f)T,也叫做f的Jacobian。

      (3)矩阵对向量求导,结果是个三维的object,先来个gradient,然后其中每个元素都是个matrix。

      对矩阵求导:

      标量对矩阵求导,结果还是矩阵。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值