umich cv-3-2
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 = W1x+b1 也可以这样计算
反向传播也可以计算高阶导数,只需要把低阶导数作为计算图的一部分,然后反向传播即可

umich cv-3-2的更多相关文章
- 关于国内外CV领域牛人的博客链接 .
此文为转载文章,尊重知识产权http://blog.csdn.net/carson2005/article/details/6601109此为原文链接,感谢作者! 以下链接是关于计算机视觉(Compu ...
- 计算机视觉(ComputerVision, CV)相关领域的站点链接
关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...
- 几个常用的CV知识点
刚结束一段实习,图像算法工程师.总结一下图像算法的几个基本的操作,图像操作算子各式各样,各显神通,光是滤波filter这一个专题就可以有很多的技巧和功能. 我从做过的两个小项目入手, 简单介绍一下该项 ...
- 基于Emgu CV的人脸检测代码
这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...
- 自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)
using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; na ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- Emgu.CV 播放视频
using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...
- Emgu.CV/opencv 绘图 线面文字包括中文
绘图很简单 Emgu.CV.Image<Bgr, Byte> image; 使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文 CircleF circle = ...
- yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>
GCHandle handle = GCHandle.Alloc(yuvs, GCHandleType.Pinned); Emgu.CV.Image<Bgr, Byte> image = ...
- "Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法
系统win7 32位,只在这一台电脑上出现这种问题,已知VS编译是X86,在数台电脑上测试都正常. 后来把opencv的dll路径例如 E:\...\x86 加入到系统环境变量中就正常了. emgu ...
随机推荐
- 高可用只读,让RDS for MySQL更稳定
摘要:业务应用对数据库的数据请求分写请求(增删改)和读请求(查).当存在大量读请求时,为避免读请求阻塞写请求,数据库会提供只读实例方案.通过主实例+N只读实例的方式,实现读写分离,满足大量的数据库读取 ...
- 自研ORM 子查询&嵌套查询
作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql Pos ...
- pyinstaller打包程序后提示No module named ‘xxxx‘
解决方法1 1.检查 先在venv环境中安装xxx 报错的这个包 以我的举例 查看settings>project interpreter (存在对应的包) 解决方法2 2.在xxx.spec ...
- .NET 8 Preview 6发布,支持新的了Blazor呈现方案 和 VS Code .NET MAUI 扩展
2023年7月11日 .NET 8 Preview 6,.NET 团队在官方博客发布了系列文章: Announcing .NET 8 Preview 6[1] ASP.NET Core updates ...
- Blazor前后端框架Known-V1.2.5
V1.2.5 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...
- Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框
Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框 本文是项目中关于 弹窗界面 设计的技术分享,通过 FluentAvalonia+Dialo ...
- Cilium系列-4-Cilium本地路由
系列文章 Cilium 系列文章 前言 在前文中我们提到, cilium install 默认安装后, Cilium 功能启用和禁用情况如下: datapath mode: tunnel: 因为兼容性 ...
- 自定义javascript中call、bind、apply方法
call.bind.apply都是Function原型上的方法,用于改变this的指向 自定义函数 js中的call.bind.apply是用c++代码实现的,我们这里使用js代码做一个模式,没有把所 ...
- 【go笔记】使用标准库flag解析命令行参数
前言 Go语言标准库中提供了一个包flag可以解析命令行参数. 示例代码:文件读取 package main import ( "fmt" "flag" &qu ...
- js判断h5页面地址的打开方式(微信、pc、移动端)
1 function isOpenMode(){ 2 //平台.设备和操作系统 3 var system = { 4 win: false, 5 mac: false, 6 xll: false, 7 ...