卷积神经网络(CNN)新手指南 1

http://blog.csdn.net/real_myth/article/details/52273930

卷积神经网络(CNN)新手指南

2016-07-29 18:22 Blake

1条评论

卷积神经网络(Convolutional Neural Network,CNN)新手指南

引言

卷积神经网络:听起来像是生物与数学还有少量计算机科学的奇怪结合,但是这些网络在计算机视觉领域已经造就了一些最有影响力的创新。2012年神经网络开始崭露头角,那一年Alex Krizhevskyj在ImageNet竞赛上(ImageNet可以算是竞赛计算机视觉领域一年一度的“奥运会”竞赛)将分类错误记录从26%降低到15%,这在当时是一个相当惊人的进步。从那时起许多公司开始将深度学习应用在他们的核心服务上,如Facebook将神经网络应用到他们的自动标注算法中,Google(谷歌)将其应用到图片搜索里,Amazon(亚马逊)将其应用到产品推荐服务,Pinterest将其应用到主页个性化信息流中,Instagram也将深度学习应用到它们的图像搜索架构中。

然而最经典的,或者说最流行的神经网络使用范例是将其用于图像处理领域。提到图像处理,本文主要介绍的是如何使用卷积神经网络来进行图像分类。

问题空间

图像分类是将输入图像(猫、狗等)进行分类输出或者将其分类成最能描述图像特征的类别的任务。对于人类来说,认知是我们出生之后就学会的第一个技能,也是作为成年人来说非常自然和轻松的技能。我们可以毫不犹豫迅速识别出我们周围的环境以及物体,当我们看到一张图片或者观察周遭环境时,大部分时间我们都能马上对场景做出判断并且给每个物体都打上标识,这些甚至都不需要刻意去观察。这些技能能够迅速识别其模式,从我们以前的经验中做出推论,然后将其运用至不同的图片或者环境中——这些都是我们与机器不同的地方。

输入与输出

当计算机看到一张图片时(即输入一张图片),它所看到的是一系列的像素值。根据图片的分辨率与大小,计算机将看到的是一个32×32×3的数字阵列(3指代的是RGB—颜色值)。我们稍微将一下这个,假设我们有一张480 x 480的JPG格式图片,它的表达阵列即为480 x 480 x 3。这些数字中的每一个值都可以从0取到255,它描述了在这一点上的像素强度。这些数字虽然对于我们进行图像分类时没有任何意义,但其却是计算机在图像输入时唯一获取的数据。这个理念就是你给电脑指定相关数据排列,它将图像是一个特定的类别的可能性进行输出(如80—猫,15—狗,05—鸟等)。

我们希望电脑做什么

现在我们了解到问题是在输入和输出上,让我们来考虑如何解决这个问题。我们希望电脑能做到的是在所有的给定图像中分辨出不同的类别,它能找到那些“狗之所以是狗”或者“猫之所以是猫”的特性。这个就是在我们的头脑中潜意识里进行认知识别的过程,当我们看到一张狗的图像时,我们能够将其分类因为图像上有爪子或者四条腿等明显的特征。以类似的方式计算机能够进行图像分类任务,通过寻找低层次的特征如边缘和曲线,然后运用一系列的卷积层建立一个更抽象的概念。这是卷积神经网络应用的一个总体概述,接下来我们来探讨下细节。

生物联系

首先要稍微普及下一点背景知识,当你第一次听到卷积神经网络这个词时,你也许会想这是是不与神经科学或者生物学有关?恭喜你,猜对了一部分。卷积神经网络的确从生物学上的视觉皮层得到启发,视觉皮层有微小区域的细胞对于特定区域的视野是十分敏感的。

1962年,Hubel和 Wiesel发现大脑中的部分神经元只对一定的方向的边缘做出回应。例如,当暴露在垂直边缘或者一些当水平或对角线边缘时,一些神经元才会做出回应。Hubel和 Wiesel发现,所有这些神经元都被架构在一个柱状结构中,这样的架构使它们能够产生视觉感知。系统中的特定成员可以完成特定任务这种理念(神经细胞在视觉皮层中寻找特定的特征)也能很好地应用在机器学习上,这也是卷积神经网络的基础。

架构

对于卷曲神经网络更详细的介绍是将图片通过一系列的卷积、非线性、池(采样)、全连接层,然后得到一个输出。正如我们前面所说的,输出是一个类或者一个图像类别的可能性概率。现在,困难的部分是了解每一层的任务。

第一层—数学

