深度学习之卷积神经网络(CNN)学习笔记-Week1

深度学习之卷积神经网络(CNN)

    • 深度学习简要概述
    • 学习参考资料
    • 计算机视觉
    • 边缘检测
    • Padding
    • 卷积步长
    • 卷积为何有效
    • 单层卷积网络

深度学习简要概述

深度学习(Deep Learning, DL)或阶层学习(hierarchical learning)是机器学习的技术和研究领域之一,通过建立具有阶层结构的人工神经网络(Artifitial Neural Networks, ANNs),在计算系统中实现人工智能。由于阶层ANN能够对输入信息进行逐层提取和筛选,因此深度学习具有表征学习(representation learning)能力 ,可以实现端到端的监督学习和非监督学习 。此外,深度学习也可参与构建强化学习(reinforcement learning)系统,形成深度强化学习 。
深度学习所使用的阶层ANN具有多种形态,其阶层的复杂度被通称为“深度” 。按构筑类型,深度学习的形式包括多层感知器、卷积神经网络、循环神经网络、深度置信网络和其它混合构筑 。深度学习使用数据对其构筑中的参数进行更新以达成训练目标,该过程被通称为“学习”。学习的常见方法为梯度下降算法及其变体 ,一些统计学习理论被用于学习过程的优化。
在应用方面,深度学习被用于对复杂结构和大样本的高维数据进行学习,按研究领域包括计算机视觉、自然语言处理、生物信息学、自动控制等,且在人像识别、机器翻译、自动驾驶等现实问题中取得了成功 。

以上来自百度。简单理解,就是深度学习是机器学习中的一个领域。由于用了ANN使得学习有了阶层。故称为深度学习。那么,重点自然就在ANN上。
再看看对ANN的解释:

人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。

而CNN则就是ANN的实现之一。目前主要用于计算机视觉领域(和矩阵有很好的契合度)。而接下来的笔记也是关于如何实现CNN并对图像进行处理。

学习参考资料

网易云课堂微专业中吴恩达的深度学习(deeplearning.ai)中的卷积神经网络(CNN)部分,因为期末作业要求就提前看了这一章(在此之前,本人已经有了一些基础知识,如果刚入门深度学习,建议先看笔者的机器学习专栏,对机器学习有一些初步的认识再来看这篇博客)。

计算机视觉

上文已经提到过, CNN主要运用于计算机视觉领域。所以先介绍一下计算机视觉中的一些基本概念。
目前在计算机视觉中的研究问题主要有三种:图像分类目标检测自然风格转移
在图像中主要分为三种:三色图(nm3)、灰度图(nm1,但取值范围是[0,255],此范围指的是该位置的像素值)、二值图(nm1,只有0和1两个值)。在RGB模式中,三色图可以被看做是三个灰度图的叠加。
在计算机中,图像以矩阵的方式来表现
n和m分别指的是图像的宽度和长度。
所以,当图像非常大的时候, 特征值很多,计算量会非常的惊人。对于一个6464的RGB图像,会有64643=12288个像素(而每个像素都有可能是一个特征)。对我们而言,6464已经是一个箱单小的图像了。如果是一个1000*1000的RGB图像,则会有3M个像素值。如果再放入神经网络计算,假设隐藏层有1000个隐藏单元。对于全连通网络,则会有3亿个权值(电脑可能就此GG)。目前的一种解决办法就是边缘检测,将图像的边缘显示的表现出来。

边缘检测

边缘检测的核心在于滤波器(filter,也被称为Kernel或者算子),我们以垂直边缘检测为例,滤波器(假设是3*3的滤波器)的值为:

在这里插入图片描述
假设一个原图为66大小的图片
深度学习之卷积神经网络(CNN)学习笔记-Week1_第1张图片
过滤器会对原图进行卷积计算(左上角开始,一格一格的推进计算,得到一个4
4的矩阵)
得到值:
深度学习之卷积神经网络(CNN)学习笔记-Week1_第2张图片
如果对于一个边缘非常明显的一个图,如
深度学习之卷积神经网络(CNN)学习笔记-Week1_第3张图片而在计算机中的显示可以看出中间的边缘部分就会高亮。会使边缘更加明显。
如果图像的边缘是由亮变暗或是由暗变亮,是不同的:具体区别如下图:

深度学习之卷积神经网络(CNN)学习笔记-Week1_第4张图片
可以看出,如果是由亮变暗,图像的边缘会是高亮部分,如果是由暗变亮,图像的边缘会是更暗的部分。
水平边缘和垂直边缘的区别在于滤波器的值不同(或者说是方向不同)
深度学习之卷积神经网络(CNN)学习笔记-Week1_第5张图片
计算的方式没有任何区别。
滤波器中的大小和值并不是固定的,可以根据具体使用情况自行调整

Padding

Padding是卷积计算的一个基础操作
在之前的边缘检测中,我们得到的结果是44的矩阵。原因是在66的矩阵中,33的滤波器只有有44的结果维度(即(n-f+1)*(n-f+1),n使原图矩阵大小,f是滤波器矩阵大小),这样一来会有几个缺点:

  1. 矩阵缩小,多计算几次,可能矩阵会变的很小很小(同时有可能损失特征)
  2. 位于矩阵边缘的特征不容易被检测到(只会计算一次且作为一个值计算后被存储),而位于矩阵中心的特征被过度放大(因为会被计算很多次)

解决办法
在卷积之前,在图像外填充一圈像素(即padding的含义)。66的图像填充后是88,经过计算后得到的是6*6的图像,对于原图而言,没有变化。
对于填充多少像素,通常有两个选择:

  • Valid Convolution:含义就是不填充,这样的话,会给你一个(n-f+1)(n-f+1)的输出。如上,得到的是一个44的结果矩阵
  • Same Convolution:意味着你填充后,你的输入和输出是一样的大小(n+2p-f+1)(n+2p-f+1)。填充的p的大小为(f-1/2)。对于上图33的滤波器,填充的p就是(3-1/2)=1。即一个像素即可。

在计算机视觉中,f通常是奇数的一是避免不对称填充,而是这样一来会有一个中心点(便于指出滤波器的位置)。

卷积步长

卷积步长的含义很好理解,就是设置跳跃的间隔。在上面我们谈论到的是步长为1,所以滤波器会一格一格的移动,如果设置步长为2,滤波器就会每2格一移动。
得到的结果矩阵的大小的计算公式是:
((n+2p-f)/s+1 )* ((n+2p-f)/s+1 ),其中s就是步长。
如果商存在非整的情况下,一般来说向下取整。
此外,如果滤波器存在不和图像吻合的情况(简单来说就是有一部分不在图像内),就不会进行计算。

卷积为何有效

RGB图像的卷积

在RGB图像中,由于是三维的,所以我们使用的滤波器也构建成三维的。及3* 3*3的滤波器。
通俗的讲,滤波器和原图必须有相同的维度通道。
然而得到的结果,依旧是一维的
在三维的计算中,3 * 3 * 3即27个参数,会分别和RGB的三个通道对应相乘,然后相加得到最终值。
如果想检测不同通道的边缘,将该通道的滤波器设置成滤波值,其他通道的值置0。
如果想得到多边缘。用不同的滤波器进行卷积,得到不同的结果矩阵,然后置于不同的通道。
深度学习之卷积神经网络(CNN)学习笔记-Week1_第6张图片

单层卷积网络

上文用两个不同的滤波器,获得了两个不同的结果矩阵(卷积层),对结果矩阵加上不同的偏差,然后运用激活函数ReLU(激活层),得到新的结果矩阵。
这一节讲了一些数学概念,在此不与列出,更多内容请读者看视频理解。
吴恩达的视频中给出了一个示例:
对于一个图像,假设其大小为39393,滤波器为3* 3* 10(即10个滤波器),最终得到的卷积结果是373710。这是的激活值维度,设为a[1]。这是还有一层卷积层,滤波器大小为5* 5* 20,步长s=2,得到的新的结果17* 17 *20,这时新的激活维度a[2]。对于第三层,假设依旧使用5 *5 * 40的滤波器,步长s=2,得到的是7 * 7 * 40的矩阵维度。含义是对于39 *39 *3的矩阵,提取了7 * 7 *40=1960个特征
深度学习之卷积神经网络(CNN)学习笔记-Week1_第7张图片

一般来说一个神经网络有三层:

  • 卷积层 (conv)
  • 池化层 (pool)
  • 全连接层(fc)

你可能感兴趣的:(深度学习)