Advertisement

[学习笔记] 卷积神经网络

阅读量:

全连接网络的局限性
传统的全连接神经网络,将每个特征作为网络的一个输入。这样,有多少个特征就对应了输入数据的维度。当输入的数据之间相互独立且特征较少时,这种做法不失为一种很好的选择。但是当输入的是像图片这样的数据时,这种做法至少有两点不妥:1.如果将每张图片数据展开,则一张200 * 200的彩色图片所对应的维度是 200 * 200 *3 = 120000,这对于网络的输入未免过于庞大。2.图片数据中每个像素点之间是有联系的,相邻数据点之间的颜色可能更加的靠近,而距离较远的数据点之间的联系不是那么大。


何为卷积
在泛函分析中,卷积(convolution)是通过两个函数 f 和 g 生成第三个函数的一种算子。神经网络中的卷积运算更像是数字信号处理中序列的卷积运算,即在某个范围内对应元素的乘积求和。如果接触过OpenCV中,那么卷积对应其滤波运算,所以在神经网络中,卷积核也被称为滤波器。下图对应了一个4 * 4的输入数据与3 * 3 的卷积核之间的运算,更一般的,我们会在卷积的结果上再加上偏置。
卷积运算图


数据填充及步幅
如上图卷积运算所示,输入4 * 4的数据输出确是2 * 2的,这在多层的卷积网络中是不可取的,因为在某一时刻,网络中卷积层的输出可能变成只有一个数据,导致无法再应用卷积运算。一般我们采用‘0’填充输入数据,对应上图中幅度为1的‘0’填充是指给输入数据套上一个‘像素’为1的‘环’,这样再进行卷积运算,输出数据的维度保持不变。
数据填充
以上数据我们是采用步幅为 1 的滑窗操作,也就是滤波器一次只移动一个位置,如果步幅为 2,那么应用滤波器一次滑动间隔为 2。
步幅为2的操作
假设输入数据的形状为(H, W),滤波器大小为(FH, FW),输出数据的大小为(OH, OW),填充为P,步幅为S,则他们之间的关系可以用下面的式子表示:
OH =\frac{H + 2P - FH}{S} + 1
OH =\frac{W + 2P - FW}{S} + 1
[注]在这里假设所给出的值通过公式计算后都能整除,根据深度学习的框架不同,当值无法被整除时,会采取不同的容错措施。


3维数据的卷积运算
对于一般的图像,处理的是3维数据。在这种情况下,卷积核的通道数必须和图像的通道数相同。在进行计算时,图像的第一个通道对应滤波器的第一个通道,在每个通道上进行上述的卷积运算,运算的结果再相加成为一个输出值,以此类推。
3维数据卷积运算
3维数据卷积运算
可以结合方块图更加直观的展现图像的卷积运算。将图像按照(C, H, W)的数据输入,那么所需要的滤波器的通道数必须和图像的通道数一致,即滤波器数据为(C, FH, FW),得到的输出是为数据(1, OH, OW),将这个称作是一个特征图 ,一个特征图表现的是学习到的图像的某一种特征,如果想要机器学习到更多的特征怎么办?只要增加滤波器的个数就可以了!这样就可以得到多个特征图。
多个滤波器对应对个特征图
在这里传入的滤波器数据是4维的数据,FN表示经过卷积运算后,想要得到的特征图的个数。将得到的数据(FN, OH, OW)传到下一个卷积层的时候,这时相当于输入图片的通道数为FN, 一层层的迭代即可。 [注]这里省略了在输出数据后加上偏置。
通常在进行神经网络的训练时,使用的是批处理(mini-batch)的方法,这就意味着输入的是4维数据,假设输入的图片个数为N,则对应的方块图为:
输入多张图片时的卷积运算图


池化层(Pooling Layer)
在卷积神经网络中,池化运算就是采样(Sampling)。它是指将某个区域内的值变成一个值,这样能够节省空间。在图像领域,一般用到最大池化,就是取某个区域中最大的值作为该区域的代表。池化层的参数有池化的大小,步幅等。下图展示了池化大小为2 * 2 步幅为2的最大池化操作。
最大池化
池化是缩小特征图高长方向上的运算,之所以能够进行池化的原因在于,图像像素相邻区域内的点是相关的,经过池化运算后特征图也还“可以用”, 虽然损失了图像质量,但是减小了输入到下一个网络的数据,使得整个网络的训练规模减少。池化层的特点有:

  • 没有要学习的参数
  • 通道数不发生改变
  • 对微小的位置变化具有鲁棒性(由于最大池化的作用,当数据发生微小变化时,池化的结果可能不发生改变)

进一步理解

  • 卷积核所对应的参数表示为图像的某一种特征,核的个数越多,即学习得到的特征更加的丰富,但是卷积核数量不宜过多,防止过拟合问题。
  • 卷积神经网络是根据分层进行信息的提取。以人像识别为例,通常第一层提取的是人体的边缘,斑点等信息,比如人耳朵的边缘,随着层数的叠加,网络所提取的信息也越来越具体,比如人体的耳朵,胳膊等。
  • 一般卷积神经网络后面还需要接全连接层,根据不同的需求设计成不同的结构。

本文部分参照《深度学习入门:基于Python的理论与实现》。如有侵权,请联系作者删除。

全部评论 (0)

还没有任何评论哟~