UMICH CV Neural Network

既然谈到神经网络,我们肯定要讨论在神经网络中是如何进行梯度的计算以及参数的优化的

传统的方法就是我们手动计算梯度,但是随着神经网络层数的增加,这种方法显然过于复杂

因此我们引入了计算图的概念,从一个简单的例子出发:



我们可以把一个(x+y)z的计算式拆分成上图所示,向前传播就是计算出我们的输出结果,一步步

而反向传播是为了计算梯度,比如说我们想要f对x,y,z的偏导

求f对y的偏导 我们可以根据链式法则来计算:



用专业的语言,我们要求下游梯度,现在我们在当前一个节点,可以很容易求出当前梯度,上游再将之前计算出的上游梯度传递给我们,我们就可以计算出下游梯度:

举一个更复杂的例子:



这里我们可以把中间sigmoid函数这一部分合并成为一个节点,直接用上游梯度,乘以计算得到的当前梯度,简化计算图的计算过程

计算图本身有些节点也存在着规律:



+节点,它们的下游节点梯度于上游节点梯度相等

*节点,它们下游节点梯度等于上游节点梯度乘以另一个下游节点的值

复制节点,下游节点梯度等于上游节点梯度之和

max节点,下游较大节点梯度于上游相等,较小节点为0

涉及到实际应用时,我们可以选择直接一步步实现前向传播钰反向:



也可以写成模块化的形式:

上面讨论的都是针对一个数的梯度计算过程,我们还需要把它推广到矩阵与向量,首先需要一点矩阵/向量之间的微分知识:

向量反向传播:





只有对角线上元素有关系,所以除了对角线其它元素均为0,在对角线上的元素,由于是max函数,所以大于0的和对y求导的值相等,小于0的值为0

注意到这个矩阵绝大多数的数均为0,所以我们在具体实现的时候不要直接用矩阵来进行乘法,可以直接应用我们的推理结果:

矩阵反向传播:



显然当地矩阵非常大,我们不可能直接去用矩阵来进行乘法运算:







我们根据定义去求dy/dx1,1,可以发现最终数值等于w矩阵的第一行,最终结果可以换成下图所示形式



我们也可以通过矩阵的形状去记忆,最终结果是一个ND的矩阵,所以要乘以一个MD的矩阵,就是W的转置

在作业中我们要实现两层神经网络的前向传播与反向传播,前向传播比较简单直接计算即可,反向传播分为两步

score = W2h1+b2

根据softmax损失函数的定义梯度,我们可以计算出dL/dscore,再根据之前推导,dL/dw2 = dL/dscore * dscore/dw2 = h1.t() * dL/dscore

dL/dh1 = dL/dscore * w2.t()

dL/db2 = dL/dscore,偏置项这里的梯度计算就是累和,注意维度一致

同样h1 = W1
x+b1 也可以这样计算

反向传播也可以计算高阶导数,只需要把低阶导数作为计算图的一部分,然后反向传播即可

umich cv-3-2的更多相关文章

  1. 关于国内外CV领域牛人的博客链接 .

    此文为转载文章,尊重知识产权http://blog.csdn.net/carson2005/article/details/6601109此为原文链接,感谢作者! 以下链接是关于计算机视觉(Compu ...

  2. 计算机视觉(ComputerVision, CV)相关领域的站点链接

    关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...

  3. 几个常用的CV知识点

    刚结束一段实习,图像算法工程师.总结一下图像算法的几个基本的操作,图像操作算子各式各样,各显神通,光是滤波filter这一个专题就可以有很多的技巧和功能. 我从做过的两个小项目入手, 简单介绍一下该项 ...

  4. 基于Emgu CV的人脸检测代码

    这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...

  5. 自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)

    using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; na ...

  6. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV.     PV:计划值,在即定时间点前计划 ...

  7. Emgu.CV 播放视频

    using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...

  8. Emgu.CV/opencv 绘图 线面文字包括中文

    绘图很简单 Emgu.CV.Image<Bgr, Byte> image;   使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文   CircleF circle = ...

  9. yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>

    GCHandle handle = GCHandle.Alloc(yuvs, GCHandleType.Pinned); Emgu.CV.Image<Bgr, Byte> image = ...

  10. "Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法

    系统win7 32位,只在这一台电脑上出现这种问题,已知VS编译是X86,在数台电脑上测试都正常. 后来把opencv的dll路径例如 E:\...\x86  加入到系统环境变量中就正常了. emgu ...

随机推荐

  1. Auto.js食用指南

    Auto.js食用指南 控件点击是autojs特有的一项功能,基于安卓的无障碍功能的,在软件上有很好的支持,常用于办公软件等...... 前言: 软件选择: auto.js 8.0pro版本(对比4. ...

  2. C++面试八股文:技术勘误

    不知不觉,<C++面试八股文>已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉. 为了不误导更多的小伙伴,以后会不定期的出勘误文章,请 ...

  3. 音视频开发进阶|第四讲:音频自动增益控制 AGC

    在之前的文章中,我们已经接触了两个重要的音频前处理模块 – 回声消除 AEC 和噪声抑制 ANS,它们分别解决了 RTC 场景下的回声.噪声问题,极大提升了用户的体验.至此,音频前处理三剑客中,就只剩 ...

  4. 2023年陕西彬州第八届半程马拉松赛153pb完赛

    1.赛事背景 2023年6月3日,我参加了2023陕西彬州第八届半程马拉松赛,最终153完赛,PB了5分钟.起跑时间早上7点30分,毕竟6月天气也开始热了.天气预报显示当天还是小到中雨,上次铜川宜君半 ...

  5. dash构建多页应用

    dash 构建多页面应用一种方案 本方案对dash官网多页面案例使用dash_bootstrap_components案例进行优化与测试,效果如下 项目代码结构如下 │ app.py │ ├─asse ...

  6. 自学前端-HTML5+CSS-综合案例一-热词

    综合案例一-热词 目录 综合案例一-热词 1.设计需求 2.设计所需标签和CSS样式 3.设计具体步骤 4.遇到的问题 设计图如下 1.设计需求 ①需要鼠标放上去有显示透明 ②需要点击后跳转到相应页面 ...

  7. debezium之mysql配置

    实验环境 全部部署于本地虚拟机 1 mysql 参考 官方文档 和 根据官方示例镜像(debezium/example-mysql,mysql版本为8.0.32) 1.1 创建用户 官方镜像里一共有三 ...

  8. grafana Variables 变量的使用

    概念澄清 A variable is a placeholder for a value. # 变量是值的占位符. # 参考文档:https://grafana.com/docs/grafana/la ...

  9. 青少年CTF平台-Web-POST&GET

    题目描述 一星简单题,看我如何给你过了. 启动环境,等待三十秒先喝口水. 做题过程 访问题目地址,说让我们用GET方式提交一个名称为get且值为0的变量. 在URL后面加上?get=0,回车.已经成功 ...

  10. Windows校验文件MD5和SHA值的方法

    1.需求背景 下载或传输文件后,需要计算文件的MD5.SHA256等校验值,以确保下载或传输后的文件和源文件一致 2.校验方法 如上图所示,可以使用Windows自带的certutil命令来计算一个文 ...