关于后端:白话机器学习卷积神经网络CNN

47次阅读

共计 5447 个字符,预计需要花费 14 分钟才能阅读完成。

一 背景

在卷积神经网络 CNN 呈现之前,图像对于人工智能来说就是一个劫难,次要是有两个起因:

  1. 图像须要解决的数据量太大,导致老本很高,效率很低;
  2. 图像在数值化的过程中很难保留原有的特色,导致图像处理的准确率不高;

1 参数共享机制

假如咱们应用全连贯层进行图像特色的提取,即便应用最简略的数据集例如 MNIST 数据。每个图片的尺寸是 28x28x1,其中 28×28 是图片的大小,1 是示意图像是黑白的,即只有一个色调通道。假如第一层的暗藏层的节点数量是 600,那么这个全连贯神经网络将有 28x28x600+600=471000 个参数。这还仅仅是最简略的数据集,如果是其余的简单的数据集参数量会更加迅速的收缩。过多的参数有两方面的害处,一是计算会重大减慢;另外一个就是非常容易过拟合。所以须要一个更加正当的神经网路构造来无效的缩小参数数量,同时放弃原始数据的特色,进行形象。

2 平移不变原理

图片数字化的传统形式咱们简化一下,就相似下图的过程:

如果图像中有一个圆形,那么基于圆形的地位的不同就会产生齐全不同的数据表征。然而从视觉的角度来看,图像的内容(实质)并没有发生变化,只是地位产生了变动,这就产生了一个矛盾。

所以当咱们挪动图像中的物体,用传统的形式得进去的数据表征会差别很大!无奈满足也不合乎图像处理的要求的。

而 CNN 解决了这个问题,他用相似视觉的形式保留了图像的特色,当图像做翻转,旋转或者变换位置时,它也能无效的辨认进去是相似的图像。

3 模型构造灵感

深度学习的许多研究成果,离不开对大脑认知原理的钻研,尤其是视觉原理的钻研。

1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家)和 TorstenWiesel,以及 Roger Sperry。前两位的次要奉献,是“发现了视觉零碎的信息处理”,可视皮层是分级的。

人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步解决(大脑皮层某些细胞发现边缘和方向),而后形象(大脑断定,眼前的物体的形态,是圆形的),而后进一步形象(大脑进一步断定该物体是只气球)。上面是人脑进行人脸识别的一个示例:

对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的:

咱们能够看到,在最底层特色基本上是相似的,就是各种边缘,越往上,越能提取出此类物体的一些特色(轮子、眼睛、躯干等),到最上层,不同的高级特色最终组合成相应的图像,从而可能让人类精确的辨别不同的物体。

那么咱们能够很天然的想到:能够不能够模拟人类大脑的这个特点,结构多层的神经网络,较低层的辨认高级的图像特色,若干底层特色组成更上一层特色,最终通过多个层级的组合,最终在顶层做出分类呢?

答案是必定的,这也是许多深度学习算法(包含 CNN)的灵感起源。

二 卷积神经网络 CNN

对于神经网络来说,置信大家都比拟相熟全连贯神经网络,那么卷积神经网络 CNN 与全连贯神经网络相比有什么不同呢,又是为什么有这些不同呢?后续的内容将会为大家娓娓道来。

1 CNN 网络结构特点

对于神经网络,针对神经元不同的连贯形式,有几种经典的网络类型:全连贯神经网络、卷积神经网络与循环神经网络 等等。

  • 全连贯神经网络:

    • 神经元分层布局;
    • 相邻层与层之间的神经元之间均有连贯;
    • 雷同层之间的神经元之间没有连贯;
    • 参数非共享;
  • 卷积神经网络:

    • 神经元分层布局;
    • 相邻层与层之间的神经元之间有局部连贯,而非全连贯;
    • 雷同层之间的神经元之间没有连贯;
    • 参数共享;

尽管上图显示的全连贯神经网络和卷积神经网络的模型构造在直观上来看差别比拟大,然而实际上它们的整体构造是十分类似的。

  • 层级性:卷积神经网络也是通过一层一层的节点组织起来的。
  • 根本单元:和全连贯神经网络一样,卷积神经网络中的每个节点都是一个神经元。
  • 层级连通性:

    • 在全连贯神经网络中,相邻层与层之间的节点都有边相连,于是个别会将每一层全连贯层中的节点组织成一列,不便展现模型构造。
    • 在卷积神经网络中,相邻层与层之间的节点只有局部节点相连,依据图像的特点,为了展现每一层神经元的维度,个别会将每一层卷积层的节点组成一个三维矩阵。

2 模型整体构造

上面咱们给出一个更加具体的模型构造(以分类问题为例)。

