卷积神经网络CNN基础知识(卷积神经网络结构,卷积,池化,全连接层)

1、引入卷积神经网络

卷积神经网络主要用于图像上的深度学习,那么为什么一定要使用CNN来处理图像呢?为什么不用普通的神经网络?

下面举例说明:

如图所示,处理一张1000*1000大小的图片,下一层神经元个数为10的6次方,则最后全连接参数为10的12次方,因此得知:

普通的神经网络在处理图片时,由于参数量过大,导致模型的表达能力过强,如果训练集比较小的话,会记住每一个样本。在测试集上表现差,即泛化能力差。参数较多,数据少,容易收敛到较差的局部极值。

由于对于一个图像数据来说,具有非常强的区域性(眼睛,头发),基于这样的图像性质,做筛减,将全连接变成局部连接,从而降低参数量。由此引入了卷积神经网络。

采用局部连接的方法,可以将参数量降为10的8次方,如下:

但是10的8次方仍然很大,因此采用了降低参数量的其他方法,进一步降低参数量:参数共享(不同的局部连接之间的参数是相同的)。可以采用参数共享方法的原因是:图像的区域性:图像问题有很多的信息冗余,同一个区域上的像素点承载的信息很接近。所以做了局部连接之后,仍然能保持信息的提取能力。

图像的性质:它的特征(这个东西是什么)是和它的位置(可以在图像的任何一个位置)无关的。如果用每个神经元去学习一个固定的位置的话,那么这个神经元它提取的特征它也不知道是什么,因为这个特征的位置是变化的。所以无法解释这个神经元到底学到了什么东西,因此图像特征与位置无关(脸在边上还是中间都可以检测到),可以使用共享参数方法。

至此参数量减为:100(10的2次方)

2、卷积神经网络结构

N>=1, M>=0,即:可以没有全连接层

卷积层的输入和输出都是矩阵,全连接层的输入输出都是向量。连接的方式为:在最后一层卷积的输出上做展平,将一个矩阵展平成一个一维向量。

因为卷积神经网络最后的输出是全连接层,所以它的输出可以是一个值也可以是一组向量。因此,这样的输出可以应用在两个任务上,1:分类任务(多个值)(图像分类)2:回归任务(一个值)。

反卷积层:卷积或池化层有可能使输入的size大于输出的size,即:数据的尺寸在减小。而反卷积层是卷积层的一个逆操作,它可以使数据的尺寸增大。则这样的神经网络就有可能使输入和输出的size是一样大的,这可以应用于:物体分割。

3、卷积神经网络计算

卷积:

对普通的神经网络做局部连接和参数共享后,就得到了一个卷积操作。卷积操作的参数叫:卷积核(之前讲的局部连接的参数,是由反向传播计算、学习得到的)。

       卷积操作是怎样进行的?:卷积操作相当于是卷积核在输入图像上从左到右,从上到下的进行滑动。卷积核与对应输入图像的局部位置做内积运算,得到的值放到输出对应位置。相当于:输出位置上对应的神经元和输入图像的局部位置做全连接运算。

卷积操作存在问题:卷积后输出的图像会变小padding可使输出的size不变。

Padding应加多大?一个padding?两个padding?,应该取决于卷积核。

根据公式:输出size = 输入size – 卷积核size + 1

例如:卷积核为3*3.则卷积核size=3,输出size = 输入size -2,则输入图像需要+2,均摊到图像两边,则加1个padding,同理,若卷积核size=5,输出size = 输入size -4,则输入图像需要+4,则加2个padding。

输入图像可能为多通道:最普通RGB三通道

相应的卷积核也变成3通道的。

一个卷积核提取一种特征,多个卷积核提取多种特征。同时生成多个通道。

多个卷积核可输出多通道。

参数计算:

输入三通道,代表这个图有可能是RGB的图。

输出192通道:代表有192个卷积核,去提取192种特征。

三通道时,卷积核中的参数是不共享的,输出192通道,对应的192个卷积核,这192个卷积核的参数也是不共享的。

假设:输入图片(Input)大小为I*I,卷积核(Filter)大小为K*K,步长(stride)为S,填充(Padding)的像素数为P,那卷积层输出(Output)的特征图大小为多少呢?

可以得出推导公式:

O=(I-K+2P)/S+1

激活函数:

卷积神经网络中常用的激活函数是RELU,它计算起来非常高效。

激活函数的性质:具有单调性,且都是非线性函数。

为什么要用非线性函数作为激活函数呢?,在普通神经网络中,神经网络的结构都是层次的,高级的层次与低级的层次是通过全连接联系在一起的。如果不用非线性的激活函数,多个神经网络的层次,相当于是每个层次之间都是做了一个矩阵的操作。矩阵的操作具有合并性。因此如果不使用非线性函数,而是使用线性函数时,造成的后果就是:即便是很深层次的神经网络,也只相当于是一个单层的神经网络。

池化:

池化分两种,如下所示:最大值池化与平均值池化

最大值池化--最常用的池化操作

池化操作没有用于训练的参数,只有两个超参数Stride和kernel_size,过程与卷积操作类似,也是在输入图像上从左到右从上到下滑动,在滑动过程中,当核覆盖在一个区域的时候,用这个区域的最大值作为结果,Stride和kernel_size一般来说相等。

池化操作特点:

在卷积神经网络中,一旦加了全连接层,之后还可以加全连接层,但是不能再加卷积层和池化层了,而且在加全连接层时,因为之前的卷积的输出和输入都是二维多通道的图像的形式,所以神经元也是这样排列的,所以需要展平成一维向量。

去掉全连接层之后,可以利用卷积层和池化层做一个图像到图像的输出操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章