1. 全连接层

前文中我们讨论的几乎都是全连接层,也就是在层间,每个神经元都与前一层的所有神经元相连接,如图:

也就是每层的每个feature,都与前一层所有features相关联,是前一层所有features乘以一个权重矩阵W得来的。(这里为了简化理解,我们暂不考虑bias,activation function)。

如果我们用MNIST数据集,图片是28X28的,输入全连接层时就要将其进行一维化,变成1X784个输入节点,图片就变成了类似这样:

这里我们遇到了几个问题:

  1. 是不是每一个特征都有必要和前一层所有特征相关联
  2. 一维化的操作感觉很粗暴,会不会丢失了某些信息
  3. 这么多的权重数据,网络是不是太复杂了,会过拟合吗,训练起来消耗是否很大

对于第一个问题,每一个特征事实上只需要和部分前一层的特征相关联,尤其是对于图片这种具有“空间位置信息”的数据来说,每一个特征更有可能是通过在空间位置上距离较近的一组特征(图片上某处的局部像素信息)得到的。反之,图片左上角某个像素和图片右下角某个像素是不大可能共同作用出什么有效特征的。在全连接网络中,我们当然可以寄希望于神经网络自动的提取出有效特征,自动把无效的连接权重训练为0,然而这无疑加重了训练难度,如果我们知道某些先验信息(图片的空间信息特点),何必让神经网络加重学习负担呢。

对于第二个问题,同样的,对于图片来说,一维化操作使得空间特征信息丢失掉了,我们只能期望神经网络自己学习到这些空间信息,从而把与空间信息相关的特征学习到,然而这是非常低效的方法。

对于第三个问题,全连接网络的参数量非常大,随着图片像素提升,这种一维化的操作带来的计算开销是非常大的。此外,网络的复杂结构还很有可能产生过拟合现象。甚至我们还得通过dropout的方式手动的减少一些它们之间的连接。因此,这种复杂性是没必要的。

那么对于类似图片这种具有“空间位置信息”,有没有方法能够只关联必要的特征,保留空间位置信息,又能简化网络复杂性呢。

答案就是卷积神经网络。

2. 卷积神经网络

网络上介绍卷积算法的文章非常多,计算也比较简单,这里我截了一张图来示意:

我们把卷积核看作一个指定窗口大小的扫描器,扫描器在原始图像上进行滑动,每次都与相对应的原始图像上的相同大小的局部区域进行卷积运算,也就是加权运算,得到目标图像上的一个像素。也就是说,目标图像上的这个特征,只与原始图像上的一组局部特征相关联。由于我们没有对原始图像进行一维化操作,空间信息保留了下来。同时,随着卷积核的滑动,卷积核在本次扫描过程中,其参数是不变的,也就是对于目标图像的每个特征,其计算权重是一样的,也就是权值共享的概念,这也大大降低了模型的复杂度。且,这种降低模型复杂度的操作是有效而有意义的(不同于dropout那种是完全随机的)。

上面的三个问题得到了很好的解决。

两个小细节:

  1. 如果卷积核为3X3,那么目标图像的一条边上的像素数量会比原始图形少2,特征图缩小了一些,如果要保持不变,就需要进行padding
  2. 扫描器滑动的时候可以设置步长,即每次滑动过的像素数量。

2.1 与全连接层的关系

我们比对全连接和卷积网络,其本质都是每一个特征是由前一层特征加权得到,区别就是全连接是所有特征的加权,且权重系数不同;卷积,是空间局部特征的加权,且权重系数共享。

全连接网络,我们要训练的是权重矩阵W;卷积网络中,我们要训练的是卷积核。

2.2 与传统图像领域的卷积核关系

传统图像领域中的卷积核,是通过图像领域知识得到的,比如边缘检测、纹理检测等。我们明确的知道使用什么样的卷积核数值去提取意义明确的特征;而卷积神经网络中,卷积核的数值是随机初始化的,是要通过神经网络的训练去优化卷积核,从而提取到“有用的”特征的。这里的我们往往只是知道它有用,但不明确它的具体意义。这也就是为什么我们通常认为神经网络是“黑盒”的原因。

虽然我们不知道具体意义,但我们还是能够知道在神经网络中的特征的一般规律:通常来说,靠近输入端的浅层神经网络提取到的往往是比较底层的信息,比如边缘特征、纹理特征等。越往后,特征的组合信息越明显,抽象的层次更高。到最后输出的时候,我们得到的是最高层次的抽象信息,也就是“这张图是哪个数字”这样的信息。我们完成了从底层像素信息到顶层抽象信息的转化。

那既然我们在传统图像领域已经有很多先验的信息,可以用这些先验来初始化卷积核从而加速训练过程吗?理论上对于底层的特征提取,利用一些先验的卷积核,比如边缘检测、纹理检测,能够加快收敛。在数据量较小的任务,或者与先验知识高度重合的任务中,可以这么做。但在复杂的任务中,如果数据量足够的情况下,随机初始化通常更灵活,能让神经网络自动学习到更加抽象的特征。

2.3 池化层

在一个卷积神经网络中,通常还有池化层的概念。如图:

池化层是采用池化窗口,对特征图进行下采样,图中分别是最大池化(Max Pooling)和平均池化(Average Pooling)。

  • 最大池化:取池化窗口中的最大值,能够保留最显著的特征。
  • 平均池化:取池化窗口中的平均值,适用于平滑特征。

熟悉数据处理的朋友应该知道下采样的概念,它能够帮助我们减少运算量,保留相对重要的特征信息。举个例子,一张4096X4096像素的数字3的图片,我们把它下采样到32X32像素的图片。如果我们人眼依然能够分辨这是一张数字“3”,那么理论上这张32X32的图片中提供的的特征信息依然足够让我们的神经网络对它做出正确分类。

