原文:https://blog.csdn.net/aimreant/article/details/53145063

思考卷积神经网络(CNN)中各种意义

只是知道CNN是不够,我们需要对其进行解剖,继而分析不同部件存在的意义

CNN的目的

简单来说,CNN的目的是以一定的模型对事物进行特征提取,而后根据特征对该事物进行分类、识别、预测或决策等。在这个过程里,最重要的步骤在于特征提取,即如何提取到能最大程度区分事物的特征。如果提取的特征无法将不同的事物进行划分,那么该特征提取步骤将毫无意义。而实现这个伟大的模型的,是对CNN进行迭代训练。

特征

在图像中(举个例子),目标事物的特征主要体现在像素与像素之间的关系。比如说,我们能区分一张图片中有一条直线,是因为直线上的像素与直线外邻像素的区别足够大(或直线两边的像素区别足够大),以至于这“直线”能被识别出来:

除了直线外,其他特征也同理。在CNN中,大部分特征提取依赖于卷积运算。

卷积与特征提取

卷积在此其实就是内积,步骤很简单,就是根据多个一定的权重(即卷积核),对一个块的像素进行内积运算,其输出就是提取的特征之一:

选用卷积的原因

局部感知

简单来说,卷积核的大小一般小于输入图像的大小(如果等于则是全连接),因此卷积提取出的特征会更多地关注局部 —— 这很符合日常我们接触到的图像处理。而每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。

参数共享

参数共享最大的作用莫过于很大限度地减少运算量了。

多核

一般我们都不会只用一个卷积核对输入图像进行过滤,因为一个核的参数是固定的,其提取的特征也会单一化。这就有点像是我们平时如何客观看待事物,必须要从多个角度分析事物,这样才能尽可能地避免对该事物产生偏见。我们也需要多个卷积核对输入图像进行卷积。

Down-Pooling

卷积后再接上一个池化层(Pooling)简直就是绝配,能很好的聚合特征、降维来减少运算量。

多层卷积

层数越高,提取到的特征就越全局化。

池化

池化,即对一块数据进行抽样或聚合,例如选择该区域的最大值(或平均值)取代该区域:

上图的池化例子,将10 * 10的区域池化层1 * 1的区域,这样使数据的敏感度大大降低,同时也在保留数据信息的基础上降低了数据的计算复杂度。

激活函数的意义

在数学上,激活函数的作用就是将输入数据映射到0到1上(tanh是映射-1到+1上)。至于映射的原因,除了对数据进行正则化外,大概是控制数据,使其只在一定的范围内。当然也有另外细节作用,例如Sigmoid(tanh)中,能在激活的时候,更关注数据在零(或中心点)前后的细小变化,而忽略数据在极端时的变化,例如ReLU还有避免梯度消失的作用。通常,Sigmoid(tanh)多用于全连接层,而ReLU多用于卷积层。

或者我们换一个卷积核(换一种角度)来看待这个激活函数,如果我们把每一次激活动作当成一次分类,即对输入数据分成两类(0或1),那么激活函数得到的输出是在0到1的值,它可以代表着这次“分类”的归属度。如果我们把0规定为未激活,1表示激活,那么输出0.44就表示激活了44%。

而激活函数的使用却有可能带来一定的负面影响(对于训练的负面影响),激活函数可能会使我们得输入数据都激活了大半,对此我们有另外的对策 —— LRN。

LRN的催化与抑制

LRN,局部响应归一化。在神经学科中,有一个叫横向抑制(lateral inhibition)的概念,这种抑制的作用就是阻止兴奋神经元向邻近神经元传播其动作趋势,从而减少兴奋神经元的邻近神经元的激活程度。借鉴了这一生物现象(其实我们全部东西都是借鉴生物的,不是?),我们使用LRN层来对激活函数的输出数据进行横向抑制,在为激活函数收拾残局的同时,LRN还凸显了该区域的一个峰值 —— 这个峰值特征就是我们想要的特征。

特别是ReLU,它无限制的激活使得我们更需要LRN来到数据进行归一化。在大规模的数据中,我们大多情况下更看重被凸显的高频特征。因此,用LRN对数据的峰值进行催化而对其周围进行抑制,何乐不为。

IP层

在许多CNN的后部分,都存在着一个IP(Inner Product)层/内积层/fc(full connect)层/全连接层。这个全连接网络的代表性层级,其存在于CNN的意义我不得而知。在许多论文中,它替代了softmax来特征负责最终的提取,而有人也指出CNN最后可以不用IP层。

Dropout的舍弃

舍弃一直是一个伟大的哲学,生物的进化上例子比比皆是。Dropout的任务就是在训练时,通过设置阈值并与某些隐含层节点的权重对比,让特定的权重不工作 —— 在该层舍弃这些权重。Dropout的作用也很明显,除了加速运算外,就是防止过拟合了。

思考卷积神经网络(CNN)中各种意义的更多相关文章

  1. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  2. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  3. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...

  4. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  5. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

  6. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  7. 卷积神经网络CNN总结

    从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...

  8. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

  9. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

随机推荐

  1. POJ - 1101 The Game dfs

    题意:给你一个地图,上面有一些‘X',给你起点终点,让你输出从起点到终点的路径中转向(改变方向)次数最少的路径,注意,不能穿过别的’X'并且可以超过边界 题解:关于超过边界,只要在外围多加一圈‘ ’. ...

  2. 希尔排序之python

    希尔排序( Shell sort) 插入排序的改进版本,其核心思想是将原数据集合分割成若干个子序列,然后再对子序列分别进行直接插入排序,使子序列基本有序,最后再对全体记录进行一次直接插入排序. 我的面 ...

  3. CSS3实现背景透明,文字不透明

    最近遇到一个需求,要在图片上显示带有半透明背景的文字,效果如下图所示: 看到这个需求之后,第一反应是使用CSS3中的opacity设置元素的透明度. <!DOCTYPE html> < ...

  4. fiddler抓包工具使用

    此工具用于抓取302等看不到的包. 设置: 步骤一 步骤二 重启fiddler软件,设置才有效. 设置谷歌浏览器,使浏览器的访问都经过fiddler.(fiddler就成了代理了)设置如下 隐藏图片的 ...

  5. Percona Data Recovery Tool 单表恢复

    前几天写过update或者delete忘加where条件的数据恢复.今天介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢 ...

  6. 看懂Oracle执行计划、表连接方式

    看懂Oracle执行计划  原文:https://www.cnblogs.com/Dreamer-1/p/6076440.html 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也 ...

  7. Shell初学(二)变量及数组

    精简版: 定义:your_name=123      PS:=符号左右不能有空格! 使用:${your_name},单独使用变量时可以不加{} 只读:readonly your_name  PS:设置 ...

  8. JSP页面中引入另一个JSP页面

    一个JSP页面中引入另一个JSP页面,相当于把另一个JSP页面的内容复制到对应位置: <%@include file="date.jsp" %> 一般页面的top和bo ...

  9. .Net Core 使用依赖注入

    ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection 在asp .net中使用依赖注入很简单,只需要在Startup类的 ...

  10. node初识——node中的require方法与require.js的区别

    出处:http://blog.csdn.net/u013613428/article/details/51966500 作为一个前端的新手,总是诧异于js的模块载入方式,看到了通过requireJs提 ...