深度学习笔记——卷积神经网络的入门与介绍

5 篇文章 0 订阅
1 篇文章 0 订阅

1.前言

CNN功能的总体概述:

我们希望电脑能够区分所有的图像,并找出且能识别实际案例(如:识别狗狗或识别小猫)的独特功能。当我们看一只狗的照片时,如果图片具有可识别的特征,例如爪子或四条腿,我们可以对其进行分类。以类似的方式,计算机能够通过寻找诸如边缘和曲线的低级特征,然后通过一系列卷积层来构建更抽象的概念来执行图像分类。举个形象的例子,计算机通过图像得出了的独特特征有:翅膀等,那么很容易我们就可以得知了,这个图像就是鸟儿。

CNN产生的原因:

当使用全连接的神经网络时,因为相邻两层之间的神经元都是有边相连的,当输入层的特征纬度非常高时(譬如图片),全连接网络需要被训练的参数就会非常多(参数太多,训练缓慢),CNN可以通过训练少量的参数从而进行特征提取。

CNN的优点:

1.相邻两层神经元部分相连。2.且同一层神经元的w(权重)和b(偏移)是共享的。

CNN总体工作原理:

给出已分类好的数据进行训练,训练一次后,再把未分类的数据进行分类,(A)根据预测值和真实值之间的损失值进行反向传播,从而更新参数,再次对未分类好的数据进行分类,重复A步骤,直至损失值最小,然后再输出层输出结果

 

2 神经元

我们知道神经元的主要组成成分:细胞核,树突,轴突,轴突末梢。一个神经元具有多个树突,主要用来接收信息;而轴突只有一条,轴突尾端有许多轴突末梢,可以给其他神经元传递信息。于是根据生物神经元的结构,人们发明了数学上神经元的原型

 

上述简单的模型可以理解为一个感知器模型,该模型可以理解为一个根据不同因素,以及各个因素所占的重要程度而做决策的模型

如:这周末北京有一草莓音乐节,那去不去呢?决定你是否去有二个因素,这二个因素可以对应二个输入,分别用x1、x2表示。此外,这二个因素对做决策的影响程度不一样,各自的影响程度用权重w1、w2表示。一般来说,音乐节的演唱嘉宾会非常影响你去不去,唱得好的前提下 即便没人陪同都可忍受,但如果唱得不好还不如你上台唱呢。所以,我们可以如下表示:

 这样,咱们的决策模型便建立起来了

这里的b可以理解成 为更好达到目标而做调整的偏置项。

一开始为了简单,人们把激活函数定义成一个线性函数,即对于结果做一个线性变化,比如一个简单的线性激活函数是g(z) = z,输出都是输入的线性变换。后来实际应用中发现,线性激活函数太过局限,于是人们引入了非线性激活函数。

 

3.神经网络

讲完神经元,我们就来讲一下简单的神经网络,一下是单个神经元:

当多个神经元组织在一起,便形成了神经网络,下图是一个三层的神经网络:

最左端为输入层,中间为隐藏层,最右端为输出层。

输入层:接收讯息的输入,一般来讲,大多都是非线性的。输入的讯息又称为输入向量。

隐藏层:讯息的加权,激活,传输。(可有多个)

输出层:将经过处理的讯息输出,得出结果,输出的讯息又称为输出向量。

 

同时,每一层都可能由单个或多个神经元组成,每一层的输出将会作为下一层的输入数据。比如下图中间隐藏层来说,隐藏层的3个神经元a1、a2、a3皆各自接受来自多个不同权重的输入(因为有x1、x2、x3这三个输入,所以a1 a2 a3都会接受x1 x2 x3各自分别赋予的权重,即几个输入则几个权重),接着,a1、a2、a3又在自身各自不同权重的影响下 成为的输出层的输入,最终由输出层输出最终结果。

 

 

4.卷积神经网络之层级结构

从上面这张图可以看出,CNN网络要做的是,根据输入图片来判断这就是车还是马等?

最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。

