专栏首页算法channel深度学习|卷积神经网络(CNN)介绍(前篇)

深度学习|卷积神经网络(CNN)介绍(前篇)

01

回顾

以上推送了神经网络相关的介绍性内容和相关的基础理论,包括:

  • 神经网络的基本结构:输入层,隐含层,输出层;
  • 批随机梯度下降算法(mini-batch SGD);
  • 前向传播,激活函数;
  • 反向传播求参数的偏导,四个公式;
  • 手写字数据集的mini-batch SGD 源码实现(借助BP算法求参数偏导);
  • 对隐藏层的感性认识,神经网络的隐含层是如何从具体到抽象层层构建的。

以上阐述了深度神经网络(DNN)的基本理论,关于这些介绍请参考以下推送:

为什么要有深度学习?系统学习清单

深度学习|神经网络模型简介和梯度下降求解

深度学习|神经网络模型实现手写字分类求解思路

深度学习|神经网络模型求解思路总结

深度学习|对隐含层的感性认识

接下来,介绍下一种图像处理应用广泛的卷积神经网络算法(CNN),它是深度学习家族中非常基础且重要的算法。

02

为什么要有CNN?

图像处理中,往往把图像表示为像素的向量,比如一个 1000×1000 的图像,可以表示为一个10^6 的向量,就如同在手写字神经网络中,输入层为28×28 = 784 维的向量。如果隐含层的节点个数与输入层一样,即也是10^6 时,那么输入层到隐含层的参数数据为 10^6×10^6 =10^12,参数的个数太多了,要想在正常的时间内训练完,基本是不可能的。

所以要想处理1000×1000的图像分类,就得首先想办法减少参数的个数,也就是只基于深度神经网络(DNN)已经很难训练或者有没有更加优秀的算法可以专门处理这种图像分类呢? 这就是卷积神经网络,convolutional neural network ,简称为 CNN 。

03

图像理论预备知识

一副图像的计算机表达

在计算机中,一个二维的图像被表达为一个二维的矩阵,可以看到空白的地方取值较小,越是颜色黑的区域,矩阵对应的色素值越大。

通道(channel)

通道是一幅图像的特定组成部分,常见的手机拍出来的图片会有3个通道:红色,绿色,蓝色(RGB),也就是三通道,我们可以把它看为3个二维的数组,每一个二维数组代表一种颜色值,像素值在0~255之间。对于灰色图(grayscale),比较特殊,它仅有一个通道,如上图所示的手写字数据集中的手写字8,它就是由一个通道组成。

04

DNN到CNN做的改变

一般地,如下图所示为全连接的深度神经网络(DNN),每层的每个神经元节点与前层的所有神经元节点有连接,也会与后一层的所有节点相连接,这样导致的问题是每个节点都有很多个权重参数和偏置量,刚才在上文中我们提到了,那么卷积神经网络想要做的第一件事,一定是想办法解决掉这个参数多的问题吧。

CNN有几种措施可以降低参数的数目,本篇先介绍两种:第一种是局部连接(local connection),也称为局部感知,另一种是权值共享(weight sharing),下面依次介绍这两降参的方法。

局部连接

根据图像其局部的像素联系较为紧密,距离较远的像素相关性较弱,这一合理的假设,CNN认为每个神经元没有必要对整个的全局图像进行感知,只需要对局部进行感知,然后接下来的隐含层中再对局部的信息综合起来,这样就提取成了一个新的保留了原来主要特征的图像。

局部连接对权重参数的减少力度大吗? 我们来计算下,文章开始说到一个如果采用DNN,那么权重参数为10^12个,假如采取局部连接,定义隐含层的每个神经元只与输入层的100个像素建立关系,也就是说共有:10^6 × 100 个权重参数,10^8个,这个参数量还是不小吧,所以需要第二种措施,权值共享。

权值共享

上文说到,只减少隐含层的节点关联的输入层的像素点,对参数的减少力度一般,那么,在这基础上,还能做些什么呢? 如果我们再做这么一个假设:从紧邻的100个像素点抽取出一小块,并已知这一块的每个像素点的权重参数,假定这一块的权重参数也会被100个像素点的权重参数被其他块所共享,这就是权值共享,称抽取的那一小块对应的权重参数为:kernel(也可称为 filter, feature detector),并且这个操作可以一层一层地做下去,这样图像的特征会随着隐含层的加深,而逐渐变得抽象起来。

CNN借助以上两种措施对权重参数做减法,并且把这两种措施合起来,起了一个名字,叫做卷积操作,并且将这种深度学习算法称为卷积神经网络算法。

