卷积神经网络入门笔记

卷积神经网络

1 人工神经网络

1.1 神经元

神经网络由大量神经元组成,神经元需要非线性的激活函数激活,从而进行非线性变换输出。两个神经元之间的连接代表加权值,称为权重(weight)。不同的激活函数和权重导致不同的输出。

img

基本是w*x + b的形式,其中

  • x1、x2表示输入的向量
  • w1、w2表示权重,几个输入就有几个权重
  • b是偏置bias
  • g(z)是激活函数,下面会细说
  • a是输出

假如你要去看电影,决定你是否去有两个因素x1、x2。

  • x1:是否有你喜欢的演员或者人物,x1 = 1代表有,反之没有
  • x2:是否有人陪你一起去看,x2 = 1代表有,反之没有

这样,决策模型为g(z) = g(w1*x1 + w2*x2 + b),g表示激活函数,b表示bias,即动态调整的偏置项

1.2 激活函数

激活函数的主要作用是改变之前数据的线性关系,如果网络中全部是线性变换,则多层网络可以通过矩阵变换,直接转换成一层神经网络。所以激活函数的存在,使得神经网络的“多层”有了实际的意义,使网络更加强大,增加网络的能力,使它可以学习复杂的事物,复杂的数据,以及表示输入输出之间非线性的复杂的任意函数映射。

​ 常用的有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。这里先简要介绍下最基础的sigmoid函数。

sigmoid的函数表达式如下

img

​ z是一个线性组合,比如z = b + w1*x1 + w2*x2 。通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1。

因此,sigmoid函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):

img

也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0

压缩至0到1有何用处呢?用处是这样一来便可以把激活函数看作一种“分类的概率”

比如激活函数的输出为0.9的话,便可以解释为90%的概率为正样本。

举个例子,如下图(图引自Stanford机器学习公开课)

img

z = b + w1*x1 + w2*x2,其中b为偏置项,假定取-30,w1、w2取20

  • 如果x1 = x2 = 0,z = -30,g趋近于0。
  • 如果二者有一个为0,一个为1,则z = -10,g趋近于0。
  • 如果x1 = x2 = 1,则z = 10,g趋近于1。

​ 换言之,只有x1和x2都取1时,g(z) = 1,判定为正样本;反之,判定为负样本,如此达到分类的目的

1.3 神经网络

将下图的这种单个神经元

img

组织在一起形成了神经网络

img

