1. 神经网络
对于一个分类任务,用机器学习方法可以做,具体步骤是首先要明确特征和标签,把这个特征标签数据放到机器学习算法里训练,然后保存模型,预测分类准确性。但这些的特征是需要人工提取的(称之为特征工程),我们需要首先确定好特征,每一个特征即为一个维度,特征数目过少,我们可能无法精确的分类出来,即欠拟合,如果特征数目过多,可能会导致我们在分类过程中过于注重某个特征导致分类错误,即过拟合。这就导致我们在特征工程上需要花很多时间和精力,才能使模型训练得到一个好的效果。然而神经网络的出现使我们不需要做大量的特征工程,神经网络可以根据输入的数据自己学习特征,通过反向传播不断地更新优化,即可得到较好的效果。
1.1 神经网络的基本结构
一个神经网络最简单的结构包括输入层、隐含层和输出层,每一层网络有多个神经元,上一层的神经元通过激活函数映射到下一层神经元,每个神经元之间有相对应的权值,输出即为我们的分类类别。
然而神经网络也会产生问题:如果加深网络层,全连接神经网络随着隐藏层和隐藏节点的增加,参数的增加量是十分巨大的。正式因为这些大量的参数,使得神经网络模型有着极强的学习能力,导致计算困难。
2. 卷积神经网络
2.1 为什么要用卷积神经网络?
在图像领域,传统的神经网络并不合适。我们知道,图像是由一个个像素点构成,每个像素点有三个通道,分别代表RGB颜色,那么,如果一个图像的尺寸是(28,28,1),即代表这个图像的是一个长宽均为28,channel为1的图像(channel也叫depth,此处1代表灰色图像)。如果使用全连接的网络结构,即,网络中的神经与与相邻层上的每个神经元均连接,那就意味着我们的网络有28 * 28 =784个神经元,hidden层采用了15个神经元,那么简单计算一下,我们需要的参数个数(w和b)就有:784*15*10+15+10=117625个,这个参数太多了,随便进行一次反向传播计算量都是巨大的,从计算资源和调参的角度都不建议用传统的神经网络。 卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和池化层构成的特征提取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。池化(pooling)通常有平均池化(mean pooling)和最大池化(max pooling)两种形式。池化看作一种特殊的卷积过程。卷积和池化大大简化了模型复杂度,减少了模型的参数。2.2 卷积神经网络(CNN)
核心要点:
1.卷积神经网络是在DNN基础上加上卷积层和池化层
2.卷积层是对输入的不同局部的矩阵和卷积核矩阵相同位置做相乘后求和
3.卷积层有输入矩阵、卷积核、步幅S和圈数P四个参数
4.除了标准卷积,还有扩张卷积、转置卷积等
5.卷积层的激活函数一般是ReLu函数
6.池化层其实是对数据进行压缩,池化标准有MAX活Average
7.CNN也运用前向传播与反向传播求解参数
各网络层作用:
1.输入层:用于将数据输入到训练网络
2.卷积层:使用卷积核提取图片特征
3.池化层:进行下采样,用更高层的抽象表示图像特征
4.Flatten层:将多维的输入一维化,常用在卷积层到全连接层的过渡
5.全连接层:起到“特征提取器”的作用
6.输出层:输出结果
卷积神经网络(Convolution Neural Network,CNN)是通过模拟人脑视觉系统,采取卷积层和池化层依次交替的模型结构,卷积层使原始信号得到增强,提高信噪比,池化层利用图像局部相关性,对图像进行邻域间采样,在减少数据量的同时提取有用信息,同时参数减少和权值共享使得系统训练时间长的问题得到改善。
CNN的网络结构分为3部分:输入层,隐藏层与输出层。CNN的输入层是直接输入二维图像信息,这一点与传统的神经网络输入层需要输入一维向量有所不同。
隐藏层由三种网络构成 —— 卷积层(包含激活函数),池化层,全连接层。
- 卷积层:主要使用滤波器(卷积核),通过设定步长、深度等参数,对输入进行不同层次的特征提取。滤波器中的参数可以通过反向传播算法进行学习。
- 激活函数层:主要是将卷积层的输出做一个非线性映射。常见的激活函数包括sigmoid,tanh,Relu等
- 池化层:对卷积层提取的特征进行降维,池化层主要是用于参数量压缩。可以减轻过拟合情况。常见的有平均池化和最大池化,不包含需要学习的参数。
- 全连接层:主要是指两层网络,所有神经元之间都有权重连接。常见用于网络的最后一层,用于计算类别得分。
- 输出层:输出层位于全连接层之后,对从全连接层得到的特征进行分类输出。
2.2.1 卷积层( Convolution Layer)
卷积本质来说就是通过卷积核滑动遍历一幅图像像素矩阵,其权重w与对应位置像素相乘再相加的操作。这里就涉及到几个概念:卷积核、步长、填充。深刻理解卷积
如下图,通过卷积核的滑动,不同的卷积核在图像中寻找对应的局部特征,比如左上是找类似“\”的特征,中间是找类似“×”的特征,右上是找类似“/”的特征,这就体现了卷积的局部相关性。 再举个通俗的例子:比如有一张猫的图像,这里猫眼睛、猫脚、猫尾巴之间的距离是很大的,看猫眼睛的时候并不会影响到猫尾巴,所以图像具有局部相关性,在特征提取的时候专门设计找猫眼睛的卷积核在这个图像中找猫眼睛,专门找猫脚的卷积核来找猫脚,专门找猫尾巴的卷积核来找猫尾巴。2.2.1.1 卷积核(Kernel)
卷积核也称作滤波器,是用来滑动的窗口,卷积核尺寸通常为3×3×c,3×3是卷积核的大小,c是卷积核的通道数。注意,这里的c和这层的输出的通道是一样的,比如224×224×3的图像,用3×3×c的卷积,那么这里的c就是3。卷积核的每个小方格上都有一个权重w,这些权重是可学习参数,训练就是要找到最优的参数
2.2.1.2 步长(stride)
通过设置步长来控制滑动的位移量,比如上图步长为1。
2.2.1.3 填充(padding)
在标准卷积中,存在两问题:每次卷积都会缩小图像的尺寸,图像会失去原来的形状;在滑动时位于中间的像素会被重复滑动到,而位于边缘的像素就只被滑动一次,这意味着卷积过程丢掉了图像边缘的许多信息,因此,要解决这些问题,可以使用padding零填充,这样,在滑动时的卷积核可以允许原始边缘像素位于其中心,边缘有值的像素也能被计算到。如下图是padding=1的零填充。
图像经过卷积得到的特征图大小是由卷积核大小、步长、padding共同决定的,其计算公式为 :【output = (input - k + 2p) / s +1 】 input是输入图像大小,k是卷积核大小,p是padding,s是步长
常见的经过卷积图像尺寸不变的组合: k=3,s=1,p=1; k=5,s=1,p=2; k=7,s=1,p=3
2.2.1.4 感受野
感受野用来表示网络内部的不同神经元对原图像的感受范围的大小,换句话说,即为每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和pooling层,在层与层之间均为局部连接。神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。
2.2.1.5 CNN的特点
卷积结构可以减少深层网络占用的内存量,其三个关键的操作,其一是局部感受野,其二是权值共享,其三是pooling层,有效的减少了网络的参数个数,缓解了模型的过拟合问题。
- 局部感受野:由于图像的空间联系是局部的,每个神经元不需要对全部的图像做感受,只需要感受局部特征即可,然后在更高层将这些感受得到的不同的局部神经元综合起来就可以得到全局的信息了,这样可以减少连接的数目。
- 权值共享: 权值共享意思是卷积核参数在滑动遍历过程中的参数是不变的,比如一个卷积核是识别猫眼睛,在找到一个猫眼睛后再继续找下一个猫眼睛,找的都是相同的特征
这两个特性使得CNN具有仿射不变性(平移、缩放等变换),即无论这个特征在哪,是大是小,我都能通过对应的卷积核找到它。
2.2.2 激活函数层
在神经网络中,输入经过权值加权计算并求和之后,需要经过一个函数的作用,这个函数就是激活函(Activation Function)。首先我们需要知道,如果在神经网络中不引入激活函数,那么在该网络中,每一层的输出都是上一层输入的线性函数,无论最终的神经网络有多少层,输出都是输入的线性组合;其一般也只能应用于线性分类问题中,例如非常典型的多层感知机。若想在非线性的问题中继续发挥神经网络的优势,则此时就需要通过添加激活函数来对每一层的输出做处理,引入非线性因素,使得神经网络可以逼近任意的非线性函数,进而使得添加了激活函数的神经网络可以在非线性领域继续发挥重要作用!
更进一步的,激活函数在神经网络中的应用,除了引入非线性表达能力,其在提高模型鲁棒性、缓解梯度消失问题、将特征输入映射到新的特征空间以及加速模型收敛等方面都有不同程度的改善作用!
详细激活函数种类可见:常见的激活函数
2.2.3 池化层 (Pooling )
随着模型网络不断加深,卷积核越来越多,要训练的参数还是很多,而且直接拿卷积核提取的特征直接训练也容易出现过拟合的现象。CNN使用的另一个有效的工具被称为“池化(Pooling)”出现并解决了上面这些问题,为了有效地减少计算量,池化就是将输入图像进行缩小,减少像素信息,只保留重要信息;为了有效地解决过拟合问题,池化可以减少数据,但特征的统计属性仍能够描述图像,而由于降低了数据维度,可以有效地避免过拟合。
给出池化的定义:对不同位置区域提取出有代表性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操作就叫做 池化,池化的过程通常也被称为 特征映射 的过程(特征降维)。听起来很高深,其实简单地说就是下采样。
池化主要有两种, 最大值池化(Max Pooling)和 平均值池化(Average pooling),最大池化是对局部窗口的值取最大,平均池化是对局部窗口的值取平均。
2.2.4 Flatten层&全连接层(Full Connected Layer)
Flatten:将最后的二维特征图打平成一维。
全连接层:对提取的特征进行非线性组合以得到输出。
到这一步,其实我们的一个完整的“卷积部分”就算完成了,如果想要叠加层数,一般也是叠加“Conv-MaxPooing",通过不断的设计卷积核的尺寸,数量,提取更多的特征,最后识别不同类别的物体。做完Max Pooling后,我们就会把这些数据“拍平”,丢到Flatten层,然后把Flatten层的output放到full connected Layer里,采用softmax对其进行分类。
标签:卷积,特征,神经网络,池化,图像,神经元 From: https://www.cnblogs.com/zhanzitianblog/p/16729864.html