cs231n spring 2017 lecture4 Introduction to Neural Networks
1. Backpropagation:沿着computational graph利用链式法则求导。每个神经元有两个输入x、y,一个输出z,好多层这种神经元连接起来,这时候已知∂L/∂z,可以求出∂L/∂x = ∂L/∂z * ∂z/∂x,∂L/∂y = ∂L/∂z * ∂z/∂y。靠这种方式可以计算出最终的loss function相对于最开始的输入的导数。
这种方法的好处是,每个神经元都是很简单的运算(比如加、减、乘、除、指数、sigmoid等),它们导数的解析式是很容易求解的,用链式法则连乘起来就得到了我们需要的导数。如果直接求的话会很复杂很难求。
2. Add(x, y)是gradient distributor,把后面神经元的导数反向传递给x和y。
Max(x, y)是gradient router,它只会反向传递给x、y中大的那一个。可以这么直观的理解,由于只有x、y中大的那个数被传递到后面的神经元对最后结果产生影响,所以在反向传递的时候,也只会评估x、y中大的那个数。
Mul(x, y)是gradient switcher,它把后面神经元的导数分别传递给x和y,传给x的部分乘以y,传给y的部分乘以x。
想想求导公式就明白了。
3. 对于一个输入x,两个输出y、z的神经元,反向传递求导的时候,是把从y和z两路反向传递过来的导数求和。
4. 如果x、y、z等元素都不是标量,而是向量,则求导全部都变成了雅克比矩阵。对于一个4096维输入,4096维输出的系统,雅克比大小为4096*4096,如果minibatch里100个采样,则雅克比变成了409600*409600大小,运算很麻烦。但如果知道输出的某个元素只和输入的某些元素相关,则求偏导的时候只有相关项有值,其他都是0,这个性质可以被用来加速计算。极端的情况,如果输入和输出一一对应,则雅克比是对角矩阵。
5. 深度学习框架(比如Caffe等)的API里,会定义不同的layer,每种layer就是搭神经网络的积木(也就是上文说的神经元节点),每种layer会有自己的forward()/backward()函数,分别用来正向的从输入求出输出,和反向的求loss funciton对这个节点输入的导数。
6. 神经网络,从函数的角度说就是复合函数,把简单函数一层层堆叠起来。例如线性函数f=Wx,则两层的神经网络可能是f=W2max(0,W1x),三层的网络可能是f=W3max(0, W2max(0,W1x))。直观地说,比如在物体分类的问题中,第一层网络训练出的权重可能是一个红色的车的template,而第二层网络的权重可能是不同的颜色,这样两层网络就实现了泛化预测各种颜色的车的目的。
7. 从生物学的角度看,sigmoid函数是非常有道理的,它意味着输入进来的信号不够强的时候输出为0,神经元没有被激活,足够强之后,神经元被激活从而产生输出。ReLU:f(x) = max(0, x)也是同样的想法。这些都是“激活函数”。所以深度学习中实际构造的神经元,通常是一个线性单元复合一个激活函数sigmoid(Wx+b)。
8. 虽然深度学习从脑科学得到了很多启发,但是我们要谨慎的把两者做直接类比,因为生物神经元要复杂的多。
cs231n spring 2017 lecture4 Introduction to Neural Networks的更多相关文章
- cs231n spring 2017 lecture4 Introduction to Neural Networks 听课笔记
1. Backpropagation:沿着computational graph利用链式法则求导.每个神经元有两个输入x.y,一个输出z,好多层这种神经元连接起来,这时候已知∂L/∂z,可以求出∂L/ ...
- cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记
1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...
- cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition
1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...
- CS231n笔记 Lecture 4 Introduction to Neural Networks
这一讲主要介绍了神经网络,基本内容之前如果学习过Andrew的Machine learning应该也都有所了解了.不过这次听完这一讲后还是有了新的一些认识. 计算图 Computational gra ...
- cs231n spring 2017 lecture10 Recurrent Neural Networks 听课笔记
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture10 Recurrent Neural Networks
(没太听明白,下次重新听一遍) 1. Recurrent Neural Networks
- cs231n spring 2017 lecture12 Visualizing and Understanding 听课笔记
这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...
- cs231n spring 2017 lecture12 Visualizing and Understanding
这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...
- cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...
随机推荐
- Codeforces Round #620 (Div. 2)E LCA
题:https://codeforces.com/contest/1304/problem/E 题意:给定一颗树,边权为1,m次询问,每次询问给定x,y,a,b,k,问能否在原树上添加x到y的边,a到 ...
- [ZJCTF 2019]NiZhuanSiWei
0x00知识点 1:data伪协议写入文件 2:php:// php://filter用于读取源码 php://input用于执行php代码 3反序列化 0x01解题 打开题目,给了我们源码 < ...
- Java中常用的API(二)——String
在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String. String类是我们经常使用的类,应用十分广泛.同时,String类中封装了一系列的方法,非常常用, ...
- 向mysql数据库中插入数据时显示“Duplicate entry '1′ for key ‘PRIMARY' ”错误
错误情况如题,出现这个错误的原因十分简单: 很明显,这是主键的问题. 在一张数据表中是不能同时出现多个相同主键的数据的 这就是错误的原因,解决的方法: 1.可以将这张表设置成无主键(mysql支持,其 ...
- 面试易错题 Java
1. int[] arr = new int[10]; System.out.println(arr);//地址值? char[] arr1 = new char[10]; System.out.pr ...
- 为什么常用 Map<> map = new HashMap()
在初学Java的时候,经常能看到教材上的写法,使用了接口Map来引用一个map,而不是它的具体实现,那么这样做的好处是什么呢? <Effective Java>第52条:通过接口引用对象 ...
- D. Minimax Problem(二分+二进制)
D. Minimax Problem time limit per test 5 seconds memory limit per test 512 megabytes input standard ...
- @Component, @Repository, @Service,@Controller的区别
@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...
- tensorflow C++接口调用图像分类pb模型代码
#include <fstream> #include <utility> #include <Eigen/Core> #include <Eigen/Den ...
- 编译Python文件
编译Python文件 一.编译Python文件 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式 ...