上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。

  • 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
  • 输出层(Output layer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。
  • 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。

​ 每一层可以有单个或者多个神经元构成,每一层的输出作为下一层的输入。以下图为例,隐藏层的三个神经元a1、a2、a3皆各自接受来自多个不同权重的输入(有几个输入就有几个权重),接着a1、a2、a3在各自不同权重的影响下成为输出层的输入,最终输出层输出结果。

img

上图(图引自Stanford机器学习公开课)中

​ 此外,输入层和隐藏层都存在一个偏置(bias unit),所以上图中也增加了偏置项:x0、a0。针对上图,有如下公式

img

其中

  • aij表示第j层第i个单元的激活函数或者神经元
  • Θ(j)表示第j层映射到第j+1层的控制函数的权重矩阵

此外,上文中讲的都是一层隐藏层,但实际中也有多层隐藏层的,即输入层和输出层中间夹着数层隐藏层,层和层之间是全连接的结构,同一层的神经元之间没有连接。

img

2 卷积神经网络的层级结构

如下图所示

img

上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车,那是什么车

左边是

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

中间是

  • CONV:卷积计算层,线性乘积 求和。
  • RELU:激励层,ReLU是激活函数的一种。
  • POOL:池化层,即取区域平均或最大。

右边是

  • FC:全连接层

这几个部分中,卷积计算层是CNN的核心,下文将重点阐述。

3 CNN之卷积计算层

3.1 如何识别

​ 简言之,当我们给定一个"X"的图案,计算机怎么识别这个图案就是“X”呢?一个可能的办法就是计算机存储一张标准的“X”图案,然后把需要识别的未知图案跟标准"X"图案进行比对,如果二者一致,则判定未知图案即是一个"X"图案。而且即便未知图案可能有一些平移或稍稍变形,依然能辨别出它是一个X图案。如此,CNN是把未知图案和标准X图案一个局部一个局部的对比,如下图所示

img

而未知图案的局部和标准X图案的局部一个一个比对时的计算过程,便是卷积操作。

卷积计算结果为1表示匹配,否则不匹配。

具体而言,为了确定一幅图像是包含有"X"还是"O",相当于我们需要判断它是否含有"X"或者"O",并且假设必须两者选其一,不是"X"就是"O"。

img

理想的情况就像下面这个样子:

img

标准的"X"和"O",字母位于图像的正中央,并且比例合适,无变形

对于计算机来说,只要图像稍稍有一点变化,不是标准的,那么要解决这个问题还是不是那么容易的:

img

在计算机的“视觉”中,一幅图看起来就像是一个二维的像素数组(可以想象成一个棋盘),每一个位置对应一个数字。例子中,像素值"1"代表白色,像素值"-1"代表黑色。

当比较两幅图的时候,如果有任何一个像素值不匹配,那么这两幅图就不匹配,至少对于计算机来说是这样的。对于这个例子,计算机认为上述两幅图中的白色像素除了中间的3*3的小方格里面是相同的,其他四个角上都不同,所以计算机会识别错误。

我们希望,对于那些仅仅只是做了一些像平移,缩放,旋转,微变形等简单变换的图像,计算机仍然能够识别出图中的"X"和"O"。就像下面这些情况,我们希望计算机依然能够很快并且很准的识别出来:

img

对于CNN来说,它是一块一块地来进行比对。它拿来比对的这个“小块”我们称之为Features(特征)。在两幅图中大致相同的位置找到一些粗糙的特征进行匹配,CNN能够更好的看到两幅图的相似性,相比起传统的整幅图逐一比对的方法。

img

每一个feature就像是一个小图(就是一个比较小的有值的二维数组)。不同的Feature匹配图像中不同的特征。在字母"X"的例子中,那些由对角线和交叉线组成的features基本上能够识别出大多数"X"所具有的重要特征。
img

这些features很有可能就是匹配任何含有字母"X"的图中字母X的四个角和它的中心。那么具体到底是怎么匹配的呢?如下(忽略左下和右下角的匹配):

img img img

其实这只是第一步,你知道了这些Features是怎么在原图上面进行匹配的。但是你还不知道在这里面究竟进行的是怎样的数学计算,比如这个下面3*3的小块到底干了什么?

img

其实,这里面的数学操作就是“卷积”操作。接下来,我们来了解下什么是卷积操作。

3.2 卷积

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter,也可以称为卷积核)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

这里插入卷积核的概念:

  • 它是一组元素(通常为权重)组成的小矩阵,用于对输入数据进行卷积操作。卷积神经网络通过不断地在输入数据上滑动卷积核,获取输入数据的特征,从而完成对输入数据的分析和处理。

    卷积核的大小一般为奇数,例如 3×3、5×5 等。当卷积核在输入数据上移动时,它会将自己覆盖的一块区域上的像素点值与卷积核中的权重进行乘积累加,得到一个卷积结果。这个结果就是在输入数据上的一个局部特征,也称为特征图。

  • 卷积核(Convolutional Kernel),也可以简称为Kernel。它一组权重元素组成的小矩阵,用于在卷积神经网络中执行卷积操作,从而探测输入数据的特征并提取特征信息。 卷积核其实与滤波矩阵和权重矩阵都比较类似,但并不完全等同。卷积核更多地是用于卷积神经网络中执行卷积操作的一种矩阵,而滤波矩阵和权重矩阵则是在噪声处理和网络连接方面使用的概念。

