• (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维数组,数组在各层之间传递。

  • 相关阅读:
    多线程与Socket编程
    正则表达式
    委托事件泛型
    C#基础加强
    随笔
    不设置JAVA_HOME运行eclipse
    CentOS7.x系统中使用Docker时,在存储方面需要注意的问题
    【转】关于高可用负载均衡的探索-基于Rancher和Traefic
    Rancher 容器管理平台-免费视频培训-链接及内容-第三季
    使用Rancher的RKE快速部署Kubernetes集群
  • 原文地址:https://www.cnblogs.com/ChenKe-cheng/p/10523596.html
Copyright © 2020-2023  润新知