卷积神经网络

  • 1. 为什么用卷积神经网络
    • 1.1. 局部感知(local field)
    • 1.2. 权值共享(Shared Weights)
    • 1.3. 下采样或池化(subsampling)
  • 2. 卷积的具体过程
    • 卷积
    • 过渡到三维
    • 池化层

1. 为什么用卷积神经网络

1.1. 局部感知(local field)

形象地说,就是模仿你的眼睛,想想看,你在看东西的时候,目光是聚焦在一个相对很小的局部的吧?严格一些说,普通的多层感知器中,隐层节点会全连接到一个图像的每个像素点上,而在卷积神经网络中,每个隐层节点只连接到图像某个足够小局部的像素点上,从而大大减少需要训练的权值参数。

对于一个 1000∗1000 的输入图像而言,如果下一个隐藏层的神经元数目为 106 个,采用全连接则有 1000∗1000∗106=1012 个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中 10∗10的局部图像相连接,那么此时的权值参数数量为 10∗10∗106=108,将直接减少4个数量级。

如下图所示,左边是每个像素的全连接,右边是每行隔两个像素作为局部连接,因此在数量上,少了很多权值参数数量(每一条连接每一条线需要有一个权值参数,具体忘记了的可以回顾单个[神经元模型]。因此 局部感知就是:
通过卷积操作,把 全连接变成局部连接 ,因为多层网络能够抽取高阶统计特性, 即使网络为局部连接,由于格外的突触连接和额外的神经交互作用,也可以使网络在不十分严格的意义下获得一个全局关系。

下面我们来详细看一下到底局部感知如何使 全连接变成局部连接,按照人工神经网络的方法,把输入图像的像素一字排开之后,每一个像素值就是一个神经元输入,需要对隐层或者输出层做全连接,如上图左侧所示。卷积神经网络引入卷积概念后,卷积核通过原图像,然后卷积核对原图像上符合卷积核大小的像素进行加权求和,每一次只是对符合卷积核的图像像素做卷积,这就是局部感知的概念,使 全连接变成局部连接。

A neuron does not have to see the whole image to discover the pattern, Connecting to small region with less parameters).

1.2. 权值共享(Shared Weights)

不同图的不同区域可能有相同的样式(The same patterns appear in different regions)

尽管局部感知使计算量减少了几个数量级,但权重参数数量依然很多。能不能再进一步减少呢?方法就是权值共享。

权值共享:不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权值参数。

如下图所示,为了找到鸟嘴,一个激活函数A需要检测图像左侧有没有鸟嘴,另外一个激活函数B需要检测另外一张图像中间有没有类似的鸟嘴。其实,鸟嘴都可能具有同样的特征,只需要一个激活函数C就可以了,这个时候,就可以共享同样的权值参数(也就是卷积核)


如果使用了权值共享(共同使用一个卷积核),那么将可以大大减少卷积核的数量,加快运算速度。天下武功,唯快不破。

