卷积神经网络(Convolutional Neural Network,简称CNN)是一类用于图画处理的深度神经网络。CNN学习生物视觉系统的结构,运用卷积运算提取图画的空间特征,再结合全衔接层进行分类或预测。因为卷积运算的引进,CNN在图画处理方面体现卓越,被广泛运用于图画分类、方针检测、语义分割等使命中。本篇博客将根据Andrew Ng教授的深度学习专项课程第四门课程的第一周内容来针对卷积神经网络的根底知识进行简略的介绍。
从核算机视觉谈起
核算机视觉是深度学习的一个快速发展范畴,能够用于自动驾驶汽车判断周围的车辆和行人,面部识别,以及为用户展现各种类型的图片,例如食物,酒店和风景图片。卷积神经网络被遍及用于图画处理,比方图画分类,方针检测,神经风格转化。图画分类是识别图画内容的进程,方针检测不只要找出图片中的其他物体,还要确定他们的方位,神经风格转化则是将一张图片用另一种风格重绘。
核算机视觉问题的一个应战是输入能够任意大。例如,运用1000×1000像素的图画,输入特征的维度将会是1000x1000x3,这就需求处理大量的数据,或许会导致神经网络过拟合,而且对核算量和内存的需求也很高。为了处理这个问题,需求更好地运用卷积运算,这是卷积神经网络的根底之一。
边际检测
边际检测是图画处理中一项基本使命,目的是找到图画中像素改动忽然的区域,即方针的鸿沟。这能够用于检测物体的形状轮廓。边际检测可经过卷积运算完成。
假设咱们有一张6×6像素的灰度图画,现在想检测图画中的笔直边际。能够结构一个巨细为3×3的滤波器(也称卷积核),其权重矩阵为:
1 0 -1
1 0 -1
1 0 -1
这个滤波器本质上是一个求导运算,能够检测出笔直方向的像素改动。咱们将这个3×3滤波器在图画上滑动,核算每个方位的卷积。例如在最左上角时,该滤波器与图画的对应区域进行元素相乘并求和,得到的输出值为-5。重复这个进程,咱们能够得到一个新的4×4的特征映射.
类似地,咱们能够运用不同的滤波器检测水平边际、45度边际等。这种经过滤波器提取基本图画特征的进程是CNN中卷积层的主要作用。在实践运用中,CNN会学习到多组滤波器,一起检测图画的各个方向边际,然后得到丰富的特征表明。
在实践编程中,不同的深度学习结构或许会有不同的卷积运算的完成。例如,在TensorFlow中,运用tf.nn.conv2d
函数来完成卷积运算。卷积运算能够经过对图画运用特定的过滤器,协助咱们检测出图画中的笔直边际。例如,假如咱们的图画左面部分的像素值为10,右边部分的像素值为0,那么经过上述的卷积运算后,咱们就能够在成果中看到一条明亮的笔直线,这条线就标志着原始图画中从亮区域到暗区域的笔直边际。
正边际是指由亮变暗的边际过渡,负边际是指由暗变亮的边际过渡。经过运用不同的边际检测器,能够区别不同类型的边际,并让算法自动学习边际检测器,而不是手动设置。
如上图所示,将一个巨细为6×6的图片与笔直边际检测器进行卷积,得到中心部分的笔直边际。假如色彩翻转,即左面变暗、右边变亮,成果将相反。原来的30变为-30,表明由暗变亮的边际过渡。能够经过取输出矩阵的绝对值来疏忽亮度改动的方向,但实践上,过滤器能够区别亮到暗的鸿沟和暗到亮的鸿沟。
笔直和水平边际检测器都是运用3×3的过滤器来完成的,但具体运用哪些数字组合仍存在争议。Sobel过滤器和Scharr过滤器是常用的挑选,它们在权重分配和功能特征上有所区别。
神经网络能够经过反向传达学习这些过滤器的参数,以更好地捕捉数据的统计特征。神经网络能够学习到底层特征,如边际,乃至比手动挑选的过滤器更安稳。反向传达能够学习任意需求的3×3过滤器,并运用于整个图片的任何方位,以检测所需的特征。经过将这9个数字作为参数学习,能够自动学习笔直边际、水平边际、倾斜边际等各种边际特征。
填充和卷积步长(Padding、Strided Convolutions)
在卷积运算中,当滤波器滑动到图画边际时,要恰当进行填充,以确保滤波器能够覆盖整个感受野。常见的填充方式有全零填充、对称填充等。全零填充是最简略的办法,直接在图画鸿沟填充0。这会使得输出特征图的巨细等于输入图片巨细减去滤波器巨细加1。
卷积层还或许运用步长(stride)参数来操控卷积核滑动的间隔,然后减小输出特征图的巨细。
例如,在一个7×7的图画上运用巨细为3×3的滤波器,假如步长设为1,则规范的卷积会得到一个5×5的输出特征图。但假如咱们设置步长为2,则滤波器每次会跳过一个方位,终究得到的输出特征图巨细为3×3。一般来说,假如输入巨细为n x n,滤波器巨细为f x f,运用Padding p 和步长s,那么输出特征图的巨细能够核算为:
步长的设置会显着影响输出特征图的巨细。当运用大于1的步长时,因为滤波器跳过了方位,输出特征图相应缩小,然后削减了后续层的核算量。这在较深的网络层中经常被用来进行降维。但是步长不宜设置过大,否则简略导致信息丢掉。特别是在浅层网络时,咱们一般希望提取输入图片的全部特征,因而第一层卷积层的步长一般设为1。
在规划网络时,咱们能够经过调整步长和填充来操控特征图在网络中心层的缩放份额。一种常见的设置是每次池化后,运用步长为2,填充为1的卷积层来抵消池化缩小的巨细。需求留意的是,填充时添加的0值会在一定程度上影响特征提取的作用。所以填充层数不宜过多,一般为0或1。
此外,除了步长和填充外,还能够经过调整滤波器数量来改动输出通道数;经过运用不同巨细的滤波器来检测不同规模的特征。综合运用这些技巧能够完成对卷积层输出特征图的精确操控。 留意,在履行卷积操作时,滤波器必须彻底位于图画内或在填充区域内,假如滤波器超出图画规模,那部分的核算就不会履行。在某些数学和信号处理文献中,卷积操作在履行元素乘积和求和前,需求对滤波器在水平缓笔直方向上进行翻转。然而在深度学习范畴,咱们一般不履行这个翻转操作。其实所谓的卷积正确的称呼应该是”交叉相关”(cross-correlation),但在深度学习范畴,咱们仍习惯称之为卷积。
三维卷积
关于 RGB 图画,卷积运算需求在三个维度上进行,即宽度、高度和色彩通道。这需求运用三维的滤波器。
例如,关于一个巨细为6 x 6 x 3 的RGB图画,咱们能够定义一个巨细为3 x 3 x 3的三维滤波器。这个滤波器同样有三个色彩通道R、G、B。在卷积运算中,滤波器中的每个值将与图画中对应的像素方位和色彩通道的值进行相乘。将一切乘积成果求和就能够得到输出特征图中的一个像素值。重复这个进程,咱们能够得到一个尺度为4 x 4的二维输出特征映射。其中每个像素都包含了原图画在该方位的三个色彩通道的信息。之所以运用三维滤波器,是因为咱们希望卷积运算能够在空间和色彩通道上一起提取特征。例如,某个滤波器或许只对绿色边际灵敏,而另一个滤波器或许对一切色彩的边际灵敏。运用三维卷积核能够学习到丰富的色彩特征。
假如咱们想要检测更多的特征(例如,笔直边际和水平边际),咱们能够一起运用多个过滤器。每个过滤器都会生成一个输出图画,然后一切的输出图画能够叠加在一起,形成一个更高维度的输出。例如,假如咱们用两个3x3x3的过滤器来对6x6x3的图画进行卷积,咱们能够得到两个4×4的输出,然后将这两个输出叠加在一起,得到一个4x4x2的输出立方体。
卷积神经网络中的每一层都能够看作是在履行卷积操作。不同的过滤器代表着网络中的不同神经元,每个神经元都专门负责检测一种特定的特征。这种在立方体上进行卷积的办法不只能够处理RGB图画,还能够检测任何数量的特征,使得神经网络能够处理更杂乱的问题。
单层卷积网络
理解了卷积运算的进程后,咱们来看看怎么构建一个单层的卷积神经网络。
卷积层的作业流程可归纳为四个进程:
- 过滤器的运用:在卷积神经网络中,咱们首要对输入进行卷积核算,即运用过滤器。这一般涉及对输入进行逐点乘法操作,并将成果相加得到一个新的值。这个进程关于每个过滤器都会重复,所以关于两个过滤器,咱们会得到两个独立的成果。
- 添加误差:接着,咱们对每个过滤器的成果添加一个误差。这个误差是一个实数,对一切的元素都进行相同的添加。
- 非线性改换:之后,咱们对每个加了误差的成果进行非线性改换,比方ReLU激活函数。
- 获得终究成果:咱们将一切处理后的成果合并在一起,得到一个新的多维度输出。例如,假如咱们运用了两个过滤器,那么终究咱们就会得到一个新的4x4x2的输出。
在整个进程中,每个过滤器都类似于神经网络中的权重矩阵,用于对输入进行线性改换。加上误差和非线性改换后,咱们就得到了相当于神经网络中经过激活函数处理后的成果。
此外,怎么核算单层卷积神经网络的参数数量。这取决于过滤器的数量和巨细。例如,关于一个3x3x3的过滤器,它有27个参数(对应于其体积),再加上一个误差,所以总共有28个参数。假如网络中有10个这样的过滤器,那么就有280个参数。
下图是CNN中咱们一些符号标识的总结,我们能够记一下。
值得留意的是,卷积神经网络的一个重要特性便是参数同享,这意味着无论输入图画的巨细怎么,网络的参数数量都是固定的。这有助于削减过拟合的危险,因为比较于图画的尺度,参数数量较小。
简略的卷积网络示例
下面咱们看一个深度卷积神经网络的一个实例,这种神经网络可用于图画分类和图画识别等使命。
- 这个网络的输入是一张39 x 39 x 3的图画,方针是判断图画是否包含猫。
- 神经网络的结构:
- 第一层:运用10个3×3的过滤器(没有填充,步长为1)进行卷积操作,输出尺度为37 x 37 x 10。
- 第二层:运用20个5×5的过滤器(没有填充,步长为2)进行卷积操作,输出尺度为17 x 17 x 20。
- 第三层:运用40个5×5的过滤器(没有填充,步长为2)进行卷积操作,输出尺度为7 x 7 x 40。
- 终究,将得到的7 x 7 x 40特征映射展平成1960个单元的向量,然后输入到逻辑回归或softmax单元进行分类。
在规划卷积神经网络时需求挑选的超参数包含总单元数、步长、填充和过滤器数量等。跟着网络深度的添加,图画的高度和宽度一般会逐步变小,而通道数则会逐步添加。在典型的卷积神经网络中,除了卷积层(Conv)外,还经常运用池化层(Pool)和全衔接层(FC)。这两种层比卷积层更简略。
池化层
除了卷积层外,ConvNets一般还会运用池化层来削减特征图的巨细。池化层在卷积神经网络中扮演重要人物,池化层的作用是削减表明的维度,提高核算速度,并增强某些特征的检测能力。常见的池化办法有最大池化、均匀池化等。
例如在一个4×4的特征图上运用巨细为2×2,步长为2的最大池化,会得到一个2×2的输出特征图。输出中的每个元素便是对应的2×2区域中的最大元素。最大池化的机制是挑选每个区域中的最大值作为输出。假如某个特定特征在滤波器的任何方位被检测到,则最大值将保存该特征。假如特征未被检测到,则该区域的最大值一般较小。因而,最大池化实践上是经过挑选最大值来检测特征,并在输出中保存这些特征。
均值池化是另一种采样办法,其基本原理是在每个区域中取均匀值。如下图所示:
最大池化提取主要特征的能力强,但也会丢掉特征图中的细节信息。因而在规划时需权衡池化操作的强度。除了减小特征图巨细外,池化层还不包含任何可学习的参数。这进一步优化了网络结构,降低了过拟合危险。需求留意的是,池化层会损坏特征图中的空间联系,假如过度运用会导致空间信息丢掉,因而一般在网络中心层进行池化。此外,池化核巨细也需求谨慎挑选。过小会束缚特征提取,过大会丢掉细节。
池化层的超参数包含滤波器巨细(f)和步长(s)。常见的超参数挑选是f=2和s=2,这样能够将高度和宽度的表明削减一半以上。另一个常用的超参数挑选是f=2和s=2,这样能够将高度和宽度的表明缩小一倍。
一个完好的卷积神经网络示例
下面咱们看一个运用卷积层、池化层和全衔接层的卷积神经网络完好示例:
- 在这个比方中,咱们运用LeNet-5作为卷积神经网络的启示,但与LeNet-5不彻底相同,仍受其启示。
- 输入图画的巨细为32x32x3(RGB图画)。
- 第一层是卷积层1,运用5×5的过滤器、步长为1和6个过滤器。输出巨细为28x28x6。
- 接下来是池化层1,运用2×2的最大池化,步长为2。输出巨细为14x14x6。
- 然后是卷积层2,运用5×5的过滤器、步长为1和10个过滤器。输出巨细为10x10x10。
- 再进行池化层2,运用2×2的最大池化,步长为2。输出巨细为5x5x10。
- 接下来是卷积层3,运用5×5的过滤器、步长为1和16个过滤器。输出巨细为1x1x400。
- 将池化层2的输出展开成一个400×1的向量。
- 然后是全衔接层4,具有120个单元。
- 终究一层是全衔接层5,具有84个单元。
- 终究输出层是具有10个单元的Softmax层,用于手写数字识别使命。
关于网络的一些细节:
- 输入的激活尺度是32x32x3,对应于3072个激活输入。
- 各层的激活输入尺度和巨细如表格所示。
- 卷积层的参数数量相对较少,全衔接层的参数数量较多。
- 跟着网络的深化,激活输入的巨细逐步减小,通道数量逐步添加。
- 常见的网络模型是替换运用卷积层和池化层,并在终究叠加全衔接层和Softmax层。
- 神经网络的层数一般指有权重和参数的层数,池化层一般不计入层数。
建议挑选超参数的办法:
- 不要企图创造自己的超参数组,而是查阅文献,了解其他人运用的超参数组合。
- 挑选适用于其他人运用的超参数组合,很或许也适用于您的运用。
- 跟着网络的深化,一般会减小高度和宽度,添加通道数量。
- 在挑选超参数时,能够参考常见的参数组合,如运用f=2和s=2的池化层。
卷积网络的规划需求考虑特征提取、分类判断和优化束缚多方面因素。跟着各类模型规划的不断发展,卷积神经网络在核算机视觉与图画处理范畴体现优异,值得探究其规划思路。
卷积层的优势
比较于全衔接层,卷积层具有以下两个重要优势:
- 参数同享 在同一个卷积层中,一切感受野运用同样的滤波器权重矩阵。这意味着一个滤波器在整个输入图画上滑动时,运用的是同享的参数。这大大削减了参数量。
比方输入图画为1000x1000x3,运用100个10x10x3的滤波器,不同享参数时有100x10x10x3=30万个参数,而同享参数只有100x10x10x3=3万个参数,降低了一个数量级。
参数同享不只削减存储空间,也大大减轻了模型优化担负。每轮参数更新时也只需更新滤波器的一组权重即可。
- 稀少衔接 衔接的稀少性指的是每个输出值只与输入的一小部分相关联,其他输入对输出没有影响,然后削减了衔接的数量。
在卷积层中,每个神经元只与输入中的一块部分区域衔接,不是全衔接。例如10×10的滤波器每个神经元只衔接到10×10个输入,大大削减了参数量。这种稀少衔接确保了学习的参数能更好检测部分特征,更好提取输入的空间信息。 稀少衔接也减轻了过拟合问题。卷积层每个神经元仅呼应部分特征,全体特征组合而成,不太简略发生高方差。
卷积神经网络能够捕捉平移不变性,即关于平移后的图画,它能够发生相似的特征,并给出相同的标签。
练习卷积神经网络的进程包含随机初始化参数,核算成本函数,然后运用梯度下降或其他优化算法来优化参数,以降低成本函数的值。
实践运用中,能够学习现已宣布的研讨论文中的卷积神经网络结构,并在自己的运用程序中运用它们。
总结
经过这些内容的介绍,相信我们对卷积神经网络的作业原理和组成模块有了初步的了解。卷积层在坚持图画空间信息的一起大幅削减了参数数量,这是CNN能够成功处理图画使命的关键所在。
此外,卷积神经网络也存在一些局限性,如对非网格数据的适用性较差,层间衔接不如全衔接便利等。因而,运用CNN需求考虑问题的本质特征,并与其他网络结构恰当配合,才干发挥最大作用。
卷积神经网络已在核算机视觉与图画处理等范畴得到广泛运用,但其规划优化还需求持续研讨创新。等待看到CNN结构规划的进一步发展,使其能更好处理实践的杂乱问题。