非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器(卷积核),即带着一组固定权重的神经元。多个滤波器叠加便成了卷积层。

img

img

中间滤波器filter与数据窗口做内积,其具体计算过程见上图右上角

3.3 图像上的卷积

​ 在卷积神经网络里,卷积核其实就是一个过滤器,但在深度学习里,它不做反转,而是直接执行逐元素的乘法和加法,我们把这个又称为互相关,在深度学习里称为卷积

那为什么在图像处理上,需要进行卷积处理呢?

​ 上个世纪科学家就发现,视觉皮层的很多神经元都有一个小的局部感受野,神经元只对有限区域的感受野上的刺激物做出反应。不同的感受野可以重叠,他们共同铺满整个视野。并且发现,一些神经元仅仅对横线有反应,有一些神经元对其他方向的线条有反应,有些神经元的感受野比较大。因此,高级别的神经元的刺激是源于相邻低级别神经元的反应。

​ 利用这个观点,经过不断的努力,逐渐发展成了现在的卷积神经网络。通过卷积核提取图像的局部特征,生成一个个神经元,再经过深层的连接,就构建出了卷积神经网络。

在下图对应的计算过程中,输入是一定区域大小(width*height)的数据,和滤波器filter(带着一组固定权重的神经元)做内积后等到新的二维数据。

具体来说,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的矩阵),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。

​ 如下图

img

3.3 GIF动态卷积图

在CNN中,滤波器filter对局部输入数据进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。这个过程中,有这么几个参数:

  • 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
  • 步长stride:决定滑动多少步可以到边缘。
  • 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。

这里写图片描述

对应的有

  • 卷积核大小:卷积核定义了卷积的大小范围,在网络中代表感受野的大小,二维卷积核最常见的就是 3*3 的卷积核。一般情况下,卷积核越大,感受野越大,看到的图片信息越多,所获得的全局特征越好。但大的卷积核会导致计算量的暴增,计算性能也会降低。

  • 步长:卷积核的步长代表提取的精度, 步长定义了当卷积核在图像上面进行卷积操作的时候,每次卷积跨越的长度。对于size为2的卷积核,如果step为1,那么相邻步感受野之间就会有重复区域;如果step为2,那么相邻感受野不会重复,也不会有覆盖不到的地方;如果step为3,那么相邻步感受野之间会有一道大小为1颗像素的缝隙,从某种程度来说,这样就遗漏了原图的信息。

  • 填充:卷积核与图像尺寸不匹配,会造成了卷积后的图片和卷积前的图片尺寸不一致,为了避免这种情况,需要先对原始图片做边界填充处理。

如下gif 卷积动图

img
  • 两个神经元,即depth=2,也就是有两个filter
  • 数据窗口每次移动连个步长,即stride = 2
  • zero - padding = 1

​ 分别以两个滤波器filter为轴滑动数组进行卷积计算,得到两组不同的结果。

  • 卷积过程:R/G/B三个通道的位移矩阵与权重矩阵相乘后结果相加,最后加上偏置值b得到输出矩阵的一个元素

  • 由于有两个filter,所以要计算两次,第一次对应w0和b0,第二次对应w1和b1

    结合上文的内容后,理解这个动图已经不是很困难的事情:

  • 左边是输入(7*7*3中,7*7代表图像的像素/长宽,3代表R、G、B 三个颜色通道)

  • 中间部分是两个不同的滤波器Filter w0、Filter w1。

  • 最右边则是两个不同的输出矩阵

随着左边数据窗口的平移滑动,滤波器Filter w0 / Filter w1对不同的局部数据卷积计算。

  1. 值得一提的是:左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是CNN中的局部感知机制(又称为局部感受野)。