3. 卷积网络反向传播

卷积运算是如何进行反向传播的?我们通过一个实际的例子来直观的感受一下,假设输入图像X,卷积核W,输出图像Y:

\[X\ast W=Y
\]

现在我们的损失函数L反向传播到Y,已知\(\partial L/\partial Y\),希望得到\(\partial L/\partial X\)和\(\partial L/\partial W\)

为了更清晰的展示计算过程,我们把卷积运算计算过程直接写出来:

3.1 对X的导数 \(\partial L/\partial X\)

我们先看比较通常的情况,也就是图像X的中间区域,因为中间区域参与了4次卷积运算,我们对\(x_{11}\)的导数做如下推导:

可以看到后面这一项刚好是W矩阵旋转180度的结果。

我们再看两个图像边缘部分的特殊案例,看看能否得到什么结论:

后面这一项我们都写成了W矩阵旋转180度,我们记作\(W_{rot180}\)

对于前面这一项,我们只要稍加变化,就能轻易看出规律。前面这一项似乎也是个滑动窗口,只不过在边缘处滑出了\(\partial L/\partial Y\)矩阵。

因此我们把\(\partial L/\partial Y\)这个矩阵周围补上一圈0,然后和\(W_{rot180}\)做卷积运算,结果刚好是\(\partial L/\partial X\) !

3.2 对W的导数 \(\partial L/\partial W\)

类似的,我们把对W的导数也表达出来,这里计算了\(W_{00}\)和\(W_{01}\)

感兴趣的话可以把对W的元素的导数都写出来,观察可见,这次似乎后面这项是在X上的滑动的窗口,由此我们可以写出:

也就得到了\(\partial L/\partial W\)

3.3 池化层的反向传播

池化层的连接关系更加简单,因此反向传播的计算也很简洁。

最大池化:

前向传播时记录最大值位置。例如,输入\(\begin{bmatrix} 4 & 2 \\ 1 & 3 \end{bmatrix}\),最大池化输出为4。反向传播时,梯度仅传递到最大值位置:若δY=0.5,则\(δX=\begin{bmatrix} 0.5 & 0 \\ 0 & 0 \end{bmatrix}\)

平均池化:

梯度均匀分配到所有输入位置。例如,输入同上,平均池化输出为(4+2+1+3)/4=2.5。反向传播时,\(δX=\begin{bmatrix} 0.125 & 0.125 \\ 0.125 & 0.125 \end{bmatrix}\)(假设δY=0.5)

10 卷积神经网络CNN原理的更多相关文章

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

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

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

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

  3. 卷积神经网络CNN原理以及TensorFlow实现

    在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下.首先介绍原理部分. [透析] 卷积神经网络CNN究竟是怎样一步一步工作的? 通过一个图像分类问题介绍卷积神经网络是如何工作的 ...

  4. 卷积神经网络CNN总结

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

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

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

  6. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

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

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

  8. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  9. 基于MNIST数据的卷积神经网络CNN

    基于tensorflow使用CNN识别MNIST 参数数量:第一个卷积层5x5x1x32=800个参数,第二个卷积层5x5x32x64=51200个参数,第三个全连接层7x7x64x1024=3211 ...

  10. 卷积神经网络CNN学习笔记

    CNN的基本结构包括两层: 特征提取层:每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征.一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来: 特征映射层:网络的每个计算层由多 ...

随机推荐

  1. 即时通讯技术文集(第18期):IM架构设计基础知识合集 [共16篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第18 期. [- 1 -] IM系统的MQ消息中间件选型:Kafka还是RabbitMQ? [ ...

  2. KMS for Office 2021

    I. 镜像下载 官方镜像下载地址: Office 2021 专业增强版: https://officecdn.microsoft.com/pr/492350f6-3a01-4f97-b9c0-c7c6 ...

  3. 输出满足1+2+3+…+*n*<8888的最大整数

    输出满足1+2+3+-+n<8888的最大整数 编写应用程序,输出满足1+2+3+-+n<8888的最大整数 输出格式:满足条件的最大整数:xxxxx public class Demo0 ...

  4. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  5. 第三届全国高校计算机能力挑战赛-C

    单项选择题 1.题 (3.0分) 以下叙述正确的是().  A.在C程序,至少要包含一个库函数  B.C程序的一行可以写多条语句  C.对一个C程序进行编译就可以生成可执行文件  D.C程序中的注释只 ...

  6. Jetbrains系列产品无限时间重置插件

    概述Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费. 事实上有一款插件可以实现这个功能,你或许可以用它来重置一下试用时间.但 ...

  7. Synchronized的各场景使用方法(多窗口售票例子接上篇)

     同步锁机制:在<Thinking in Java>中,是这么说的:对于并发工作,你需要某种方式来防止两个任务访问相同的资源(其实就是共享资源竞争). 防止这种冲突的方法就是当资源被一个 ...

  8. Schreier–Sims 算法

    好看的实现. #include<bits/stdc++.h> using namespace std; #define int long long const int maxn=105; ...

  9. FLink自定义Kafka Source,处理后转发给下一个kafka topic

    一.依赖配置 pom文件:https://www.cnblogs.com/robots2/p/16048648.html kafka单机版安装:https://www.cnblogs.com/robo ...

  10. C盘扩展卷碰到的那些事-->不是同一块物理磁盘操作扩展卷是有坑的

    自己电脑上面用过win10系统资源管理器扩展卷的功能,用过几次都成功扩容了磁盘空间,简单说一下原理: 就是将剩余未分配的磁盘空间划给要扩展的磁盘. 这天公司的电脑C盘老是红色提示空间不足,那就扩充容量 ...