而上图中

CONV:卷积层

RELU:激励层

POOL:池化层

FC:全连接层

 

——————————————划重点了!!—————————————

 

4.1卷积层

1.首先我们要知道,形象点来说,CNN怎么进行识别的?

当我们给定一个"X"的图案,计算机怎么识别这个图案就是“X”呢?有可能就是计算机已经存储了一张图案也为“X”的图像A,然后把需要识别的未知图像B和图像A进行局部比对,通过局部的比对的拟合率,来得出结论,这图究竟是不是"X"?

 

2.截下来我们要知道,什么是卷积:

对图像和滤波矩阵(或者说是卷积核,滤波器)进行内积求和的方法就称为卷积

PS:这里的滤波矩阵可以看成是一组固定的权重,同时根据图像的通道数,又可以设立多个滤波器,而多个滤波器又可以称为卷积层

上图中,中间的矩阵就是滤波器,而右上角的计算过程就称为内积求和,整个过程就是卷积的操作了,因此卷积神经网络的名称也可以说是这么得来的。

 

3.卷积操作详解:

a.填充:

问题引出:假设我们输入的图像大小是n x n,滤波器的大小是f x f,那么输出的图片大小是(n-f+1)x(n-f+1),这样看来图片的大小变小了,而且每次卷积运算后原始图片的角落、边缘区像素点在输出中采用较少,输出图片丢失边缘位置的很多信息

问题解决:

为了解决这些问题,可以在进行卷积操作前,对原始图片在边界上进行填充(Padding),以增加矩阵的大小。通常将 0 作为填充值

设每个方向扩展像素点数量为 p,则填充后原始图片的大小为 **(n+2p)×(n+2p),滤波器大小保持f×f不变,则输出图片大小为(n+2p−f+1)×(n+2p−f+1)。

因此,在进行卷积运算时,我们有两种选择:

  • Valid 卷积:不填充,直接卷积。结果大小为 (n−f+1)×(n−f+1)
  • Same 卷积:进行填充,并使得卷积后结果大小与输入一致,这样 p=f−1)/2。

在计算机视觉领域,f通常为奇数。原因包括 Same 卷积中 p=f−12 能得到自然数结果,并且滤波器有一个便于表示其所在位置的中心点

---------------------------------以上输出图片大小默认考虑步长为1-------------------------------------

 

b.卷积步长:

卷积过程中,有时需要通过填充来避免信息损失,有时也需要通过设置步长(Stride)来压缩一部分信息。

步长表示滤波器在原始图片的水平方向和垂直方向上每次移动的距离。之前,步长被默认为 1。而如果我们设置步长为 2,则卷积过程如下图所示:

设步长为 s,填充长度为 p,输入图片大小为 n×n,滤波器大小为 f×f,则卷积后图片的尺寸为:

⌊(n+2p−f)/s+1⌋×⌊(n+2p−f)/s+1⌋

注意公式中有一个向下取整的符号,用于处理商不为整数的情况。向下取整反映着当取原始矩阵的图示蓝框完全包括在图像内部时,才对它进行运算。

目前为止我们学习的“卷积”实际上被称为互相关(cross-correlation),而非数学意义上的卷积。真正的卷积操作在做元素乘积求和之前,要将滤波器沿水平和垂直轴翻转(相当于

旋转 180 度)。因为这种翻转对一般为水平或垂直对称的滤波器影响不大,按照机器学习的惯例,我们通常不进行翻转操作,在简化代码的同时使神经网络能够正常工作。

 

补充知识点:

1.灰度级指黑白显示器中显示像素点的亮暗差别,在彩色显示器中表现为颜色的不同,灰度级越多,图像层次越清楚逼真。

2.灰度级取决于每个像素对应的刷新存储单元的位数和显示器本身的性能。如每个象素的颜色用16位 [2]  二进制数表示,我们就叫它16位图,它可以表达2的16次方即65536种颜色。如每一个象素采用24位二进制数表示,我们就叫它24位图,它可以表达2的24次方即16777216种颜色。