打个比方,滤波器就像一双眼睛,人类视角有限,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你大脑接收不过来。当然,即便是看局部,针对局部里的信息人类双眼也是有偏重、偏好的。比如人群中看美女,对脸、胸、腿是重点关注,所以这3个输入的权重相对较大。

  1. 与此同时,数据窗口滑动,导致输入在变化,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的权重)是固定不变的,这个权重不变即所谓的CNN中的参数(权重)共享机制。

再打个比方,某人环游全世界,所看到的信息在变,但采集信息的双眼不变。不同人的双眼 看同一个局部信息所感受到的不同,即一千个读者有一千个哈姆雷特,所以不同的滤波器就像不同的双眼,不同的人有着不同的反馈结果。

4 激励层与池化层

4.1 ReLU激励层

之前介绍的激活函数sigmoid,但实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。
咋办呢,可以尝试另外一个激活函数:ReLU,其图形表示如下

img

ReLU的优点是收敛快,求梯度简单(直线的斜率要么是0,要么是1)。

4.2 池化层(pooling)

​ 池化,简言之,即取区域平均或最大

通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。目的是为了减少特征图

img

上图是取区域最大,即上图左边部分中 左上角2x2的矩阵中6最大,右上角矩阵中8最大,左下角矩阵中3最大,右下角矩阵中4最大,所以得到上图右边部分的结果:6 8 3 4。

全连接层

全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现。

最后一层全连接层的输出值被传递给一个输出,可以采用softmax逻辑回归(softmax regression)进行 分类,该层也可 称为 softmax层(softmax layer)。它的主要作用是将一个实数向量转化为概率分布向量,方便进行分类。

因为传统的网络我们的输出都是分类,也就是几个类别的概率甚至就是一个数–类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。但是全连接的参数实在是太多了,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。

也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。

5 后记

​ 至此,对于CNN的介绍就结束了,其核心在于对于卷积运算的理解,CNN从广义上可以分为输入层、卷积层、激励层、池化层、全连接层、输出层。卷积相当于做特征提取,池化相当于做压缩或者说降维。

​ 卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使我们的前馈函数更加有效率,并减少了大量参数。

​ 卷积神经网络是一种带有卷积结构的深度神经网络,卷积结构可以减少深层网络占用的内存量,其三个关键的操作,其一是局部感受野,其二是权值共享,其三是pooling层,有效的减少了网络的参数个数,缓解了模型的过拟合问题。

​ 最后整理了一下关于CNN的工作原理。

​ CNN(卷积神经网络)是一种广泛应用于图像分类、目标检测、语音识别等任务的深度学习模型,其主要原理包括以下几个方面:

  1. 卷积层(Convolutional layers):卷积层可以从输入数据中学习到不同的特征,类似于特征提取器的作用。卷积操作主要由卷积核和步长组成,卷积核在输入数据上进行滑动,在每个位置上与输入数据进行乘积,得到一个子区域的特征,这些特征随后被记入特征图中,这个过程可以提取出输入数据的各种局部特征。
  2. 激活函数(Activation functions):激活函数在卷积操作后被引入,用于在网络中加入非线性因素,使得卷积层输出的特征更为复杂和鲁棒。
  3. 池化层(Pooling layers):池化层主要作用是将卷积层输出的特征图进行降维,提取最显著的特征并减少计算量,一般包括最大池化和平均池化两种类型。
  4. 全连接层(Fully connected layers):最后一层通常是全连接层,将特征图转换为一维向量通过全连接层实现输出,实现对特征的汇总和分类。
  5. 卷积神经网络的训练:CNN的训练使用的是反向传播算法(BP),通过最小化损失函数来优化网络的各个参数,从而提高模型的准确性。

​ 以上就是卷积神经网络的主要原理,CNN是一种被广泛应用的机器学习模型,在图像分类、目标检测、语音识别等领域中有着重要应用。

最后,如果对你有帮助的话,不要忘记点赞关注哦(〃‘▽’〃)

文章参考资料来源如下,侵权必删
http://t.csdnimg.cn/CRhaF
http://t.csdnimg.cn/Yuz6u

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值