卷积神经网络的第一层是卷积层,第一件事是你要记住卷曲层的输入时什么。像我们之前提到的,输入的是一个32×32×3的系列像素值。解释卷积层的最好方式是想象一个手电筒正在图像的左上方进行照射,假设手电照射的区域是5 x 5的范围。再想象下这个手电筒在输入图像的各个区域进行滑动。在机器学习术语中,这个手电筒叫做过滤器(有时候也称为神经元或者核心),它照射着的区域被称为接受场。这个过滤器也是一系列的数据(这些数据被称为权重或者参数)。必须提到的是这个过滤器的深度必须是和输入的深度相同(这样才能保证数学正常工作),所以这个过滤器的尺寸是5×5×3。现在,让我们先拿第一个位置的过滤器为例。由于过滤器在输入图像上是滑动或卷积的,它是相乘的值在滤波器的原始图像的像素值(又名计算元素的乘法),这些乘法全部相加(从数学上讲,这将是75次乘法总和)。所以现在你有一个数字。请记住,这个数字只是当过滤器在图像的左上角时才有代表性,现在我们在每一个位置上重复这个过程。(下一步将过滤器移动到右边的1个单位,然后再向右移动1个单位,等等),每一个输入层上独特的位置都会产生一个数字。将过滤器滑动完所有位置的,你会发现剩下的是一个28×28×1的系列数字,我们称之为激活图或者特征图。你得到一个28×28阵列的原因是有784个不同的位置,一个5×5的过滤器可以适配一个32×32的输入图像,这组784个数字可以被映射到一个28×28阵列。

目前我们使用两个5 x 5 x 3的过滤器,我们的输出量将是28×28×2。通过使用更多的过滤器,我们能够更好地维持空间尺寸。在数学层面上来说,这些是在一个卷积层中进行的任务。

第一层—高阶视角

让我们从高阶角度来谈谈这个卷积层的任务,这些过滤器中每个都可以被认为是特征标识符。当我说特征时,我说的是如直边、简单的颜色和曲线等。思考一下,所有的图像都有同样的最简单的特征。我们的第一个过滤器是7×7×3,而且是一个曲线探测器。(在这一部分让我们忽略一个事实,过滤器是3个单位深的,只考虑顶部过滤器的深度和图像。)作为一个曲线检测器,过滤器将有一个更高的数值且有曲线的形状的像素结构(记住关于这些过滤器,我们考虑的只是数字)。

现在,让我们回到数学可视化部分。当我们在输入的左上角有了这种滤波器后,它会在哪个区域的过滤器和像素值之间计算乘积。现在让我们以一个我们要分类的图像为例,把我们的过滤器放在左上角。

记住,我们需要做的是使用图像中的原始像素值在过滤器中进行乘积。

基本上在输入图像中,如果有一个形状是类似于这种滤波器的代表曲线,那么所有的乘积累加在一起会导致较大的值!现在让我们看看当我们移动我们的过滤器时会发生什么。

检测值竟然要低得多!这是因为在图像中没有任何部分响应曲线检测过滤器。记住,这个卷积层的输出是一个激活图。因此,在简单的情况下一个过滤器的卷积(如果该过滤器是一个曲线检测器),激活图将显示其中大部分可能是在图片中的曲线区域。在这个例子中,我们的28×28×1激活图左上方的值将是6600,这种高值意味着很可能是在输入中有某种曲线导致了过滤器的激活。因为没有任何东西在输入使过滤器激活(或更简单地说,在该地区的原始图像没有一个曲线),其在我们的激活图右上方的值将是0。记住,这仅仅只是一个过滤器。这个过滤器将检测线向外和右边的曲线,我们可以有其他的曲线向左或直接到边缘的过滤器线条。过滤器越多,激活图越深,我们从于输入中获取的信息也就越多。

声明:在这一节中描述的过滤器是简化的,其主要目的是描述在一个卷积过程中的数学过程。在下图中你会看到一些对训练过的网络中第一个卷积层的过滤器的实际显示示例,尽管如此,主要的论据仍然是相同的。

进一步深入网络

现在展示一个传统的卷积神经网络结构,还有其他层在这些层之间穿插转换。强烈建议那些有兴趣的读者去了解他们的功能和作用,但一般来说他们提供的非线性和尺寸留存有助于提高网络的鲁棒性,同时还能控制过度拟合。一个经典的卷积神经网络架构看起来是这样的:

