机器学习算法之——卷积神经网络(CNN)原理讲解

CNN-卷积神经网络 我们使用卷积处理图像,如果采用经典的神经网络模型,则需要读取整幅图像作为神经网络模型的输入(即全连接的方式),当图像的尺寸越大时,其连接的参数将变得很多,从而导致计算量非常大。图像中,红色的输入层代表输入图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是3(代表了RGB3种颜色通道)、接着是经过卷积运算(convolution)和池化运算(Pooling)之后的激活值(也可以看做一层神经元),再接着的下一部分的卷积池化层,最后的部分是一个深度为分类个数的输出向量。 阅读详情
AI摘要

本文详细讲解了卷积神经网络(CNN)的原理。介绍了其从传统神经网络改进而来的定义与架构,阐述了层级结构,包括数据输入层、卷积计算层等。还说明了训练算法、优缺点、典型CNN、fine - tuning及常用框架。CNN在图像识别等方面有独特优势,文末给出了相关应用案例。


一、从神经网络到卷积神经网络

我们知道神经网络的结构是这样的:

那卷积神经网络跟它是什么关系呢?

其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。

1. 定义

简而言之,卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络的创始人是着名的计算机科学家Yann LeCun,目前在Facebook工作,他是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。

Yann LeCunn

2. 卷积神经网络的架构

如上图所示,卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,还注意到卷积神经网络能够接受多个特征图作为输入,而不是向量。

二、卷积网络的层级结构

一个卷积神经网络主要由以下5层组成:

  • 数据输入层/ Input layer
  • 卷积计算层/ CONV layer
  • ReLU激励层 / ReLU layer
  • 池化层 / Pooling layer
  • 全连接层 / FC layer

1. 数据输入层

该层要做的处理主要是对原始图像数据进行预处理,其中包括:

  • 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
  • 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
  • PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化

去均值与归一化效果图:

去相关与白化效果图:

2. 卷积计算层

这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。
在这个卷积层,有两个关键操作:

  • 局部关联。每个神经元看做一个滤波器(filter)
  • 窗口(receptive field)滑动, filter对局部数据计算

先介绍卷积层遇到的几个名词:

  • 深度/depth(解释见下图)
  • 步幅/stride (窗口一次滑动的长度)
  • 填充值/zero-padding

还记得我们在第一篇中提到的过滤器、感受野和卷积吗?很好。现在,要改变每一层的行为,有两个主要参数是我们可以调整的。选择了过滤器的尺寸以后,我们还需要选择步幅(stride)和填充(padding)。

步幅控制着过滤器围绕输入内容进行卷积计算的方式。在第一部分我们举的例子中,过滤器通过每次移动一个单元的方式对输入内容进行卷积。过滤器移动的距离就是步幅。在那个例子中,步幅被默认设置为1。步幅的设置通常要确保输出内容是一个整数而非分数。让我们看一个例子。想象一个 7 x 7 的输入图像,一个 3 x 3 过滤器(简单起见不考虑第三个维度),步幅为 1。这是一种惯常的情况。

还是老一套,对吧?看你能不能试着猜出如果步幅增加到 2,输出内容会怎么样。

所以,正如你能想到的,感受野移动了两个单元,输出内容同样也会减小。注意,如果试图把我们的步幅设置成 3,那我们就会难以调节间距并确保感受野与输入图像匹配。正常情况下,程序员如果想让接受域重叠得更少并且想要更小的空间维度(spatial dimensions)时,他们会增加步幅。

填充值是什么呢?

在此之前,想象一个场景:当你把 5 x 5 x 3 的过滤器用在 32 x 32 x 3 的输入上时,会发生什么?输出的大小会是 28 x 28 x 3。注意,这里空间维度减小了。如果我们继续用卷积层,尺寸减小的速度就会超过我们的期望。在网络的早期层中,我们想要尽可能多地保留原始输入内容的信息,这样我们就能提取出那些低层的特征。比如说我们想要应用同样的卷积层,但又想让输出量维持为 32 x 32 x 3 。为做到这点,我们可以对这个层应用大小为 2 的零填充(zero padding)。零填充在输入内容的边界周围补充零。如果我们用两个零填充,就会得到一个 36 x 36 x 3 的输入卷。

