卷积神经网络

2020-07-18 00:54:05 浏览数 (2)

什么是卷积神经网络

在机器学习中,分类器将类别标签分配给数据点。例如,图像分类器针对图像中存在哪些对象产生类别标签(例如,鸟,飞机)。一个卷积神经网络,或CNN的简称,是一种类型的分类,在解决这个问题,其过人之处!

CNN是神经网络:一种用于识别数据模式的算法。通常,神经网络由神经元组成,这些神经元分层组织,每个神经元都有自己可学习的权重和偏见。让我们将CNN分解为其基本构建块。

卷积神经网络的架构和模块

1.甲张量可以被认为是一个n维矩阵。在上面的CNN中,张量将是3维的,输出层除外。

2.甲神经元可以被看作是发生在多个输入并且产生一个输出的功能。神经元的输出在上面表示为红色 → 蓝色 激活图。

3.阿层是简单地用相同的操作的神经元,包括相同超参数的集合。

4.内核权重和偏差(虽然每个神经元都唯一)在训练阶段进行了调整,并允许分类器适应所提供的问题和数据集。它们在可视化中以黄色 → 绿色发散色标进行编码。通过单击神经元或将鼠标悬停在卷积弹性解释视图中的内核/偏差上,可以在“ 交互式公式”视图中查看特定值。

5.CNN传达了一个微分函数,该函数在输出层的可视化中表示为类分数。

卷积神经网络概述

如果您以前学习过神经网络,那么您可能会觉得这些术语很熟悉。 那么,什么使CNN与众不同? CNN利用一种特殊类型的层,恰当地称为卷积层,使它们处于适当的位置以从图像和类似图像的数据中学习。 关于图像数据,CNN可以用于许多不同的计算机视觉任务,例如图像处理,分类,分割和目标检测。

在CNN Explainer中,您可以看到如何使用简单的CNN进行图像分类。 由于网络的简单性,它的性能并不完美,但这没关系! CNN Explainer中使用的网络架构Tiny VGG包含了当今最先进的CNN所使用的许多相同的层和操作,但是规模较小。 这样,将更容易理解入门。

卷积神经网络原理解析

卷积神经网络-输入层

输入层在做什么呢?

输入层(最左边的层)代表输入到CNN中的图像。 因为我们使用RGB图像作为输入,所以输入层具有三个通道,分别对应于该层中显示的红色,绿色和蓝色通道。

卷积神经网络-卷积层

卷积层是CNN的基础,因为它们包含学习的内核(权重),这些内核提取出可将不同图像彼此区分开的特征-这就是我们想要的分类! 与卷积层交互时,您会注意到先前各层与卷积层之间的链接。 每个链接代表一个唯一的内核,该内核用于卷积操作以生成当前卷积神经元的输出或激活图。

卷积神经元执行具有唯一内核和上一层对应神经元输出的元素点积。 这将产生与唯一内核一样多的中间结果。 卷积神经元是所有中间结果的总和与学习偏差的总和。

例如,让我们看一下上面的Tiny VGG架构中的第一卷积层。 请注意,此层中有10个神经元,但上一层中只有3个神经元。 在Tiny VGG架构中,卷积层是完全连接的,这意味着每个神经元都与上一层中的每个其他神经元相连。 着眼于第一卷积层最顶部的卷积神经元的输出,当我们将鼠标悬停在激活图上时,我们看到有3个唯一的内核。

卷积神经网络-卷积层

卷积神经网络-池化的运算

这些内核的大小是由网络体系结构的设计人员指定的超参数。 为了产生卷积神经元(激活图)的输出,我们必须与上一层的输出以及网络学习到的唯一内核一起执行元素逐点积。 在TinyVGG中,点积运算使用的跨度为1,这意味着内核将每个点积移出1个像素,但这是网络架构设计人员可以调整以使其更适合其数据集的超参数。 我们必须对所有3个内核执行此操作,这将产生3个中间结果。

然后,执行元素和,包含所有3个中间结果以及网络已获悉的偏差。 此后,生成的二维张量将是在第一卷积层中最顶层神经元的上方界面上可见的激活图。 必须应用相同的操作来生成每个神经元的激活图。

通过一些简单的数学运算,我们可以推断出在第一个卷积层中应用了3 x 10 = 30个唯一的内核,每个内核的大小为3x3。 卷积层与上一层之间的连通性是构建网络体系结构时的设计决策,它将影响每个卷积层的内核数量。 单击可视化文件以更好地了解卷积层背后的操作。 看看是否可以按照上面的示例!

卷积神经网络-卷积的计算原理

然后,执行元素和,包含所有3个中间结果以及网络已获悉的偏差。 此后,生成的二维张量将是在第一卷积层中最顶层神经元的上方界面上可见的激活图。 必须应用相同的操作来生成每个神经元的激活图。

通过一些简单的数学运算,我们可以推断出在第一个卷积层中应用了3 x 10 = 30个唯一的内核,每个内核的大小为3x3。 卷积层与上一层之间的连通性是构建网络体系结构时的设计决策,它将影响每个卷积层的内核数量。 单击可视化文件以更好地了解卷积层背后的操作。 看看是否可以按照上面的示例!

卷积神经网络-了解超参数

