卷积神经网络之基础知识

全连接网络的局限性

在全连接网络中,仅使用一个2828像素的小图片数据集就完成了分类任务。但在实际应用中要处理的图片像素一般都是1024,甚至更大,这么大的图片输入到全连接网络中后会有什么效果呢?我们可以分析一下。
如果只有两个量过隐藏层,每层各用了256个节点,则MNIST数据集所需要的参数是1024
1024256+256256+25610个w,再加上256+256+10个b。
1.图像变大导致色彩数变多,不好解决
如果换成1000像素?仅一层就需要1000
1000*256≈2亿个w,这只是灰度图,如果是RGB的真彩色图,再乘上3后约等于6亿。如果想得到更好的效果,再加几个隐藏层……可以想象,需要学习的参数量将是非常多的,不仅消耗大量的内存,同时也需要大量的运算,这显然不是我们想要的结果。
2.不便处理高维数据
对于比较复杂的高维数据,如果按照全连接的方法,则只能通过增加节点、增加层数的方式来解决。而增加节点引起参数过多的问题。因为由于隐藏层神经网络使用的是Sigmoid或Tanh激活函数,其反向传播的有效层数也只在4~6层左右。所以,层数再多只会使反向传播的修正值越来越小,网络无法训练,为此我们引入卷积神经网络。

理解卷积神经网络

卷积神经网络避免了对参数的过度依赖,相 比全连接神经网络,能更好地识别高维数据(即 超大图片)。它是什么样的一个东西呢? 先来理解一下sobel算子吧。
利用sobel算子可以将图片的轮廓显示出来。整个卷积过程如下:
(1)在外面补了一圈0,这个过程叫做 pading,目的是为了变换后生成同样大小的矩阵。
(2)将左图左上角的3×3矩阵中的每个元素分别与中间的3×3矩阵对应位置上的元素相 乘,然后再相加,这样得到的值作为右图的第一个元素。
(3)中间的3×3矩阵就是sobel算子。
(4)把左图中左上角的3×3矩阵向右移动 一个格,这可以理解为步长为1。
(5)将左图矩阵中的每个元素分别与中间 的3×3矩阵对应位置上的元素相乘然后进行加和 运算,算出的值填到右图的第二个元素里。
(6)一直重复上述操作,直到将右图中的值都填满,整个这个过程就叫做卷积。

sobel矩阵可以理解为卷积神经网络里的卷积核(也可以叫“滤波器”,filter),它里面的值也可以理解为权重w。这个变换后的图片,在卷积神经网络里可以成为feature map。
在这里插入图片描述
注意: 新生成的图片里面的每个像素值 并不能保证在0~256之间。对于在区间外的像素 点会导致灰度图无法显示,所以还需要做一次归 一化,然后每个值都乘以256,再将所有的值映射 到这个区间内。 归一化算法:x=(x-Min)/(Max-Min)。 其中,Max与Min为整体数据里的最大值和最 小值,x是当前要转换的像素值。归一化之后可以 保证每个x都在[0,1]的区间内。

网络结构

卷积神经网络的结构与全连接网络相比相比复杂得多。它的网络主要包括卷积层、池化层。细节又可以分为滤波器、步长、卷积操作、池化操作等。

网络结构描述

前面讲述的是一个基本原理,实际的卷积操 作会复杂一些,对于一幅图片一般会使用多个卷积核(滤波器),将它们统一放到卷积层里来操作,这一层中有几个滤波器,就会得出几个 feature map,接着还要经历一个池化层 (pooling),将生成的feature map缩小(降维)。下图为神经网络中一个标准的卷积操作组合。
在这里插入图片描述
该图中卷积层里面channel的个数代表卷积层 的深度。池化层中则只有一个滤波器(fileter),主要参数是尺寸大小(即步长大小)。
一个卷积神经网络里包括5部分——输入 层、若干个卷积操作和池化层结合的部分、全局 平均池化层、输出层:
·输入层:将每个像素代表一个特征节点输 入进来。
·卷积操作部分:由多个滤波器组合的卷积层。
·池化层:将卷积结果降维。
·全局平均池化层:对生成的feature map取全局平均值。
·输出层:需要分成几类,相应的就会有几个输出节点。每个输出节点都代表当前样本属于的该类型的概率。