如果我们在输入内容的周围应用两次零填充,那么输入量就为 32×32×3。然后,当我们应用带有 3 个 5×5×3 的过滤器,以 1 的步幅进行处理时,我们也可以得到一个 32×32×3 的输出

如果你的步幅为 1,而且把零填充设置为

K 是过滤器尺寸,那么输入和输出内容就总能保持一致的空间维度。

计算任意给定卷积层的输出的大小的公式是

其中 O 是输出尺寸,K 是过滤器尺寸,P 是填充,S 是步幅。

2.1 卷积的计算

(注意,下面蓝色矩阵周围有一圈灰色的框,那些就是上面所说到的填充值)

这里的蓝色矩阵就是输入的图像,粉色矩阵就是卷积层的神经元,这里表示了有两个神经元(w0,w1)。绿色矩阵就是经过卷积运算后的输出矩阵,这里的步长设置为2。

蓝色的矩阵(输入图像)对粉色的矩阵(filter)进行矩阵内积计算并将三个内积运算的结果与偏置值b相加(比如上面图的计算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),计算后的值就是绿框矩阵的一个元素。

下面的动态图形象地展示了卷积层的计算过程:

2.2 参数共享机制

在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。

需要估算的权重个数减少: AlexNet 1亿 => 3.5w

一组固定的权重和不同窗口内数据做内积: 卷积

3. 非线性层(或激活层)

把卷积层输出结果做非线性映射。

CNN采用的激活函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。更多关于激活函数的内容请看后期文章。

激励层的实践经验:

①不要用sigmoid!不要用sigmoid!不要用sigmoid!
② 首先试RELU,因为快,但要小心点
③ 如果2失效,请用Leaky ReLU或者Maxout
④ 某些情况下tanh倒是有不错的结果,但是很少

参见 Geoffrey Hinton(即深度学习之父)的论文:Rectified Linear Units Improve Restricted Boltzmann Machines 墙裂推荐此论文! 现在上篇文章写的免费下载论文的方法就可以用上了。

4.池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

这里再展开叙述池化层的具体作用:

  1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
  2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
  3. 在一定程度上防止过拟合,更方便优化。

池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。这里就说一下Max pooling,其实思想非常简单。

对于每个2 * 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 * 2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。

5.全连接层

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

一般CNN结构依次为
1. INPUT
2. [[CONV -> RELU]N -> POOL?]M
3. [FC -> RELU]*K
4. FC

三、卷积神经网络的几点说明

1. 训练算法

1.同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距。
2.找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。

2.优缺点

(1)优点
  •共享卷积核,对高维数据处理无压力
  •无需手动选取特征,训练好权重,即得特征分类效果好
(2)缺点
  •需要调参,需要大样本量,训练最好要GPU
  •物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

3. 典型CNN

  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比
  • LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好

4. fine-tuning

何谓fine-tuning?
fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。

那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。

那fine-tuning的具体做法是?
•复用相同层的权重,新定义层取随机权重初始值
•调大新定义层的的学习率,调小复用层学习率

5. 常用框架

Caffe
 •源于Berkeley的主流CV工具包,支持C++,python,matlab
 •Model Zoo中有大量预训练好的模型供使用

PyTorch
 •Facebook用的卷积神经网络工具包
 •通过时域卷积的本地接口,使用非常直观
 •定义新网络层简单

TensorFlow
 •Google的深度学习框架
 •TensorBoard可视化很方便
 •数据和模型并行化好,速度快

四、总结

卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。

卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

CNN应用案例:

[1] 表情识别FER | 基于深度学习的人脸表情识别系统(Keras)
[2] 表情识别FER | 基于CNN分类的表情识别研究
[3] 机器学习 | 卷积神经网络详解(二)——自己手写一个卷积神经网络

机器学习算法-卷积神经网络(CNN)原理讲解配套资料整理打包好了(来领一份)

机器学习-卷积神经网络(CNN) 交叉熵损失用于评估预测概率分布与实际标签分布之间的差异。对于一个多分类问题,交叉熵损失 ( L ) 的定义为:( C ) 是类别数。( y_i ) 是实际标签的指示函数。如果样本属于第 ( i ) 类,则 ( y_i = 1 ),否则为 ( 0 )。( \hat{y}_i ) 是模型对第 ( i ) 类的预测概率。均方误差 ( L ) 定义为:( N ) 是样本数量。( y_j ) 是真实值。( \hat{y}_j ) 是预测值。 阅读详情