3.灰度就是没有色彩,RGB色彩分量全部相等。如果是一个二值灰度图象,它的象素值只能为0或1,我们说它的灰度级为2

4.灰度值只是表征单色的亮暗程度

5.在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。

6.单通道图:

俗称灰度图,每个像素点只能有有一个值表示颜色,它的像素值在0到255之间,0是

黑色,255是白色,中间值是一些不同等级的灰色。(也有3通道的灰度图,3通道灰

度图只有一个通道有值,其他两个通道的值都是零)。

7.三通道图:

每个像素点都有3个值表示 ,所以就是3通道。也有4通道的图。

例如RGB图片即为三通道图片,RGB色彩模式是工业界的一种颜色标准,是通过对

红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样

的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视

力所能感知的所有颜色,是目前运用最广的颜色系统之一。总之,每一个点由三个值

表示。

8.RGB图像之灰度级和通道的理解

https://blog.csdn.net/silence2015/article/details/53789748

关于图像三通道和单通道的解释

https://blog.csdn.net/qq_32211827/article/details/56854985

 

c.高维卷积

如果我们想要对三通道的 RGB 图片进行卷积运算,那么其对应的滤波器组(卷积层)也同样是三通道的。过程是将每个单通道(R,G,B)与对应的滤波器进行卷积运算求和,然后再将三个通道的和相加,将 27 个乘积的和作为输出图片的一个像素值。

不同通道的滤波器可以不相同。例如只检测 R 通道的垂直边缘,G 通道和 B 通道不进行边缘检测,则 G 通道和 B 通道的滤波器全部置零。当输入有特定的高、宽和通道数时,滤波器可以有不同的高和宽,但通道数必须和输入一致

如果想同时检测垂直和水平边缘,或者更多的边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。设输入图片的尺寸为 n×n×nc(nc为通道数),滤波器尺寸为 f×f×nc,则卷积后的输出图片尺寸为 (n−f+1)×(n−f+1)×n'c,n'c为滤波器组的个数。

 

PS:卷积层中的每个卷积核,通过卷积过程都会得到一个特征举证,最后我们把对应位置的元素进行求和,最终只得到一个特征举证

 

 

4.图像上的卷积:

在下图对应的计算过程中,输入是一定区域大小(width*height)的数据,和滤波器filter(带着一组固定权重的神经元)做内积后等到新的二维数据。具体来说,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。

 

也就是,这个核对图像进行操作,相当于对图像进行了低通滤波。

Ps:所谓低通滤波,实际就是个过滤器,给低频信号进去,把高频信号截断。

扩展来讲,对二维图像的滤波操作可以写成卷积,比如常见的高斯滤波、拉普拉斯滤波(算子)等。

滤波器跟卷积神经网络有什么关系呢。不如我们预想一个识别问题:我们要识别图像中的某种特定曲线,也就是说,这个滤波器要对这种曲线有很高的输出,对其他形状则输出很低,这也就像是神经元的激活。

我们设计的滤波器和想要识别的曲线如下:

假设上面的核(滤波器)按照卷积顺序沿着下图移动:

 

那么当它移动到上面的位置时,按照矩阵操作,将这个区域的图像像素值与滤波器相乘,我们得到一个很大的值(6600):

而当这个滤波器移动到其他区域时,我们得到一个相对很小的值:

如此,我们对整个原图进行一次卷积,得到的结果中,在那个特定曲线和周边区域,值就很高,在其他区域,值相对低。这就是一张激活图。对应的高值区域就是我们所要检测曲线的位置。

在训练卷积审计网络(CNN)的某一层卷积时,我们实际上是在训练一系列的滤波器(filter)。比如,对于一个32x32x3(宽32像素x高32像素xRGB三通道)的图像,如果我们在CNN的第一层卷积定义训练12个滤波器组(卷积层),那就这一层的输出便是32X32X12.按照不同的任务,我们可以对这个输出做进一步的处理,这包括激活函数,池化,全连接等。

