理解卷积神经网络的初学者指南

免责声明:

原文链接:https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

《理解卷积神经网络的初学者指南》

介绍

卷积神经网络。这听起来像是生物学和数学的怪异结合,但这些网络已经成为计算机视觉领域最具影响力的创新之一。2012年是神经网络成长的第一年,因为Alex Krizhevsky利用它们赢得了当年的图像网络竞赛(基本上是每年的计算机视觉),将分类错误率从26%下降到15%,这是一个惊人的进步。从那时起,许多公司就一直在他们的服务核心中使用深度学习。Facebook使用神经网络为他们的自动标签算法,谷歌则用来做他们的照片搜索,亚马逊用来提供他们的产品推荐,Pinterest用来为他们的家庭提供个性化服务,Instagram用来做他们的搜索基础设施。

然而,经典的、可以说是最流行的这些网络的用例是图像处理。在图像处理中,让我们看一下如何使用这些cnnn来进行图像分类。

问题提出

图像分类是接收输入图像和输出类(猫、狗等)的任务,或者是最能描述图像的类的概率。

对人类来说,这个识别任务是我们从出生那一刻开始学习的第一项技能,它是一个自然而又毫不费力的过程。

不用经过思考,我们就能够快速、无缝地识别我们所处的环境和周围的物体。

当我们看到一个图像或者当我们看着周围的世界时,大多数时候我们能够立即描述这个场景并给每个物体一个标签,自然而然地。

这些能够快速识别模式的技能,从先前的知识中归纳出,并适应不同的图像环境,这些技能是我们与其他机器不共享的。

《理解卷积神经网络的初学者指南》

输入和输出

当计算机看到一个图像(将图像作为输入)时,它将看到一个像素值数组。根据图像的分辨率和大小,它将看到32 x 32 x 3的数字数组(3表示RGB值,即色道)。为了说明这一点,假设我们有一张JPG格式的彩色图像,它的大小是480 x 480。这个代表数组将是480 x 480 x 3。每个数字都有一个从0到255的值,它描述了那个点的像素强度。这些数字在我们执行图像分类时对我们人类来说毫无意义,但却是计算机唯一可用的输入。它的意思是,你给计算机这个数字数组,它会输出数字来描述图像的概率是一个特定的类(猫,80%。狗,15%,5%的鸟等等)。

我们想让计算机做什么

现在我们已经知道了及输入和输出的问题所在,我们来考虑一下如何处理这个问题。我们想让计算机做的是,能够区分出它所给出的所有图像,并找出能辨别出狗的独特特征,或者说是猫的。这也是我们潜意识里进行的过程。当我们看一张狗的照片时,我们可以把它分类,如果这张图片有可识别的特征,比如爪子或四条腿。通过类似的方法,计算机可以通过寻找边缘和曲线等较低的特征来执行图像分类,然后通过一系列的卷积层来构建更抽象的概念。这是一个关于CNN的总体概况。让我们深入了解细节。

生物学背景

但首先,有一点背景知识。当你第一次听说卷积神经网络时,你可能想到了一些与神经科学或生物学相关的东西,你是对的。排序的。cnn确实从视觉皮层获得了生物学上的灵感。视觉皮质有一小部分细胞对视觉区域的特定区域敏感。这一想法是由Hubel和Wiesel在1962年的一项令人着迷的实验(视频)所做的,他们展示了大脑中的一些神经元细胞只在特定的方向上做出反应(或被发射)。例如,当暴露于垂直的边缘时,一些神经元会被触发,而当显示水平或对角线的边缘时,则会触发另一些神经元。Hubel和Wiesel发现,所有这些神经元都是在一个柱状结构中组织起来的,它们可以产生视觉感知。在一个系统中特定的组成部分部分有特定任务的这个概念(视觉皮层中的神经元细胞寻找特定特征),也被用到的计算机视觉中,这也是cnn背后的基础。

整体结构

回到了细节。更详细的概述是,cnnn的工作是将图像传递给它,通过一系列的卷积、非线性、池(向下采样)和完全连接的层,并获得输出。如前所述,输出可以是单个类,也可以是最好描述图像的类的概率。现在,难点在于理解每一层的作用。让我们进入最重要的一个。

第一层——数学部分

