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. C++ spdlog日志管理

    [1]spdlog简介 spdlog是一个开源的.快速的.仅有头文件的基于C++11实现的一款C++专用日志管理库. [2]源码下载 下载地址:https://github.com/gabime/sp ...

  2. IO流的学习以及统计次数最多的单词

    IO流: 处理数据类型:字节流(InputStream  OutputStream)和字节流(Reader  Writer) 数据流向不同:输入流和输出流(FileInputStream   File ...

  3. 论 <解方程>

    题面: 求n次整系数方程\(\sum_{i=1}^{n} a_ix^i = 0\)在区间\([1,m]\)上的整数解 解法: 1.暴力 O(NM) 暴力枚举+解方程 2.假设只要求一个解 瞎搞做法 引 ...

  4. MyBatis 查询结果的缓存

    MyBatis的缓存指的是缓存查询结果,当以后使用相同的sql语句.传入相同的参数进行查询时,可直接从mybatis本地缓存中获取查询结果,而不必查询数据库. mybatis的缓存包括一级缓存.二级缓 ...

  5. 201409-2 画图 Java

    思路: 法1:计算每个矩形的小方块,去掉重复的 法2:二维数组,需要涂色就置flag为1,最后遍历输出,不会有重复计算 import java.util.Scanner; public class M ...

  6. MyBatis从入门到精通(第9章):Spring集成MyBatis(上)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(上) Spring是一个为了解决企业级Web应用开发过程中面临的复杂性,而被创建的一个非常流行的轻量级框架. mybatis-sp ...

  7. Evaluation metrics for classification

    Accuracy/Error rate ACC = (TP+TN)/(P+N) ERR = (FP+FN)/(P+N) = 1-ACC Confusion matrix Precision/Recal ...

  8. python中的倒序遍历

    1.在列表本身倒序 a = [1, 3, 7, 5, 2, 6] a.reverse() # 在列表本身进行倒序,不返回新的值 print(a) # 输出a: # [6, 2, 5, 7, 3, 1] ...

  9. Python笔记_第三篇_面向对象_7.多态

    1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...

  10. Opencv笔记(十七)——轮廓性质

    边界矩形的宽高比 x,y,w,h = cv2.boundingRect(cnt) aspect_ratio = float(w)/h Extent Extent就是轮廓面积与边界矩形面积的比. are ...