简单来说,训练CNN在相当意义上是在训练每一层卷积层的滤波器组。让这些滤波器组对特定的模式有高的激活,以达到CNN网络的分类/检测等目的。

<Fig. 一个实际CNN(AlexNet)第一个卷积层的滤波器>

卷积神经网络的第一层卷积的滤波器用来检测低阶特征,比如边、角、曲线等。随着卷积层的增加,对应滤波器检测的特征就更加复杂(理性情况下,也是我们想要的情况)。比如第二层卷积的输入实际上是第一层的输出(滤波器激活图),这一层的滤波器便是用来检测低价特征的组合等情况(半圆、四边形等),如此累积,以检测越来越复杂的特征。实际上,我们的人类大脑的视觉信息处理也遵循这样的低阶特征到高阶特征的模式(Owl of Minerva:为什么无彩色系(黑白灰色)在色彩搭配中可以和谐地与任何彩色搭配?)。最后一层的滤波器按照训练CNN目的的不同,可能是在检测到人脸、手写字体等时候激活[1]。

所以,在相当程度上,构建卷积神经网络的任务就在于构建这些滤波器。也就是,将这些滤波器变成这样(改变滤波器矩阵的值,也就是Weight)的——能识别特定的特征。这个过程叫做训练。

在训练开始之时,卷积层的滤波器是完全随机的,它们不会对任何特征激活(不能检测任何特征)。这就像刚出生的孩子,TA不知道什么是人脸、什么是狗,什么是上下左右。TA需要学习才知道这些概念,也就是通过接触人脸、狗、上下左右,并被告知这些东西分别是人脸、狗、上下左右。然后TA才能在头脑中记住这些概念,并在之后的某一次见到之后能准确的给出结果。

 

根据前言,我们知道,CNN网络是非全连接的神经网络,使用原因如下:

在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。就跟辟邪剑谱似的,普通人练得很挫,一旦自宫后内力变强剑法变快,就变的很牛了。

 

5.局部感知:

卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。

在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的万分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

 

6.参数共享

但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。

怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8x8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

如下图所示,展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

7.多卷积核

上面所述只有100个参数时,表明只有1个10*10的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:

上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。

下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。

所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。

 

4.2激活层

在每个卷积层的后面,就是常规的应用非线性层(或激活层)。这一层的目的是非线性地引入一个系统,这个系统基本上是在转换层一直计算线性操作(只是元素方式的乘法和加法运算)。

在之前,一直用的是非线性函数,如tanh和sigmoid,但研究人员发现ReLU层的效率远远更好,这是因为在对精度没有产生显著不同的情况下,网络能训练的更快(因为计算效率更高)。它也有助于缓和消失梯度的麻烦,这是一个问题,因为较低层的网络训练是非常缓慢的,因为在这些层里梯度呈指数级别的下降层(解释这个问题可能超出了本文的范围,点击这里这里来查看具体的解释和描述)。ReLU层调用函数f(x)= max(0,x)来提供输入量的所有值。基本上来说,这一层刚好改变所有的负激活为0。这一层在不影响转换层的接受域的情况下,提高了模型和整个网络的非线性的属性。

 

如果输入变化很小,导致输出结构发生截然不同的结果,这种情况是我们不希望看到的,为了模拟更细微的变化,输入和输出数值不只是0到1,可以是0和1之间的任何数,

激活函数是用来加入非线性因素的,因为线性模型的表达力不够 

这句话字面的意思很容易理解,但是在具体处理图像的时候是什么情况呢?我们知道在神经网络中,对于图像,我们主要采用了卷积的方式来处理,也就是对每个像素点赋予一个权值,这个操作显然就是线性的。但是对于我们样本来说,不一定是线性可分的,为了解决这个问题,我们可以进行线性变化,或者我们引入非线性因素,解决线性模型所不能解决的问题。 