相关推荐

CNN入门讲解:如何理解卷积神经网络的结构

原创文章,一家之言。 个人公众号:follow_bobo 知乎号:蒋竺波 转载请通知本人。 大家好,我是波波,欢迎再次来到CNN入门讲解。 上次我们讲什么卷积以及卷积在卷积神经网络里的作用,那我们这一期来理一理卷积神经网络大致的结构

bobo_jiang的博客 6154

卷积神经网络(CNN)超详细介绍

文章转自:https://blog.youkuaiyun.com/jiaoyangwm/article/details/80011656 文章目录 1、卷积神经网络的概念2、 发展过程3、如何利用CNN实现图像识别的任务4、CNN的特征5、CNN的求解6、卷积神经网络注意事项7、CNN发展综合介绍8、LeNet-5结构分析9、AlexNet10、ZFNet10.1 意义10.2 实现方法10.3 训练细节10.4 卷积网络可视化10.6 总结 11、VGGNet11.1 结构11.2 网络特点:11.3 分

weixin_44021149的博客 6万+

CNN卷积神经网络

CNN卷积神经网络 一、CNN卷积神经网络概念 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 二、CNN卷积神经网络原理 简要介绍下。神经网络的每个单元如下: 其对应的公式如下: 其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络。其对应的公式如下: 比较类似的,可以拓展到有

qq_54615837的博客 6134

通俗理解卷积神经网络

               通俗理解卷积神经网络(cs231n与5月dl班课程笔记)       1 前言     2012年我在北京组织过8期machine learning读书会,那时“机器学习”非常火,很多人都对其抱有巨大的热情。当我2013年再次来到北京时,有一个词似乎比“机器学习...

gldbys的博客 7482

DL:卷积神经网络(CNN)的一些学习网址

将学习CNN过程中所用的网址整理一下。。。。。与我相关的有关CNN的网址【1】知乎:卷积神经网络的多层参数是怎么推导的 https://www.zhihu.com/question/42838093/answer/94920915?from=profile_answer_card【2】知乎:卷积神经网络保证“位移、尺度、形变不变性”该怎么理解 https://www.zhihu.com/ques

梦里水乡的专栏 5058

大话卷积神经网络(CNN)

这里的神经网络,也指人工神经网络(Artificial Neural Networks,简称ANNs),是一种模仿生物神经网络行为特征的算法数学模型,由神经元、节点与节点之间的连接(突触)所构成,如下图: 每个神经网络单元抽象出来的数学模型如下,也叫感知器,它接收多个输入(x1,x2,x3…),产生一个输出,这就好比是神经末梢感受各种外部环境的变化(外部刺激),然后产生电信号,以便于转导到神经细胞(又叫神经元)。 单个的感知器就构成了一个简单的模型,但在现实世界中,实际的决策模型则要复杂得多,往往是由.

qq_33287871的博客 1万+

可视化卷积神经网络的过滤器_机器学习算法之——卷积神经网络(CNN)原理讲解...

一、从神经网络到卷积神经网络我们知道神经网络的结构是这样的:那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。1. 定义简而言之,卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神...

weixin_39530839的博客 1710

Python机器学习实战:卷积神经网络(CNN)在图像处理中的应用

Python机器学习实战:卷积神经网络(CNN)在图像处理中的应用 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来

AI天才研究院 1793

深度学习笔记——pytorch实现卷积神经网络CNN

B站刘二大人《pytorch深度学习实践》

weixin_45978839的博客 3749

卷积神经网络CNN基本原理详解

卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。

GoppViper的博客 9万+

[Python人工智能] 十八.Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助!

杨秀璋的专栏 1万+

【CNN】深入浅出讲解卷积神经网络(介绍、结构、原理)