CNN的第一层总是一个卷积层。首先要记住的是,这个conv(卷积的缩写,我将使用这个缩写)的输入层是什么。就像我们之前提到的,输入是一个32 x 32 x 3数组的像素值。现在,解释一个conv层的最好方法是想象一个闪光的手电筒照在图像的左上方。假设这个手电筒的光覆盖了一个5 x 5的区域。现在,让我们想象一下这个手电筒在输入图像的所有区域滑动。在机器学习术语中,这个手电筒被称为过滤器(有时被称为神经元或内核),而它所照耀的区域被称为“接收场”。现在这个过滤器也是一个数字数组(数字被称为权重或参数)。非常重要的一点是,这个过滤器的深度必须与输入的深度相同(这确保了计算的结果),所以这个过滤器的尺寸是5 x 5 x 3。现在,让我们来看看过滤器的第一个位置。它将会是左上角。当过滤器在输入图像周围滑动或卷积时,它会将过滤器中的值与图像的原始像素值相乘(也就是计算元素的乘法运算)。这些乘数都是可以总结的(从数学上说,总共是75次)。现在你有一个单独的数字。记住,这个数字仅仅代表了图像的左上角。现在,我们对输入卷上的每个位置重复这个过程。(下一步是将过滤器移动到右侧1个单元,然后再右移1个单位,以此类推)。输入卷上的每个惟一位置都会产生一个数字。在所有的位置滑动过滤器之后,你会发现你剩下的是一个28 x 28 x 1的数字数组,我们称它为激活映射或特征映射。你得到一个28 x 28的数组的原因是有784个不同的位置5个x 5的过滤器可以装在32 x 32的输入图像上。这些784个数字被映射到一个28 x 28的数组。

《理解卷积神经网络的初学者指南》

(请注意:我使用的一些图片,包括上面的图片,来自迈克尔尼尔森的这本很棒的书,“神经网络和深度学习”。强烈推荐)。

假设现在我们使用两个5 x 5 x 3个过滤器而不是一个。然后我们的输出量是28 x 28 x 2。通过使用更多的过滤器,我们能够更好地保护空间维度。从数学上讲,这就是卷积层的情况。

第一层——高层次的视角

但是,让我们来谈谈这个卷积是如何从一个高的水平来做的。每个过滤器都可以被认为是功能标识符。当我说特征时,我指的是直线,简单的颜色和曲线这些东西。想一下所有图像之间的最简单的特征。假设我们的第一个滤波器是7 x 7 x 3,它是一个曲线检测器。(在本节中,让我们忽略一个事实,即过滤器是3个深度的,为了简单起见 ,只考虑过滤器和图像的顶部深度部分。)作为一个曲线检测器,过滤器将有一个像素结构,在这个区域中,在一个曲线形状的区域中会有更高的数值(记住,我们说的这些过滤器,它们只是数字罢了!)

《理解卷积神经网络的初学者指南》

现在,让我们回到数学上。当我们在输入量的左上角有这个过滤器时,它就是在那个区域的过滤器和像素值之间的计算。现在让我们举一个我们想要分类的图像的例子,把我们的过滤器放在左上角。

《理解卷积神经网络的初学者指南》

记住,我们要做的是将过滤器中的值与图像的原始像素值相乘。

《理解卷积神经网络的初学者指南》

基本上,在输入图像中,如果有一个形状与这个过滤器所代表的曲线很相似,那么所有的乘数相加将会得到一个很大的值!现在让我们看看当我们移动过滤器时会发生什么。

《理解卷积神经网络的初学者指南》

价值要低得多!这是因为图像部分中没有对曲线检测器滤波器做出响应的任何东西。记住,这个conv层的输出是一个激活映射。所以,在一个简单的情况下,一个滤波器卷积(如果那个滤波器是一个曲线检测器),激活图会显示出图像中大部分可能是曲线的区域。在本例中,我们26 x 26 x 1激活映射的左上角值(26因为7×7过滤器而不是5×5)将是6600。这个高值意味着,在输入卷中可能有某种曲线导致了过滤器的激活。在我们的激活图中,最右的值是0,因为在输入卷中没有任何东西导致过滤器被激活(或者更简单地说,原始图像的那个区域没有一条曲线)。记住,这只是一个过滤器。这只是一个过滤器,用来检测向外向右的线。我们还可以对曲线向左或直边的直线进行其他滤镜。过滤器越多,激活映射的深度越深,我们对输入卷的信息也越多。

免责声明:我在这一节描述的过滤器过于简单,主要用于描述在卷积过程中进行的数学运算。在下面的图中,您将看到一些实际可视化的示例,这些示例是经过训练的网络的第一个conv层的过滤器的实际可视化。尽管如此,主要的争论还是一样的。第一层的过滤器围绕输入图像进行卷积,当它要查找的特定特性在输入卷中,“激活”(或计算高值)。