这里插一句,来比较一下上面的那些激活函数,因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的,运算特征是不断进行循环计算,所以在每代循环过程中,每个神经元的值也是在不断变化的。 

这就导致了tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来,但有是,在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了。 

还有一个东西要注意,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,否则激活后的值都会进入平坦区,使隐层的输出全部趋同,但是 ReLU 并不需要输入归一化来防止它们达到饱和。

构建稀疏矩阵,也就是稀疏性,这个特性可以去除数据中的冗余,最大可能保留数据的特征,也就是大多数为0的稀疏矩阵来表示。其实这个特性主要是对于Relu,它就是取的max(0,x),因为神经网络是不断反复计算,实际上变成了它在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征,结果因为稀疏特性的存在,反而这种方法变得运算得又快效果又好了。所以我们可以看到目前大部分的卷积神经网络中,基本上都是采用了ReLU 函数。

常用的激活函数 

激活函数应该具有的性质: 

(1)非线性。线性激活层对于深层神经网络没有作用,因为其作用以后仍然是输入的各种线性变换。。 

(2)连续可微。梯度下降法的要求。 

(3)范围最好不饱和,当有饱和的区间段时,若系统优化进入到该段,梯度近似为0,网络的学习就会停止。 

(4)单调性,当激活函数是单调时,单层神经网络的误差函数是凸的,好优化。 

(5)在原点处近似线性,这样当权值初始化为接近0的随机值时,网络可以学习的较快,不用可以调节网络的初始值。 

目前常用的激活函数都只拥有上述性质的部分,没有一个拥有全部的~~

  • Sigmoid函数 

目前已被淘汰 

缺点: 

∙ 饱和时梯度值非常小。由于BP算法反向传播的时候后层的梯度是以乘性方式传递到前层,因此当层数比较多的时候,传到前层的梯度就会非常小,网络权值得不到有效的更新,即梯度耗散。如果该层的权值初始化使得f(x) 处于饱和状态时,网络基本上权值无法更新。 

∙ 输出值不是以0为中心值。

  • Tanh函数 

其中σ(x) 为sigmoid函数,仍然具有饱和的问题。

  • ReLU函数 

Alex在2012年提出的一种新的激活函数。该函数的提出很大程度的解决了BP算法在优化深层神经网络时的梯度耗散问题 

 

优点: 

∙ x>0 时,梯度恒为1,无梯度耗散问题,收敛快; 

∙ 增大了网络的稀疏性。当x<0 时,该层的输出为0,训练完成后为0的神经元越多,稀疏性越大,提取出来的特征就约具有代表性,泛化能力越强。即得到同样的效果,真正起作用的神经元越少,网络的泛化性能越好 

∙ 运算量很小; 

缺点: 

如果后层的某一个梯度特别大,导致W更新以后变得特别大,导致该层的输入<0,输出为0,这时该层就会‘die’,没有更新。当学习率比较大时可能会有40%的神经元都会在训练开始就‘die’,因此需要对学习率进行一个好的设置。 

由优缺点可知max(0,x) 函数为一个双刃剑,既可以形成网络的稀疏性,也可能造成有很多永远处于‘die’的神经元,需要tradeoff。

  • Leaky ReLU函数 

 

改善了ReLU的死亡特性,但是也同时损失了一部分稀疏性,且增加了一个超参数,目前来说其好处不太明确

  • Maxout函数 

泛化了ReLU和Leaky ReLU,改善了死亡特性,但是同样损失了部分稀疏性,每个非线性函数增加了两倍的参数

真实使用的时候最常用的还是ReLU函数,注意学习率的设置以及死亡节点所占的比例即可

 

4.3池化层(DOWN POOLING)

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

Ps:上图:

所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。

所谓欠拟合(under-fitting)和上述形成对比,也就是说在训练样本和测试数据样本中都表现不佳。

 

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

 

 

4.4完全连接层(FULL CONNECT)

