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的更多相关文章

  1. cs231n spring 2017 lecture4 Introduction to Neural Networks 听课笔记

    1. Backpropagation:沿着computational graph利用链式法则求导.每个神经元有两个输入x.y,一个输出z,好多层这种神经元连接起来,这时候已知∂L/∂z,可以求出∂L/ ...

  2. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  3. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  4. CS231n笔记 Lecture 4 Introduction to Neural Networks

    这一讲主要介绍了神经网络,基本内容之前如果学习过Andrew的Machine learning应该也都有所了解了.不过这次听完这一讲后还是有了新的一些认识. 计算图 Computational gra ...

  5. cs231n spring 2017 lecture10 Recurrent Neural Networks 听课笔记

    (没太听明白,下次重新听一遍) 1. Recurrent Neural Networks

  6. cs231n spring 2017 lecture10 Recurrent Neural Networks

    (没太听明白,下次重新听一遍) 1. Recurrent Neural Networks

  7. cs231n spring 2017 lecture12 Visualizing and Understanding 听课笔记

    这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...

  8. cs231n spring 2017 lecture12 Visualizing and Understanding

    这一节课很零碎. 1. 神经网络到底在干嘛? 浅层的是具体的特征(比如边.角.色块等),高层的更抽象,最后的全连接层是把图片编码成一维向量然后和每一类标签作比较.如果直接把图片和标签做像素级的最近领域 ...

  9. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

随机推荐

  1. 北邮14&18年软院机试【参考】答案

    2014 Problem A. 奇偶求和 题目描述: 给定N个数,分别求出这N个数中奇数的和以及偶数的和. 输入格式 第一行为测试数据的组数T(1<=T<=50).请注意,任意两组测试数据 ...

  2. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  3. Ubuntu18.04 有线无法正常上网(请读完全文再进行操作)

    电脑Windows10+Ubuntu18.04双系统,一直都没问题,前段时间突然在Ubuntu系统下有线连接失败,但是在Windows下可以正常上网. 今天尝试进行了修复. 在终端通过ifconfig ...

  4. MVC——EF 回顾总结

    回顾一下MVC的知识点. 其实开始 我在学校的知识对MVC 还是很模糊的一个概念.只是记得结合EasyUI 增删改查 和分页,代码都是模糊的 进过这段时间的学习,让我对MVC 有了一个很清楚的认识. ...

  5. 计蒜客 方程的解数(DFS)

    问题描述 输出格式 输出一行,输出一个整数,表示方程的整数解的个数. 样例输入 - 样例输出 #include <stdio.h> #include <string.h> #i ...

  6. tensorflow模型

    图像模型 YOLOv3 , 地址 https://pjreddie.com/darknet/yolo/ vgg , 参考 https://github.com/tensorflow/models/bl ...

  7. Promoter complex|转录组水平RNA的复杂度|

    生命组学 Promoter complex Tata box识别位点 Enhancer加入之后增强转录 不确定性与确定性之间的关系,原因中存在这不确定性,但是结果表达又是确定的.因为promoter的 ...

  8. \_\_init\_\_和\_\_new\_\_

    __init__和__new__ 一.__new__和__init__ 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前 ...

  9. POJ 2796 Feel Good 【单调栈】

    传送门:http://poj.org/problem?id=2796 题意:给你一串数字,需要你求出(某个子区间乘以这段区间中的最小值)所得到的最大值 例子: 6 3 1 6 4 5 2 当L=3,R ...

  10. Java依据集合元素的属性,集合相减

    两种方法:1.集合相减可以使用阿帕奇的一个ListUtils.subtract(list1,list2)方法,这种方法实现必须重写集合中对象的属性的hashCode和equals方法,集合相减判断的会 ...