(快速注意:上面的图片来自于Andrej Karpathy和贾斯汀约翰逊教授的斯坦福大学课程。推荐给任何想要了解cnnn的人。)

深入了解

现在,在传统的卷积神经网络体系结构中,在这些conv层之间还有其他的层。我强烈建议那些有兴趣阅读的人,了解他们的功能和效果,但是从一般意义上说,他们提供了非线性和维保,这有助于提高网络的健壮性和对过度拟合的控制。一个典型的CNN架构是这样的。

《理解卷积神经网络的初学者指南》

然而,最后一层是很重要的一层,我们稍后会深入讨论。让我们回顾一下到目前为止所学到的知识。我们讨论了第一个conv层中的过滤器是如何被设计来检测的。他们检测到低水平的特征,例如边缘和曲线。正如人们想象的那样,为了预测图像是否是一种对象类型,我们需要网络能够识别出更高水平的特征,例如手、爪或耳朵。我们来想想第一个conv层后网络的输出是什么。它是28 x 28 x 3的体积(假设我们使用3个5 x 5 x 3个过滤器)。当我们穿过另一个conv层时,第一个conv层的输出就变成了第二个conv层的输入。现在,这个更难想象了。当我们讨论第一个层时,输入只是原始图像。但是,当我们讨论第二个conv层时,输入是来自第一个层的激活映射(s)。因此,输入的每一层都是描述原始图像中的位置,以显示某些低水平的特征。现在,当您在上面应用一组过滤器时(将它传递到第二个conv层),输出将是表示更高级别特性的激活。这些特征的类型可以是半边形(曲线和直边的组合)或正方形(几个直边的组合)。当您浏览网络并浏览更多的conv层时,您会得到代表了越来越复杂的特性的激活映射。你可能会有一些过滤器,激活有笔迹图像时,过滤器,激活当他们看到粉红色的对象,等等。如果你想要更多的信息可视化在回旋网过滤器,马特Zeiler和罗伯·费格斯有一个优秀的研究论文讨论的话题。Jason Yosinski还在YouTube上有一段视频,提供了一个很好的视觉表现。另一个需要注意的有趣的事情是,当你深入到网络,过滤器开始有越来越大的接受域,这意味着他们能够考虑原始输入量的信息从一个更大的区域(把它的另一种方法是,他们更敏感更大区域的像素空间)。

完全连接层

现在我们可以检测到这些高水平的特性,蛋糕上的糖衣是在网络的末端附加一个完全连接的层。这一层基本上是一个输入量(无论在它之前的conv或ReLU或pool层的输出是什么),并输出一个N维向量,其中N是程序必须选择的类的数量。例如,如果你想要一个数字分类程序,N是10,因为有10个数字。这个N维向量中的每个数表示某个类的概率。例如,如果一个数字分类程序的结果向量是[0 .1 .1 .75 0 0 0 0 0 .05],那么这意味着10%的概率是1的图片,图像2 10%的概率,75%的概率,图像是一个3,和5%的概率图像是一个9(注:还有其他的方法可以代表输出,但我只是显示将softmax方法)。这个完全连接层的工作方式是,它查看前一层的输出(我们记得它应该表示高级特性的激活映射),并确定哪些特性与某个特定的类相关联。例如,如果项目是预测,一些形象是一只狗,它会有高值代表高水平的激活地图功能,如爪或4条腿,等等。同样,如果程序预计,一些形象是一只鸟,它会有高值代表高水平的激活地图功能,像翅膀或嘴,等等。基本上,FC层看着最高度特性强关联到一个特定的类,有特定的权重,所以当你计算重量和前面的层之间的产品,你会得到正确的概率为不同的类。

《理解卷积神经网络的初学者指南》

训练(也就是:是什么让这些东西起作用)

现在,这是神经网络的一个方面我还没有提到,它可能是最重要的部分。在阅读的时候可能会有很多问题。第一个conv层中的过滤器是如何知道寻找边和曲线的?完全连接层如何知道激活映射要看什么?每个层中的过滤器是如何知道要使用什么值的?

计算机能够调整其滤波器值(或权重)的方法是通过一个称为反向传播的训练过程。