然而,最后一层是非常重要的内容,不过我们将在后面提到。让我们退后一步,回顾一下我们目前提到的东西。我们谈到了第一个卷积层的过滤器被设计用来探测。他们检测到低阶的特征如边缘和曲线。正如想象的那样,为了预测图像的类型,我们需要神经网络能够识别更高阶的特征,如手、爪子、耳朵。让我们考虑经过第一层卷积层后网络的输出是什么,这将是一个28×28×3的体量(假设我们使用三个5×5×3过滤器)。当穿过另一个卷积层时,卷积层的第一输出成为第二卷积层的输入,这有难以视觉化想象。当我们谈论第一层时,输入的只是原始图像。然而,当我们谈论第二个卷积层时,输入是第一层的结果激活图(S)。因此,每一层的输入基本上是描述某些低阶特征在原始图像中的位置。现在当你应用一组过滤器(通过第二卷积层),输出将被激活且代表更高阶的特征。这些特征的类型可能是半圆(曲线和直线边缘的组合)或方形(几个直边的组合)。当通过网络、更多的卷积层,可以激活地图,代表更多和更复杂的特征。在神经网络的结束,可能有一些激活的过滤器,表示其在图像中看到手写字迹或者粉红色的物体时等等。另一个有趣的事情是当你在网络往更深的地方探索时,过滤器开始有越来越大的接受场,这意味着他们能够从一个更大的区域或者更多的原始输入量接收信息。

全连接层

现在我们可以检测到这些高阶特征,锦上添花的是在神经网络的末端连接一个全连接层。这层基本上将一个输入量(无论输出是卷积或ReLU或池层)和输出一个N是程序选择类别的N维向量,具体过程如下图所示。这个全连接层的工作方式是,它着眼于前一层的输出(代表高阶特征的激活图),并确定哪些功能是最相关特定的类。例如如果该程序预测,一些图像是一只狗,它在激活图中会有高的值,代表高阶特征如一个爪子或4条腿等。类似地,如果该程序是预测一些图像是鸟的功能,它在激活图中会有高阶值,代表高阶特征如如翅膀或喙等。

训练过程

训练工程作为神经网络的一个部分,我之前故意没有提到,因为它有可能是最重要的一部分。阅读时你可能会遇到有很多问题,例如第一个卷积层中过滤器如何知道寻找边缘和曲线?全连接层如何知道激活图在哪里?每一层的过滤器如何知道有什么样的值?计算机能够调整其过滤值(或权重)的方式是通过一个称为反向传播的训练过程。

在我们介绍反向传播之前,我们必须先回顾下谈谈神经网络运行所需要的是什么。在我们出生的那一刻,我们的思想是全新的,我们不知道什么是猫,什么是鸟。类似地,在卷积神经网络开始之前,权重或过滤器的值是随机的,过滤器并不知道去寻找边缘和曲线,在更高阶的层过滤器不知道去寻找爪子和喙。然而当我们稍微大了一点之后,我们的父母和老师给我们展示了不同的图片和图像,并给了我们一个相应的标签。给图像以标签这个想法既是卷积神经网络(CNNs)的训练过程。在讲到它之前,让我们稍微介绍下我们有一个训练集,其中有成千上万的狗,猫和鸟类的图像,每一个图像有一个标签对应它是什么动物的图片。