如上图,在卷积神经网络的后面几层,每一层的节点都被示意成一个三维的矩阵模式。比方解决 Cifar-10 图片数据集的时候,咱们将要输出一个 32x32x3 的三维矩阵。从上图咱们能够看出,卷积神经网络的后面几层中,每一个节点只是和上一层的局部的节点相连(具体的连贯形式会在第三、四节介绍)。一般来说,一个卷积神经网络次要由以下五种构造组成。

  1. 输出层:输出层是整个神经网络的输出,在解决图像的卷积神经网络构造中,代表一张图片的像素矩阵。比方上图中,三维矩阵的长和宽别离代表了图像的大小,而三维矩阵的深度代表了图像的色调通道(channel)。比方黑白图片的深度为 1,而在 RGB 模式下,图像的深度为 3 。从输出层开始,卷积神经网络通过不同的神经网络构造将上一层的三维矩阵转化为下一层的三维矩阵,直到最初的全连贯层。
  2. 卷积层:从卷积层这个名字标识能够看出,它是整个卷积神经网络最为重要的局部。不同于全连贯层的网络结构,卷积层每个节点的输出是只是上一层神经元的一部分(非全副),这个小块罕用的大小有 3 ×3 或者 5 ×5。卷积层试图将神经网络中的每一小块更加深刻的剖析从而失去形象水平更高的特色。一般来说,通过卷积层解决过的节点矩阵会变得更深,所以在上图能够看到通过卷积层之后的节点矩阵的深度会减少。
  3. 池化层:池化层在卷积神经网络构造中也十分重要,池化层的神经网络不会扭转三维矩阵的深度,然而他会减小矩阵的大小。池化层的操作能够这么了解,它将一张分辨率较高的图片转化为一个分辨率较低的图片。通过池化层,能够显著的缩小最初全连贯层中节点的个数,从而达到缩小整个神经网络中参数的目标。
  4. 全连贯层:卷积神经网络个别操作是通过多轮的卷积层和池化层,在最初节点个别是由 1 到 2 个全连贯层来给出最初的后果。通过几轮卷积层和池化层的解决之后,图像中的信息曾经被形象成了信息密度更高的特色。卷积层和池化层能够了解为主动抽取图像的特色的过程。在解决完特色后,再通过全连贯来进行分类和回归工作。
  5. Softmax 层:与一般的 softmax 层性能一样,用于解决分类问题。

三 卷积层

本节介绍卷积层的构造及其前向流传的过程,下图展现了卷积神经网络最重要的构造,这个构造被称之为过滤器(Filter)或者内核(Kernel)。内核的作用是将以后神经网络层的一部分神经元转化为下一个神经网络层的一个单位节点矩阵(单位节点矩阵是指长和宽都是 1,深度不限的节点矩阵)。

  • 内核的尺寸

内核矩阵的尺寸是三维的,然而咱们仅仅须要指定长和宽就好,因为内核的矩阵的深度和以后神经网络层的矩阵的深度是统一的。另外须要特地指定的是输入单位节点矩阵的深度,通常咱们将这个深度称之为内核矩阵的深度。罕用的内核大小是 3 ×3 或者 5 ×5。

  • 卷积层参数的数量

基于卷积神经网络参数共享的性质,上面咱们来剖析下卷积层的参数的数量,假如输出层的节点数量是 32x32x3,内核的尺寸是 2 ×2,转换后的单位节点矩阵的尺寸是 1x1x5。那么依据卷积神经网络参数共享的性质,能够失去卷积层的参数的个数是 2x2x3x5+5=65 个参数。比照下应用全连贯的神经网络的状况,假如卷积层后三维矩阵的长度与宽度不变(全 0 填充,后续介绍),深度变为 5,那么整体参数是 32x32x3x32x32x5 + 32x32x5 = 15733760(一千五百万多参数)。由此可见,应用卷积层之后,参数量会大大减少,并且基于平移不变原理,根本保留了图像的深度特色进行形象。

  • 单个单位节点矩阵的计算形式

假如输出层的深度为 3,内核的尺寸是 2 ×2,生成的单位节点矩阵是 1x1x1,那么计算的过程如上图所示(f 函数是 Relu 函数)。

PS:如果生成的单位节点矩阵的深度不是 1,是 N 的话,那么就再有 N 组参数进行计算。比方 N 的 2 的话。减少参数 $w^1[:,:,0],w^1[:,:,1],w^1[:,:,2]$,并且进行 $g(1)$ 的计算,计算流程与 $g(0)$ 的计算方法雷同。

  • 卷积层的计算逻辑流程
  1. 节点生成映射关系

针对输出的神经网络层的神经元,先不思考深度因素,咱们思考二维的构造。首先内核作用于左上角矩阵,而后挪动到左下角矩阵,再到右上角矩阵,最初到右下角矩阵。内核每挪动一次,能够计算出一个值(深度为 N 的时候会计算出 N 个值,详见下面的形容)。并且将这些数值拼接成一个新的矩阵,这样就实现了卷积层前向流传的过程。如下如所示:

  • 矩阵尺寸的变动(长度与宽度)

当内核的尺寸不是 1 ×1 的时候,卷积层通过前向流传失去的矩阵的尺寸会小于以后层军阵的尺寸,如上图所示。如果要放弃矩阵尺寸不变动的话,能够在以后矩阵的边界上进行全 0 的填充(zero-padding)。这样能够使得卷积层通过前向流传后失去的矩阵的尺寸和以后层的矩阵保持一致,如下图是应用全 0 填充的成果。