1、卷积神经网络的背景介绍 卷积神经网络(Convolutional Neural Networks, 简称CNN)是一种具有局部连接、权值共享等特点的深层前馈神经网络Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一,擅长处理图像特别是图像识别等相关机器学习问题,比如图像分类、目标检测、图像分割等各种视觉任务中都有显著的提升效果,是目前应用最广泛的模型之一。 卷积神经网络具有表征学习(representation learning)能力,能

程序星空实验室 10万+

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9055

CNN卷积神经网络(超详解析)

1、神经网络 首先了解神经网络,大家移步这俩篇博客,一篇为纯理论,一篇为实战加理论。 机器学习之神经网络学习及其模型 入门讲解:使用numpy实现简单的神经网络(BP算法) 2、卷积神经网络之层级结构 cs231n课程里给出了卷积神经网络各个层级结构,如下图 上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:...

weixin_44023658的博客 2万+

langchain入门学习笔记

langchain快速入门

1732

intel-VROC raid卡驱动 centos7.9

u盘进入系统,按e,在出现下面在quiet前面输入inst.dd initcall_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。进入系统,按e,在出现下面在quiet前面输入inst.dd inicll_blacklist=vmd_drv_init 后按Ctrl和x,开始引导。驱动完成后,在输入 c 回车, 引导过程开始,进入安装界面。输入1 ,选择这个ISO驱动文件里的rpm包。输入1 ,选择这个ISO驱动文件里的rpm包。vi编辑 /etc/default/grub。

dacming的博客 4542

非常全的CNN卷积神经网络整理

文章目录一、人的视觉原理二、卷积神经网络CNN简介:1. 简介2. 发展历史3. 应用4. 推荐文章(待更新)二、全连接神经网络的缺点及CNN解决的问题1. 全连接神经网络处理大尺寸图像明显的缺点2. CNN将复杂问题简化——将大量的参数降维成少量参数进行处理3. CNN保留图像特征4. CNN的三维体积神经元(3D volumes of neurons)三、卷积神经网络的层次结构1. 典型的CNN:2. 更为常见的CNN网络分层3.输入层(Input Layer)4. 卷积层1)数学上的卷积和机器学习中的

Liu Feng's Blog 4583

嵌入式STM32控制电梯面板

嵌入式STM32控制电梯面板 用点阵来显示电梯向上还是向下运动,用数码管来显示楼层数(由于灯阵显示楼层数比较困难故用数码管代替)。当按下对应的按钮,就可以去到对应层数,可上升可下降。 #include "stm32f10x.h" #include "stm32f10x_exti.h" #include "stm32f10x_it.h" #define uint unsigned int #define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10) #define

code_init_的博客 2111

CNN卷积神经网络介绍

1简介 1.1离散卷积 1.2池化 2卷积算法 2.1没有零填充,单位跨度 2.2零填充,跨步 2.2.1一半(相同)的填充 2.2.2全填充 2.3无零填充,非跨步 2.4零填充,非跨步 3池算术18 4转置卷积算法19 4.1卷积作为矩阵运算 4.2转置卷积 4.3无零填充,跨步,转置 4.4零填充,跨步,转置 4.4.1一半(相同)填充,转置 4.4.2全填充,转置 4.5无零填充,非跨步,...

GIS哼哈哈的博客 7756

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有:FairyGUI,VSCode代码环境涉及到了:LuaVSCode插件:EmmyLua在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能实现的,插件中我使用的是lua环境模板。导入编辑器的LuaAPI,文件可以在FairyGUI-Editor源码的插件目录中找到。接下来将通过功能来说明对应的API作用。

Aili_Xiao的博客 4499

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1963

机器学习系列(5):卷积神经网络CNN之--原理及python实现

机器学习系列(5):卷积神经网络CNN之–原理及Python实现 CNN原理解释: 计算机视觉 边缘检测 Padding 卷积步长 单卷积层 池化层 卷积神经网络示例 为什么选择CNN Python实现: 见文章内容 申明 本文原理解释及公式推导部分均由LSayhi完成,供学习参考,可传播;代码实现部分的框架由Coursera提供,由LSayhi完成,详细数据及代码可在gi...

LSayhi的博客 8437

osg点云加载与渲染

osg点云加载与渲染

cangqiongxiaoye的博客 821
上一篇: 【机器学习算法】10种常见机器学习算法+Python代码
下一篇: AI产品经理课程推荐
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值