现在我们可以检测到这些高级特征,接下来就是一个完全连接的层。该层基本上接收一个输入卷(volume)(无论是在其前面的conv或ReLU或池层的输出),并输出N维向量,其中N是程序必须选择的类的数量。例如,如果你想要一个数字分类程序,N将是10,因为有10位数字。该N维向量中的每个数字表示某一类的概率。例如,如果用于数字分类程序的结果向量是[0,1,1,75,0,0 ,0,0,0,05],则这表示图像为1的概率为10%,10%的概率为图像是2,图像为3的概率为75%,图像为9的概率为5%。(:还有其他方式可以表示输出,但我只是显示softmax方法。)

这个完全连接层可以查看上一层的输出(表示高级特征的激活图),并确定与特定类最相关的特征。例如,如果程序预测某些图像是狗,则在激活图中将具有高值,这些图表示诸如爪或四条腿等高级特征。类似地,如果程序预测某些图像是鸟,它将具有高值的激活图,代表高级特征,如翅膀或喙等。完全连接层最后输出的是一个概率。

 

 

5.训练和反向传播

这是我有意没有提到的神经网络的另一个方面,它可能是最重要的部分。第一个转换层中的滤波器如何查找边和曲线?完全连接层如何看激活图?每个层中的滤波器如何知道这是什么值?计算机能够调整其滤波器值(或权重)的方式是通过称为反向传播的训练过程。

在进行反向传播之前,我们必须先退后一步,谈一谈神经网络为了工作需要什么。现在我们都出生了,我们不知道什么是猫或狗或鸟。以类似的方式,在CNN启动之前,权重或滤波器值被随机化。过滤器不知道如何寻找边缘和曲线。然而,随着年龄的增长,我们的父母和老师向我们展示了不同的图片,并给了我们相应的标签。给予图像和标签其实就是CNN的训练过程。我们有一个训练集,有成千上万的狗,猫和鸟的图像,而且每个图像都有一个标签。

回到backprop(反向传播)

反向传播可以分为四个不同的部分:正向传递,损失函数,后向传递和权重更新。在我们的第一个训练中,由于所有权重或滤波器值都被随机初始化,所以输出可能会像[.1 .1 .1 .1 .1 .1 .1 .1 .1]。具有当前权重的网络不能寻找那些低级特征,因此不能对分类有什么合理的结论。记住,我们现在正在使用的是训练数据,该数据同时具有图像和标签。例如,输入的第一个训练图像为3,图像的标签为[0 0 0 1 0 0 0 0 0 0]。损失函数可以以许多不同的方式定义,但常见的是MSE(均方误差),它是½倍(实际预测)平方。

现在,我们想要达到预测标签(ConvNet的输出)与训练标签相同的点(这意味着我们的网络获得了预测能力)。为了达到目的,我们要尽量减少损失量。将其视为微积分中的优化问题,我们希望了解哪些输入直接地导致了网络的丢失。

现在,我们想要做的是执行一个向后传递的网络,这是决定哪些权重有助于损失,并找到调整方式,以使损失减少。这是权重更新。这时我们把所有权重和更新,以便它们沿梯度的相反方向改变。

向前传递>损失函数>向后传递>参数更新是一个训练迭代。该程序将对每组训练图像(通常称为批次)重复此过程以进行固定次数的迭代。一旦完成了最后一个训练示例的参数更新,网络应该被训练得很好,以保证层的权重得到调整。

 

 

6.测试

最后,要看我们的CNN是否有效,我们有一套不同的图像和标签,并通过CNN传递图像。我们将输出与地面事实进行比较,看看我们的网络是否正常工作!

7.参考文献

入门篇:卷积神经网络指南(一):https://yq.aliyun.com/articles/231697?spm=a2c41.11181499.0.0

V_JULY_v:https://blog.csdn.net/v_JULY_v/article/details/51812459

阿里云云栖区:https://blog.csdn.net/yunqiinsight/article/details/79653237

雨石:https://blog.csdn.net/stdcoutzyx/article/details/41596663

Owl of Minervahttps://www.zhihu.com/question/39022858

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值