举个例子,在局部连接中隐藏层的每一个神经元连接的是一个 10∗10 的局部图像,因此有 10∗10 个权值参数,将这 10∗10 个权值参数共享给剩下的神经元,也就是说隐藏层中 106 个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10∗10 个权值参数(也就是卷积核(也称滤波器)的大小。

尽管只有这么少的参数,依旧有出色的性能。但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,需要增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为 Feature Map。如果有100个卷积核,最终的权值参数也仅为 100∗100=104 个而已。另外,偏置参数b也是共享的,同一种滤波器共享一个。

1.3. 下采样或池化(subsampling)

下采样不会改变图形里的实体(Subsampling the pixels will not change the object)
在卷积神经网络中,没有必要一定就要对原图像做处理,而是可以使用某种“压缩”方法,这就是池化,也就是每次将原图像卷积后,都通过一个下采样的过程,来减小图像的规模。

pooling的好处有什么?

  1. 这些统计特征能够有更低的维度,减少计算量。
  2. 不容易过拟合,当参数过多的时候很容易造成过度拟合。
  3. 缩小图像的规模,提升计算速度。

如下图所示,原图是一张500∗500 的图像,经过subsampling之后哦,变成了一张 250∗250 的图像。这样操作的好处非常明显,虽然经过权值共享和局部连接后的图像权值参数已经大大减少,但是对于计算量来说,还是非常巨大,需要消费很大的计算时间,于是为了进一步减少计算量,于是加入了subsampling这个概念,不仅仅使图像像素减少了, 同时也减少计算时间。


举个例子:以最大池化(Max Pooling)为例,1000×1000的图像经过10×10的卷积核卷积后,得到的是991×991的特征图,然后使用2×2的池化规模,即每4个点组成的小方块中,取最大的一个作为输出,最终得到的是496×496大小的特征图。

下采样,即池化,目的是减小特征图,池化规模一般为2×2。常用的池化方法有:

Pooling算法

最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
均值池化(Mean Pooling)。取4个点的均值。
可训练池化。训练函数 f ,接受4个点为输入,出入1个点。

由于特征图的变长不一定是2的倍数,所以在边缘处理上也有两种方案:

保留边缘。将特征图的变长用0填充为2的倍数,然后再池化。
忽略边缘。将多出来的边缘直接省去。

2. 卷积的具体过程

卷积

核卷积不仅用于神经网络,而且是许多其他计算机视觉算法的关键一环。在这个过程中,我们采用一个形状较小的矩阵(称为核或滤波器),我们输入图像,并根据滤波器的值变换图像。后续的特征map值根据下式来计算,其中输入图像用f表示,我们的kernel用h表示,结果矩阵的行和列的索引分别用m和n表示。


过渡到三维

空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。第一个重要的原则是,过滤器和要应用它的图像必须具有相同通道数。基本上,这种方式与图3中的示例非常相似,不过这次我们将三维空间中的值与卷积核对应相乘。如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。

池化层

除了卷积层,CNNs还经常使用所谓的池化层。池化层主要用于减小张量的大小和加速计算。这种网络层很简单——我们需要将图像分割成不同的区域,然后对每个部分执行一些操作。例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。最后一个比较重要的一点是,如果要为多通道图像进行池化操作,则应该分别对每个通道进行池化。

[深度学习-理论篇]什么是卷积神经网络CNN相关推荐

  1. 花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network)

    目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  2. 花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层

    目录 0. 前言 1. 全连接层(fully connected layer) 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN ...

  3. 深度学习(四):卷积神经网络(CNN)模型结构,前向传播算法和反向传播算法介绍。

    在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...

  4. 【深度学习】超级简单的卷积神经网络(CNN)

    1.卷积神经网络介绍 卷积神经网络(Convolutional Neural Networks)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks) ...

  5. 深度学习笔记其六:现代卷积神经网络和PYTORCH

    深度学习笔记其六:现代卷积神经网络和PYTORCH 1. 深度卷积神经网络(AlexNet) 1.1 学习表征 1.1 缺少的成分:数据 1.2 缺少的成分:硬件 1.2 AlexNet 1.2.1 ...

  6. 基于深度学习的图像分类:使用卷积神经网络实现猫狗分类器

    摘要: 深度学习在计算机视觉领域中具有广泛的应用.本文将介绍如何使用卷积神经网络(CNN)实现一个猫狗分类器.我们将使用Python和TensorFlow框架搭建一个简单的卷积神经网络模型,并利用猫狗 ...

  7. 深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战 卷积神经网络,听起来像是计算机科学.生物学和数学的诡异组合,但它们已经成为计算机视觉领域中最具影响力 ...

  8. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)

    [深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...

  9. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(二)

    [深度学习]基于Pytorch的卷积神经网络API妙用(二) 文章目录1 Padding和Stride 2 多输入多输出Channel 3 1*1 Conv(笔者在看教程时,理解为降维和升维) 4 池 ...

最新文章

  1. linux 脚本案例,30个关于Shell脚本的经典案例(上)
  2. C++和Rust_【Rust水群夜话】盘点Rust 官方团队2019年进展
  3. android 代码片段,Android 中常用代码片段
  4. if python 判断函数返回值_Python函数的返回值和作用域
  5. 使用 HP 3PAR Peer Persistence 实现 vSphere Metro Storage Cluster (vMSC)
  6. 鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...
  7. endl与'\n'的区别
  8. 2013年工作中遇到的20个问题:241-260
  9. 浅谈今天所学的Jquery 中的filter()方法
  10. mybaitis快速生成_使用MyBatis插件生成代码
  11. 简单易懂的现代魔法——Play Framework攻略1
  12. 爱奇艺视频怎么下载,如何将qsv格式转为mp4格式
  13. APP动态修改状态栏颜色
  14. 计算机上根号是哪一个,电脑上怎么哪个键是数学中的开根号啊
  15. 排课系统matlab,matlab数学建模排课
  16. word里双横线怎么打_word文档横线怎么打
  17. MUI框架TAB切换
  18. jpa 报错:No EntityManager with actual transaction available for current thread - cannot reliably proce
  19. 【Docker篇】Docker镜像加载原理,UnionFS(联合文件系统),镜像Commit
  20. linux查看网口流量ifconfig,ifconfig与网络流量监控

热门文章

  1. OAuth认证原理及HTTP下的密码安全传输
  2. Javascript - ES6新语法概览
  3. Javascript前端加载等待圆型圈提示实现效果
  4. Dos批处理编程常用命令
  5. Spring MVC文件上传示例教程 - 单个和多个文件
  6. mysql basic_MySQL Basic Learning (二)
  7. PHP WeBaCoo后门学习笔记
  8. python configparser模块来 读取 、 创建 和 修改 配置文件
  9. idea创建javaweb项目连接mysql【HTTP Status 500】
  10. 【CSS】学习笔记2 字体设置