CNN简单介绍

目录

简单介绍

卷积层

计算

参数共享

边缘填充

输出结构的计算

激活函数

池化层

网络结构

整体构成

AlexNet

VGGNet


简单介绍

卷积神经网络是一种带有卷积结构的深度神经网络,主要组成为:输入、卷积层、激活函数、池化层、全连接层与输出。

与普通的神经网络不一样,卷积神经网络引入了卷积核(filter)的概念。

普通神经网络,对于输入的每一个像素都有一个参数来提取该像素点的特征,当输入图片的像素点较少、神经元设置不多时训练速度尚可,但当输入数据较大,神经元数量较多时,需要维护的参数数量级是十分庞大的,需要消耗大量的算力且易造成过拟合。

而卷积神经网络,通过引入卷积核,每次对于一片像素点进行特征提取,且实现了参数共享,有效的减少了网络的参数个数,缓解了模型的过拟合问题。

卷积层

计算

通过卷积运算我们可以提取出图像的特征,卷积运算为图像与卷积核进行内积然后加上偏置值:

如上图所示,左侧为输入图像(蓝色)7x7x3,卷积核(红色)设置为3x3x3,其中卷积核的深度必须与输入图像的深度相同。同一深度的图像蓝色区域与卷积核进行内积操作(对应位置数字相乘,然后全部结果相加),全部深度的内积加起来后加上偏置值b得到一个特征值(此处为三个矩阵的内积加起来)。随后卷积核在图像上进行滑动,直至滑动过一整张图,这里滑动的步长为2:

当一个卷积核遍历完输入图像时,我们就得到了一张3x3的特征值输出,但是实际上这个特征值的量是远远不够的,因此卷积神经网络采用了多卷积核的操作来解决这个问题,若卷积层设置了n个卷积核,该卷积层的输出就是3x3xn(本例子),一般来说,卷积核普遍设置为64,128,256,512。

参数共享

卷积神经网络通过卷积核完成了参数共享,7x7x3的输入通过3x3x3的卷积核得到了3x3x1的特征,这个过程中输入图像的权重全都是这一个卷积核的,参数都是相同的。

对于普通的神经网络,假设中间有128个神经元,输入为28x28x3,那么权重参数的数量应为28x28x3x128=301056个,若为卷积神经网络,设有64个3x3x3的卷积核,那么权重参数的数量为3x3x3x64=1728,可以明显的看到卷积神经网络的参数数量少了好几个数量级,减少了训练算力的需求,缓解了模型的过拟合问题。

边缘填充

通过让卷积核在图像上滑动一遍可以感知到,位于图像中间部分的像素值的提取次数,要明显对于边缘部分的像素值,会导致边缘的重要性不可避免的下降,这对于模型的训练效果会造成不利的影响。

因此,为了提高公平性,需要在图像边缘加上n圈0(+padn),使真正的像素值都成为中间像素值,0在参与内积计算时,不会对内积结果造成影响(0*权重=0,和+0不变)。

输出结构的计算

对于卷积输出的高和宽,有以下的计算公式:

W:高度; H:宽度; D:深度;

filter个数:K; filter大小:F; 步长:S; 边缘填充:P;

W2=(W1-F+2P)/S + 1

H2=(H1-F+2P)/S + 1

D2=K

如上图,原本的输入是32x32x3,第一层卷积层的卷积核为5x5x3,共6个,因此输出为28x28x6。第二层的卷积核为5x5x6,共10个,因此输出为24x24x10。

激活函数

在神经网络中,各层的权重其实就是多个矩阵,整个正向传播的过程就是输入矩阵与后面的各个矩阵相乘的过程,但是不管输入矩阵与多少个矩阵相乘,其实只相当于乘了一个矩阵,即不管网络有多少层,其实只相当于一层。

因此我们需要在每次特征提取后让结果经过一次激活函数,激活函数为非线性函数,通过引入激活函数,增加了神经网络模型的非线性,常用的激活函数有sigmoid激活函数、ReLU激活函数等。

池化层

池化层的意义在于数据的压缩,对于常规的神经网络模型的训练来说,输入往往是很大的,因此训练过程中对算力的要求很大。此外,也有一些模型需要在短时间内给出结果。因此为了优化数据过大的问题,加入了池化层。

池化层的操作就是从一片像素点中提出一个像素点,以此达到压缩的目的。主要有两种池化方式,平均值池化和最大值池化,前者就是对于一片像素点求平均值,后者就是直接取一片像素点中的最大值。目前平均值池化使用的次数已经不多了,因为一般来说特征值越大,特征越重要,因此一般使用最大值池化。

网络结构

整体构成

整个卷积神经网络的构成为:输入层→若干卷积层(带激活函数)→池化层→若干卷积层(带激活函数)→池化层→......→若干全连接层→输出层。

对于一些经典的卷积神经网络,基本就是卷积层、全连接层的设置与卷积核的大小、数量、步长等的差别。下面是AlexNet与VGGNet的简单介绍。

AlexNet

一般来说,只有卷积层和全连接层算入层数,全连接层只是做了压缩操作,所以不计入层数。AlexNet为8层的卷积神经网络。

VGGNet

VGG有好多种版本,其中最经常使用的是最后两个版本,VGG16和VGG19,分别是16层和19层。

VGG只使用3x3的卷积核,步长均为1,边缘填充均为1层,因此经过卷积层后,大小不变(原本227x227,之后还是227x227)。大小只靠池化层来缩减,池化层2x2步长2的maxpooling,每次长度变成二分之一,宽度变成二分之一,但是为了弥补损失,卷积核个数进行了翻倍,增加深度,这个规律很多时候都会使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值