用于机器学习的卷积神经网络速成课程
卷积神经网络是一种功能强大的人工神经网络技术。
这些网络保留了问题的空间结构,是为对象识别任务(如手写数字识别)而开发的。它们之所以受欢迎,是因为人们在困难的计算机视觉和自然语言处理任务中取得了最先进的结果。
在这篇文章中,你将发现用于深度学习的卷积神经网络,也称为ConvNets或CNNs。完成此速成课程后,你将了解:
- CNNs中使用的构建块,例如卷积层和池层。
- 用一个简短的工作示例说明构建块是如何装配在一起的。
- 在你自己的对象识别任务中配置CNNs的最佳实践。
- 适用于复杂机器学习问题的最新网络的参考。
我们开始吧。
卷积神经网络的情况
给定灰度级图像的数据集,每个灰度级图像的标准化大小为32×32像素,传统的前馈神经网络需要1024个输入权重(加上一个偏差)。
这很公平,但是将像素的图像矩阵展平为像素值的长向量会丢失图像中的所有空间结构。除非所有的图像都被完美地调整了大小,否则神经网络在这个问题上将会有很大的困难。
卷积神经网络通过使用小正方形的输入数据学习内部特征表示,期望并保持像素之间的空间关系。在整个图像上学习和使用特征,从而允许图像中的对象在场景中移动或平移,并且仍然可由网络检测。
这就是网络对照片中的物体识别如此有用的原因,可以从不同的方向识别出数字、面孔、物体等。
综上所述,以下是使用卷积神经网络的一些好处:
- 与完全连接的网络相比,它们使用更少的参数(权重)来学习。
- 它们被设计成与场景中的对象位置和扭曲不变。
- 它们自动学习并概括输入域中的要素。
卷积神经网络的构成块
卷积神经网络中有三种类型的层:
- 卷积层。
- 池化层
- 完全连接层。
1.卷积层
卷积层由滤波器和特征图组成。
滤器
过滤器是这一层的“神经元”。具有输入权重并输出值。输入大小是称为面片或接受场的固定正方形。
如果卷积层是输入层,则输入面片将是像素值。如果网络体系结构越深,则卷积层将从上一层的特征地图中获取输入。
要素地图
要素地图是应用于上一层的一个过滤器的输出。
给定的滤镜在整个上一层上绘制,一次移动一个像素。每个位置都会导致神经元的激活,并将输出收集到特征映射中。你可以看到,如果感受场从激活到激活移动一个像素,则该场将与前一次激活重叠(场宽-1)输入值。
补零
过滤器在来自上一层的输入上移动的距离称为步幅。
如果前一层的大小不能完全除以滤波器接受场的大小和步幅的大小,则接受场可以尝试读出输入特征地图的边缘。在这种情况下,可以使用像补零这样的技术来发明模拟输入,以便接受字段读取。
2.池化层
池化层对以前的图层要素地图进行向下采样。
池化层遵循一个或多个卷积图层的序列,用于合并在以前的层要素地图中学习和表达的要素。因此,合用可以被认为是一种压缩或概括特征表示并通常减少模型对训练数据的过度拟合的技术。
它们也有一个感受场,通常比卷积层小得多。此外,每次激活时感受野移动的步幅或输入的数量通常等于感受野的大小,以避免任何重叠。
池化层通常非常简单,取输入值的平均值或最大值,以便创建自己的要素地图。
有关池化层的更多信息,请参见帖子:
3.全连接层
完全连通层是正常的平面前馈神经网络层。
这些层可以具有非线性激活函数或软最大激活,以便输出类别预测的概率。
在卷积层和池层执行了特征提取和合并之后,在网络末端使用完全连接的层。它们用于创建最终的非线性特征组合,并用于通过网络进行预测。
一个卷积神经网络的实例
你现在了解了卷积层、池化层和完全连通层。让我们通过研究这三个层如何连接在一起来使这一点更加具体。
1.图像输入数据
让我们假设我们有一个灰度图像的数据集。每幅图像的大小相同,宽32像素,高32像素,像素值介于0和255之间,G.E.。32x32x1或1024像素值的矩阵。
图像输入数据被表示为宽*高*通道的3维矩阵。如果我们在示例中使用彩色图像,我们将有3个通道用于红色、绿色和蓝色像素值,例如32x32x3。
2.卷积层
我们定义了一个具有10个滤波器和5个像素宽、5个像素高、步长为1的感受场的卷积层。
因为每个滤波器一次只能从(即“看到”)5×5(25)个像素获得输入,所以我们可以计算出每个滤波器需要25+1个输入权重(加上1作为偏置输入)。
在步幅宽度为1的输入图像数据上拖动5×5感受场将产生28×28个输出值或每个图像784个不同激活的特征映射。
我们有10个过滤器,即将为一张图像创建10个不同的28×28功能地图或7840个输出。
最后,我们知道每个过滤器有26个输入,10个过滤器和28×28个输出值要计算,因此我们在卷积层中总共有26x10x28x28或203,840个“连接”,我们想用传统的神经网络命名法来表示它。
卷积层还利用非线性传递函数作为激活的一部分,并且整流器激活函数是常用的缺省设置。
3.池化层
我们定义一个池层,该层具有宽度为2个输入、高度为2个输入的接受场。我们还使用步长2来确保没有重叠。
这将产生大小为输入要素地图的一半的要素地图。从10个不同的28×28个特征图作为输入,到10个不同的14×14个特征图作为输出。
我们将对每个接受域使用max()操作,这样激活就是最大输入值。
4.全连接层
最后,我们可以将正方形要素地图展平为传统的平面全连通图层。
我们可以定义具有200个隐藏神经元的完全连接层,每个神经元有10x14x14个输入连接,或者每个神经元有1960+1个权重。在这一层中总共要学习392,200个连接和权重。
我们可以使用sigmoid或softmax传递函数来直接输出类值的概率。
卷积神经网络最佳实践
现在我们已经了解了卷积神经网络的构建块以及这些层是如何连接在一起的,我们可以回顾一些在应用它们时需要考虑的最佳实践。
- 输入接受域维度:图像的默认值为2D,但可以是1D(例如句子中的单词)或3D(添加时间维度的视频)。
- 可接受字段大小:面片应尽可能小,但要足够大,以便“看到”输入数据中的要素。通常在小图像上使用3×3,在大图像上使用5×5或7×7或更多。
- 步幅宽度:使用默认步幅1。这很容易理解,而且不需要填充来处理图像边缘脱落的接受场。对于较大的图像,该值可能会增加到2或更大。
- 过滤器数量:过滤器是特征检测器。通常,在输入层使用的过滤器较少,而在更深的层使用的过滤器越来越多。
- 填充:设置为零,读取非输入数据时称为零填充。当你不能或不想标准化输入图像大小时,或者当你想要使用未整齐划分输入图像大小的接受场和步幅大小时,这很有用。
- 合用:合用是一种破坏性的或泛化的过程,以减少过度适应。感受场几乎总是设置为2×2,步长为2,以丢弃来自上一层输出的75%的激活。
- 数据准备:考虑标准化输入数据,包括图像尺寸和像素值。
- 模式体系结构:在你的网络体系结构中对各层进行模式设计是很常见的。这可以是一个、两个或一些数量的卷积层,后面跟着一个池层。然后可以将该结构重复一次或多次。最后,完全连接的层通常只在输出端使用,并且可以堆叠一个、两个或更深。
- 退出:CNN有一种过度拟合的习惯,即使是在合并图层的情况下也是如此。应该使用丢弃,例如在完全连接的层之间以及可能在合并层之后。
对卷积神经网络的再认识
你在卷积神经网络上只涉及到了皮毛。这个领域发展非常迅速,新的有趣的架构和技术一直在被讨论和使用。
如果你想更深入地了解这项技术,可以看看LeCun,et。Al的开创性论文“基于梯度的学习应用于文档识别”[PDF]。在这本书中,他们介绍了应用于手写数字识别的LENet,并仔细解释了各层以及网络是如何连接的。
网上有很多关于CNN的教程和讨论。下面列出了几个选择示例。就我个人而言,我发现帖子中的说明性图片只有在了解了网络是如何连接在一起之后才有用的,许多解释都令人困惑,如果你有疑问的话,请参考勒村的论文。
- 深度学习4J中的卷积网络。
- 斯坦福CS231n课程中的卷积网络模型。
- 卷积网络及其在视觉中的应用[PDF]。
- 迈克尔·尼尔森(Michael Nielsen)开放的深度学习书中的第六章。
- 牛津大学推出的实用VGG卷积神经网络。
- Denny Britz著的“了解用于NLP的卷积神经网络”。
摘要
在这篇文章中,你发现了卷积神经网络。你了解了以下内容:
- 为什么需要CNNs来保留输入数据中的空间结构以及它们提供的好处。
- CNNs的构建块包括卷积层、汇聚层和完全连接层。
- CNNs的各个层面是如何连在一起的。
- 将CNNs应用于你自己的问题时的最佳实践。