卷积操作

前面采用sobel因子对图片的操作,可以理解成一次卷积操作。下面来系统讲讲卷积操作。卷积分为窄卷积、全卷积和同卷积。
在一一介绍这些卷积类型之前,首先介绍一 下步长的概念。

步长

步长是卷积操作的核心。通过步长的变换, 可以得到想要的不同类型的卷积操作。先以窄卷积为例,看下图。
在这里插入图片描述
上图中,5×5大小的矩阵代表图片,每个图 片右侧的3×3矩阵代表卷积核,最右侧的3×3矩阵 为计算完的结果feature map。 卷积操作仍然是将卷积核(filter)对应的图 片(image)中的矩阵数据一一相乘,再相加。第一行feature map中的第一个元素,是由 image块中前3行3列中的每个元素与filter中的对应 元素相乘再相加得到的 (4=1×1+1×0+1×1+0×0+1×1+1×0+0×1+0×0+1×1)。 步长(stride)表示卷积核在图片上移动的格数。

窄卷积

窄卷积(valid卷积),从字面上也可以很容 易理解,即生成的feature map比原来的原始图片 小,它的步长是可变的。假如滑动步长为S,原 始图片的维度为N1×N1,那么卷积核的大小为 N2×N2,卷积后的图像大小{[(N1-N2)/S]+1}×{[(N1-N2)/S]+1}。

同卷积

同卷积(same卷积),代表的意思是卷积后 的图片尺寸与原始图片的尺寸一样大,同卷积的 步长是固定的,滑动步长为1。一般操作时都要使 用padding技术(外围补一圈0,以确保生成的尺寸不变)。

全卷积

全卷积(full卷积),也叫反卷积,就是把原 始图片里的每个像素点都用卷积操作展开。如图 8-6所示,白色的块是原始图片,浅色的是卷积 核,深色的是正在卷积操作的像素点。反卷积操 作的过程中,同样需要对原有图片进行padding操 作,生成的结果会比原有的图片尺寸大。
在这里插入图片描述
全卷积的步长也是固定的,滑动步长为1, 假如原始图片的维度为N1×N1,那么卷积核的大小为N2×N2,卷积后的图像大小,即(N1+N2-1)×(N1+N2-1)
前面的窄卷积和同卷积都是卷积网络里常用 的技术,然而全卷积(full卷积)却相反,它更多 地用在反卷积网络中。

反向传播

因为反向传播在框架里已经封装好,不需要对其进行编码修改。
反向传播的核心步骤主要有两步:
(1).反向将误差传到前面一层。
(2).根据当前的误差对应的学习参数表达式,计算出其需要更新的差值。
对于第二步,与前面的反向求导是一样的,仍然使用链式求导法则,找到使误差最小化的梯度,再配合学习率算出更新的差值。将生成的feature map做一次padding后,与转置后的卷积核做一次卷积操作即可得到输入端的误差,从而实现误差的反向传递。

池化层

池化的主要目的是降维,即在保持原有特征 的基础上最大限度地将数组的维数变小。
池化的操作外表跟卷积很像,只是算法不同:
·卷积是将对应像素上的点相乘,然后再相加。
·池化中只关心滤波器的尺寸,不考虑内部的值。算法是,滤波器映射区域内的像素点取取 平均值或最大值。

池化步骤也有步长,这一点与卷积是一样的。
1.均值池化
这个很好理解,就是在图片上对应出滤波器 大小的区域,对里面的所有不为0的像素点取均 值。这种方法得到的特征数据会对背景信息更敏 感一些。
2.最大池化
同理,最大池化就是在图片上对应出滤波器 大小的区域,将里面的所有像素点取最大值。这 种方法得到的特征数据会对纹理特征的信息更敏感一些。
3.反向传播
池化的反向传播要比卷积容易理解。对于最 大池化,直接将其误差还原到对应的位置,其他用0填入;对于均值池化,则是将其误差全部填入 该像素对应的池化区域。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值