这是个06年的老文章了,但是很多地方还是值得看一看的.

一、概要

主要讲了CNN的Feedforward Pass和 Backpropagation Pass,关键是卷积层和polling层的BP推导讲解。

二、经典BP算法

前向传播需要注意的是数据归一化,对训练数据进行归一化到 0 均值和单位方差,可以在梯度下降上改善,因为这样可以防止过早的饱,这主要还是因为早期的sigmoid和tanh作为激活函数的弊端(函数在过大或者过小的时候,梯度都很小),等现在有了RELU和batch normalization这两个神器,基本上对梯度消失的问题有了不错的解决。然后是BP算法,论文里面稍微难理解的是公式5的推导,

(引用的这里的翻译http://www.cnblogs.com/shouhuxianjian/p/4529202.html):

网络中我们需要后向传播的“ 误差”可以被认为是关于有偏置项扰动的每个单元的 “敏感性”。也就是说:

(公式4)

因为,所以偏置的敏感性其实等于一个单元的所有输入产生的误差偏导。下面的就是从高层到低层的BP:

(公式5)

因为左边是输入X的误差偏导,有因为,所以要前面的误差偏导乘上第l+1个W在乘上激活函数的偏导,这个如果对BP算法有所了解的话应该很好理解。

这里的“o” 表示是 逐原始相乘的。对于公式2中的误差函数,输出层神经元的敏感性如下:

(公式6)

最后,关于某个给定的神经元的更新权重的delta-rule就是对那个神经元的输入部分进行复制,只是用神经元的delta进行缩放罢了(其实就是如下面公式7的两个相乘而已)。在向量的形式中,这相当于输入向量(前层的输出)和敏感性向量的外积:

(公式7)

(公式8)

 三、CNN

Sub-sampling的好处是来减少计算时间并且逐步的建立更深远的空间和构型的不变性,后面一点说的很拗口,我的理解还是对平移和缩放不变性的confidence吧。

1.计算梯度

这里论文就很不讲道理了,直接摆公式,什么都没有...卷积层和polling层的反向传播还是相当重要的,这里推荐一篇博文http://www.cnblogs.com/tornadomeet/p/3468450.html,里面对CNN的BP算法讲的很好,基本上推完这四个问题,CNN的BP算法就有了一定的了解了

博客里面比较难理解的是这个图:

也就是把卷积核旋转180度以后,从做左到右,再从上到下,计算得到每个值,跟feadforward pass的卷积不同,因为那个其实是一个相关的操作...只不过以卷积的形式表现了出来,这个才是正统的卷积处理。

这里需要理清一下这四个问题,首先是输出的误差敏感项,这个直接看推导就行了,然后是卷积层的下一层为pooling层时,求卷积层的误差敏感项,因为反向传播的时候,输出会比输入小,所以梯度在传递的时候和传统BP算法不一样,所以如何得到卷积层的误差敏感项就是这个问题考虑的。第三个问题考虑的是pooling层下面接卷积层,这个是因为我们要得到pooling层的误差敏感性,依靠的是卷积核的误差敏感项求的,同样是因为scale 的问题,所以需要去考虑。最后一个问题就是卷积层本身,在得到输出的误差敏感性之后,怎么得到W的,这个只要用相关的操作就可以得到,简单的理解是l层i和l+1层j之间的权值等于l+1层j处误差敏感值乘以l层i处的输入,而卷积的操作是一个累加的过程,所以BP的时候,也需要相关的操作得到。

 四、combine

论文最后讲的几个feature map融合的想法也很好的理解,我的问题是,这个feature map不是一直作为多通道输出的么,为什么需要去融合,后来很多知名的net好像也并没有用到这个方法,是不是只是一次尝试?

论文笔记《Notes on convolutional neural networks》的更多相关文章

  1. 《Vision Permutator: A Permutable MLP-Like ArchItecture For Visual Recognition》论文笔记

    论文题目:<Vision Permutator: A Permutable MLP-Like ArchItecture For Visual Recognition> 论文作者:Qibin ...

  2. [place recognition]NetVLAD: CNN architecture for weakly supervised place recognition 论文翻译及解析(转)

    https://blog.csdn.net/qq_32417287/article/details/80102466 abstract introduction method overview Dee ...

  3. 论文笔记系列-Auto-DeepLab:Hierarchical Neural Architecture Search for Semantic Image Segmentation

    Pytorch实现代码:https://github.com/MenghaoGuo/AutoDeeplab 创新点 cell-level and network-level search 以往的NAS ...

  4. 论文笔记——Rethinking the Inception Architecture for Computer Vision

    1. 论文思想 factorized convolutions and aggressive regularization. 本文给出了一些网络设计的技巧. 2. 结果 用5G的计算量和25M的参数. ...

  5. 论文笔记:Fast Neural Architecture Search of Compact Semantic Segmentation Models via Auxiliary Cells

    Fast Neural Architecture Search of Compact Semantic Segmentation Models via Auxiliary Cells 2019-04- ...

  6. 论文笔记:ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware

    ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware 2019-03-19 16:13:18 Pape ...

  7. 论文笔记:DARTS: Differentiable Architecture Search

    DARTS: Differentiable Architecture Search 2019-03-19 10:04:26accepted by ICLR 2019 Paper:https://arx ...

  8. 论文笔记:Progressive Neural Architecture Search

    Progressive Neural Architecture Search 2019-03-18 20:28:13 Paper:http://openaccess.thecvf.com/conten ...

  9. 论文笔记:Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation

    Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation2019-03-18 14:4 ...

  10. 论文笔记系列-DARTS: Differentiable Architecture Search

    Summary 我的理解就是原本节点和节点之间操作是离散的,因为就是从若干个操作中选择某一个,而作者试图使用softmax和relaxation(松弛化)将操作连续化,所以模型结构搜索的任务就转变成了 ...

随机推荐

  1. java字符格式

    http://blog.chinaunix.net/uid-12348673-id-3335300.html http://blog.csdn.net/zhouyong80/article/detai ...

  2. komodo-edit

    sudo add-apt-repository ppa:mystic-mirage/komodo-edit sudo apt-get update sudo apt-get install komod ...

  3. C#装箱与拆箱的研究

    在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的类.那么,我想问的是它 ...

  4. wepy一些问题和解决方案

    wepy一些问题和解决方案 小程序开发和传统的web开发有相识的地方,但是也有不同的地方,要区分. computed属性名和props属性名重复 如果那个组件的渲染值是重名的computed属性,每次 ...

  5. c语言中--typeof--关键字用法

    C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 下面是Linux内核源代码中一个关于typeof实例: #define min(x, y) ({ \ typ ...

  6. gravity 使用操作。

    gravity 使用操作.最近我司有一个比较奇葩的需求,我们的环境是主从,因为数据量较大会定期的删除数据,最近不行了,要求新建出来一个库 同步正事环境的数据,但是要剔除 delete ,drop,tr ...

  7. Oracle - 存储过程、函数、包的使用练习-雇员

    --存储过程范例:得到雇员表 emp 的记录数 begin --说明:若过程中要向外抛异常,请使用 exception when others then raise; 这个抛出的异常在程序里是可以捕获 ...

  8. 制定RPM包和加入YUM源

    ##################################################### ##如有转载,请务必保留本文链接及版权信息 ##欢迎广大运维同仁一起交流linux/unix ...

  9. 在Linux下搜索文件

    在Linux下搜索文件============================= 1,which 查找可执行文件的绝对路径 [root@aminglinux ~]# which cat /bin/ca ...

  10. 自动化运维工具——ansible系列命令

    ansible-galaxy 连接 https://galaxy.ansible.com 下载相应的roles,此网站是Ansible爱好者将日常使用较好的playbooks打包上传,其他人可以免费下 ...