除了内核的尺寸会影响卷积层通过前向流传失去矩阵的尺寸外,stride 步长也会影响,针对上图应用全 0 填充,并且步长为 2(长度宽度均是 2)的状况下,卷积层操作如下

  • 卷积层前向流传失去矩阵的最终尺寸计算

针对是否应用全 0 填充,别离计算公式如下:

  1. 应用全 0 填充

  1. 不必全 0 填充

四 池化层

池化层最重要的特点,没有可训练参数,没有可训练参数,没有可训练参数,重要的事件三遍,所以其反向流传链式求导过程会十分不同,因为没有参数可导,这块前面的章节会进行介绍。池化层的作用是放大矩阵的尺寸,然而根本不扭转深度,从而缩小最初全连贯层的输出与参数。同时池化层既能够放慢计算速度又能够避免过拟合问题。

1 池化层的正向流传

同卷积层相似,池化层的内核也是须要设定尺寸、是否全 0 填充以及步长等,而且这些设置的意义也是一样的。同时卷积层和池化层的内核的挪动形式也类似的。池化层的个别作用是对特色图进行下采样,它自身没有参数权重,计算也简略,但它可达到降维特色、突显特色、缩小参数量、缩小计算量、减少非线性、避免过拟合及晋升模型泛化能力等作用,池化层的前向流传咱们都比拟好了解区别有两点:

  1. 池化层的计算不须要参数参加,分为最大池化(max pooling)和均匀池化(average pooling),顾名思义,间接计算 max 间接选最大,average 加和均匀。
  2. 池化层因为不扭转矩阵的深度,所以不会逾越整个深度进行影响,本深度只影响本深度的,一一对应。

上面是 Max Pooling 的一个示例,大家能够了解下,因为大部分流程与卷积层相似,所以这块不过多形容。

2 池化层的反向流传

池化层 pooling 操作常见的有均匀池化 mean pooling 和最大池化 max pooling,前者取某特色区域的平均值进行输入,而后者则取某特色区域的最大值进行输入。然而其是如何参加反向流传的呢?

池化层在反向流传时,因为没有参数参数计算正向流传过程,所以它是不可导的,并且池化层会放大矩阵的尺寸,比方一个 2 ×2 的池化,通过池化层输入的特色图是 16 个神经元,那么对应以后层就会有 64 个神经元,两层之间通过池化操作后,特色图尺寸扭转,无奈一一对应,这使得梯度无奈流传。

在反向流传时,梯度是依照链式法则进行流传的,然而池化层没有参数,那那么要解决的问题就是如何这个虚构的链路与计算规定,并且要恪守流传梯度总和放弃不变的准则

以最大池化为例,前向流传过程是取肯定特色区域的最大值进行输入,所以本区域只有最大值的神经元参加了前向流传过程。因而在反向流传过程中只需将该区域的梯度间接调配到最大值的神经元就好,其余神经元的梯度被调配为 0 并且不参加反向流传过程。

然而如何确认最大值神经元呢?这个须要深度学习框架在进行前向流传时记录下最大值神经元的 Max ID 地位,反向流传的时候将梯度回传给这个神经元就好。

五 番外篇

集体介绍:杜宝坤,隐衷计算行业从业者,从 0 到 1 率领团队构建了京东的联邦学习解决方案 9N-FL,同时主导了联邦学习框架与联邦开门红业务。
框架层面:实现了电商营销畛域反对超大规模的工业化联邦学习解决方案,反对超大规模样本 PSI 隐衷对齐、平安的树模型与神经网络模型等泛滥模型反对。
业务层面:实现了业务侧的开门红业务落地,创始了新的业务增长点,产生了显著的业务经济效益。
集体比拟喜爱学习新货色,乐于钻研技术。基于从全链路思考与决策技术布局的考量,钻研的畛域比拟多,从工程架构、大数据到机器学习算法与算法框架均有波及。欢送喜爱技术的同学和我交换,邮箱:baokun06@163.com

六 公众号导读

本人撰写博客曾经很长一段时间了,因为集体涉猎的技术畛域比拟多,所以对高并发与高性能、分布式、传统机器学习算法与框架、深度学习算法与框架、明码平安、隐衷计算、联邦学习、大数据等都有波及。主导过多个大我的项目包含批发的联邦学习,社区做过屡次分享,另外本人保持写原创博客,多篇文章有过万的浏览。公众号 秃顶的码农 大家能够依照话题进行间断浏览,外面的章节我都做过依照学习路线的排序,话题就是公众号外面上面的标红的这个,大家点击去就可以看本话题下的多篇文章了,比方下图(话题分为:一、隐衷计算 二、联邦学习 三、机器学习框架 四、机器学习算法 五、高性能计算 六、广告算法 七、程序人生),知乎号同理关注专利即可。

<font color=red> 所有有为法,如梦幻泡影,如露亦如电,应作如是观。</font>

本文由 mdnice 多平台公布

正文完
 0