反向传播可以分为4个不同的部分:前向传播、损失计算、反向传播、权重更新。在前向传播的过程中,你需要一个数字阵列为32×32×3的训练图像,并将其传递通过整个网络。在我们的第一个训练例子中,所有的权重或过滤器的值被随机初始化,输出可能是类似[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的东西,基本上是一个不能优先考虑任何数字的输出。目前权重的网络是无法寻找那些低阶的功能,因此也无法对分类可能性作出任何合理的结论。这就到了反向传播中的损失计算部分。我们现在使用的是训练数据,此数据有一个图像和一个标签。比方说,第一个输入的训练图像是一个3,则该图像的标签将是[ 0 0 1 0 0 0 0 0 ]。损失计算可以按许多不同的方式定义,但常见的是MSE(均方差)—½倍(实际预测)的平方。

假设变量L等于这个值,正如你想象的,对于第一组训练图像来说损失将是非常高的。现在,让我们更直观地来进行思考。我们想得到一个点的预测标签(ConvNet的输出)作为训练相同的训练标签(这意味着我们的网络预测正确)。为了实现则这个,我们要尽量减少我损失量。可视化在微积分上只是一个优化问题,我们需要找出哪些输入是(在我们的例子中的权重)最直接导致网络的损失(或错误)所在。

这是一个dL/DW的数学等价,其中W是在一个特定层的权重。现在我们要做的通过网络是执行一个反向传播过程,检测哪个权重损失最大并且寻找方法来调整它们使损失降低。一旦我们将这个计算过程进行完,就可以到最后一步—权重更新。把所有的过滤器的权重进行更新,使它们在梯度方向上进行改变。

学习速率是由程序员选择的一个参数。一个高的学习率意味着更多步骤是在权重更新部分,因此它可能需要更少的时间为最佳的权重在模型上进行收敛。然而学习率太高,可能会导致跨越太大而不够精准达到最佳点。

前向传播、损失计算、反向传播、参数更新的过程也称为一个epoch。程序会对于每一个固定数量的epoch、每个训练图像重复这一过程。在最后一个训练例子中完成了参数更新后,网络应该都训练的足够好了,各层的权重也应该调参正确了。

测试

最后要来测试我们的卷积神经网络是否工作,将不同的图片和标签集通过卷积神经网络,将输出结果与真实值进行对比,即可测试出其是否正常运行。

业界如何使用卷积神经网络

数据,数据,数据。给一个卷积神经网络的更多的训练数据,可以做的更多的训练迭代,也就能实现更多的权重更新,对神经网络进行更好的调参。Facebook(还有Instagram)可以使用数以亿计的用户目前的所有照片,Pinterest可以使用在其网站上的500亿的信息,谷歌可以使用搜索数据,亚马逊可以使用每天数以百万计的产品购买数据。

时间: 2024-10-06 13:30:33

卷积神经网络(CNN)新手指南 1的相关文章

深度学习之卷积神经网络CNN及tensorflow代码实现示例

一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的.当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 w 就有 784×15=11760 多个:若输入的是28×28 带有颜色的RGB格式的手写数字图片,输入神经元就有28×28×3=2352 个-- .这很容易看出使用全连接神经网络处理图像中的需要训

卷积神经网络(CNN)的简单实现(MNIST)

卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成. 以MNIST作为数据库,仿照LeNet-5和tiny-cnn( http://blog.csdn.net/fengbingchun/article/details/50573841 ) 设计一个简单的7层CNN结构如下: 输入层Inpu

卷积神经网络(CNN)学习笔记1:基础入门

卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Views 概述 卷积神经网络(Convolutional Neural Network, CNN)是深度学习技术中极具代表的网络结构之一,在图像处理领域取得了很大的成功,在国际标准的ImageNet数据集上,许多成功的模型都是基于CNN的.CNN相较于传统的图像处理算法的优点之一在于,避免了对图像复杂的

卷积神经网络CNN总结

从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图中就多了许多传统神经网络没有的层次. 卷积神经网络的层级结构      ? 数据输入层/ Input layer ? 卷积计算层/ CONV layer ? ReLU激励层 / ReLU layer ? 池化层 / Pooling layer ? 全连接层 / FC layer 1.数据输入层该层要

卷积神经网络(CNN)模型结构

卷积神经网络(CNN)模型结构 转载:http://www.cnblogs.com/pinard/p/6483207.html 看到的一片不错的文章,先转过来留着,怕以后博主删了.哈哈哈 在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用于图像识别,当然现在也应用于NLP等其他领域,本文我们就对CNN的模型结构做一个总结. 在学习CNN前,推荐大家

《神经网络与深度学习》(五) 卷积神经网络CNN及tensorflow代码实现示例

转自:http://blog.csdn.net/cxmscb/article/details/71023576 一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的.当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 w 就有 784×15=11760 多个:若输入的是28×28 带有颜色的RGB格式的

深度学习(一) 卷积神经网络CNN

Contents 图像数据集基础 全连接神经网络解决图片问题的弊端(前世) 卷积神经网络的今生 网络结构 卷积操作 池化操作 小结 图像数据集基础 数字图像划分为彩色图像.灰度图像.二值图像和索引图像几种.其中,像素是构成图像的基本单位,例如一张28×28像素的图片,即表示横向有28个像素点,纵向有28个像素点. 最常用的彩色图像和灰度图像: 彩色图像:每个像素由RGB三个分量来表示,即红绿蓝.每个分量介于(0,255).那么,对于一个28×28的彩色图像,便可以由三个表示RGB颜色分量的28×

人工智能之卷积神经网络(CNN)

前言:人工智能机器学习有关算法内容,请参见公众号“科技优化生活”之前相关文章.人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类.今天我们重点探讨一下卷积神经网络(CNN)算法. ^_^ 20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络CNN(Convolutional Neural Networks). 1980年,K.Fukushima提出的新识别机是卷积神经网络

卷积神经网络CNN

本文学习笔记的部分内容參考zouxy09的博客,谢谢!http://blog.csdn.net/zouxy09/article/details/8775360 什么是卷积 卷积假设改名为"加权平均积",就会非常好理解了.卷积的离散形式就是经常使用的加权平均.而连续形式则可理解为对连续函数的加权平均.假如我们观測或计算出一组数据.但数据因为受噪音的污染并不光滑.我们希望对其进行人工处理. 那么.最简单的方法就是加权平均.实际上加权平均是两个序列在做离散卷积,当中一个序列是权重,还有一个序

卷积神经网络CNN在自然语言处理中的应用

卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Processing, NLP)的狂潮.2015年以来,有关深度学习在NLP领域的论文层出不穷.尽管其中必定有很多附庸风雅的水文,但是也存在很多经典的应用型文章.笔者在2016年也发表过一篇关于CNN在文本分类方面的论文,今天写这篇博客的目的,是希望能对CNN的结构做一个比较清晰的阐述,同时就目前的研究现状做一个