1.当内核扩展到激活图之外时,通常需要填充。填充可以在激活图的边界处保存数据,从而获得更好的性能,并且可以帮助保留输入的空间大小,从而使体系结构设计人员可以构建性能更高,更流畅的网络。存在许多填充技术,但是最常用的方法是零填充,因为它的性能,简单性和计算效率高。该技术涉及在输入的边缘周围对称地添加零。许多高性能的CNN(例如AlexNet)都采用了这种方法。

2.内核大小,通常也称为过滤器大小,是指输入上的滑动窗口的尺寸。选择此超参数会对图像分类任务产生重大影响。例如,较小的内核大小可以从输入中提取大量包含高度局部特征的信息。如您在上面的可视化图中所看到的,较小的内核尺寸也导致较小的层尺寸减小,这允许更深的体系结构。相反,较大的内核会提取较少的信息,这会导致更快地减小图层尺寸,通常会导致性能下降。大内核更适合提取更大的特征。归根结底,选择合适的内核大小将取决于您的任务和数据集,但是通常,越来越多的图层一起学习越来越复杂的功能!

3.大步走指示内核一次应移动多少像素。例如,如上面的卷积层示例中所述,Tiny VGG对其卷积层使用步幅1,这意味着在输入的3x3窗口上执行点积以产生输出值,然后将其移至每进行一次后续操作,就增加一个像素。跨度对CNN的影响类似于内核大小。随着步幅的减小,由于会提取更多的数据,因此会了解更多的功能,这也会导致更大的输出层。相反,随着步幅的增加,这将导致特征提取更加受限,输出层尺寸更小。架构设计人员的职责之一是在实现CNN时确保内核对称地跨输入滑动。

卷积神经网络-relu激活函数

神经网络在现代技术中极为盛行-因为它们是如此的精确! 当今性能最高的CNN包含大量荒谬的图层,可以学习越来越多的功能。 这些突破性的CNN能够实现如此巨大的准确性的部分原因是由于它们的非线性。 ReLU将急需的非线性应用到模型中。 非线性是产生非线性决策边界所必需的,因此输出不能写成输入的线性组合。 如果不存在非线性激活函数,那么深的CNN架构将演变为一个等效的卷积层,其性能几乎不一样。 与其他非线性函数(例如Sigmoid)相反,ReLU激活函数专门用作非线性激活函数,因为从经验上已经观察到,使用ReLU的CNN的训练速度要快于它们的对应函数。

ReLU激活函数是一对一的数学运算:

此激活函数逐元素应用于输入张量中的每个值。 例如,如果将ReLU应用于值2.24,则结果将为2.24,因为2.24大于0。您可以通过单击上方网络中的ReLU神经元来观察如何应用此激活功能。 在上面概述的网络体系结构中的每个卷积层之后执行整流线性激活功能(ReLU)。

卷积神经网络-softmax函数

softmax操作的主要目的是:确保CNN输出的总和为1。因此,softmax操作可用于将模型输出缩放为概率。 单击最后一层将显示网络中的softmax操作。 请注意,展平后的对数如何不在0到1之间缩放。 为了直观显示每个logit的影响(标量值未缩放),使用浅橙色→深橙色色标对它们进行编码。 通过softmax函数后,每个类现在对应一个适当的概率!

您可能会想,标准归一化和softmax之间的区别是什么-毕竟,两者都会在0和1之间重新调整logit。请记住,反向传播是训练神经网络的关键方面-我们希望正确的答案具有最大的“信号”。 ” 通过使用softmax,我们可以有效地“逼近” argmax,同时获得微分。 重新缩放不会使最大权重明显高于其他logit,而softmax会重。 简而言之,softmax是一个“更软”的argmax-看到我们在那里做了什么?

图4. Softmax交互式公式视图允许用户与颜色编码的logit和公式进行交互,以了解在将扁平层之后的预测分数如何归一化以产生分类分数图4. Softmax交互式公式视图允许用户与颜色编码的logit和公式进行交互,以了解在将扁平层之后的预测分数如何归一化以产生分类分数

卷积神经网络-全连接层

在不同的CNN架构中,池化层的类型很多,但是它们的目的都是要逐渐减小网络的空间范围,从而减少网络的参数和总体计算。 上面的Tiny VGG架构中使用的池类型为Max-Pooling。

最大池操作需要在体系结构设计期间选择内核大小和步幅长度。 选择后,该操作将以指定的步幅在输入上滑动内核,同时仅从输入中选择每个内核切片上的最大值以产生输出值。 通过单击上方网络中的合并神经元,可以查看此过程。

在上面的Tiny VGG体系结构中,池化层使用2x2内核,步幅为2。使用这些规范进行此操作将导致75%的激活被丢弃。 通过丢弃这么多值,Tiny VGG的计算效率更高,并且避免了过拟合。

卷积神经网络-全连接层

l该层将网络中的三维层转换为一维向量,以适合全连接层的输入以进行分类。例如,将一个5x5x2张量转换为大小为50的向量。网络的先前卷积层从输入图像中提取了特征,但是现在该对这些特征进行分类了。我们使用softmax函数对这些功能进行分类,这需要一维输入。这就是为什么需要全连接层的原因。可以通过单击任何输出类来查看此层。

0 人点赞