在进行反向传播之前,我们必须先退一步,讨论一下神经网络需要什么才能工作。在我们都出生的那一刻,我们的头脑是新鲜的。我们不知道猫、狗或鸟是什么。同样的,在CNN开始之前,权重或过滤值是随机的。滤光器不知道寻找边缘和曲线。更高层次的过滤器不知道要寻找爪子和喙。然而,随着年龄的增长,我们的父母和老师给我们展示了不同的图片和图片,并给我们一个相应的标签。这个被赋予一个形象和一个标签的想法是cnn的训练过程。在深入研究之前,我们先说我们有一个训练集里面有成千上万的狗,猫,和鸟的图片,每一张图片都有一个动物图片的标签。回到backprop。

因此,反向传播可以分为4个不同的部分,向前传递、损失函数、向后传递和权重更新。在前进的过程中,你会得到一个训练图像,我们记得它是32 x 32 x 3的数字数组并通过整个网络。在我们的第一个培训示例中,由于所有的权重或筛选值都是随机初始化的,输出可能是类似的。1。1。1。1。1。1。1。1。1。1,基本上是一个输出,它不会对任何数字有偏好。这个网络,由于它的当前权重,无法寻找那些低层次的特性,或者因此无法得出任何关于分类的合理结论。这是反向传播的损失函数的一部分。请记住,我们现在正在使用的是训练数据。这个数据有一个图像和一个标签。比如说,第一个训练的图像是3。图像的标签是0 0 0 0 0 0 0 0 0。损失函数可以用许多不同的方式定义,但常见的是MSE(平均平方误差),这是时间(实际的-预测的)平方。

《理解卷积神经网络的初学者指南》

我们设变量L等于这个值。正如你所想象的,在最初的几张训练图片中,损失将会非常高。现在,让我们直观地思考一下。我们想要达到一个点,预测的标签(卷积的输出)和训练标签一样(这意味着我们的网络得到了它的预测)。为了达到这个目的,我们想要最小化我们所拥有的损失。把这看作是微积分中的一个优化问题,我们想找出哪些输入(在我们的例子中是权重)最直接地导致了网络的损失(或错误)。

《理解卷积神经网络的初学者指南》

这是一个数学上的等价于dl/dw,其中W是一个特定层的权重。现在,我们要做的是在网络中做一个逆向的传递,这个网络决定了哪些权重对损失做出了最大的贡献,并找到了调整它们的方法,从而使损失减小。一旦我们计算了这个导数,我们就到了最后一步,就是重量更新。这是我们取所有的滤光器的重量并更新它们的地方,使它们在梯度的相反方向上改变。

《理解卷积神经网络的初学者指南》

学习速率是由程序员选择的一个参数。高学习率意味着在权重更新中会采取更大的步骤,因此,模型在最优权重集上的收敛可能会花费更少的时间。然而,一个太高的学习速率会导致跳得太大而不够精确以至于无法达到最佳点。

《理解卷积神经网络的初学者指南》

转发传递、丢失功能、反向传递和参数更新的过程是一个训练迭代。这个程序将重复这个过程,为每组训练图像(通常称为批处理)进行固定次数的迭代。一旦在上一个培训示例中完成了参数更新,希望网络应该得到足够的训练,从而使各个层的权重得到正确的调优。

测试

最后,为了看看我们的CNN是否工作,我们有一组不同的图片和标签(不能在训练和测试之间翻倍),并通过CNN的图片。我们将输出与地面的真相进行比较,看看我们的网络是否有效!

互联网公司如何使用CNN

数据,数据,数据。有大量数据的公司是那些在竞争中拥有固有优势的公司。你可以给一个网络提供的训练数据越多,你可以做的训练次数越多,你就能做出越多的体重更新,而当它进入到生产环境时,你就能更好地适应网络。Facebook(和Instagram)可以使用它目前拥有的10亿用户的所有照片,Pinterest可以使用其网站上的500亿个pin信息,谷歌可以使用搜索数据,而亚马逊可以使用每天购买的数以百万计的产品的数据。现在你知道了他们是如何使用它的。

免责声明

虽然这篇文章应该是理解cnnn的一个很好的开始,但它绝不是一个全面的概述。本文中没有讨论的内容包括了非线性和池层以及网络的超参数,如过滤大小、跨步和填充。主题网络架构,批处理规范化,梯度消失,辍学,初始化技术,非凸优化、偏见,损失函数的选择,数据,正则化方法,计算考虑,修改反向传播,(还)没有讨论和更多。

    原文作者:cf1244c50db8
    原文地址: https://www.jianshu.com/p/c34e538fd8b3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