总结,可以看出,DNN中是节点与前后层是全连接的,而CNN算法对节点做了局部连接和权重参数共享,以此减少参数,加快收敛速度,使得用神经网络模型对图像进行分类操作成为了可能。

05

单核做卷积操作

在卷积操作中,涉及到一种特殊的操作,叫做求内积,它是两个同型矩阵对应的元素相乘,然后求和。具体说来,如下,

A和B做内积后,得到一个数:1*1 + 0*0 + 1*1 + 0*0 + 1*1 + 0*0 + 1*1 + 0*0 + 1*1 = 5,这就是两个矩阵求内积得到的结果。

接下来,看下100个像素点,如何用一个指定大小的卷积核,做卷积操作的,为了演示的方便,直接拿一个5×5的原图像块,经过3×3的卷积核,最后如何提取特征的,首先3×3的卷积核长这样:

filter = [1 0 1

0 1 0

1 0 1 ]

为了更清晰,表达在原矩阵上,如左上角所示,这样第一次做内积后,得到 4, 放在卷积后的矩阵中的第一元素中。

第二步,要想这个filter核需要移动多大的步长呢,在此移动步长为1,这就是CNN中的一个重要超参数:步长(stride),移动1个步长和卷积操作后,得到3,再放入结果中,如下图所示:

这样依次移动9步,最后的卷积结果如下图所示:

06

多核做卷积操作

如果用多个卷积核进行卷积操作,应该是怎样的呢,为了表达方便,分享一个多核卷积操作的动画演示,图中的输入为 7 × 7 × 3,可以看到还做了一层零填充(Zero-padding),这是CNN中另一个重要的超参数,用到了两个过滤核:w0和w1,这在CNN中称为深度(Depth),是CNN三个超参数介绍的最后一个,分别用两个过滤核w0,和w1做了一次卷积操作,对应的得到两个卷积结果。

本gif参考网址,http://cs231n.github.io/assets/conv-demo/index.html

07

总结

以上这些就是CNN的卷积部分,它应用了两种技术:

  • 局部连接
  • 权值共享

减少了权重参数,具体这个操作为卷积操作,这个操作有3个重要的超参数:

  1. 步长(Stride)
  2. 零填充(Zero-padding)
  3. 深度(Depth)

CNN还有两部分,分别是组成CNN算法的激活函数是用了ReLU函数,当然还有池化层(pooling),明天介绍这两个块,谢谢阅读!

本文分享自微信公众号 - 算法channel(alg-channel),作者:alg-flody

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BAT面试题24:什么是卷积?

    根据图像其局部的像素联系较为紧密,距离较远的像素相关性较弱,这一合理的假设,CNN认为每个神经元没有必要对整个的全局图像进行感知,只需要对局部进行感知,然后接下...

    double
  • 卷积有多少种?一文读懂深度学习的各种卷积

    如果你听说过深度学习中不同种类的卷积(比如 2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),并且搞不清...

    double
  • 深度学习|对隐含层的感性认识

    《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

    double
  • 详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    译者 | 王柯凝 【 AI 科技大本营导读】目前,计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算...

    AI科技大本营
  • 亚马逊专家揭秘:如何建立自动检测乳腺癌的深度学习模型

    安妮 编译自 Insight Data Science 量子位出品 | 公众号 QbitAI 本文作者Sheng Weng,现亚马逊Alexa项目组数据专家,莱...

    量子位
  • 详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    目前,计算机视觉是深度学习领域最热门的研究领域之一。计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算法、理论、系统、体系结构),数学(信息检索、...

    昱良
  • 卷积神经网络 – CNN

    目前 CNN 已经得到了广泛的应用,比如:人脸识别、自动驾驶、美图秀秀、安防等很多领域。

    easyAI
  • 大话卷积神经网络CNN(干货满满)

    本文创作的主要目的,是对时下最火最流行的深度学习算法的基础知识做一个简介,本人看过许多教程,感觉对小白不是特别友好,尤其是在踩过好多坑之后,于是便有了写这篇文章...

    我是管小亮
  • 如何用NumPy搭建卷积神经网络实现手写数字识别(附代码)

    当Yann LeCun发表了他关于开发一种新型神经网络架构——卷积神经网络(Convolutional neural network, CNN)——的研究成果时...

    HuangWeiAI
  • 你所不能不知道的CNN

    说起CNN,最初人们想到的都是某电视台,但等过几年,人们想起的多半是深度学习了。 应该说, CNN是这两年深度学习风暴的罪魁祸首, 自2012年, 正是它让打入...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券