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 lecture3 Loss Functions and Optimization 听课笔记

    1. Loss function是用来量化评估当前预测的好坏,loss function越小表明预测越好. 几种典型的loss function: 1)Multiclass SVM loss:一般的S ...

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

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

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

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

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

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

  6. cs231n spring 2017 lecture5 Convolutional Neural Networks听课笔记

    1. 之前课程里,一个32*32*3的图像被展成3072*1的向量,左乘大小为10*3072的权重矩阵W,可以得到一个10*1的得分,分别对应10类标签. 在Convolution Layer里,图像 ...

  7. cs231n spring 2017 lecture10 Recurrent Neural Networks

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

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

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

  9. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

随机推荐

  1. 使用canvas实现绚丽的时钟特效

    源码 https://github.com/2016Messi/Gorgeous-clock 效果展示 https://2016messi.github.io/Gorgeous-clock/ 如果各位 ...

  2. 小白的Python之路 day4 装饰器前奏

    装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能 ...

  3. 小程序代码包压缩 策略&方案

    微信小程序自推出以来,逐渐发展,目前正受到越来越多的青睐.其中很重要的一点得益于小程序的轻量级特性,每个小程序最多不超过2MB,招之即来挥之即去,相比于几十上百兆的APP,用户进入小程序,或者说,小程 ...

  4. boost::assign(标准容器填充库)

    boost::assign通过对"+="和","的重载非常方便的填充标准容器(std::vector,std::set,std::list,std::map), ...

  5. mysql创建新用户及新用户不能本地登陆的问题

    最近在搭建hadoop集群,主节点上面安装的MySQL数据库,对着方面不熟悉,为hive.Ooize等服务统一使用的root账号和密码,为了安全一些库对于某些用户是不可见的,所以需要针对不同的服务设置 ...

  6. js知识点记录

    1.for...in:用于遍历数组或对象的属性. for(var prop in obj){console.log(obj[prop])}; 该循环遍历对于对象属性是无序的,可能是因为obj本来就是无 ...

  7. c#发展前景

    根据育龙网资料评价显示:C#几乎集中了所有关于软件开发和软件工程研究的最新成果:面向对象.类型安全.组件技术.自动内存管理.跨平台异常处理.版本控制.代码安全管理…….尽管像很多人注意到的一样,罗列上 ...

  8. angularjs 怎么获取鼠标焦点 鼠标移入显示浮动的div提示框

    首先,我们要清楚几个基础的知识,angular的两个鼠标移入移出的指令------ng-mouseover(鼠标移入)ng-mouseleave(鼠标移出)--------还有就是window.eve ...

  9. php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

    转载自:http://blog.csdn.net/nuli888/article/details/51892776 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图 ...

  10. Ubuntu16.04 添加 Docker用户组

    Ubuntu16.04 添加 Docker用户组 将用户添加到docker用户组就不用每次都 sudo了. ### 首先创建用户组 sudo groupadd docker 将用户加如组 sudo g ...