(Review cs231n) Gradient Vectorized

注意:

  1.每次更新,都要进行一次完整的forward和backward,想要进行更新,需要梯度,所以你需要前馈样本,马上反向求导,得到梯度,然后根据求得的梯度进行权值微调,完成权值更新。

  2.前馈得到损失,反馈得到梯度,对梯度的使用来完成权值更新。

  3. 训练的过程,前馈,反馈,更新;......

 

我们需要进行向量处理,网络中流动的数据并不是标量,全是向量,局部梯度原本是标量,现在它们是雅可比矩阵(雅可比矩阵类似于多元函数的导数,函数的一阶偏导数以一定方式排列成的矩阵)

雅可比矩阵是二维矩阵,表示x中每个元素对z中每个元素的影响,这些由雅可比矩阵存储,梯度和以前一样

 

dL/dz是一个向量,dz/dx是雅可比矩阵(局部梯度),最终得到了一个矩阵和向量的乘积,来表示梯度的反向传播。

雅可比矩阵可不要求出:

雅可比矩阵是一个4096*4096的矩阵,但只有在对角线才有值,进行的是单个元素的操作(因为输入和输出的维度是相同的,然后是单个单个的做RELU操作,所以这个雅可比矩阵的对角线上才有值,相对应的那个维度组才会有梯度的贡献,若输入大于0,则输入和输出相等,梯度为1;若输入小于0,则输出值提升到0,梯度),对角线不全为1,小于0的数据要提升为0,所以对角线的1被取代(dy/dx=0, 导数为0),求出雅可比矩阵不可取,也不会真的矩阵和向量相乘。

因为矩阵有特殊结构,可以进行利用,因为你只需要观察那些小于0的输入,然后将这些维度上的梯度置0,你从这得到输出梯度,对于小于0的数将梯度置0,继续反向传播。

最终输出的是一个数求得损失函数,我们对分别计算梯度感兴趣,如果我们有多重输出,在反向传播中,必须同时对所以梯度的流向进行跟踪,最终的损失是一个标量

在进行mini-batch时候,每个样例都是独立的,只是同时进行传播。雅可比矩阵非常大,利用稀疏性。

层与层之间连接通过向量的传递完成,传递的n维数组,数组在各层之间传递。

posted @ 2019-03-13 21:16  陈柯成  阅读(399)  评论(0编辑  收藏  举报